forked from unfa/liblast
Implemented weapon spread (and corrected nerror with jetpack threshold)
parent
c342225cec
commit
e67ab9131c
|
@ -85,7 +85,7 @@ var jetpack_thrust = 48 # force applied against gravity
|
||||||
var jetpack_tank = 0.5 # maximum fuel (jetpack use time
|
var jetpack_tank = 0.5 # maximum fuel (jetpack use time
|
||||||
var jetpack_fuel = jetpack_tank # current fuel (use time) left
|
var jetpack_fuel = jetpack_tank # current fuel (use time) left
|
||||||
var jetpack_recharge = 0.25 # how long to recharge to full
|
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 jetpack_was_active = false
|
||||||
|
|
||||||
var velocity := Vector3.ZERO
|
var velocity := Vector3.ZERO
|
||||||
|
@ -223,6 +223,8 @@ func _process(delta):
|
||||||
|
|
||||||
hud.get_node("Stats").get_node("JetpackBar").value = (jetpack_fuel / jetpack_tank) * 100
|
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):
|
func damage(hp: int):
|
||||||
var target = main.player_list.players[self.get_multiplayer_authority()]
|
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)
|
mesh.set_surface_override_material(0, player_material)
|
||||||
|
|
||||||
func _physics_process(delta):
|
func _physics_process(delta):
|
||||||
|
|
||||||
if dead: # workaround for Godot player destruction crash
|
if dead: # workaround for Godot player destruction crash
|
||||||
linear_velocity = Vector3.ZERO
|
linear_velocity = Vector3.ZERO
|
||||||
return
|
return
|
||||||
|
|
|
@ -14,6 +14,13 @@ var tracer = preload("res://Assets/Effects/BulletTracer.tscn")
|
||||||
var impact_wall = preload("res://Assets/Effects/ImpactSparks.tscn")
|
var impact_wall = preload("res://Assets/Effects/ImpactSparks.tscn")
|
||||||
var impact_player = preload("res://Assets/Effects/ImpactBlood.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:
|
# Declare member variables here. Examples:
|
||||||
# var a = 2
|
# var a = 2
|
||||||
# var b = "text"
|
# var b = "text"
|
||||||
|
@ -21,12 +28,22 @@ var impact_player = preload("res://Assets/Effects/ImpactBlood.tscn")
|
||||||
#enum Trigger {TRIGGER_PRIMARY, TRIGGER_SECONDARY}
|
#enum Trigger {TRIGGER_PRIMARY, TRIGGER_SECONDARY}
|
||||||
|
|
||||||
@rpc(any, sync, reliable) func shoot():
|
@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 space_state = get_world_3d().direct_space_state
|
||||||
|
|
||||||
var from = camera.get_global_transform().origin
|
var from = camera.get_global_transform().origin
|
||||||
var aim = - camera.get_global_transform().basis[2]
|
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])
|
var ray = space_state.intersect_ray(from, to, [player])
|
||||||
|
|
||||||
|
|
|
@ -94,9 +94,11 @@ func _process(delta):
|
||||||
|
|
||||||
if local_player:
|
if local_player:
|
||||||
$Label.text += "\n\nLOCAL PLAYER DEAD: " + str(local_player.dead)
|
$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)
|
$Label.text += "\n\nGAME RESET AT: " + str(reset_at)
|
||||||
|
|
||||||
|
|
||||||
# respawn queue
|
# respawn queue
|
||||||
for i in spawn_queue.keys():
|
for i in spawn_queue.keys():
|
||||||
if spawn_queue[i] <= uptime:
|
if spawn_queue[i] <= uptime:
|
||||||
|
|
Loading…
Reference in New Issue