Fixed multiplied shooting

remotes/1705377932733043820/tmp_refs/heads/unbroken
unfa 2021-08-25 12:03:35 +02:00
parent c5286fa173
commit 740bd67fea
3 changed files with 24 additions and 17 deletions

View File

@ -28,7 +28,6 @@ extends CharacterBody3D
var input_active = false var input_active = false
var base_fov = 90 var base_fov = 90
var view_zoom_target := 1.0 var view_zoom_target := 1.0
var view_zoom_direction = true var view_zoom_direction = true
@ -129,13 +128,14 @@ func _input(event) -> void:
aim(event) aim(event)
if Input.is_action_just_pressed("trigger_primary"): if Input.is_action_just_pressed("trigger_primary"):
weapon.rpc(&'trigger', 0, true) weapon.trigger(0, true)
elif Input.is_action_just_released("trigger_primary"): elif Input.is_action_just_released("trigger_primary"):
weapon.rpc(&'trigger', 0, false) weapon.trigger(0, false)
if Input.is_action_just_pressed("trigger_secondary"): if Input.is_action_just_pressed("trigger_secondary"):
weapon.rpc(&'trigger', 1, true) weapon.trigger(1, true)
elif Input.is_action_just_released("trigger_secondary"): elif Input.is_action_just_released("trigger_secondary"):
weapon.rpc(&'trigger', 1, false) weapon.trigger(1, false)
func _process(delta): func _process(delta):
if view_zoom_direction and view_zoom < view_zoom_target: if view_zoom_direction and view_zoom < view_zoom_target:
@ -144,13 +144,13 @@ func _process(delta):
view_zoom = max(view_zoom_target, view_zoom - delta * 4) view_zoom = max(view_zoom_target, view_zoom - delta * 4)
func damage(hp: int): func damage(hp: int):
main.player_list.players[get_tree().network_peer.get_unique_id()].health -= hp var target = main.player_list.players[self.get_network_master()]
target.health -= hp
if main.player_list.players[get_tree().network_peer.get_unique_id()].health <= 0: if target.health <= 0: # int(name) is the player instance node name signifying owner's PID
die() die()
func die(): func die():
main.chat.rpc(&'chat_notification', "Player " + main.player_list.players[get_tree().network_peer.get_unique_id()].name + " is dead") main.chat.rpc(&'chat_notification', "Player " + main.player_list.players[self.get_network_master()].name + " is dead")
func _physics_process(delta): func _physics_process(delta):
# rpc_unreliable(&'set_global_transform', global_transform) # rpc_unreliable(&'set_global_transform', global_transform)

View File

@ -17,6 +17,7 @@ var impact_player = preload("res://Assets/Effects/ImpactPlayer.tscn")
#enum Trigger {TRIGGER_PRIMARY, TRIGGER_SECONDARY} #enum Trigger {TRIGGER_PRIMARY, TRIGGER_SECONDARY}
@remotesync func shoot(): @remotesync func shoot():
print("SHOOT from PID ", get_tree().get_network_unique_id(), " controlled by ", player.get_network_master())
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
@ -29,25 +30,27 @@ var impact_player = preload("res://Assets/Effects/ImpactPlayer.tscn")
if ray: # did we hit anything? if ray: # did we hit anything?
if ray['collider'].has_method(&'damage'): if ray['collider'].has_method(&'damage'):
if get_tree().network_peer.get_unique_id() == 1: # make sure this can only run on the server if get_tree().get_network_unique_id() == 1: # make sure this can only run on the server
print("SHOT HIT ", ray['collider'])
ray['collider'].damage(10) ray['collider'].damage(10)
impact_vfx = impact_player.instantiate() impact_vfx = impact_player.instantiate()
else: else:
impact_vfx = impact_wall.instantiate() impact_vfx = impact_wall.instantiate()
impact_vfx.global_transform = impact_vfx.global_transform.looking_at(ray['normal']) if impact_vfx:
impact_vfx.global_transform.origin = ray['position'] impact_vfx.global_transform = impact_vfx.global_transform.looking_at(ray['normal'])
get_tree().root.add_child(impact_vfx) impact_vfx.global_transform.origin = ray['position']
get_tree().root.add_child(impact_vfx)
print(ray) #print(ray)
@puppetsync func trigger(index: int, active: bool) -> void: @puppetsync func trigger(index: int, active: bool) -> void:
#print("Weapon " + str(name) + ", Trigger " + str(index) + ", active: " + str(active)) #print("Weapon " + str(name) + ", Trigger " + str(index) + ", active: " + str(active))
if index == 0 and active and $Handgun/AnimationPlayer.is_playing() == false: if index == 0 and active and $Handgun/AnimationPlayer.is_playing() == false:
rpc(&'shoot') # server will evaluate if I hit my target rpc(&'shoot')
$Handgun/AnimationPlayer.play("Shoot", 0, 2.5) $Handgun/AnimationPlayer.play("Shoot", 0, 2.5)

View File

@ -27,6 +27,9 @@ structured_text_bidi_override_options = []
[node name="Players" type="Node3D" parent="."] [node name="Players" type="Node3D" parent="."]
script = null script = null
__meta__ = {
"_edit_lock_": true
}
[node name="Map" parent="." instance=ExtResource( 1 )] [node name="Map" parent="." instance=ExtResource( 1 )]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1)
@ -38,6 +41,7 @@ offset_left = -166.0
offset_bottom = 159.0 offset_bottom = 159.0
script = null script = null
__meta__ = { __meta__ = {
"_edit_lock_": true,
"_edit_use_anchors_": false "_edit_use_anchors_": false
} }