diff options
Diffstat (limited to 'addons/escoria-core/game/esc_autoload.gd')
| -rw-r--r-- | addons/escoria-core/game/esc_autoload.gd | 248 |
1 files changed, 248 insertions, 0 deletions
diff --git a/addons/escoria-core/game/esc_autoload.gd b/addons/escoria-core/game/esc_autoload.gd new file mode 100644 index 0000000..72ef6f8 --- /dev/null +++ b/addons/escoria-core/game/esc_autoload.gd @@ -0,0 +1,248 @@ +extends Node +## This is Escoria's singleton script. +## It holds accessors to some utils, such as Escoria's logger. + +## Signal sent when Escoria is paused[br] +## [br] +## #### Parameters[br] +## [br] +## None. +## [br] +signal paused + +## Signal sent when Escoria is resumed from pause[br] +## [br] +## #### Parameters[br] +## [br] +## None. +## [br] +signal resumed + + +## Current game state +## * DEFAULT: Common game function +## * DIALOG: Game is playing a dialog +## * WAIT: Game is waiting +## * LOADING: Game is currently loading +enum GAME_STATE { + DEFAULT, + DIALOG, + WAIT, + LOADING, + PAUSED +} + + +## Master audio bus +const BUS_MASTER = "Master" + +## SFX audio bus +const BUS_SFX = "SFX" + +## Music audio bus +const BUS_MUSIC = "Music" + +## Speech audio bus +const BUS_SPEECH = "Speech" + +## Ambient sound audio bus +const BUS_AMBIENT = "Ambient" + +# Path to camera scene +const CAMERA_SCENE_PATH = "res://addons/escoria-core/game/scenes/camera_player/camera.tscn" + + +# Logger class +const EscLogger = preload("res://addons/escoria-core/tools/logging/esc_logger.gd") + +## Group for ESCItem's that can be collided with in a scene. Used for quick[br] +## retrieval of such nodes to easily change their attributes at the same time. +const GROUP_ITEM_CAN_COLLIDE = "item_can_collide" + +## Group for ESCItem's that are triggers +const GROUP_ITEM_TRIGGERS = "item_triggers" + + +# Logger instance +var logger := EscLogger.ESCLoggerFile.new() + +## ESC Compiler instance +var esc_compiler: ESCCompiler = ESCCompiler.new() + +## ESC Object Manager instance +var object_manager: ESCObjectManager + +## ESC Room Manager instance +var room_manager: ESCRoomManager = ESCRoomManager.new() + +## ESC Dependency Injector +var di: ESCDependencyInjector = ESCDependencyInjector.new() + +## Inventory manager instance +var inventory_manager: ESCInventoryManager + +## Action manager instance +var action_manager: ESCActionManager + +## Event manager instance +var event_manager: ESCEventManager + +## Globals registry instance +var globals_manager: ESCGlobalsManager + +## ASHES command registry instance +var command_registry: ESCCommandRegistry + +## Manager of game settings (resolution, sound, etc) +var settings_manager: ESCSettingsManager + +## Resource cache handler +var resource_cache: ESCResourceCache + +## Dialog player instantiator. This instance is called directly for dialogs. +var dialog_player: ESCDialogPlayer + +## ESCScript interpreter factory instance +var interpreter_factory: ESCInterpreterFactory + +## Inputs manager instance +var inputs_manager: ESCInputsManager + +## Savegames and settings manager +var save_manager: ESCSaveManager + +## The game scene loaded +var game_scene: ESCGame + +## The main player camera +var player_camera: ESCCamera + +## The compiled start script loaded from ProjectSettings +## escoria/main/game_start_script +var start_script: ESCScript + +## The "fallback" script to use when an action is tried on an item that hasn't +## been explicitly scripted. +var action_default_script: ESCScript + +## Whether we ran a room directly from editor, not a full game +var is_direct_room_run: bool = false + +## Whether we're quitting the game +var is_quitting: bool = false + +## Terrain of the current room +var room_terrain + +## Inventory scene +var inventory + +## The main scene +var main + +## Whether Escoria is creating a new game +var creating_new_game: bool = false +#var temp: int = 0 + +## Game actual resolution obtained from viewport. +@onready var game_size = Vector2( + ProjectSettings.get_setting("display/window/size/viewport_width"), + ProjectSettings.get_setting("display/window/size/viewport_height")) + +## Current state of Escoria (GAME_STATE enum) +@onready var current_state = GAME_STATE.DEFAULT + +## Ready function. Instantiates the main scene if running a room directly.[br] +## [br] +## #### Parameters[br] +## [br] +## None. +## [br] +## #### Returns[br] +## [br] +## Returns nothing. +func _ready(): + init_main_scene() + +## Initializes the Escoria main scene as child of the Escoria autoloaded scene.[br] +## [br] +## #### Parameters[br] +## [br] +## None. +## [br] +## #### Returns[br] +## [br] +## Returns nothing. +func init_main_scene() -> void: + # We check if we run the full game or a room scene directly + if not get_tree().current_scene is ESCMain: + # Running a room scene. We need to instantiate the main scene ourselves + # so that the Escoria scene is created and managers are instanced as well. + is_direct_room_run = true + var main_scene = preload("res://addons/escoria-core/game/main_scene.tscn").instantiate() + add_child(main_scene) + + +## Get the Escoria node. That node gives access to the Escoria scene that's instanced by the main_scene (if full game is run) or by this autoload if room is run directly.[br] +## [br] +## #### Parameters[br] +## [br] +## None. +## [br] +## #### Returns[br] +## [br] +## Returns nothing. +func get_escoria(): + # We check if we run the full game or a room scene directly + if get_tree().current_scene is ESCMain: + return get_node("/root/main_scene").escoria_node + else: + return get_node("main_scene").escoria_node + + +## Pauses or unpause the game[br] +## [br] +## #### Parameters[br] +## [br] +## | Name | Type | Description | Required? |[br] +## |:-----|:-----|:------------|:----------|[br] +## |p_paused|`bool`|if true, pauses the game. If false, unpauses the game.|yes|[br] +## [br] +## #### Returns[br] +## [br] +## Returns nothing. +func set_game_paused(p_paused: bool): + if p_paused: + paused.emit() + else: + resumed.emit() + + var scene_tree = get_tree() + + if is_instance_valid(scene_tree): + scene_tree.paused = p_paused + +## Called from main menu's "new game" button.[br] +## [br] +## #### Parameters[br] +## [br] +## None. +## [br] +## #### Returns[br] +## [br] +## Returns nothing. +func new_game(): + get_escoria().new_game() + +## Called from main menu's "quit" button.[br] +## [br] +## #### Parameters[br] +## [br] +## None. +## [br] +## #### Returns[br] +## [br] +## Returns nothing. +func quit(): + is_quitting = true + get_escoria().quit() |
