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 base_fov = 90
var view_zoom_target := 1.0
var view_zoom_direction = true
@ -129,13 +128,14 @@ func _input(event) -> void:
aim(event)
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"):
weapon.rpc(&'trigger', 0, false)
weapon.trigger(0, false)
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"):
weapon.rpc(&'trigger', 1, false)
weapon.trigger(1, false)
func _process(delta):
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)
func damage(hp: int):
main.player_list.players[get_tree().network_peer.get_unique_id()].health -= hp
if main.player_list.players[get_tree().network_peer.get_unique_id()].health <= 0:
var target = main.player_list.players[self.get_network_master()]
target.health -= hp
if target.health <= 0: # int(name) is the player instance node name signifying owner's PID
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):
# 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}
@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 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['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)
impact_vfx = impact_player.instantiate()
else:
impact_vfx = impact_wall.instantiate()
impact_vfx.global_transform = impact_vfx.global_transform.looking_at(ray['normal'])
impact_vfx.global_transform.origin = ray['position']
get_tree().root.add_child(impact_vfx)
if impact_vfx:
impact_vfx.global_transform = impact_vfx.global_transform.looking_at(ray['normal'])
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:
#print("Weapon " + str(name) + ", Trigger " + str(index) + ", active: " + str(active))
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)

View File

@ -27,6 +27,9 @@ structured_text_bidi_override_options = []
[node name="Players" type="Node3D" parent="."]
script = null
__meta__ = {
"_edit_lock_": true
}
[node name="Map" parent="." instance=ExtResource( 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
script = null
__meta__ = {
"_edit_lock_": true,
"_edit_use_anchors_": false
}