frame-of-mind/src/dev-util/room_template.gd

77 lines
1.9 KiB
GDScript

class_name RoomTemplate extends Node3D
var initialised: bool = false
var id: State.rooms = State.rooms.NULL
@onready var scene_player : AnimationPlayer = %ScenePlayer
@onready var card_board : CardBoard # Optional Board, if present - set by the board in its own _ready()
var is_active: bool:
set(value):
is_active = value
if is_active and not initialised:
start_room()
var save_game:SaveGame = null
signal proceed(next_scene_path: String)
func _ready() -> void:
State.room = self
State.current_room = id
func disable()-> void:
is_active = false
set_process_input(false)
set_process(false)
func get_ready():
pass
func load():
# Override this function to load the state of the chapter from State.save_game
pass
func play() -> String:
start_room()
return await proceed
func start_room():
pass
func pull_save_state(_save: SaveGame) -> void:
# Try to restore player position from save
restore_player_from_save(_save)
## Attempts to find player controller and restore position/rotation from save
func restore_player_from_save(save: SaveGame) -> void:
var player: PlayerController = null
# Try to find player controller in common locations
if has_node("%PlayerController"):
player = get_node("%PlayerController")
elif has_node("logic/PlayerController"):
player = get_node("logic/PlayerController")
if player and player is PlayerController:
player.restore_from_save(save)
else:
print_debug("RoomTemplate: Could not find PlayerController to restore position")
func save_room():
save_game.save_to_file(get_tree().root.get_texture())
func prepare_transition():
pass
func unload():
pass
## Called before a scene starts to allow room-specific preparation (e.g., animations)
## Override in subclasses to add custom scene preparation logic
func prepare_scene_start(_scene_id: Scenes.id, _is_repeating: bool) -> void:
await get_tree().process_frame # Dummy wait for LSP warning otherwise