diff --git a/Game/Assets/Characters/Player.gd b/Game/Assets/Characters/Player.gd index d5774a4..6945a75 100644 --- a/Game/Assets/Characters/Player.gd +++ b/Game/Assets/Characters/Player.gd @@ -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) diff --git a/Game/Assets/Weapons/Weapon.gd b/Game/Assets/Weapons/Weapon.gd index b544205..7d4e1a7 100644 --- a/Game/Assets/Weapons/Weapon.gd +++ b/Game/Assets/Weapons/Weapon.gd @@ -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) diff --git a/Game/Main.tscn b/Game/Main.tscn index 96151ac..cde74e4 100644 --- a/Game/Main.tscn +++ b/Game/Main.tscn @@ -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 }