feat: implement foundational weapon systems, including hitscan and projectile base classes, reload mechanics, and player movement/camera integration.
This commit is contained in:
@@ -47,6 +47,7 @@ var grapple_swing_player: AudioStreamPlayer
|
||||
# UI
|
||||
var hit_marker: Control
|
||||
var _hit_marker_tween: Tween
|
||||
var reload_ring: Control
|
||||
|
||||
# Grapple
|
||||
var grapple_rope: MeshInstance3D
|
||||
@@ -214,6 +215,11 @@ func _setup_hit_marker() -> void:
|
||||
rect.rotation = angle
|
||||
hit_marker.add_child(rect)
|
||||
|
||||
# Reload Ring
|
||||
reload_ring = load("res://ui/reload_ring.gd").new()
|
||||
reload_ring.set_anchors_preset(Control.PRESET_CENTER)
|
||||
_damage_layer.add_child(reload_ring)
|
||||
|
||||
func _setup_grapple() -> void:
|
||||
grapple_rope = MeshInstance3D.new()
|
||||
var rope_mesh = CylinderMesh.new()
|
||||
@@ -770,6 +776,20 @@ func _process(delta: float) -> void:
|
||||
shield_bar.value = shield
|
||||
shield_label.text = "%d / %d" % [ceil(shield), max_shield]
|
||||
|
||||
# Update Reload Ring
|
||||
if is_instance_valid(reload_ring) and is_instance_valid(camera):
|
||||
var wman = camera.get_node_or_null("WeaponManager")
|
||||
if wman:
|
||||
var slot = wman.get("active_slot")
|
||||
if slot != null and wman.weapons.has(slot):
|
||||
var w = wman.weapons[slot]
|
||||
if "reloading" in w and w.reloading and "reload_timer" in w and "reload_time" in w:
|
||||
reload_ring.progress = 1.0 - (w.reload_timer / w.reload_time)
|
||||
else:
|
||||
reload_ring.progress = 0.0
|
||||
else:
|
||||
reload_ring.progress = 0.0
|
||||
|
||||
if is_dead:
|
||||
# Continuously follow the ragdoll torso
|
||||
if is_instance_valid(ragdoll_instance) and is_instance_valid(camera):
|
||||
|
||||
Reference in New Issue
Block a user