diff --git a/levels/prototype_scene.tscn b/levels/prototype_scene.tscn index d3f540e..0d1609d 100644 --- a/levels/prototype_scene.tscn +++ b/levels/prototype_scene.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=24 format=3 uid="uid://cqrh2cc7m2i7f"] [ext_resource type="Environment" uid="uid://d0cfgtx2yxw13" path="res://environments/prototype_environment.tres" id="1_i6jab"] -[ext_resource type="Script" uid="uid://ypgm3aplt78m" path="res://scripts/multiplayer/spawn_system/team_spawner.gd" id="4_pi0y7"] +[ext_resource type="Script" uid="uid://ypgm3aplt78m" path="res://scripts/multiplayer/team_spawner.gd" id="4_pi0y7"] [ext_resource type="Material" uid="uid://bx3f5vx71ynh5" path="res://materials/Graymat.tres" id="4_y6i55"] [ext_resource type="Material" uid="uid://dynpcduei1wfn" path="res://materials/Bluemat.tres" id="4_yx0ab"] [ext_resource type="Material" uid="uid://mlha6r17v2en" path="res://materials/DarkBluemat.tres" id="5_bno23"] diff --git a/scenes/molikman.tscn b/scenes/molikman.tscn index fc594e7..3e52aa9 100644 --- a/scenes/molikman.tscn +++ b/scenes/molikman.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=83 format=4 uid="uid://dpsr6ug3pkb40"] +[gd_scene load_steps=80 format=4 uid="uid://dpsr6ug3pkb40"] [ext_resource type="Script" uid="uid://3dphlay25fih" path="res://scripts/player/player.gd" id="1_g2els"] [ext_resource type="Script" uid="uid://dalwlndejfdhm" path="res://scripts/player/crosshair.gd" id="3_dqkch"] @@ -36,7 +36,6 @@ [ext_resource type="Script" uid="uid://b2djbdh05pbcn" path="res://scripts/player/team_color_switcher.gd" id="25_1mtds"] [ext_resource type="Material" uid="uid://cjb0h3of85nc2" path="res://materials/players/molikman/mat_Molikman.tres" id="26_r2jxp"] [ext_resource type="Texture2D" uid="uid://15mf4452fse0" path="res://textures/players/molikman/molikman_ingame_Molikman_blue.png" id="27_j3w78"] -[ext_resource type="Script" uid="uid://dfvnx8f1v6m5g" path="res://scripts/multiplayer/player_input.gd" id="37_b2eak"] [sub_resource type="ArrayMesh" id="ArrayMesh_lot4n"] _surfaces = [{ @@ -7401,14 +7400,6 @@ _data = { &"baked_sp_shoot_empty": SubResource("Animation_do7kw") } -[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_b2eak"] -properties/0/path = NodePath(".:rotation") -properties/0/spawn = true -properties/0/replication_mode = 1 -properties/1/path = NodePath("..:rotation") -properties/1/spawn = true -properties/1/replication_mode = 1 - [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_g2els"] height = 1.2958984 @@ -7419,21 +7410,18 @@ font_size = 32 properties/0/path = NodePath(".:position") properties/0/spawn = true properties/0/replication_mode = 1 -properties/1/path = NodePath(".:hp") +properties/1/path = NodePath(".:rotation") properties/1/spawn = true properties/1/replication_mode = 1 -properties/2/path = NodePath(".:team") +properties/2/path = NodePath("Camera3D:rotation") properties/2/spawn = true -properties/2/replication_mode = 2 -properties/3/path = NodePath(".:player_id") +properties/2/replication_mode = 1 +properties/3/path = NodePath(".:hp") properties/3/spawn = true -properties/3/replication_mode = 0 -properties/4/path = NodePath(".:collision_layer") +properties/3/replication_mode = 1 +properties/4/path = NodePath(".:team") properties/4/spawn = true -properties/4/replication_mode = 0 -properties/5/path = NodePath(".:collision_mask") -properties/5/spawn = true -properties/5/replication_mode = 0 +properties/4/replication_mode = 2 [sub_resource type="Curve" id="Curve_fbysy"] _data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(1, 1), 2.5229826, 0.0, 0, 0] @@ -7616,11 +7604,6 @@ _data = { radius = 0.82177734 height = 3.7087402 -[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_5amik"] -properties/0/path = NodePath("PlayerInput:direction") -properties/0/spawn = true -properties/0/replication_mode = 1 - [node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("weapon_models")] collision_layer = 2 collision_mask = 3 @@ -8596,9 +8579,6 @@ script = ExtResource("4_smehm") fov = 90.0 script = ExtResource("8_rwwcc") -[node name="CameraSync" type="MultiplayerSynchronizer" parent="Camera3D"] -replication_config = SubResource("SceneReplicationConfig_b2eak") - [node name="StandArea" type="Area3D" parent="."] collision_layer = 0 @@ -8721,7 +8701,7 @@ grow_vertical = 2 visible = false layout_mode = 2 -[node name="PlayerPropertiesSync" type="MultiplayerSynchronizer" parent="."] +[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."] replication_config = SubResource("SceneReplicationConfig_qhqgy") [node name="StepAudio" type="AudioStreamPlayer3D" parent="."] @@ -8814,10 +8794,9 @@ land_sound = NodePath("../../LandAudio") script = ExtResource("19_rwwcc") animation_player = NodePath("../../AnimationPlayer") -[node name="PlayerMovement" type="Node" parent="." node_paths=PackedStringArray("player", "player_input")] +[node name="PlayerMovement" type="Node" parent="." node_paths=PackedStringArray("player")] script = ExtResource("19_70eug") player = NodePath("..") -player_input = NodePath("../PlayerInput") [node name="WeaponSystem" type="Node" parent="." node_paths=PackedStringArray("animation_player", "camera", "player")] script = ExtResource("4_qlg0r") @@ -8862,10 +8841,6 @@ material = ExtResource("26_r2jxp") player = NodePath("..") blue_team_texture = ExtResource("27_j3w78") -[node name="PlayerInput" type="MultiplayerSynchronizer" parent="."] -replication_config = SubResource("SceneReplicationConfig_5amik") -script = ExtResource("37_b2eak") - [connection signal="died" from="." to="molikman_ingame/VisibleEnabler" method="reverse"] [connection signal="died" from="." to="Camera3D" method="disable"] [connection signal="died" from="." to="Camera3D/DeadSpectator" method="set_active"] @@ -8873,4 +8848,5 @@ script = ExtResource("37_b2eak") [connection signal="died" from="." to="PlayerMovement" method="disable"] [connection signal="died" from="." to="WeaponSystem" method="disable"] [connection signal="health_changed" from="." to="HUD/Healthbar" method="on_hp_changed"] +[connection signal="spawned" from="." to="TeamUpdater" method="on_spawned"] [connection signal="ammo_updated" from="WeaponSystem" to="HUD/AmmoDisplay" method="on_ammo_updated"] diff --git a/scripts/multiplayer/player_input.gd b/scripts/multiplayer/player_input.gd index 0f664d0..67eef7c 100644 --- a/scripts/multiplayer/player_input.gd +++ b/scripts/multiplayer/player_input.gd @@ -1,9 +1,7 @@ extends MultiplayerSynchronizer -class_name PlayerInput - #region SYNC -@export var direction: Vector2 +var direction: Vector2 #endregion var crouching: bool = false @@ -26,12 +24,13 @@ signal walk_end signal interact_begin signal interact_end -func _process(_delta: float) -> void: - if not is_multiplayer_authority(): return - direction = Input.get_vector("plr_strafe_r","plr_strafe_l", "plr_back","plr_forward") +func _ready() -> void: + set_multiplayer_authority(int(get_parent().name)) func _input(event: InputEvent) -> void: if not is_multiplayer_authority(): return + direction = Input.get_vector("plr_strafe_r","plr_strafe_l", "plr_back","plr_forward") + if event.is_action_pressed("plr_ult"): switch_on_server.rpc_id(1,"ultimate") elif event.is_action_pressed("plr_bomb"): diff --git a/scripts/multiplayer/spawn_system/team_spawner.gd b/scripts/multiplayer/team_spawner.gd similarity index 98% rename from scripts/multiplayer/spawn_system/team_spawner.gd rename to scripts/multiplayer/team_spawner.gd index 752d7fc..23f7fde 100644 --- a/scripts/multiplayer/spawn_system/team_spawner.gd +++ b/scripts/multiplayer/team_spawner.gd @@ -41,7 +41,6 @@ func spawn_player(id: int) -> void: var distance = randf_range(0,spawn_radius) var angle = randf_range(0,TAU) var new_position = global_position + Vector3.RIGHT.rotated(Vector3.UP,angle) * distance - inst.player_id = id get_parent().add_child(inst) inst.global_position = new_position inst.team = team diff --git a/scripts/multiplayer/spawn_system/team_spawner.gd.uid b/scripts/multiplayer/team_spawner.gd.uid similarity index 100% rename from scripts/multiplayer/spawn_system/team_spawner.gd.uid rename to scripts/multiplayer/team_spawner.gd.uid diff --git a/scripts/player/collision_team_updater.gd b/scripts/player/collision_team_updater.gd index fa9c0c4..a4028bf 100644 --- a/scripts/player/collision_team_updater.gd +++ b/scripts/player/collision_team_updater.gd @@ -7,10 +7,17 @@ extends Node const ATTACK_LAYER: int = 0b10000 const DEFENCE_LAYER: int = 0b100000 -func _ready() -> void: - if is_multiplayer_authority() == false: return +func on_spawned() -> void: var mask = (ATTACK_LAYER if (player.team == Session.TEAMS.DEFENCE != inverse) else DEFENCE_LAYER) if layer: get_parent().collision_layer |= mask else: get_parent().collision_mask |= mask + global_update.rpc(layer,mask) + +@rpc +func global_update(new_layer,mask) -> void: + if new_layer: + get_parent().collision_layer |= mask + else: + get_parent().collision_mask |= mask diff --git a/scripts/player/dead_player_spectator.gd b/scripts/player/dead_player_spectator.gd index fa50239..1efc8fa 100644 --- a/scripts/player/dead_player_spectator.gd +++ b/scripts/player/dead_player_spectator.gd @@ -4,8 +4,9 @@ extends Camera3D var active: bool -func _enter_tree() -> void: - set_multiplayer_authority(int(get_parent().get_parent().name)) +func _ready() -> void: + if not is_multiplayer_authority(): + return func set_active() -> void: if not is_multiplayer_authority(): diff --git a/scripts/player/player.gd b/scripts/player/player.gd index 02b87fa..649d11e 100644 --- a/scripts/player/player.gd +++ b/scripts/player/player.gd @@ -4,14 +4,10 @@ class_name Player @export var team: Session.TEAMS @export var weapon_models: Dictionary[StringName,Node3D] -@export var player_id: int = 1: - set(id): - player_id = id - $PlayerInput.set_multiplayer_authority(id) - $Camera3D.set_multiplayer_authority(id) var passived: bool = false +signal spawned signal health_changed(to: int) signal died diff --git a/scripts/player/player_movement.gd b/scripts/player/player_movement.gd index 7052bc1..84f1f42 100644 --- a/scripts/player/player_movement.gd +++ b/scripts/player/player_movement.gd @@ -3,7 +3,6 @@ extends Node class_name PlayerMovement @export var player: Player -@export var player_input: PlayerInput var disabled: bool func disable() -> void: @@ -16,7 +15,7 @@ func process_movement(max_speed: float,acceleration: float,deceleration: float,d player.velocity.x = 0 player.velocity.z = 0 return - var input_dir := player_input.direction + var input_dir := Input.get_vector("plr_strafe_r","plr_strafe_l", "plr_back","plr_forward") var direction := (player.transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() if direction: player.velocity.x = clamp(player.velocity.x + direction.x * acceleration * delta,-max_speed*abs(direction.x),max_speed*abs(direction.x)) diff --git a/scripts/player/team_color_switcher.gd b/scripts/player/team_color_switcher.gd index f855555..3410814 100644 --- a/scripts/player/team_color_switcher.gd +++ b/scripts/player/team_color_switcher.gd @@ -5,5 +5,8 @@ extends Node @export var blue_team_texture: Texture2D func _ready() -> void: + get_tree().create_timer(1).timeout.connect(on_player_spawned) + +func on_player_spawned() -> void: if player.team == Session.TEAMS.DEFENCE: material.albedo_texture = blue_team_texture diff --git a/scripts/weapon_system/gun/semi_auto_shoot_state.gd b/scripts/weapon_system/gun/semi_auto_shoot_state.gd index 4346795..d60f8a8 100644 --- a/scripts/weapon_system/gun/semi_auto_shoot_state.gd +++ b/scripts/weapon_system/gun/semi_auto_shoot_state.gd @@ -39,7 +39,7 @@ func fire() -> void: machine.animation_player.play(with_morphems("shoot")) if is_multiplayer_authority(): - Session.shoot(int(machine.player.name),damage,shoot_distance) + Session.shoot(damage,shoot_distance) fire_timer.start() machine.player_camera.recoil(horizontal_curve.sample(bullets_shot),vertical_curve.sample(bullets_shot)) diff --git a/scripts/weapon_system/knife/knife_attack.gd b/scripts/weapon_system/knife/knife_attack.gd index 57285f6..5b1ef7b 100644 --- a/scripts/weapon_system/knife/knife_attack.gd +++ b/scripts/weapon_system/knife/knife_attack.gd @@ -14,7 +14,7 @@ func exit() -> void: func attack() -> void: if is_multiplayer_authority(): - Session.shoot(int(machine.player.name),damage,1.5) + Session.shoot(damage,1.5) func on_animation_finished(animation): if animation == machine.animation_prefix + "attack": diff --git a/scripts/weapon_system/knife/knife_attack_heavy.gd b/scripts/weapon_system/knife/knife_attack_heavy.gd index 2b5a557..68d1739 100644 --- a/scripts/weapon_system/knife/knife_attack_heavy.gd +++ b/scripts/weapon_system/knife/knife_attack_heavy.gd @@ -12,7 +12,7 @@ func exit() -> void: func attack() -> void: if is_multiplayer_authority(): - Session.shoot(int(machine.player.name),damage,1.5) + Session.shoot(damage,1.5) func on_animation_finished(animation): if animation == machine.animation_prefix + "heavy_attack": diff --git a/scripts/weapon_system/weapon_system.gd b/scripts/weapon_system/weapon_system.gd index e896000..6c63a6d 100644 --- a/scripts/weapon_system/weapon_system.gd +++ b/scripts/weapon_system/weapon_system.gd @@ -78,6 +78,8 @@ func switch(to: StringName, exit: bool = true): ammo_updated.emit(current_state.ammo,current_state.remaining_ammo) switched_to.emit(current_state) + + update_remotes.rpc(to,exit) func return_to_previous(exit: bool = true): if last_slot != "": @@ -85,6 +87,15 @@ func return_to_previous(exit: bool = true): else: switch("knife", exit) +@rpc("authority","call_remote","reliable") +func update_remotes(to: StringName,exit: bool): + if current_state != null and exit: + current_state.exit() + current_state = slots[to] + current_state.enter() + + switched_to.emit(current_state) + func drop_current(): drop(current_state)