made the first changes towards multiplayer working

This commit is contained in:
2023-11-13 19:36:35 +11:00
parent b0f8a37f60
commit f004f64b71
26 changed files with 305 additions and 257 deletions

View File

@ -1,9 +1,11 @@
extends Node3D
class_name EnemySpawner
@export var own_id : int = 0
@export var path : VisualizedPath
@export var type : Data.EnemyType
@export var dest : Node3D
@export var enemy_path : Node
var signal_for_after_enemy_died
var signal_for_after_enemy_reached_goal
@ -14,6 +16,7 @@ var enemy_spawn_timers = {}
var enemies_spawned = {}
var enemies_to_spawn := 0
var done_spawning = true
var enemy_id = 0
@export var land_enemy_scene : PackedScene
@export var air_enemy_scene : PackedScene
@ -27,40 +30,59 @@ func _process(delta: float) -> void:
for x in enemy_spawn_timers:
if enemies_spawned[x] == current_wave[x]:
continue
var enemy_stats = x
enemy_spawn_timers[x] += delta
if enemy_spawn_timers[x] >= enemy_stats.spawn_cooldown:
if type == Data.EnemyType.LAND:
var enemy = land_enemy_scene.instantiate() as EnemyController
enemy.stats = enemy_stats
enemy.died.connect(signal_for_after_enemy_died)
enemy.reached_goal.connect(signal_for_after_enemy_reached_goal)
enemy.movement_controller.path = path.curve
add_child(enemy)
enemy_spawn_timers[x] -= enemy_stats.spawn_cooldown
signal_for_when_enemy_spawns.emit()
if type == Data.EnemyType.AIR:
var enemy = air_enemy_scene.instantiate() as EnemyController
var radius = 10.0
var random_dir = Vector3(randf_range(-1, 1), randf_range(-1, 1), randf_range(-1, 1))
var random_pos = randf_range(0, radius) * random_dir.normalized()
enemy.position = random_pos
enemy.stats = enemy_stats
enemy.died.connect(signal_for_after_enemy_died)
enemy.reached_goal.connect(signal_for_after_enemy_reached_goal)
enemy.movement_controller.goal = dest
add_child(enemy)
enemy_spawn_timers[x] -= enemy_stats.spawn_cooldown
signal_for_when_enemy_spawns.emit()
if is_multiplayer_authority():
if type == Data.EnemyType.LAND:
networked_spawn_land_enemy.rpc(var_to_str(enemy_stats), own_id, enemy_id)
if type == Data.EnemyType.AIR:
var radius = 10.0
var random_dir = Vector3(randf_range(-1, 1), randf_range(-1, 1), randf_range(-1, 1))
var random_pos = randf_range(0, radius) * random_dir.normalized()
networked_spawn_air_enemy.rpc(var_to_str(enemy_stats), random_pos, own_id, enemy_id)
enemy_spawn_timers[x] -= enemy_stats.spawn_cooldown
signal_for_when_enemy_spawns.emit()
enemy_id += 1
enemies_spawned[x] += 1
enemies_to_spawn -= 1
@rpc("reliable", "call_local")
func networked_spawn_land_enemy(enemy_stats, id1, id2):
var enemy = land_enemy_scene.instantiate() as EnemyController
enemy.name = str(id1) + str(id2)
enemy.stats = str_to_var(enemy_stats)
enemy.died.connect(signal_for_after_enemy_died)
enemy.reached_goal.connect(signal_for_after_enemy_reached_goal)
enemy.movement_controller.path = path.curve
enemy.position = global_position
enemy_path.add_child(enemy)
@rpc("reliable", "call_local")
func networked_spawn_air_enemy(enemy_stats, pos, id1, id2):
var enemy = air_enemy_scene.instantiate() as EnemyController
enemy.name = str(id1) + str(id2)
enemy.position = pos + global_position
enemy.stats = str_to_var(enemy_stats)
enemy.died.connect(signal_for_after_enemy_died)
enemy.reached_goal.connect(signal_for_after_enemy_reached_goal)
enemy.movement_controller.goal = dest
enemy_path.add_child(enemy)
func spawn_wave(value):
var relevant_enemies = {}
for x in value:
var wave = {}
for index in value:
wave[Data.enemies[index]] = value[index]
for x in wave:
if x.target_type == type:
relevant_enemies[x] = value[x]
relevant_enemies[x] = wave[x]
current_wave = relevant_enemies
enemies_to_spawn = 0
enemy_spawn_timers = {}