diff --git a/project.godot b/project.godot index ccf07be..e881ca0 100644 --- a/project.godot +++ b/project.godot @@ -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] diff --git a/scenes/Ships/Modules/Hulls/hull.tscn b/scenes/Ships/Modules/Hulls/hull.tscn index 533d9be..818072d 100644 --- a/scenes/Ships/Modules/Hulls/hull.tscn +++ b/scenes/Ships/Modules/Hulls/hull.tscn @@ -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") diff --git a/scenes/Ships/NPC Ships/shooter_ship.tscn b/scenes/Ships/NPC Ships/shooter_ship.tscn index 2d1b113..ee32cff 100644 --- a/scenes/Ships/NPC Ships/shooter_ship.tscn +++ b/scenes/Ships/NPC Ships/shooter_ship.tscn @@ -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")] diff --git a/scenes/Star Systems/star_system_debug.tscn b/scenes/Star Systems/star_system_debug.tscn index 3a4432a..ee49ce4 100644 --- a/scenes/Star Systems/star_system_debug.tscn +++ b/scenes/Star Systems/star_system_debug.tscn @@ -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) diff --git a/scenes/Star Systems/star_system_template.tscn b/scenes/Star Systems/star_system_template.tscn index 6d40212..11106c9 100644 --- a/scenes/Star Systems/star_system_template.tscn +++ b/scenes/Star Systems/star_system_template.tscn @@ -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) diff --git a/scenes/base_template.tscn b/scenes/base_template.tscn index 080a8bb..183cd2f 100644 --- a/scenes/base_template.tscn +++ b/scenes/base_template.tscn @@ -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") diff --git a/scripts/Base/base.gd b/scripts/Base/base.gd new file mode 100644 index 0000000..598e859 --- /dev/null +++ b/scripts/Base/base.gd @@ -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 diff --git a/scripts/Ship/player_input_controller.gd b/scripts/Ship/player_input_controller.gd index 9603f9c..9b8371d 100644 --- a/scripts/Ship/player_input_controller.gd +++ b/scripts/Ship/player_input_controller.gd @@ -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() diff --git a/scripts/Ship/player_ship.gd b/scripts/Ship/player_ship.gd index 5f20f64..8e3a36a 100644 --- a/scripts/Ship/player_ship.gd +++ b/scripts/Ship/player_ship.gd @@ -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 diff --git a/scripts/Ship/ship.gd b/scripts/Ship/ship.gd index 2379fec..6a46da7 100644 --- a/scripts/Ship/ship.gd +++ b/scripts/Ship/ship.gd @@ -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() diff --git a/scripts/star_system.gd b/scripts/star_system.gd index be901d8..85bfff9 100644 --- a/scripts/star_system.gd +++ b/scripts/star_system.gd @@ -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