Weapon reload mechanics and reticle first-pass

This commit is contained in:
Squinternator 2024-04-10 16:03:09 +00:00
parent b3f8c203e5
commit 8fc00e4bdf
2 changed files with 52 additions and 22 deletions

View file

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