From 52e121ab69b1110dea238a797893ff675895dd4c Mon Sep 17 00:00:00 2001 From: Squinternator Date: Wed, 10 Apr 2024 16:03:09 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Weapon=20reload=20mechanics=20and?= =?UTF-8?q?=20reticle=20first-pass?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interfaces/hud/hud.tscn | 37 ++++++++++++++++++++++++++++++++++ weapons/space_gun/space_gun.gd | 37 ++++++++++++++-------------------- 2 files changed, 52 insertions(+), 22 deletions(-) diff --git a/interfaces/hud/hud.tscn b/interfaces/hud/hud.tscn index 4e15af1..a20c697 100644 --- a/interfaces/hud/hud.tscn +++ b/interfaces/hud/hud.tscn @@ -86,3 +86,40 @@ offset_right = 21.0 offset_bottom = -10.0 grow_vertical = 0 script = SubResource("GDScript_w8l21") + +[node name="Reticle" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -20.0 +offset_top = -20.0 +offset_right = 20.0 +offset_bottom = 20.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="LineBottom" type="Line2D" parent="Reticle"] +position = Vector2(13, 4) +points = PackedVector2Array(7, 19, 7, 31) +width = 2.0 + +[node name="LineLeft" type="Line2D" parent="Reticle"] +position = Vector2(36, 13) +rotation = 1.5708 +points = PackedVector2Array(7, 19, 7, 31) +width = 2.0 + +[node name="LineTop" type="Line2D" parent="Reticle"] +position = Vector2(13, -14) +points = PackedVector2Array(7, 19, 7, 31) +width = 2.0 + +[node name="LineRight" type="Line2D" parent="Reticle"] +position = Vector2(54, 13) +rotation = 1.5708 +points = PackedVector2Array(7, 19, 7, 31) +width = 2.0 diff --git a/weapons/space_gun/space_gun.gd b/weapons/space_gun/space_gun.gd index 76dca20..49297ce 100644 --- a/weapons/space_gun/space_gun.gd +++ b/weapons/space_gun/space_gun.gd @@ -1,37 +1,30 @@ extends Node3D class_name SpaceGun -signal shoot(projectile, velocity, initial_location, initial_rotation) - const PROJECTILE = preload("res://weapons/space_gun/projectile.tscn") @onready var nozzle = $Nozzle @onready var inventory = get_parent() -const ammo_max : int = 20 -var ammo : int = ammo_max +enum WeaponState { WEAPON_READY, WEAPON_RELOADING } -var inheritance : float = 100.0 # percent +var weapon_state : WeaponState = WeaponState.WEAPON_READY -func print_node_properties(node): - var properties = node.get_property_list() - for prop in properties: - prints(prop.name, node.get(prop.name)) - -func _ready(): - shoot.connect(_on_shoot) +const inheritance : float = .5 # ratio +const reload_time : float = 1. # seconds func fire_primary(): + if weapon_state != WeaponState.WEAPON_READY: + return + var projectile = PROJECTILE.instantiate() - shoot.emit(projectile, nozzle, inventory.owner) - - -func _on_shoot(projectile, origin, player): - projectile.position = origin.global_position - projectile.rotation = origin.global_rotation - projectile.velocity = origin.global_basis.z.normalized() * projectile.speed - var inheritance_factor = clamp(inheritance, 0., 100.) / 100. - projectile.velocity += (player.linear_velocity * inheritance_factor) + projectile.transform = nozzle.global_transform + projectile.velocity = nozzle.global_basis.z.normalized() * projectile.speed + var inheritance_factor = clamp(inheritance, 0., 1.) + projectile.velocity += (inventory.owner.linear_velocity * inheritance_factor) inventory.owner.add_sibling(projectile) var collider = projectile.shape_cast - collider.add_exception(player) + collider.add_exception(inventory.owner) + weapon_state = WeaponState.WEAPON_RELOADING + await get_tree().create_timer(reload_time).timeout + weapon_state = WeaponState.WEAPON_READY