Base docking system (areas don't monitor ship somehow)

This commit is contained in:
2ndbeam 2024-05-14 00:24:36 +03:00
commit 739cdbe4c3
11 changed files with 190 additions and 18 deletions

View file

@ -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]

View file

@ -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")

View file

@ -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")]

View file

@ -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)

View file

@ -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)

View file

@ -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
View 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

View file

@ -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()

View file

@ -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

View file

@ -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()

View file

@ -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