update!
This commit is contained in:
@@ -2,6 +2,7 @@ extends Node3D
|
||||
|
||||
const PLAYER_SCENE: PackedScene = preload("res://scenes/entities/player/player.tscn")
|
||||
const ENEMY_SCENE: PackedScene = preload("res://scenes/entities/enemy/enemy.tscn")
|
||||
const PORTAL_SCENE: PackedScene = preload("res://scenes/entities/portal/portal.tscn")
|
||||
const GENERATOR: GDScript = preload("res://scenes/dungeon/dungeon_generator.gd")
|
||||
|
||||
@onready var players_root: Node3D = $EntityRoot/Players
|
||||
@@ -45,9 +46,9 @@ func _populate_dungeon() -> void:
|
||||
var room: Dictionary = data.rooms[i]
|
||||
var n: int = 2 + (1 if GameState.dungeon_red else 0)
|
||||
for j in range(n):
|
||||
var off := Vector3(randf_range(-room.size.x * 0.3, room.size.x * 0.3), 0.5, randf_range(-room.size.z * 0.3, room.size.z * 0.3))
|
||||
var off := Vector3(randf_range(-room.size.x * 0.3, room.size.x * 0.3), 1.0, randf_range(-room.size.z * 0.3, room.size.z * 0.3))
|
||||
spawn_system.spawn_enemy_at(room.pos + off, GameState.dungeon_red, difficulty * 0.5)
|
||||
spawn_system.spawn_boss_at(data.boss + Vector3(0, 0.5, 0), difficulty)
|
||||
spawn_system.spawn_boss_at(data.boss + Vector3(0, 2.0, 0), difficulty)
|
||||
|
||||
func _spawn_player(peer_id: int) -> void:
|
||||
if players_root.get_node_or_null(str(peer_id)) != null:
|
||||
@@ -70,13 +71,21 @@ func _on_peer_disconnected(id: int) -> void:
|
||||
if node:
|
||||
node.queue_free()
|
||||
|
||||
func _on_boss_defeated(_b: Node) -> void:
|
||||
if Net.is_host():
|
||||
var t := get_tree().create_timer(2.0)
|
||||
t.timeout.connect(func():
|
||||
GameState.dungeon_seed = 0
|
||||
_return.rpc())
|
||||
func _on_boss_defeated(b: Node) -> void:
|
||||
if not Net.is_host():
|
||||
return
|
||||
var portal: StaticBody3D = PORTAL_SCENE.instantiate()
|
||||
portal.is_return = true
|
||||
portal.name = "ReturnPortal"
|
||||
var portals_root: Node3D = $EntityRoot/Portals
|
||||
portals_root.add_child(portal, true)
|
||||
var spawn_pos: Vector3 = (b as Node3D).global_position if b is Node3D else data.boss
|
||||
portal.global_position = spawn_pos + Vector3(0, 1, 0)
|
||||
EventBus.portal_spawned.emit(portal)
|
||||
var t := get_tree().create_timer(3.0)
|
||||
t.timeout.connect(_auto_return.bind(portal))
|
||||
|
||||
@rpc("authority", "reliable", "call_local")
|
||||
func _return() -> void:
|
||||
func _auto_return(portal: Node) -> void:
|
||||
if is_instance_valid(portal):
|
||||
portal.queue_free()
|
||||
GameState.change_scene(GameState.SCENE_WORLD)
|
||||
|
||||
Reference in New Issue
Block a user