Base docking system (areas don't monitor ship somehow)
This commit is contained in:
parent
ab3ac4af66
commit
739cdbe4c3
11 changed files with 190 additions and 18 deletions
|
|
@ -49,11 +49,6 @@ turbo={
|
|||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
alternatemovement={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194333,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
rotateleft={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null)
|
||||
|
|
@ -74,10 +69,6 @@ shootsecondary={
|
|||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(99, 14),"global_position":Vector2(103, 57),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
npc={
|
||||
"deadzone": 0.5,
|
||||
"events": []
|
||||
}
|
||||
pause={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
|
|
@ -88,6 +79,16 @@ hide_menu={
|
|||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
select_target={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":67,"key_label":0,"unicode":99,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
dock={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":80,"key_label":0,"unicode":112,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[layer_names]
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
[node name="Hull" type="RigidBody2D"]
|
||||
position = Vector2(0.5, 0)
|
||||
collision_mask = 9
|
||||
input_pickable = true
|
||||
gravity_scale = 0.0
|
||||
angular_damp = 1.0
|
||||
script = ExtResource("1_7nfg8")
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@ script = ExtResource("1_o387g")
|
|||
[node name="HullHolder" type="Node" parent="."]
|
||||
|
||||
[node name="Hull" parent="HullHolder" instance=ExtResource("2_kthut")]
|
||||
collision_mask = 1
|
||||
|
||||
[node name="Engine" parent="." instance=ExtResource("3_ysnrn")]
|
||||
|
||||
|
|
|
|||
|
|
@ -23,10 +23,10 @@ process_mode = 0
|
|||
position = Vector2(19, 10)
|
||||
|
||||
[node name="Base" parent="FactionPeaceful" index="0" instance=ExtResource("3_m5ica")]
|
||||
position = Vector2(7171, -28)
|
||||
position = Vector2(1706, -5)
|
||||
|
||||
[node name="KamikazeShip" parent="FactionAggressive" index="0" instance=ExtResource("4_i6rbg")]
|
||||
position = Vector2(-444, -228)
|
||||
position = Vector2(-4961, -2446)
|
||||
|
||||
[node name="ShooterShip" parent="FactionAggressive" index="1" instance=ExtResource("5_o3ny8")]
|
||||
position = Vector2(204, 491)
|
||||
position = Vector2(-4905, 428)
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ anchor_right = 1.0
|
|||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
mouse_filter = 2
|
||||
script = ExtResource("5_la84n")
|
||||
color_background = Color(0.36, 0.18612, 0.1116, 1)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,20 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://dk3nvl8f0v24e"]
|
||||
[gd_scene load_steps=5 format=3 uid="uid://dk3nvl8f0v24e"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/Base/base.gd" id="1_dr4wr"]
|
||||
[ext_resource type="Texture2D" uid="uid://3x77t3kd6v0x" path="res://sprites/triangle_base.png" id="1_nrkxw"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_4e5h0"]
|
||||
size = Vector2(357, 4)
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_uwuva"]
|
||||
size = Vector2(343, 208)
|
||||
|
||||
[node name="Base" type="StaticBody2D"]
|
||||
process_mode = 1
|
||||
collision_layer = 2
|
||||
collision_mask = 7
|
||||
input_pickable = true
|
||||
script = ExtResource("1_dr4wr")
|
||||
|
||||
[node name="Sprite" type="Sprite2D" parent="."]
|
||||
position = Vector2(0.5, 0.5)
|
||||
|
|
@ -14,10 +24,42 @@ texture = ExtResource("1_nrkxw")
|
|||
position = Vector2(1, -2)
|
||||
polygon = PackedVector2Array(-2, 251, -58, 275, -91, 307, -91, 414, -179, 462, -420, 488, -422, 488, -548, 468, -549, 466, -502, 343, -359, 148, -273, 95, -183, -60, -181, -161, -83, -383, -1, -483, 0, -483, 82, -383, 180, -160, 183, -58, 272, 96, 359, 149, 502, 345, 548, 466, 547, 468, 421, 488, 419, 488, 178, 462, 90, 414, 90, 308, 60, 277, 1, 251)
|
||||
|
||||
[node name="VisibleArea" type="ColorRect" parent="."]
|
||||
[node name="Gate" type="StaticBody2D" parent="."]
|
||||
collision_layer = 2
|
||||
|
||||
[node name="GateCollider" type="CollisionShape2D" parent="Gate"]
|
||||
position = Vector2(0, 458)
|
||||
shape = SubResource("RectangleShape2D_4e5h0")
|
||||
|
||||
[node name="VisibleGate" type="ColorRect" parent="Gate"]
|
||||
z_index = -1
|
||||
offset_left = -181.0
|
||||
offset_top = 456.0
|
||||
offset_right = 181.0
|
||||
offset_bottom = 460.0
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="GateArea" type="Area2D" parent="."]
|
||||
collision_layer = 8
|
||||
monitorable = false
|
||||
|
||||
[node name="GateCollider" type="CollisionShape2D" parent="GateArea"]
|
||||
position = Vector2(0.5, 458)
|
||||
shape = SubResource("RectangleShape2D_4e5h0")
|
||||
|
||||
[node name="DockingArea" type="Area2D" parent="."]
|
||||
collision_layer = 8
|
||||
monitorable = false
|
||||
|
||||
[node name="VisibleArea" type="ColorRect" parent="DockingArea"]
|
||||
z_index = -2
|
||||
offset_left = -171.0
|
||||
offset_top = 248.0
|
||||
offset_right = 177.0
|
||||
offset_bottom = 458.0
|
||||
offset_right = 172.0
|
||||
offset_bottom = 456.0
|
||||
mouse_filter = 2
|
||||
color = Color(1, 1, 1, 0.352941)
|
||||
|
||||
[node name="DockCollider" type="CollisionShape2D" parent="DockingArea"]
|
||||
position = Vector2(0.5, 352)
|
||||
shape = SubResource("RectangleShape2D_uwuva")
|
||||
|
|
|
|||
101
scripts/Base/base.gd
Normal file
101
scripts/Base/base.gd
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
extends StaticBody2D
|
||||
|
||||
class_name Base
|
||||
|
||||
enum DockState { Ready, Process, Busy }
|
||||
|
||||
signal dock_requested
|
||||
|
||||
## Reference to star system
|
||||
@onready var star_system: StarSystem = get_tree().current_scene
|
||||
|
||||
@onready var gate_static = $Gate
|
||||
|
||||
@onready var gate_area = $GateArea
|
||||
|
||||
@onready var dock_area = $DockingArea
|
||||
|
||||
@export var faction: Game.Faction
|
||||
|
||||
var dock_state: DockState = DockState.Ready
|
||||
|
||||
var touching_gate = false
|
||||
var touching_dock = false
|
||||
|
||||
var player_ship = null
|
||||
|
||||
func _ready():
|
||||
mouse_entered.connect(star_system.set_targeted_node.bind(self))
|
||||
mouse_exited.connect(star_system.clear_targeted_node)
|
||||
gate_area.body_entered.connect(gate_area_body_entered)
|
||||
gate_area.body_exited.connect(gate_area_body_exited)
|
||||
dock_area.body_entered.connect(dock_area_body_entered)
|
||||
dock_area.body_exited.connect(dock_area_body_exited)
|
||||
dock_requested.connect(on_dock_requested)
|
||||
dock_ready()
|
||||
|
||||
## Switches dock state
|
||||
func on_dock_requested():
|
||||
player_ship = star_system.player_ship
|
||||
match dock_state:
|
||||
DockState.Ready:
|
||||
dock_process()
|
||||
DockState.Process:
|
||||
dock_ready()
|
||||
|
||||
func gate_area_body_entered(body):
|
||||
if body is PlayerShip:
|
||||
touching_gate = true
|
||||
|
||||
func gate_area_body_exited(body):
|
||||
if body is PlayerShip:
|
||||
touching_gate = false
|
||||
|
||||
func dock_area_body_entered(body):
|
||||
if body is PlayerShip:
|
||||
touching_dock = true
|
||||
|
||||
func dock_area_body_exited(body):
|
||||
if body is PlayerShip:
|
||||
touching_dock = false
|
||||
|
||||
func _process(_delta):
|
||||
if dock_state == DockState.Process:
|
||||
var distance_to_player = global_position.distance_to(player_ship.global_position)
|
||||
print(touching_dock, " ", touching_gate)
|
||||
if touching_dock and !touching_gate:
|
||||
dock_busy()
|
||||
if !touching_dock and !touching_gate and distance_to_player > 2048:
|
||||
dock_ready()
|
||||
|
||||
## Sets dock state to Ready
|
||||
func dock_ready():
|
||||
print("no shit")
|
||||
dock_state = DockState.Ready
|
||||
gate_static.visible = true
|
||||
gate_static.process_mode = Node.PROCESS_MODE_INHERIT
|
||||
gate_area.visible = false
|
||||
dock_area.visible = false
|
||||
touching_gate = false
|
||||
touching_dock = false
|
||||
## Sets dock state to Process
|
||||
func dock_process():
|
||||
print("wanna dock")
|
||||
dock_state = DockState.Process
|
||||
gate_static.visible = false
|
||||
gate_static.process_mode = Node.PROCESS_MODE_DISABLED
|
||||
gate_area.visible = true
|
||||
dock_area.visible = true
|
||||
touching_gate = false
|
||||
touching_dock = false
|
||||
## Sets dock state to Busy
|
||||
func dock_busy():
|
||||
dock_state = DockState.Busy
|
||||
gate_static.visible = true
|
||||
gate_static.process_mode = Node.PROCESS_MODE_INHERIT
|
||||
gate_area.visible = false
|
||||
dock_area.visible = false
|
||||
touching_gate = false
|
||||
touching_dock = true
|
||||
print("busy kozyzy")
|
||||
# TODO: implement opening the base menu
|
||||
|
|
@ -2,6 +2,8 @@ extends Node2D
|
|||
|
||||
## Shortcut to get_parent()
|
||||
@onready var ship: Ship = get_parent()
|
||||
## Reference to the star system
|
||||
@onready var star_system: StarSystem = get_tree().current_scene
|
||||
|
||||
var expected_rotation: float = 0.0:
|
||||
set(value):
|
||||
|
|
@ -25,4 +27,7 @@ func _physics_process(_delta) -> void:
|
|||
var angle_to_mouse = ship.hull.position.angle_to_point(get_global_mouse_position())
|
||||
expected_rotation = rad_to_deg(angle_to_mouse - ship.hull.rotation)
|
||||
weapon.gun_rotation = expected_rotation
|
||||
|
||||
if Input.is_action_just_released("select_target"):
|
||||
ship.selected_node = star_system.targeted_node
|
||||
if ship.selected_node is Base and Input.is_action_just_released("dock"):
|
||||
ship.selected_node.dock_requested.emit()
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ class_name PlayerShip
|
|||
@onready var camera = $Camera
|
||||
## Player colorable GUI reference
|
||||
@onready var colorable_gui = $ColorableGUI
|
||||
|
||||
## Node which was selected by input
|
||||
var selected_node: Node2D = null
|
||||
## Currency variable
|
||||
var money: float = 1000.0
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ signal destroyed
|
|||
@onready var weapons: Node2D = $Weapons
|
||||
## Node beginning position
|
||||
@onready var spawn_position: Vector2 = global_position
|
||||
## Reference to the star system
|
||||
@onready var star_system: StarSystem = get_tree().current_scene
|
||||
|
||||
## Faction which this ship belongs to
|
||||
var faction : Game.Faction
|
||||
|
|
@ -22,6 +24,8 @@ var faction : Game.Faction
|
|||
func _ready() -> void:
|
||||
hull.global_position = global_position
|
||||
destroyed.connect(destroy_timeout)
|
||||
hull.mouse_entered.connect(star_system.set_targeted_node.bind(self))
|
||||
hull.mouse_exited.connect(star_system.clear_targeted_node)
|
||||
|
||||
func destroy_timeout():
|
||||
destroy()
|
||||
|
|
|
|||
|
|
@ -2,6 +2,11 @@ extends Node
|
|||
|
||||
class_name StarSystem
|
||||
|
||||
@onready var fact_player = $FactionPlayer
|
||||
@onready var fact_peaceful = $FactionPeaceful
|
||||
@onready var fact_neutral = $FactionNeutral
|
||||
@onready var fact_aggressive = $FactionAggressive
|
||||
|
||||
## Width of the system. Limits stars generation and camera bounds
|
||||
@export var width: int = 8192
|
||||
## Height of the system. Limits stars generation and camera bounds
|
||||
|
|
@ -10,6 +15,8 @@ class_name StarSystem
|
|||
## Pause controller packed scene
|
||||
@export var pause_controller_scene: PackedScene
|
||||
|
||||
var targeted_node: Node2D = null
|
||||
|
||||
## Player ship reference. May be null.
|
||||
var player_ship: PlayerShip
|
||||
## Pause controller reference
|
||||
|
|
@ -32,6 +39,7 @@ func _ready():
|
|||
# or add it to root node lol
|
||||
add_child(pause_controller)
|
||||
|
||||
|
||||
pause_controller.visible = false
|
||||
|
||||
## Pause the game. Remember to unpause it when switching scenes!
|
||||
|
|
@ -50,3 +58,9 @@ func _process(_delta):
|
|||
|
||||
if player_ship != null:
|
||||
pause_controller.position = player_ship.global_position
|
||||
|
||||
func set_targeted_node(node):
|
||||
targeted_node = node
|
||||
|
||||
func clear_targeted_node():
|
||||
targeted_node = null
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue