From e67ab9131c843b2066a4a8c99556350da8617d3d Mon Sep 17 00:00:00 2001 From: unfa Date: Sat, 25 Sep 2021 20:51:20 +0200 Subject: [PATCH] Implemented weapon spread (and corrected nerror with jetpack threshold) --- Game/Assets/Characters/Player.gd | 5 +++-- Game/Assets/Weapons/Weapon.gd | 21 +++++++++++++++++++-- Game/Main.gd | 4 +++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/Game/Assets/Characters/Player.gd b/Game/Assets/Characters/Player.gd index 583cf5d..1d2aa0d 100644 --- a/Game/Assets/Characters/Player.gd +++ b/Game/Assets/Characters/Player.gd @@ -85,7 +85,7 @@ var jetpack_thrust = 48 # force applied against gravity var jetpack_tank = 0.5 # maximum fuel (jetpack use time var jetpack_fuel = jetpack_tank # current fuel (use time) left var jetpack_recharge = 0.25 # how long to recharge to full -var jetpack_min = 1/4 +var jetpack_min = 1.0/8 var jetpack_was_active = false var velocity := Vector3.ZERO @@ -223,6 +223,8 @@ func _process(delta): hud.get_node("Stats").get_node("JetpackBar").value = (jetpack_fuel / jetpack_tank) * 100 + # weapon spread + weapon.spread = max(lerp(weapon.spread, weapon.spread_min, weapon.spread_lerp), weapon.spread_min) func damage(hp: int): var target = main.player_list.players[self.get_multiplayer_authority()] @@ -260,7 +262,6 @@ func update_color(color) -> void: #change player's wolrldmodel color mesh.set_surface_override_material(0, player_material) func _physics_process(delta): - if dead: # workaround for Godot player destruction crash linear_velocity = Vector3.ZERO return diff --git a/Game/Assets/Weapons/Weapon.gd b/Game/Assets/Weapons/Weapon.gd index 9755cdd..1f50c53 100644 --- a/Game/Assets/Weapons/Weapon.gd +++ b/Game/Assets/Weapons/Weapon.gd @@ -14,6 +14,13 @@ var tracer = preload("res://Assets/Effects/BulletTracer.tscn") var impact_wall = preload("res://Assets/Effects/ImpactSparks.tscn") var impact_player = preload("res://Assets/Effects/ImpactBlood.tscn") +# accuracy +var spread_min = 1 +var spread_max = 64 +var spread_lerp = 0.01 +var spread_boost = 16 +var spread = spread_min + # Declare member variables here. Examples: # var a = 2 # var b = "text" @@ -21,12 +28,22 @@ var impact_player = preload("res://Assets/Effects/ImpactBlood.tscn") #enum Trigger {TRIGGER_PRIMARY, TRIGGER_SECONDARY} @rpc(any, sync, reliable) func shoot(): - #print("SHOOT from PID ", get_tree().multiplayer.get_multiplayer_unique_id(), " controlled by ", player.get_multiplayer_authority()) + #spread = min (spread + spread_boost, spread_max) + spread = min(spread + spread_boost, spread_max) + + var spread_offset = Vector3.ZERO + + spread_offset.x = randf_range(-1,1) + spread_offset.y = randf_range(-1,1) + spread_offset.z = randf_range(-1,1) + + spread_offset = spread_offset.normalized() * randf_range(spread_min, spread) + var space_state = get_world_3d().direct_space_state var from = camera.get_global_transform().origin var aim = - camera.get_global_transform().basis[2] - var to = from + (aim * 1000) + var to = from + (aim * 1000) + spread_offset var ray = space_state.intersect_ray(from, to, [player]) diff --git a/Game/Main.gd b/Game/Main.gd index 7fc21dc..a54389c 100644 --- a/Game/Main.gd +++ b/Game/Main.gd @@ -94,9 +94,11 @@ func _process(delta): if local_player: $Label.text += "\n\nLOCAL PLAYER DEAD: " + str(local_player.dead) - + $Label.text += "\n\nWEAPON SPREAD: " + str(local_player.weapon.spread) + $Label.text += "\n\nGAME RESET AT: " + str(reset_at) + # respawn queue for i in spawn_queue.keys(): if spawn_queue[i] <= uptime: