diff --git a/components/Abstracts/EntityBase.tscn b/components/Abstracts/EntityBase.tscn index b97cd58..210159d 100644 --- a/components/Abstracts/EntityBase.tscn +++ b/components/Abstracts/EntityBase.tscn @@ -1,10 +1,24 @@ -[gd_scene load_steps=41 format=3 uid="uid://cvogxi7mktumf"] +[gd_scene load_steps=42 format=3 uid="uid://cvogxi7mktumf"] [ext_resource type="Script" uid="uid://ds3j3f82li68h" path="res://scripts/Statemachine/EntityBase.gd" id="1_mvol6"] [ext_resource type="Texture2D" uid="uid://dwwpkn4q07ja2" path="res://icon.svg" id="2_7lpu0"] [ext_resource type="AudioStream" uid="uid://cn876dtp1ypqx" path="res://resources/sounds/effect/Collect.wav" id="2_qt0aq"] [ext_resource type="PackedScene" uid="uid://dcjqjqere8ets" path="res://components/UI/EntityStateBar.tscn" id="2_uje1g"] +[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_tiuhe"] +properties/0/path = NodePath(".:displayName") +properties/0/spawn = true +properties/0/replication_mode = 1 +properties/1/path = NodePath(".:position") +properties/1/spawn = true +properties/1/replication_mode = 1 +properties/2/path = NodePath("texture/animator/animatree:parameters/blend_position") +properties/2/spawn = true +properties/2/replication_mode = 1 +properties/3/path = NodePath(".:health") +properties/3/spawn = true +properties/3/replication_mode = 1 + [sub_resource type="SpriteFrames" id="SpriteFrames_wcqpm"] animations = [{ "frames": [{ @@ -374,10 +388,14 @@ alpha_curve = SubResource("CurveTexture_vvfxd") [sub_resource type="CircleShape2D" id="CircleShape2D_34h7q"] -[node name="HJM" type="CharacterBody2D"] +[node name="EntityBase" type="CharacterBody2D"] collision_layer = 0 script = ExtResource("1_mvol6") +[node name="syncer" type="MultiplayerSynchronizer" parent="."] +unique_name_in_owner = true +replication_config = SubResource("SceneReplicationConfig_tiuhe") + [node name="weaponStore" type="Node2D" parent="."] unique_name_in_owner = true diff --git a/scripts/Contents/Panels/Starter.gd b/scripts/Contents/Panels/Starter.gd index cb71bb9..3ce0920 100644 --- a/scripts/Contents/Panels/Starter.gd +++ b/scripts/Contents/Panels/Starter.gd @@ -63,6 +63,7 @@ func startMultiplayerGame(): func startSingleplayerGame(): MultiplayerState.isMultiplayer = false EntityBase.generatePlayer(playerNameInput.text) + UIState.player = EntityBase.findPlayer(playerNameInput.text) WorldManager.rootNode.spawnWave() UIState.closeCurrentPanel() diff --git a/scripts/Contents/Wave.gd b/scripts/Contents/Wave.gd index 9496d4c..17443eb 100644 --- a/scripts/Contents/Wave.gd +++ b/scripts/Contents/Wave.gd @@ -71,8 +71,8 @@ static func entityCountOf(wave: Wave) -> int: else: return randi_range(ceil(wave.minCount), floor(wave.maxCount * (1 + GameRule.entityCountBoostPerWave * current))) return 0 -static func spawn() -> Array[Wave]: - var result: Array[Wave] = [] +static func spawn() -> Array: + var result: Array = [] for i in range(len(data)): var wave: Wave = data[i] for j in range(entityCountOf(wave)): @@ -80,8 +80,10 @@ static func spawn() -> Array[Wave]: currentWave.entityPosition = MathTool.randv2_range(500) result.append(currentWave) return result -static func next(waves: Array[Wave]): +static func next(waves: Array): for wave in waves: + if wave is EncodedObjectAsID: + wave = instance_from_id(wave.get_instance_id()) EntityBase.generate(ComponentManager.getCharacter(wave.entity), wave.entityPosition, true, wave.isBoss) current += 1 static func startWith(wave: int): diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index f07d059..59224a1 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -87,9 +87,10 @@ var inventoryMax = { @onready var damageAnchor: Node2D = $"%damageAnchor" @onready var trailParticle: GPUParticles2D = $"%trailParticle" @onready var weaponStore: Node2D = $"%weaponStore" +@onready var syncer: MultiplayerSynchronizer = $"%syncer" var statebar: EntityStateBar -var health: float = 0 +@export var health: float = 0 var energy: float = 0 var sprinting: bool = false var targetableSprinting: bool = false @@ -121,7 +122,6 @@ func _ready(): weapons.append(i) weaponBag.append(i.displayName) statebar.levelLabels.hide() - if !is_instance_valid(UIState.player): UIState.player = self energyChanged.connect( func(newEnergy, dontChangeDirection): if !UIState.player == self: return @@ -434,8 +434,13 @@ func enterStage(_stage: int): func kill(): pass +static func findPlayer(playerName: String) -> EntityBase: + for i in WorldManager.tree.get_nodes_in_group("players"): + if i.displayName == playerName: + return i + return null static func generatePlayer(playerName: String) -> EntityBase: - var player = generate(ComponentManager.getCharacter("Rooster"), Vector2.ZERO, false, false, true) + var player = generate(ComponentManager.getCharacter("Rooster"), Vector2.ZERO, false) player.displayName = playerName player.name = "Player_%s" % playerName return player @@ -455,7 +460,7 @@ static func generate( else: instance.add_to_group("players") if addToWorld: - WorldManager.rootNode.add_child(instance) + WorldManager.rootNode.spawn(instance) return instance static func mobCount(): return len(WorldManager.tree.get_nodes_in_group("mobs")) diff --git a/scripts/Tools/Managers/WorldManager.gd b/scripts/Tools/Managers/WorldManager.gd index 20324ca..6c564f1 100644 --- a/scripts/Tools/Managers/WorldManager.gd +++ b/scripts/Tools/Managers/WorldManager.gd @@ -18,7 +18,7 @@ func _physics_process(delta): UIState.setPanel("MakeFeed") @rpc("authority") -func nextWave(waves: Array[Wave]): +func nextWave(waves: Array): Wave.next(waves) func spawnWave():