From ff2bac5261253ab84de160c7b1494160765d590e Mon Sep 17 00:00:00 2001 From: Ewpratten Date: Sat, 2 Apr 2022 23:44:28 +0000 Subject: [PATCH] deploy: 76c34ad8dbef13ca6b869dfa74536229ea28a2bc --- rustdoc/game_logic/all.html | 2 +- rustdoc/game_logic/asset_manager/index.html | 2 +- .../texture/enum.ResourceLoadError.html | 10 +- .../fn.load_music_from_internal_data.html | 4 + .../fn.load_sound_from_internal_data.html | 4 + .../fn.load_texture_from_internal_data.html | 2 +- .../asset_manager/texture/index.html | 4 +- .../asset_manager/texture/sidebar-items.js | 2 +- .../fn.handle_graphics_blocking.html | 2 +- .../rendering/event_loop/index.html | 2 +- rustdoc/game_logic/scenes/index.html | 2 +- .../scenes/main_menu/struct.MainMenu.html | 2 +- .../scenes/player_interaction/index.html | 2 +- .../struct.PlayableScene.html | 13 +- .../scenes/struct.SceneRenderDelegate.html | 12 +- .../implementors/core/marker/trait.Send.js | 2 +- .../implementors/core/marker/trait.Sync.js | 2 +- rustdoc/search-index.js | 2 +- .../src/game_logic/asset_manager/mod.rs.html | 2 +- .../game_logic/asset_manager/texture.rs.html | 273 +++++++++++++----- .../game_logic/rendering/event_loop.rs.html | 10 + .../src/game_logic/scenes/main_menu.rs.html | 2 +- rustdoc/src/game_logic/scenes/mod.rs.html | 40 ++- .../scenes/player_interaction.rs.html | 112 +++---- 24 files changed, 354 insertions(+), 156 deletions(-) create mode 100644 rustdoc/game_logic/asset_manager/texture/fn.load_music_from_internal_data.html create mode 100644 rustdoc/game_logic/asset_manager/texture/fn.load_sound_from_internal_data.html diff --git a/rustdoc/game_logic/all.html b/rustdoc/game_logic/all.html index fd94ff18..b9416518 100644 --- a/rustdoc/game_logic/all.html +++ b/rustdoc/game_logic/all.html @@ -2,5 +2,5 @@

List of all items[] -

Structs

Enums

Functions

Typedefs

Constants

+

Structs

Enums

Functions

Typedefs

Constants

\ No newline at end of file diff --git a/rustdoc/game_logic/asset_manager/index.html b/rustdoc/game_logic/asset_manager/index.html index c7a66db7..b4af6fc7 100644 --- a/rustdoc/game_logic/asset_manager/index.html +++ b/rustdoc/game_logic/asset_manager/index.html @@ -13,7 +13,7 @@ Instead, they are read from disk, allowing us to modify them while the game is r

When the game is built in release mode (with cargo build --release), the resources are packaged into the game as described above. This means the game will load faster, but also use more RAM.

Re-exports

-
pub use datastore::InternalData;
pub use json::InternalJsonLoadError;
pub use json::load_json_structure;
pub use sprite_types::KnownSpriteType;
pub use sprite_types::load_known_sprite_types;
pub use texture::ResourceLoadError;

Modules

+
pub use datastore::InternalData;
pub use json::InternalJsonLoadError;
pub use json::load_json_structure;
pub use sprite_types::KnownSpriteType;
pub use sprite_types::load_known_sprite_types;
pub use texture::ResourceLoadError;

Modules

Access to the game’s embedded files.

Utilities for loading JSON from the embedded filesystem.

Code for loading textures from RAM to VRAM

diff --git a/rustdoc/game_logic/asset_manager/texture/enum.ResourceLoadError.html b/rustdoc/game_logic/asset_manager/texture/enum.ResourceLoadError.html index e7b1a9e3..f4f6ec38 100644 --- a/rustdoc/game_logic/asset_manager/texture/enum.ResourceLoadError.html +++ b/rustdoc/game_logic/asset_manager/texture/enum.ResourceLoadError.html @@ -1,16 +1,16 @@ ResourceLoadError in game_logic::asset_manager::texture - Rust

Enum game_logic::asset_manager::texture::ResourceLoadError[][src]

pub enum ResourceLoadError {
+        

Enum ResourceLoadError

Enum game_logic::asset_manager::texture::ResourceLoadError[][src]

pub enum ResourceLoadError {
     Io(Error),
     AssetNotFound(String),
     Generic(String),
-}

Variants

Io(Error)

Tuple Fields

0: Error

AssetNotFound(String)

Tuple Fields

0: String

Generic(String)

Tuple Fields

0: String

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

+}

Variants

Io(Error)

Tuple Fields

0: Error

AssetNotFound(String)

Tuple Fields

0: String

Generic(String)

Tuple Fields

0: String

Trait Implementations

Formats the value using the given formatter. Read more

+

Formats the value using the given formatter. Read more

+

The lower-level source of this error, if any. Read more

🔬 This is a nightly-only experimental API. (backtrace #53487)

Returns a stack backtrace, if available, of where this error occurred. Read more

👎 Deprecated since 1.42.0:

use the Display impl or to_string()

👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

Performs the conversion.

+

Performs the conversion.

Performs the conversion.

Performs the conversion.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

diff --git a/rustdoc/game_logic/asset_manager/texture/fn.load_music_from_internal_data.html b/rustdoc/game_logic/asset_manager/texture/fn.load_music_from_internal_data.html new file mode 100644 index 00000000..79763a80 --- /dev/null +++ b/rustdoc/game_logic/asset_manager/texture/fn.load_music_from_internal_data.html @@ -0,0 +1,4 @@ +load_music_from_internal_data in game_logic::asset_manager::texture - Rust +

Function game_logic::asset_manager::texture::load_music_from_internal_data[][src]

pub fn load_music_from_internal_data(
    thread: &RaylibThread,
    path: &str
) -> Result<Music, ResourceLoadError>
+ \ No newline at end of file diff --git a/rustdoc/game_logic/asset_manager/texture/fn.load_sound_from_internal_data.html b/rustdoc/game_logic/asset_manager/texture/fn.load_sound_from_internal_data.html new file mode 100644 index 00000000..3e0038e9 --- /dev/null +++ b/rustdoc/game_logic/asset_manager/texture/fn.load_sound_from_internal_data.html @@ -0,0 +1,4 @@ +load_sound_from_internal_data in game_logic::asset_manager::texture - Rust +

Function game_logic::asset_manager::texture::load_sound_from_internal_data[][src]

pub fn load_sound_from_internal_data(
    path: &str
) -> Result<Sound, ResourceLoadError>
+ \ No newline at end of file diff --git a/rustdoc/game_logic/asset_manager/texture/fn.load_texture_from_internal_data.html b/rustdoc/game_logic/asset_manager/texture/fn.load_texture_from_internal_data.html index ca585f5c..7bcc02bb 100644 --- a/rustdoc/game_logic/asset_manager/texture/fn.load_texture_from_internal_data.html +++ b/rustdoc/game_logic/asset_manager/texture/fn.load_texture_from_internal_data.html @@ -1,6 +1,6 @@ load_texture_from_internal_data in game_logic::asset_manager::texture - Rust

Function game_logic::asset_manager::texture::load_texture_from_internal_data[][src]

pub fn load_texture_from_internal_data(
    raylib_handle: &mut RaylibHandle,
    thread: &RaylibThread,
    path: &str
) -> Result<Texture2D, ResourceLoadError>
Expand description

Loads an embedded texture into VRAM.

+

Function game_logic::asset_manager::texture::load_texture_from_internal_data[][src]

pub fn load_texture_from_internal_data(
    raylib_handle: &mut RaylibHandle,
    thread: &RaylibThread,
    path: &str
) -> Result<Texture2D, ResourceLoadError>
Expand description

Loads an embedded texture into VRAM.

Technical Info

In this application, we are using rust_embed to embed static assets directly inside the executable. This has the limitation of none of the assets being “real files”, which causes an issue with Raylib. diff --git a/rustdoc/game_logic/asset_manager/texture/index.html b/rustdoc/game_logic/asset_manager/texture/index.html index 9925dd15..c2ee04c8 100644 --- a/rustdoc/game_logic/asset_manager/texture/index.html +++ b/rustdoc/game_logic/asset_manager/texture/index.html @@ -1,9 +1,9 @@ game_logic::asset_manager::texture - Rust

Module game_logic::asset_manager::texture[][src]

Expand description

Code for loading textures from RAM to VRAM

+

Module texture

Module game_logic::asset_manager::texture[][src]

Expand description

Code for loading textures from RAM to VRAM

Largely coppied from last year: https://github.com/Ewpratten/ludum-dare-49/blob/master/game/src/utilities/datastore.rs

Enums

Functions

-
\ No newline at end of file diff --git a/rustdoc/game_logic/asset_manager/texture/sidebar-items.js b/rustdoc/game_logic/asset_manager/texture/sidebar-items.js index afe8de21..3144090f 100644 --- a/rustdoc/game_logic/asset_manager/texture/sidebar-items.js +++ b/rustdoc/game_logic/asset_manager/texture/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"enum":[["ResourceLoadError",""]],"fn":[["load_texture_from_internal_data","Loads an embedded texture into VRAM."]]}); \ No newline at end of file +initSidebarItems({"enum":[["ResourceLoadError",""]],"fn":[["load_music_from_internal_data",""],["load_sound_from_internal_data",""],["load_texture_from_internal_data","Loads an embedded texture into VRAM."]]}); \ No newline at end of file diff --git a/rustdoc/game_logic/rendering/event_loop/fn.handle_graphics_blocking.html b/rustdoc/game_logic/rendering/event_loop/fn.handle_graphics_blocking.html index 43a38b8f..57dcb660 100644 --- a/rustdoc/game_logic/rendering/event_loop/fn.handle_graphics_blocking.html +++ b/rustdoc/game_logic/rendering/event_loop/fn.handle_graphics_blocking.html @@ -1,5 +1,5 @@ handle_graphics_blocking in game_logic::rendering::event_loop - Rust

Function game_logic::rendering::event_loop::handle_graphics_blocking[][src]

pub async fn handle_graphics_blocking<ConfigBuilder>(
    config: ConfigBuilder,
    target_frames_per_second: u32,
    constants: &ProjectConstants,
    discord_signaling: Sender<DiscordRpcSignal>
) where
    ConfigBuilder: FnOnce(&mut RaylibBuilder), 
Expand description

Will begin rendering graphics. Returns when the window closes

+

Function game_logic::rendering::event_loop::handle_graphics_blocking[][src]

pub async fn handle_graphics_blocking<ConfigBuilder>(
    config: ConfigBuilder,
    target_frames_per_second: u32,
    constants: &ProjectConstants,
    discord_signaling: Sender<DiscordRpcSignal>
) where
    ConfigBuilder: FnOnce(&mut RaylibBuilder), 
Expand description

Will begin rendering graphics. Returns when the window closes

\ No newline at end of file diff --git a/rustdoc/game_logic/rendering/event_loop/index.html b/rustdoc/game_logic/rendering/event_loop/index.html index a619fe13..bcc6248a 100644 --- a/rustdoc/game_logic/rendering/event_loop/index.html +++ b/rustdoc/game_logic/rendering/event_loop/index.html @@ -1,6 +1,6 @@ game_logic::rendering::event_loop - Rust

Module game_logic::rendering::event_loop[][src]

Expand description

The Event Loop module

+

Module event_loop

Module game_logic::rendering::event_loop[][src]

Expand description

The Event Loop module

Overview

This is the code that handles beginning each frame and ending it. Do not try to add your own game logic in here. The event loop function has its own statemachine (core_renderer_sm.rs) that handles the current action.

diff --git a/rustdoc/game_logic/scenes/index.html b/rustdoc/game_logic/scenes/index.html index 5ed2546d..9df90296 100644 --- a/rustdoc/game_logic/scenes/index.html +++ b/rustdoc/game_logic/scenes/index.html @@ -1,6 +1,6 @@ game_logic::scenes - Rust

Module game_logic::scenes[][src]

Expand description

The render code for various scenes

+

Module scenes

Module game_logic::scenes[][src]

Expand description

The render code for various scenes

Overview

This will probably become a messy module over time. Stick your rendering code here

Modules

diff --git a/rustdoc/game_logic/scenes/main_menu/struct.MainMenu.html b/rustdoc/game_logic/scenes/main_menu/struct.MainMenu.html index b25c2eca..85232ff1 100644 --- a/rustdoc/game_logic/scenes/main_menu/struct.MainMenu.html +++ b/rustdoc/game_logic/scenes/main_menu/struct.MainMenu.html @@ -1,7 +1,7 @@ MainMenu in game_logic::scenes::main_menu - Rust

Struct game_logic::scenes::main_menu::MainMenu[][src]

pub struct MainMenu {
-    has_updated_discord_rpc: bool,
+    pub has_updated_discord_rpc: bool,
 }

Fields

has_updated_discord_rpc: bool

Implementations

Construct a new MainMenu

Trait Implementations

Formats the value using the given formatter. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

diff --git a/rustdoc/game_logic/scenes/player_interaction/index.html b/rustdoc/game_logic/scenes/player_interaction/index.html index 3b2bebe4..a9d28ba5 100644 --- a/rustdoc/game_logic/scenes/player_interaction/index.html +++ b/rustdoc/game_logic/scenes/player_interaction/index.html @@ -1,6 +1,6 @@ game_logic::scenes::player_interaction - Rust

Module game_logic::scenes::player_interaction[][src]

Expand description

This scene encompasses all of the game where the player can walk around.

+

Module player_interaction

Module game_logic::scenes::player_interaction[][src]

Expand description

This scene encompasses all of the game where the player can walk around.

Structs

\ No newline at end of file diff --git a/rustdoc/game_logic/scenes/player_interaction/struct.PlayableScene.html b/rustdoc/game_logic/scenes/player_interaction/struct.PlayableScene.html index e74431aa..c9cc3dce 100644 --- a/rustdoc/game_logic/scenes/player_interaction/struct.PlayableScene.html +++ b/rustdoc/game_logic/scenes/player_interaction/struct.PlayableScene.html @@ -1,15 +1,16 @@ PlayableScene in game_logic::scenes::player_interaction - Rust

Struct game_logic::scenes::player_interaction::PlayableScene[][src]

pub struct PlayableScene {
-    has_updated_discord_rpc: bool,
+        

Struct PlayableScene

Struct game_logic::scenes::player_interaction::PlayableScene[][src]

pub struct PlayableScene {
+    pub has_updated_discord_rpc: bool,
     player: Player,
     world_map: MapRenderer,
     camera: Camera2D,
     last_update: SystemTime,
-}

Fields

has_updated_discord_rpc: boolplayer: Playerworld_map: MapRenderercamera: Camera2Dlast_update: SystemTime

Implementations

Construct a new PlayableScene

-

Handler for each frame

-

Trait Implementations

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+ game_soundtrack: Music, +}

Fields

has_updated_discord_rpc: boolplayer: Playerworld_map: MapRenderercamera: Camera2Dlast_update: SystemTimegame_soundtrack: Music

Implementations

Construct a new PlayableScene

+

Handler for each frame

+

Trait Implementations

Formats the value using the given formatter. Read more

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

diff --git a/rustdoc/game_logic/scenes/struct.SceneRenderDelegate.html b/rustdoc/game_logic/scenes/struct.SceneRenderDelegate.html index c9215c4c..7a1af324 100644 --- a/rustdoc/game_logic/scenes/struct.SceneRenderDelegate.html +++ b/rustdoc/game_logic/scenes/struct.SceneRenderDelegate.html @@ -1,17 +1,19 @@ SceneRenderDelegate in game_logic::scenes - Rust

Struct game_logic::scenes::SceneRenderDelegate[][src]

pub struct SceneRenderDelegate {
+        

Struct SceneRenderDelegate

Struct game_logic::scenes::SceneRenderDelegate[][src]

pub struct SceneRenderDelegate {
     menu_control_signal: MenuStateSignal,
+    pub needs_exit: bool,
+    audio_subsystem: RaylibAudio,
     scene_test_fox: TestFoxScene,
     scene_playable: PlayableScene,
     scene_main_menu: MainMenu,
 }
Expand description

Delegate for handling rendering. This is a struct to allow for stateful data (like sub-screens) to be set up

-

Fields

menu_control_signal: MenuStateSignalscene_test_fox: TestFoxScenescene_playable: PlayableScenescene_main_menu: MainMenu

Implementations

This is called when the game first loads

-

This is called every frame once the game has started.

+

Fields

menu_control_signal: MenuStateSignalneeds_exit: boolaudio_subsystem: RaylibAudioscene_test_fox: TestFoxScenescene_playable: PlayableScenescene_main_menu: MainMenu

Implementations

This is called when the game first loads

+

This is called every frame once the game has started.

Keep in mind everything you do here will block the main thread (no loading files plz)

-

Trait Implementations

If you need anything to happen when the game closes, stick it here.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

+

Trait Implementations

If you need anything to happen when the game closes, stick it here.

+

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

diff --git a/rustdoc/implementors/core/marker/trait.Send.js b/rustdoc/implementors/core/marker/trait.Send.js index ae0d11be..945527cf 100644 --- a/rustdoc/implementors/core/marker/trait.Send.js +++ b/rustdoc/implementors/core/marker/trait.Send.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["game_logic"] = [{"text":"impl Send for InternalData","synthetic":true,"types":["game_logic::asset_manager::datastore::InternalData"]},{"text":"impl Send for InternalJsonLoadError","synthetic":true,"types":["game_logic::asset_manager::json::InternalJsonLoadError"]},{"text":"impl Send for KnownSpriteType","synthetic":true,"types":["game_logic::asset_manager::sprite_types::KnownSpriteType"]},{"text":"impl Send for ResourceLoadError","synthetic":true,"types":["game_logic::asset_manager::texture::ResourceLoadError"]},{"text":"impl Send for DiscordRpcSignal","synthetic":true,"types":["game_logic::discord::signal::DiscordRpcSignal"]},{"text":"impl Send for StatefulDiscordRpcSignalHandler","synthetic":true,"types":["game_logic::discord::signal::StatefulDiscordRpcSignalHandler"]},{"text":"impl Send for DiscordError","synthetic":true,"types":["game_logic::discord::ipc::DiscordError"]},{"text":"impl Send for DiscordRpcClient","synthetic":true,"types":["game_logic::discord::ipc::DiscordRpcClient"]},{"text":"impl Send for DiscordRpcThreadHandle","synthetic":true,"types":["game_logic::discord::DiscordRpcThreadHandle"]},{"text":"impl Send for GlobalResources","synthetic":true,"types":["game_logic::global_resource_package::GlobalResources"]},{"text":"impl Send for PersistentGameSettings","synthetic":true,"types":["game_logic::persistent::settings::PersistentGameSettings"]},{"text":"impl Send for GameSaveState","synthetic":true,"types":["game_logic::persistent::save_state::GameSaveState"]},{"text":"impl Send for DiscordConstants","synthetic":true,"types":["game_logic::project_constants::DiscordConstants"]},{"text":"impl Send for PlayerConstants","synthetic":true,"types":["game_logic::project_constants::PlayerConstants"]},{"text":"impl Send for ProjectConstants","synthetic":true,"types":["game_logic::project_constants::ProjectConstants"]},{"text":"impl Send for AnimatedTextureLoadError","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::AnimatedTextureLoadError"]},{"text":"impl Send for FrameTextureDescriptor","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::FrameTextureDescriptor"]},{"text":"impl Send for AnimatedTextureMetadata","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::AnimatedTextureMetadata"]},{"text":"impl Send for AnimatedTexture","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::AnimatedTexture"]},{"text":"impl Send for MapRenderError","synthetic":true,"types":["game_logic::rendering::utilities::map_render::MapRenderError"]},{"text":"impl Send for ProgramDataTileCache","synthetic":true,"types":["game_logic::rendering::utilities::map_render::ProgramDataTileCache"]},{"text":"impl Send for MapRenderer","synthetic":true,"types":["game_logic::rendering::utilities::map_render::MapRenderer"]},{"text":"impl Send for LoadingScreen","synthetic":true,"types":["game_logic::rendering::screens::loading_screen::LoadingScreen"]},{"text":"impl Send for SmFailureScreen","synthetic":true,"types":["game_logic::rendering::screens::sm_failure_screen::SmFailureScreen"]},{"text":"impl Send for PreloadState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::PreloadState"]},{"text":"impl Send for LoadingState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::LoadingState"]},{"text":"impl Send for RenderGameState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::RenderGameState"]},{"text":"impl Send for SmFailedState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::SmFailedState"]},{"text":"impl Send for RenderBackendStates","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::RenderBackendStates"]},{"text":"impl Send for MenuStateSignal","synthetic":true,"types":["game_logic::scenes::main_menu::MenuStateSignal"]},{"text":"impl Send for MainMenu","synthetic":true,"types":["game_logic::scenes::main_menu::MainMenu"]},{"text":"impl Send for PlayableScene","synthetic":true,"types":["game_logic::scenes::player_interaction::PlayableScene"]},{"text":"impl Send for TestFoxScene","synthetic":true,"types":["game_logic::scenes::test_fox::TestFoxScene"]},{"text":"impl Send for SceneRenderDelegate","synthetic":true,"types":["game_logic::scenes::SceneRenderDelegate"]},{"text":"impl Send for Player","synthetic":true,"types":["game_logic::model::player::Player"]},{"text":"impl Send for PossiblyAnimatedTexture","synthetic":true,"types":["game_logic::model::world_object::PossiblyAnimatedTexture"]},{"text":"impl Send for ObjectCollider","synthetic":true,"types":["game_logic::model::world_object::ObjectCollider"]},{"text":"impl Send for WorldObject","synthetic":true,"types":["game_logic::model::world_object::WorldObject"]},{"text":"impl Send for WorldObjectRef","synthetic":true,"types":["game_logic::model::world_object::WorldObjectRef"]},{"text":"impl Send for WorldObjectPackageLoadError","synthetic":true,"types":["game_logic::model::world_object_package::WorldObjectPackageLoadError"]},{"text":"impl Send for WorldObjectPackage","synthetic":true,"types":["game_logic::model::world_object_package::WorldObjectPackage"]}]; +implementors["game_logic"] = [{"text":"impl Send for InternalData","synthetic":true,"types":["game_logic::asset_manager::datastore::InternalData"]},{"text":"impl Send for InternalJsonLoadError","synthetic":true,"types":["game_logic::asset_manager::json::InternalJsonLoadError"]},{"text":"impl Send for KnownSpriteType","synthetic":true,"types":["game_logic::asset_manager::sprite_types::KnownSpriteType"]},{"text":"impl Send for ResourceLoadError","synthetic":true,"types":["game_logic::asset_manager::texture::ResourceLoadError"]},{"text":"impl Send for DiscordRpcSignal","synthetic":true,"types":["game_logic::discord::signal::DiscordRpcSignal"]},{"text":"impl Send for StatefulDiscordRpcSignalHandler","synthetic":true,"types":["game_logic::discord::signal::StatefulDiscordRpcSignalHandler"]},{"text":"impl Send for DiscordError","synthetic":true,"types":["game_logic::discord::ipc::DiscordError"]},{"text":"impl Send for DiscordRpcClient","synthetic":true,"types":["game_logic::discord::ipc::DiscordRpcClient"]},{"text":"impl Send for DiscordRpcThreadHandle","synthetic":true,"types":["game_logic::discord::DiscordRpcThreadHandle"]},{"text":"impl Send for GlobalResources","synthetic":true,"types":["game_logic::global_resource_package::GlobalResources"]},{"text":"impl Send for PersistentGameSettings","synthetic":true,"types":["game_logic::persistent::settings::PersistentGameSettings"]},{"text":"impl Send for GameSaveState","synthetic":true,"types":["game_logic::persistent::save_state::GameSaveState"]},{"text":"impl Send for DiscordConstants","synthetic":true,"types":["game_logic::project_constants::DiscordConstants"]},{"text":"impl Send for PlayerConstants","synthetic":true,"types":["game_logic::project_constants::PlayerConstants"]},{"text":"impl Send for ProjectConstants","synthetic":true,"types":["game_logic::project_constants::ProjectConstants"]},{"text":"impl Send for AnimatedTextureLoadError","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::AnimatedTextureLoadError"]},{"text":"impl Send for FrameTextureDescriptor","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::FrameTextureDescriptor"]},{"text":"impl Send for AnimatedTextureMetadata","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::AnimatedTextureMetadata"]},{"text":"impl Send for AnimatedTexture","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::AnimatedTexture"]},{"text":"impl Send for MapRenderError","synthetic":true,"types":["game_logic::rendering::utilities::map_render::MapRenderError"]},{"text":"impl Send for ProgramDataTileCache","synthetic":true,"types":["game_logic::rendering::utilities::map_render::ProgramDataTileCache"]},{"text":"impl Send for MapRenderer","synthetic":true,"types":["game_logic::rendering::utilities::map_render::MapRenderer"]},{"text":"impl Send for LoadingScreen","synthetic":true,"types":["game_logic::rendering::screens::loading_screen::LoadingScreen"]},{"text":"impl Send for SmFailureScreen","synthetic":true,"types":["game_logic::rendering::screens::sm_failure_screen::SmFailureScreen"]},{"text":"impl Send for PreloadState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::PreloadState"]},{"text":"impl Send for LoadingState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::LoadingState"]},{"text":"impl Send for RenderGameState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::RenderGameState"]},{"text":"impl Send for SmFailedState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::SmFailedState"]},{"text":"impl Send for RenderBackendStates","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::RenderBackendStates"]},{"text":"impl Send for MenuStateSignal","synthetic":true,"types":["game_logic::scenes::main_menu::MenuStateSignal"]},{"text":"impl Send for MainMenu","synthetic":true,"types":["game_logic::scenes::main_menu::MainMenu"]},{"text":"impl !Send for PlayableScene","synthetic":true,"types":["game_logic::scenes::player_interaction::PlayableScene"]},{"text":"impl Send for TestFoxScene","synthetic":true,"types":["game_logic::scenes::test_fox::TestFoxScene"]},{"text":"impl !Send for SceneRenderDelegate","synthetic":true,"types":["game_logic::scenes::SceneRenderDelegate"]},{"text":"impl Send for Player","synthetic":true,"types":["game_logic::model::player::Player"]},{"text":"impl Send for PossiblyAnimatedTexture","synthetic":true,"types":["game_logic::model::world_object::PossiblyAnimatedTexture"]},{"text":"impl Send for ObjectCollider","synthetic":true,"types":["game_logic::model::world_object::ObjectCollider"]},{"text":"impl Send for WorldObject","synthetic":true,"types":["game_logic::model::world_object::WorldObject"]},{"text":"impl Send for WorldObjectRef","synthetic":true,"types":["game_logic::model::world_object::WorldObjectRef"]},{"text":"impl Send for WorldObjectPackageLoadError","synthetic":true,"types":["game_logic::model::world_object_package::WorldObjectPackageLoadError"]},{"text":"impl Send for WorldObjectPackage","synthetic":true,"types":["game_logic::model::world_object_package::WorldObjectPackage"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdoc/implementors/core/marker/trait.Sync.js b/rustdoc/implementors/core/marker/trait.Sync.js index 205dae01..f328dabf 100644 --- a/rustdoc/implementors/core/marker/trait.Sync.js +++ b/rustdoc/implementors/core/marker/trait.Sync.js @@ -1,3 +1,3 @@ (function() {var implementors = {}; -implementors["game_logic"] = [{"text":"impl Sync for InternalData","synthetic":true,"types":["game_logic::asset_manager::datastore::InternalData"]},{"text":"impl Sync for InternalJsonLoadError","synthetic":true,"types":["game_logic::asset_manager::json::InternalJsonLoadError"]},{"text":"impl Sync for KnownSpriteType","synthetic":true,"types":["game_logic::asset_manager::sprite_types::KnownSpriteType"]},{"text":"impl Sync for ResourceLoadError","synthetic":true,"types":["game_logic::asset_manager::texture::ResourceLoadError"]},{"text":"impl Sync for DiscordRpcSignal","synthetic":true,"types":["game_logic::discord::signal::DiscordRpcSignal"]},{"text":"impl Sync for StatefulDiscordRpcSignalHandler","synthetic":true,"types":["game_logic::discord::signal::StatefulDiscordRpcSignalHandler"]},{"text":"impl Sync for DiscordError","synthetic":true,"types":["game_logic::discord::ipc::DiscordError"]},{"text":"impl Sync for DiscordRpcClient","synthetic":true,"types":["game_logic::discord::ipc::DiscordRpcClient"]},{"text":"impl Sync for DiscordRpcThreadHandle","synthetic":true,"types":["game_logic::discord::DiscordRpcThreadHandle"]},{"text":"impl Sync for GlobalResources","synthetic":true,"types":["game_logic::global_resource_package::GlobalResources"]},{"text":"impl Sync for PersistentGameSettings","synthetic":true,"types":["game_logic::persistent::settings::PersistentGameSettings"]},{"text":"impl Sync for GameSaveState","synthetic":true,"types":["game_logic::persistent::save_state::GameSaveState"]},{"text":"impl Sync for DiscordConstants","synthetic":true,"types":["game_logic::project_constants::DiscordConstants"]},{"text":"impl Sync for PlayerConstants","synthetic":true,"types":["game_logic::project_constants::PlayerConstants"]},{"text":"impl Sync for ProjectConstants","synthetic":true,"types":["game_logic::project_constants::ProjectConstants"]},{"text":"impl Sync for AnimatedTextureLoadError","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::AnimatedTextureLoadError"]},{"text":"impl Sync for FrameTextureDescriptor","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::FrameTextureDescriptor"]},{"text":"impl Sync for AnimatedTextureMetadata","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::AnimatedTextureMetadata"]},{"text":"impl Sync for AnimatedTexture","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::AnimatedTexture"]},{"text":"impl Sync for MapRenderError","synthetic":true,"types":["game_logic::rendering::utilities::map_render::MapRenderError"]},{"text":"impl Sync for ProgramDataTileCache","synthetic":true,"types":["game_logic::rendering::utilities::map_render::ProgramDataTileCache"]},{"text":"impl Sync for MapRenderer","synthetic":true,"types":["game_logic::rendering::utilities::map_render::MapRenderer"]},{"text":"impl Sync for LoadingScreen","synthetic":true,"types":["game_logic::rendering::screens::loading_screen::LoadingScreen"]},{"text":"impl Sync for SmFailureScreen","synthetic":true,"types":["game_logic::rendering::screens::sm_failure_screen::SmFailureScreen"]},{"text":"impl Sync for PreloadState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::PreloadState"]},{"text":"impl Sync for LoadingState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::LoadingState"]},{"text":"impl Sync for RenderGameState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::RenderGameState"]},{"text":"impl Sync for SmFailedState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::SmFailedState"]},{"text":"impl Sync for RenderBackendStates","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::RenderBackendStates"]},{"text":"impl Sync for MenuStateSignal","synthetic":true,"types":["game_logic::scenes::main_menu::MenuStateSignal"]},{"text":"impl Sync for MainMenu","synthetic":true,"types":["game_logic::scenes::main_menu::MainMenu"]},{"text":"impl Sync for PlayableScene","synthetic":true,"types":["game_logic::scenes::player_interaction::PlayableScene"]},{"text":"impl Sync for TestFoxScene","synthetic":true,"types":["game_logic::scenes::test_fox::TestFoxScene"]},{"text":"impl Sync for SceneRenderDelegate","synthetic":true,"types":["game_logic::scenes::SceneRenderDelegate"]},{"text":"impl Sync for Player","synthetic":true,"types":["game_logic::model::player::Player"]},{"text":"impl Sync for PossiblyAnimatedTexture","synthetic":true,"types":["game_logic::model::world_object::PossiblyAnimatedTexture"]},{"text":"impl Sync for ObjectCollider","synthetic":true,"types":["game_logic::model::world_object::ObjectCollider"]},{"text":"impl Sync for WorldObject","synthetic":true,"types":["game_logic::model::world_object::WorldObject"]},{"text":"impl Sync for WorldObjectRef","synthetic":true,"types":["game_logic::model::world_object::WorldObjectRef"]},{"text":"impl Sync for WorldObjectPackageLoadError","synthetic":true,"types":["game_logic::model::world_object_package::WorldObjectPackageLoadError"]},{"text":"impl Sync for WorldObjectPackage","synthetic":true,"types":["game_logic::model::world_object_package::WorldObjectPackage"]}]; +implementors["game_logic"] = [{"text":"impl Sync for InternalData","synthetic":true,"types":["game_logic::asset_manager::datastore::InternalData"]},{"text":"impl Sync for InternalJsonLoadError","synthetic":true,"types":["game_logic::asset_manager::json::InternalJsonLoadError"]},{"text":"impl Sync for KnownSpriteType","synthetic":true,"types":["game_logic::asset_manager::sprite_types::KnownSpriteType"]},{"text":"impl Sync for ResourceLoadError","synthetic":true,"types":["game_logic::asset_manager::texture::ResourceLoadError"]},{"text":"impl Sync for DiscordRpcSignal","synthetic":true,"types":["game_logic::discord::signal::DiscordRpcSignal"]},{"text":"impl Sync for StatefulDiscordRpcSignalHandler","synthetic":true,"types":["game_logic::discord::signal::StatefulDiscordRpcSignalHandler"]},{"text":"impl Sync for DiscordError","synthetic":true,"types":["game_logic::discord::ipc::DiscordError"]},{"text":"impl Sync for DiscordRpcClient","synthetic":true,"types":["game_logic::discord::ipc::DiscordRpcClient"]},{"text":"impl Sync for DiscordRpcThreadHandle","synthetic":true,"types":["game_logic::discord::DiscordRpcThreadHandle"]},{"text":"impl Sync for GlobalResources","synthetic":true,"types":["game_logic::global_resource_package::GlobalResources"]},{"text":"impl Sync for PersistentGameSettings","synthetic":true,"types":["game_logic::persistent::settings::PersistentGameSettings"]},{"text":"impl Sync for GameSaveState","synthetic":true,"types":["game_logic::persistent::save_state::GameSaveState"]},{"text":"impl Sync for DiscordConstants","synthetic":true,"types":["game_logic::project_constants::DiscordConstants"]},{"text":"impl Sync for PlayerConstants","synthetic":true,"types":["game_logic::project_constants::PlayerConstants"]},{"text":"impl Sync for ProjectConstants","synthetic":true,"types":["game_logic::project_constants::ProjectConstants"]},{"text":"impl Sync for AnimatedTextureLoadError","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::AnimatedTextureLoadError"]},{"text":"impl Sync for FrameTextureDescriptor","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::FrameTextureDescriptor"]},{"text":"impl Sync for AnimatedTextureMetadata","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::AnimatedTextureMetadata"]},{"text":"impl Sync for AnimatedTexture","synthetic":true,"types":["game_logic::rendering::utilities::anim_texture::AnimatedTexture"]},{"text":"impl Sync for MapRenderError","synthetic":true,"types":["game_logic::rendering::utilities::map_render::MapRenderError"]},{"text":"impl Sync for ProgramDataTileCache","synthetic":true,"types":["game_logic::rendering::utilities::map_render::ProgramDataTileCache"]},{"text":"impl Sync for MapRenderer","synthetic":true,"types":["game_logic::rendering::utilities::map_render::MapRenderer"]},{"text":"impl Sync for LoadingScreen","synthetic":true,"types":["game_logic::rendering::screens::loading_screen::LoadingScreen"]},{"text":"impl Sync for SmFailureScreen","synthetic":true,"types":["game_logic::rendering::screens::sm_failure_screen::SmFailureScreen"]},{"text":"impl Sync for PreloadState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::PreloadState"]},{"text":"impl Sync for LoadingState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::LoadingState"]},{"text":"impl Sync for RenderGameState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::RenderGameState"]},{"text":"impl Sync for SmFailedState","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::SmFailedState"]},{"text":"impl Sync for RenderBackendStates","synthetic":true,"types":["game_logic::rendering::core_renderer_sm::RenderBackendStates"]},{"text":"impl Sync for MenuStateSignal","synthetic":true,"types":["game_logic::scenes::main_menu::MenuStateSignal"]},{"text":"impl Sync for MainMenu","synthetic":true,"types":["game_logic::scenes::main_menu::MainMenu"]},{"text":"impl !Sync for PlayableScene","synthetic":true,"types":["game_logic::scenes::player_interaction::PlayableScene"]},{"text":"impl Sync for TestFoxScene","synthetic":true,"types":["game_logic::scenes::test_fox::TestFoxScene"]},{"text":"impl !Sync for SceneRenderDelegate","synthetic":true,"types":["game_logic::scenes::SceneRenderDelegate"]},{"text":"impl Sync for Player","synthetic":true,"types":["game_logic::model::player::Player"]},{"text":"impl Sync for PossiblyAnimatedTexture","synthetic":true,"types":["game_logic::model::world_object::PossiblyAnimatedTexture"]},{"text":"impl Sync for ObjectCollider","synthetic":true,"types":["game_logic::model::world_object::ObjectCollider"]},{"text":"impl Sync for WorldObject","synthetic":true,"types":["game_logic::model::world_object::WorldObject"]},{"text":"impl Sync for WorldObjectRef","synthetic":true,"types":["game_logic::model::world_object::WorldObjectRef"]},{"text":"impl Sync for WorldObjectPackageLoadError","synthetic":true,"types":["game_logic::model::world_object_package::WorldObjectPackageLoadError"]},{"text":"impl Sync for WorldObjectPackage","synthetic":true,"types":["game_logic::model::world_object_package::WorldObjectPackage"]}]; if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/rustdoc/search-index.js b/rustdoc/search-index.js index aee99a9d..c0abb439 100644 --- a/rustdoc/search-index.js +++ b/rustdoc/search-index.js @@ -1,4 +1,4 @@ var searchIndex = JSON.parse('{\ -"game_logic":{"doc":"This file is the main entry point for the game logic.","t":[0,0,0,5,0,0,0,0,0,0,0,0,0,0,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,4,13,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,12,12,3,11,11,11,11,11,11,12,11,11,11,11,5,12,11,11,11,11,11,11,13,13,13,4,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,12,12,12,5,5,17,6,3,11,11,11,11,11,11,12,11,0,11,11,12,0,12,11,11,11,11,12,11,13,13,13,4,3,13,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,13,13,13,13,4,13,13,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,3,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,3,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,12,3,3,3,3,12,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,13,13,3,4,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,12,12,11,11,11,11,11,11,12,12,0,0,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,3,3,12,12,12,12,11,11,11,11,11,11,12,11,11,11,12,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,12,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,13,13,13,13,13,13,4,13,4,4,13,4,13,4,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,5,0,0,3,11,11,11,11,12,11,11,11,11,12,11,11,11,11,11,3,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,0,0,3,4,3,3,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,13,4,3,3,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,3,11,11,11,11,11,11,11,0,12,11,0,11,12,12,12,0,11,11,11,11,11,13,13,13,13,3,4,13,13,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,11,11,12,11,11,11,11,11,12,11,11,12,11,12,11,11,11,11,11,11,11,11,12,3,11,11,12,11,12,11,11,11,11,11,11,11,11,11,11,11,12],"n":["asset_manager","coord_convert","discord","entrypoint","global_resource_package","model","persistent","project_constants","rendering","scenes","datastore","json","sprite_types","texture","InternalData","borrow","borrow_mut","from","from_subset","get","get","into","is_in_subset","iter","iter","to_subset","to_subset_unchecked","try_from","try_into","type_id","AssetNotFound","InternalJsonLoadError","JsonError","borrow","borrow_mut","fmt","fmt","from","from","from_subset","into","is_in_subset","load_json_structure","source","to_string","to_subset","to_subset_unchecked","try_from","try_into","type_id","0","0","KnownSpriteType","borrow","borrow_mut","clone","clone_into","deserialize","fmt","friendly_name","from","from_subset","into","is_in_subset","load_known_sprite_types","short_name","to_owned","to_subset","to_subset_unchecked","try_from","try_into","type_id","AssetNotFound","Generic","Io","ResourceLoadError","borrow","borrow_mut","fmt","fmt","from","from","from_subset","into","is_in_subset","load_texture_from_internal_data","source","to_string","to_subset","to_subset_unchecked","try_from","try_into","type_id","0","0","0","game_to_tiled","tiled_to_game","DISCORD_CONNECT_TIMEOUT_SECONDS","DiscordChannel","DiscordRpcThreadHandle","begin_thread_non_blocking","borrow","borrow_mut","from","from_subset","get_channel","internal_client","into","ipc","is_in_subset","new","rx_chan","signal","state","to_subset","to_subset_unchecked","try_from","try_into","tx_chan","type_id","AwaitConnection","Connection","ConnectionTimeout","DiscordError","DiscordRpcClient","Sdk","borrow","borrow","borrow_mut","borrow_mut","clear_rich_presence","discord","fmt","fmt","from","from","from","from","from","from_subset","from_subset","into","into","is_in_subset","is_in_subset","new","set_rich_presence","source","to_string","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_into","try_into","type_id","type_id","user","wheel","0","0","0","BeginGameTimer","ChangeAssets","ChangeDetails","ClearGameTimeRemaining","DiscordRpcSignal","EndGameTimer","SetGameTimeRemainingTimestamp","StatefulDiscordRpcSignalHandler","apply","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","default","fmt","fmt","from","from","from_subset","from_subset","game_assets","game_details","game_end_timer","game_party_status","game_start_timer","into","into","is_in_subset","is_in_subset","to_owned","to_owned","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_into","try_into","type_id","type_id","0","0","details","party_status","GlobalResources","borrow","borrow_mut","fmt","from","from_subset","into","is_in_subset","load","to_subset","to_subset_unchecked","try_from","try_into","type_id","player","world_object","world_object_package","Player","borrow","borrow_mut","clone","clone_into","fmt","from","from_subset","into","is_in_subset","new","position","size","to_owned","to_subset","to_subset_unchecked","try_from","try_into","type_id","velocity","ObjectCollider","PossiblyAnimatedTexture","WorldObject","WorldObjectRef","animated","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","bottom_texture","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","deserialize","deserialize","deserialize","deserialize","file_path","fmt","fmt","fmt","fmt","footprint_radius","friction","from","from","from","from","from_subset","from_subset","from_subset","from_subset","into","into","into","into","is_in_subset","is_in_subset","is_in_subset","is_in_subset","kind","name","name","physics_colliders","position","position","radius","rotation_radians","size","temperature","to_owned","to_owned","to_owned","to_owned","to_subset","to_subset","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","top_texture","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","JsonError","ResourceError","WorldObjectPackage","WorldObjectPackageLoadError","borrow","borrow","borrow_mut","borrow_mut","bottom_animated_textures","bottom_static_textures","fmt","fmt","fmt","from","from","from","from","from_subset","from_subset","into","into","is_in_subset","is_in_subset","load","object_definitions","object_references","source","to_string","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","top_animated_textures","top_static_textures","try_from","try_from","try_into","try_into","type_id","type_id","0","0","save_state","settings","GameSaveState","borrow","borrow_mut","clone","clone_into","default","deserialize","fmt","from","from_subset","get_save_location","into","is_in_subset","load_or_create","save","serialize","to_owned","to_subset","to_subset_unchecked","try_from","try_into","type_id","PersistentGameSettings","borrow","borrow_mut","clone","clone_into","default","deserialize","fmt","from","from_subset","get_save_location","into","is_in_subset","load_or_create","save","serialize","to_owned","to_subset","to_subset_unchecked","try_from","try_into","type_id","DiscordConstants","PlayerConstants","ProjectConstants","acceleration","app_id","artwork","base_window_size","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","deceleration","deserialize","deserialize","deserialize","discord","fmt","fmt","fmt","from","from","from","from_subset","from_subset","from_subset","game_name","into","into","into","is_in_subset","is_in_subset","is_in_subset","max_velocity","player","start_size","strings","target_fps","tile_size","to_subset","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","core_renderer_sm","event_loop","screens","utilities","FromFinishLoading","FromFinishPreload","FromForceSmFailure","FromInit","FromInit","Loading","LoadingState","Preload","PreloadState","RenderBackendStates","RenderGame","RenderGameState","SmFailed","SmFailedState","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","eq","eq","eq","eq","eq","finish_loading","finish_preload","fmt","fmt","fmt","fmt","fmt","force_sm_failure","force_sm_failure","force_sm_failure","from","from","from","from","from","from_subset","from_subset","from_subset","from_subset","from_subset","into","into","into","into","into","is_in_subset","is_in_subset","is_in_subset","is_in_subset","is_in_subset","ne","preload","sm_failed","to_owned","to_owned","to_owned","to_owned","to_owned","to_subset","to_subset","to_subset","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","0","0","0","0","handle_graphics_blocking","loading_screen","sm_failure_screen","LoadingScreen","borrow","borrow_mut","from","from_subset","has_updated_discord_status","into","is_in_subset","new","render","resources","to_subset","to_subset_unchecked","try_from","try_into","type_id","SmFailureScreen","borrow","borrow_mut","fmt","from","from_subset","has_updated_discord_status","into","is_in_subset","new","render","to_subset","to_subset_unchecked","try_from","try_into","type_id","anim_texture","map_render","AnimatedTexture","AnimatedTextureLoadError","AnimatedTextureMetadata","FrameTextureDescriptor","InvalidSpriteType","KnownSpriteTypesLoadError","MetadataLoadError","TextureLoadError","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","deserialize","deserialize","fmt","fmt","fmt","fmt","fmt","fps","frames","from","from","from","from","from","from","from","from_subset","from_subset","from_subset","from_subset","get_current_frame_index","height","into","into","into","into","into","is_in_subset","is_in_subset","is_in_subset","is_in_subset","new","render_automatic","render_frame_by_index","reset_animation","sheet_height","sheet_width","size","source","start_time","texture","texture_metadata","texture_source_rects","to_owned","to_owned","to_string","to_subset","to_subset","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","width","x","y","0","0","0","0","AssetNotFound","MapRenderError","MapRenderer","ProgramDataTileCache","TiledError","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","fmt","fmt","fmt","fmt","from","from","from","from","from_subset","from_subset","from_subset","get_or_try_insert_tileset_with","get_tileset","internal_loader","into","into","into","is_in_subset","is_in_subset","is_in_subset","map","new","new","render_map","sample_friction_at","sample_temperature_at","source","tile_textures","tilesets","to_string","to_subset","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","world_objects","0","0","SceneRenderDelegate","borrow","borrow_mut","drop","from","from_subset","into","is_in_subset","main_menu","menu_control_signal","on_game_start","player_interaction","process_ingame_frame","scene_main_menu","scene_playable","scene_test_fox","test_fox","to_subset","to_subset_unchecked","try_from","try_into","type_id","DoCredits","DoLeaderboard","DoMainMenu","DoOptions","MainMenu","MenuStateSignal","QuitGame","StartGame","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","fmt","fmt","from","from","from_subset","from_subset","has_updated_discord_rpc","into","into","is_in_subset","is_in_subset","new","render_credits_frame","render_leaderboard_frame","render_main_menu_frame","render_options_frame","to_owned","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_into","try_into","type_id","type_id","PlayableScene","borrow","borrow_mut","camera","draw_ui","draw_world","fmt","from","from_subset","has_updated_discord_rpc","into","is_in_subset","last_update","new","player","render_frame","to_subset","to_subset_unchecked","try_from","try_into","type_id","update_camera","update_physics","world_map","TestFoxScene","borrow","borrow_mut","camera","fmt","fox_animation","from","from_subset","into","is_in_subset","new","render_frame","to_subset","to_subset_unchecked","try_from","try_into","type_id","world_map"],"q":["game_logic","","","","","","","","","","game_logic::asset_manager","","","","game_logic::asset_manager::datastore","","","","","","","","","","","","","","","","game_logic::asset_manager::json","","","","","","","","","","","","","","","","","","","","game_logic::asset_manager::json::InternalJsonLoadError","","game_logic::asset_manager::sprite_types","","","","","","","","","","","","","","","","","","","","game_logic::asset_manager::texture","","","","","","","","","","","","","","","","","","","","","game_logic::asset_manager::texture::ResourceLoadError","","","game_logic::coord_convert","","game_logic::discord","","","","","","","","","","","","","","","","","","","","","","","game_logic::discord::ipc","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::discord::ipc::DiscordError","","","game_logic::discord::signal","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::discord::signal::DiscordRpcSignal","","","","game_logic::global_resource_package","","","","","","","","","","","","","","game_logic::model","","","game_logic::model::player","","","","","","","","","","","","","","","","","","","","game_logic::model::world_object","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::model::world_object_package","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::model::world_object_package::WorldObjectPackageLoadError","","game_logic::persistent","","game_logic::persistent::save_state","","","","","","","","","","","","","","","","","","","","","","game_logic::persistent::settings","","","","","","","","","","","","","","","","","","","","","","game_logic::project_constants","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::rendering","","","","game_logic::rendering::core_renderer_sm","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::rendering::core_renderer_sm::RenderBackendStates","","","","game_logic::rendering::event_loop","game_logic::rendering::screens","","game_logic::rendering::screens::loading_screen","","","","","","","","","","","","","","","","game_logic::rendering::screens::sm_failure_screen","","","","","","","","","","","","","","","","game_logic::rendering::utilities","","game_logic::rendering::utilities::anim_texture","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::rendering::utilities::anim_texture::AnimatedTextureLoadError","","","","game_logic::rendering::utilities::map_render","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::rendering::utilities::map_render::MapRenderError","","game_logic::scenes","","","","","","","","","","","","","","","","","","","","","","game_logic::scenes::main_menu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::scenes::player_interaction","","","","","","","","","","","","","","","","","","","","","","","","game_logic::scenes::test_fox","","","","","","","","","","","","","","","","",""],"d":["Embedded asset management.","","Interfacing with Discord","This is the game logic entrypoint. Despite being async, …","Global resources","","This module contains the datastructure backing persistent …","The rust side of the dist/project-constants.json file","This module contains lower level rendering logic.","The render code for various scenes","Access to the game’s embedded files.","Utilities for loading JSON from the embedded filesystem.","","Code for loading textures from RAM to VRAM","This structure is dynamically packed with the contents of …","","","","","Get an embedded file and its metadata.","","","","","Iterates over the file paths in the folder.","","","","","","The JSON data was not found in the internal data store","Possible errors generated when deserializing JSON data …","An error occurred with the JSON data itself","","","","","","","","","","Load an embedded JSON file","","","","","","","","","","The structure backing the dist/known-sprite-types.json file","","","","","","","Sprite long name","","","","","Loads a list of all known sprite types from the …","Sprite short name (used in filenames)","","","","","","","","","","","","","","","","","","","","Loads an embedded texture into VRAM.","","","","","","","","","","","Converts from the game coordinate system to the tiled …","Converts from the tiled coordinate system to the game …","How long to wait before we give up on connecting to …","A cross-thread communication channel for sending Discord …","","Run the inner communication task in an async context","","","","","Get access to the inter-thread channel for communicating …","","","Discord Rich Presence utilities","","Construct a new DiscordRpcThreadHandle","","This file contains a system for signaling Discord RPC …","","","","","","","","","","","","The client wrapper for Discord RPC","","","","","","Clears the user rich presence","","","","","","","","","","","","","","","Creates a new DiscordRpcClient","Sets the user rich presence","","","","","","","","","","","","","","","","","","Signal to begin a game timer (Discord will display …","Signal to change the graphical assets in the info card","Signal to set the details in the info card","Signal to clear the game remaining timer","Definitions of signals that can be sent to the Discord RPC …","Signal to end a game timer","Signal to begin a countdown timer (Discord will display …","A struct that can keep track of incoming signals and their …","Apply a signal to generate a new activity","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","What the player is doing, eg. “Exploring the Wilds of …","The user’s currenty party status, eg. “Playing Solo”.","Global resource package","","","","","","","","Load the resources (blocking)","","","","","","","","","","","","","","","","","","","Construct a new player.","","","","","","","","","","Defines a collider in object space.","","Definition of an object. Only one of these should exist …","Used to reference an object in the world definition","Signal if the texture is animated or static","","","","","","","","","The object’s bottom texture","","","","","","","","","","","","","Relative file path from dist to the texture","","","","","colliders describing the object’s footprint","Friction","","","","","","","","","","","","","","","","","Object type","Object name. Must match the name of the texture","Object name","Colliders for physics","Position, relative to the object’s center (north east is …","Object position (tile-space not pixel-space). 1,1 being up …","Possible radius","Object rotation, positive is clockwise","Possible sizing","Temperature","","","","","","","","","","","","","The object’s top texture","","","","","","","","","","","","","","","A simply interface for the madness","","","","","","Bottom animated textures","Bottom static textures","","","","","","","","","","","","","","","The object definitions","The object references","","","","","","","Top animated textures","Top static textures","","","","","","","","","","","Game save state.","","","","","","","","","","Returns the optimal path for storing settings data.","","","Loads the savestate from disk.","Saves the savestate to disk.","","","","","","","","Settings for the game.","","","","","","","","","","Returns the optimal path for storing settings data.","","","Loads the settings from disk.","Saves the settings to disk.","","","","","","","","Constants relating to Discord","Constants relating to the Player","This structure is filled with the contents of …","Acceleration, tiles per second per second","The Discord application ID","Artwork name mapping","The window size to use on launch","","","","","","","Deceleration, tiles per second per second","","","","The Discord constants","","","","","","","","","","The name of the game","","","","","","","Maximum velocity, tiles per second","The Player constants","Starting size of player in tiles","Strings","The target framerate of the game","The size of the game tiles","","","","","","","","","","","","","","","","This module contains state machine definitions for the …","The Event Loop module","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Will begin rendering graphics. Returns when the window …","Handles loading the global resources and playing an intro …","","","","","","","","","","Construct a new LoadingScreen","","","","","","","","","","","","","","","","","Construct a new SmFailureScreen","","","","","","","This module handles the code for rendering …","","","Possible errors to be thrown during the animation texture …","Definition for the metadata structure attached to each …","Definition for the structure describing a frame’s size …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get the current frame index","","","","","","","","","","","Construct a new AnimatedTexture","Render the animation based on timestamp","Render a single frame to the screen","Clear the internal tracker for when the animation started","","","","","The animation start timestamp","The whole internal spritesheet","The metadata describing the spritesheet","a list of source rects to reduce memory allocation needs …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Possible errors generated by the map loading process","","","","","","","","","","","","","","","","","","","","","","Load the tileset. First attempts to pull from an in-RAM …","","","","","","","","","","Construct a new MapRenderer.","","","","","","","","","","","","","","","","","","","","","","","","","","Delegate for handling rendering. This is a struct to allow …","","","If you need anything to happen when the game closes, stick …","","","","","This scene encompasses the main menu system","","This is called when the game first loads","This scene encompasses all of the game where the player …","This is called every frame once the game has started.","","","","This “scene” is used only for testing animation and …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Construct a new MainMenu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Construct a new PlayableScene","","Handler for each frame","","","","","","","","","","","","","","","","","","","Construct a new TestFoxScene","Handler for each frame","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,3,4,0,5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,6,6,6,0,6,6,6,6,6,6,6,6,6,0,6,6,6,6,6,6,6,7,8,9,0,0,0,0,0,10,10,10,10,10,10,10,10,0,10,10,10,0,10,10,10,10,10,10,10,11,11,11,0,0,11,12,11,12,11,12,12,11,11,12,11,11,11,11,12,11,12,11,12,11,12,12,11,11,12,11,12,11,12,11,12,11,12,11,12,12,13,14,15,16,16,16,16,0,16,16,0,17,16,17,16,17,16,17,16,17,17,16,17,16,17,16,17,17,17,17,17,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,18,19,20,20,0,21,21,21,21,21,21,21,21,21,21,21,21,21,0,0,0,0,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,0,0,0,0,23,23,24,25,26,23,24,25,26,25,23,24,25,26,23,24,25,26,23,24,25,26,23,23,24,25,26,25,25,23,24,25,26,23,24,25,26,23,24,25,26,23,24,25,26,26,25,26,25,24,26,24,26,24,25,23,24,25,26,23,24,25,26,23,24,25,26,25,23,24,25,26,23,24,25,26,23,24,25,26,27,27,0,0,27,28,27,28,28,28,27,27,28,27,27,27,28,27,28,27,28,27,28,28,28,28,27,27,27,28,27,28,28,28,27,28,27,28,27,28,29,30,0,0,0,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,0,0,33,34,34,35,34,33,35,34,33,35,33,34,33,35,35,34,33,35,34,33,35,34,33,35,35,34,33,35,34,33,35,33,35,33,34,35,35,34,33,35,34,33,35,34,33,35,34,33,35,34,33,35,0,0,0,0,36,37,38,39,38,40,0,40,0,0,40,0,40,0,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,37,39,39,37,36,38,40,39,37,36,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,40,40,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,41,42,43,44,0,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,0,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,0,0,0,0,0,0,47,47,47,47,47,48,49,50,47,48,49,50,48,49,48,49,48,49,47,47,48,49,50,49,49,47,47,47,47,48,49,50,47,48,49,50,50,48,47,48,48,49,50,47,48,49,50,50,50,50,50,49,49,50,47,50,50,50,50,48,49,47,47,48,49,50,47,48,49,50,47,48,49,50,47,48,49,50,47,48,49,50,48,48,48,51,52,53,54,55,0,0,0,55,55,56,57,55,56,57,55,55,56,57,55,55,56,57,55,56,57,56,56,56,55,56,57,55,56,57,57,56,57,57,57,57,55,57,56,55,55,56,57,55,56,57,55,56,57,55,56,57,55,56,57,57,58,59,0,60,60,60,60,60,60,60,0,60,60,0,60,60,60,60,0,60,60,60,60,60,61,61,61,61,0,0,61,61,61,62,61,62,61,61,61,62,61,62,61,62,62,61,62,61,62,62,62,62,62,62,61,61,62,61,62,61,62,61,62,61,62,0,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,0,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64],"f":[null,null,null,[[["bool",15]]],null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["str",15]],["option",4,[["embeddedfile",3]]]],[[["str",15]],["option",4,[["embeddedfile",3]]]],[[]],[[],["bool",15]],[[],["filenames",4]],[[]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,[[]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["error",3]]],[[]],[[]],[[]],[[],["bool",15]],[[["str",15]],["result",4,[["deserializeowned",8],["internaljsonloaderror",4]]]],[[],["option",4,[["error",8]]]],[[],["string",3]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,[[]],[[]],[[],["knownspritetype",3]],[[]],[[],["result",4]],[[["formatter",3]],["result",6]],null,[[]],[[]],[[]],[[],["bool",15]],[[],["result",4,[["vec",3,[["knownspritetype",3]]],["error",3]]]],null,[[]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,[[]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["error",3]]],[[]],[[]],[[]],[[],["bool",15]],[[["raylibhandle",3],["raylibthread",3],["str",15]],["result",4,[["texture2d",3],["resourceloaderror",4]]]],[[],["option",4,[["error",8]]]],[[],["string",3]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,[[["vector2",6,[["f32",15]]]],["vector2",6,[["f32",15]]]],[[["vector2",6,[["f32",15]]]],["vector2",6,[["f32",15]]]],null,null,null,[[],["joinhandle",3]],[[]],[[]],[[]],[[]],[[],["sender",3,[["discordrpcsignal",4]]]],null,[[]],null,[[],["bool",15]],[[["i64",15]]],null,null,null,[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],null,[[],["typeid",3]],null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[["error",4]]],[[]],[[["elapsed",3]]],[[["recverror",3]]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[["i64",15],["subscriptions",3]]],[[["activitybuilder",3]]],[[],["option",4,[["error",8]]]],[[],["string",3]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,null,null,null,null,null,null,null,null,[[["discordrpcsignal",4]],["activitybuilder",3]],[[]],[[]],[[]],[[]],[[],["discordrpcsignal",4]],[[],["statefuldiscordrpcsignalhandler",3]],[[]],[[]],[[],["statefuldiscordrpcsignalhandler",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],null,null,null,null,null,[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,[[]],[[]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],["bool",15]],[[["raylibhandle",3],["raylibthread",3]]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,[[]],[[]],[[],["player",3]],[[]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],["bool",15]],[[["vector2",6,[["f32",15]]]]],null,null,[[]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["possiblyanimatedtexture",3]],[[],["objectcollider",3]],[[],["worldobject",3]],[[],["worldobjectref",3]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,[[]],[[]],[[]],[[]],null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["internaljsonloaderror",4]]],[[["resourceloaderror",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[["raylibhandle",3],["raylibthread",3],["str",15]],["result",4,[["worldobjectpackageloaderror",4]]]],null,null,[[],["option",4,[["error",8]]]],[[],["string",3]],[[],["option",4]],[[],["option",4]],[[]],[[]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,[[]],[[]],[[],["gamesavestate",3]],[[]],[[]],[[],["result",4]],[[["formatter",3]],["result",6]],[[]],[[]],[[],["pathbuf",3]],[[]],[[],["bool",15]],[[["bool",15]],["result",4,[["error",3]]]],[[],["result",4,[["error",3]]]],[[],["result",4]],[[]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,[[]],[[]],[[],["persistentgamesettings",3]],[[]],[[]],[[],["result",4]],[[["formatter",3]],["result",6]],[[]],[[]],[[],["pathbuf",3]],[[]],[[],["bool",15]],[[["bool",15]],["result",4,[["error",3]]]],[[],["result",4,[["error",3]]]],[[],["result",4]],[[]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,null,null,null,null,null,[[],["option",4]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["preloadstate",4]],[[],["loadingstate",4]],[[],["rendergamestate",4]],[[],["smfailedstate",4]],[[],["renderbackendstates",4]],[[]],[[]],[[]],[[]],[[]],[[["preloadstate",4]],["bool",15]],[[["loadingstate",4]],["bool",15]],[[["rendergamestate",4]],["bool",15]],[[["smfailedstate",4]],["bool",15]],[[["renderbackendstates",4]],["bool",15]],[[],["renderbackendstates",4]],[[],["renderbackendstates",4]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[],["renderbackendstates",4]],[[],["renderbackendstates",4]],[[],["renderbackendstates",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[["renderbackendstates",4]],["bool",15]],[[],["renderbackendstates",4]],[[],["renderbackendstates",4]],[[]],[[]],[[]],[[]],[[]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,[[["u32",15],["projectconstants",3],["sender",3,[["discordrpcsignal",4]]]]],null,null,null,[[]],[[]],[[]],[[]],null,[[]],[[],["bool",15]],[[]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["projectconstants",3]]],null,[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,[[]],[[]],[[["formatter",3]],["result",6]],[[]],[[]],null,[[]],[[],["bool",15]],[[]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["projectconstants",3]]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["frametexturedescriptor",3]],[[],["animatedtexturemetadata",3]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],null,null,[[]],[[["error",3]]],[[["internaljsonloaderror",4]]],[[["resourceloaderror",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["option",4,[["usize",15]]]],null,[[]],[[],["rectangle",3]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[["raylibhandle",3],["raylibthread",3],["str",15],["str",15]],["result",4,[["animatedtextureloaderror",4]]]],[[["raylibmode2d",3],["vector2",6,[["f32",15]]],["option",4,[["vector2",6,[["f32",15]]]]],["option",4,[["vector2",6,[["f32",15]]]]],["option",4,[["f32",15]]],["option",4,[["color",3]]]]],[[["raylibmode2d",3],["usize",15],["vector2",6,[["f32",15]]],["option",4,[["vector2",6,[["f32",15]]]]],["option",4,[["vector2",6,[["f32",15]]]]],["option",4,[["f32",15]]],["option",4,[["color",3]]]]],[[]],null,null,[[],["vector2",6,[["f32",15]]]],[[],["option",4,[["error",8]]]],null,null,null,null,[[]],[[]],[[],["string",3]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["error",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[["resourcepathbuf",6]],["result",4,[["arc",3,[["tileset",3]]]]]],[[],["option",4,[["arc",3,[["tileset",3]]]]]],null,[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,[[]],[[["str",15],["str",15],["raylibhandle",3],["raylibthread",3]],["result",4,[["maprendererror",4]]]],[[["raylibmode2d",3],["camera2d",3],["bool",15],["vector2",6,[["f32",15]]]]],[[["vector2",6,[["f32",15]]]],["f32",15]],[[["vector2",6,[["f32",15]]]],["f32",15]],[[],["option",4,[["error",8]]]],null,null,[[],["string",3]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],null,null,[[["raylibhandle",3],["raylibthread",3],["projectconstants",3]]],null,[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3]]],null,null,null,null,[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[],["menustatesignal",4]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[["raylibhandle",3],["raylibthread",3],["projectconstants",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3]]],[[]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,[[]],[[]],null,[[["raylibdrawhandle",3],["projectconstants",3]]],[[["raylibdrawhandle",3],["projectconstants",3]]],[[["formatter",3]],["result",6]],[[]],[[]],null,[[]],[[],["bool",15]],null,[[["raylibhandle",3],["raylibthread",3],["projectconstants",3]]],null,[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3]]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["raylibhandle",3]]],[[["raylibhandle",3],["projectconstants",3]]],null,null,[[]],[[]],null,[[["formatter",3]],["result",6]],null,[[]],[[]],[[]],[[],["bool",15]],[[["raylibhandle",3],["raylibthread",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3]]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null],"p":[[3,"InternalData"],[4,"InternalJsonLoadError"],[13,"JsonError"],[13,"AssetNotFound"],[3,"KnownSpriteType"],[4,"ResourceLoadError"],[13,"Io"],[13,"AssetNotFound"],[13,"Generic"],[3,"DiscordRpcThreadHandle"],[4,"DiscordError"],[3,"DiscordRpcClient"],[13,"Sdk"],[13,"AwaitConnection"],[13,"ConnectionTimeout"],[4,"DiscordRpcSignal"],[3,"StatefulDiscordRpcSignalHandler"],[13,"SetGameTimeRemainingTimestamp"],[13,"ChangeAssets"],[13,"ChangeDetails"],[3,"GlobalResources"],[3,"Player"],[3,"PossiblyAnimatedTexture"],[3,"ObjectCollider"],[3,"WorldObject"],[3,"WorldObjectRef"],[4,"WorldObjectPackageLoadError"],[3,"WorldObjectPackage"],[13,"JsonError"],[13,"ResourceError"],[3,"GameSaveState"],[3,"PersistentGameSettings"],[3,"PlayerConstants"],[3,"DiscordConstants"],[3,"ProjectConstants"],[4,"RenderGameState"],[4,"LoadingState"],[4,"SmFailedState"],[4,"PreloadState"],[4,"RenderBackendStates"],[13,"Preload"],[13,"Loading"],[13,"RenderGame"],[13,"SmFailed"],[3,"LoadingScreen"],[3,"SmFailureScreen"],[4,"AnimatedTextureLoadError"],[3,"FrameTextureDescriptor"],[3,"AnimatedTextureMetadata"],[3,"AnimatedTexture"],[13,"MetadataLoadError"],[13,"KnownSpriteTypesLoadError"],[13,"InvalidSpriteType"],[13,"TextureLoadError"],[4,"MapRenderError"],[3,"ProgramDataTileCache"],[3,"MapRenderer"],[13,"AssetNotFound"],[13,"TiledError"],[3,"SceneRenderDelegate"],[4,"MenuStateSignal"],[3,"MainMenu"],[3,"PlayableScene"],[3,"TestFoxScene"]]}\ +"game_logic":{"doc":"This file is the main entry point for the game logic.","t":[0,0,0,5,0,0,0,0,0,0,0,0,0,0,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,4,13,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,12,12,3,11,11,11,11,11,11,12,11,11,11,11,5,12,11,11,11,11,11,11,13,13,13,4,11,11,11,11,11,11,11,11,11,5,5,5,11,11,11,11,11,11,11,12,12,12,5,5,17,6,3,11,11,11,11,11,11,12,11,0,11,11,12,0,12,11,11,11,11,12,11,13,13,13,4,3,13,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,13,13,13,13,4,13,13,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,3,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,3,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,12,3,3,3,3,12,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,13,13,3,4,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,12,12,11,11,11,11,11,11,12,12,0,0,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,3,3,12,12,12,12,11,11,11,11,11,11,12,11,11,11,12,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,12,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,0,0,0,0,13,13,13,13,13,13,4,13,4,4,13,4,13,4,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,5,0,0,3,11,11,11,11,12,11,11,11,11,12,11,11,11,11,11,3,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,0,0,3,4,3,3,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,12,12,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,13,4,3,3,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,12,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,3,12,11,11,11,11,11,11,11,0,12,12,11,0,11,12,12,12,0,11,11,11,11,11,13,13,13,13,3,4,13,13,11,11,11,11,11,11,11,11,11,11,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,3,11,11,12,11,11,11,11,11,12,12,11,11,12,11,12,11,11,11,11,11,11,11,11,12,3,11,11,12,11,12,11,11,11,11,11,11,11,11,11,11,11,12],"n":["asset_manager","coord_convert","discord","entrypoint","global_resource_package","model","persistent","project_constants","rendering","scenes","datastore","json","sprite_types","texture","InternalData","borrow","borrow_mut","from","from_subset","get","get","into","is_in_subset","iter","iter","to_subset","to_subset_unchecked","try_from","try_into","type_id","AssetNotFound","InternalJsonLoadError","JsonError","borrow","borrow_mut","fmt","fmt","from","from","from_subset","into","is_in_subset","load_json_structure","source","to_string","to_subset","to_subset_unchecked","try_from","try_into","type_id","0","0","KnownSpriteType","borrow","borrow_mut","clone","clone_into","deserialize","fmt","friendly_name","from","from_subset","into","is_in_subset","load_known_sprite_types","short_name","to_owned","to_subset","to_subset_unchecked","try_from","try_into","type_id","AssetNotFound","Generic","Io","ResourceLoadError","borrow","borrow_mut","fmt","fmt","from","from","from_subset","into","is_in_subset","load_music_from_internal_data","load_sound_from_internal_data","load_texture_from_internal_data","source","to_string","to_subset","to_subset_unchecked","try_from","try_into","type_id","0","0","0","game_to_tiled","tiled_to_game","DISCORD_CONNECT_TIMEOUT_SECONDS","DiscordChannel","DiscordRpcThreadHandle","begin_thread_non_blocking","borrow","borrow_mut","from","from_subset","get_channel","internal_client","into","ipc","is_in_subset","new","rx_chan","signal","state","to_subset","to_subset_unchecked","try_from","try_into","tx_chan","type_id","AwaitConnection","Connection","ConnectionTimeout","DiscordError","DiscordRpcClient","Sdk","borrow","borrow","borrow_mut","borrow_mut","clear_rich_presence","discord","fmt","fmt","from","from","from","from","from","from_subset","from_subset","into","into","is_in_subset","is_in_subset","new","set_rich_presence","source","to_string","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_into","try_into","type_id","type_id","user","wheel","0","0","0","BeginGameTimer","ChangeAssets","ChangeDetails","ClearGameTimeRemaining","DiscordRpcSignal","EndGameTimer","SetGameTimeRemainingTimestamp","StatefulDiscordRpcSignalHandler","apply","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","default","fmt","fmt","from","from","from_subset","from_subset","game_assets","game_details","game_end_timer","game_party_status","game_start_timer","into","into","is_in_subset","is_in_subset","to_owned","to_owned","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_into","try_into","type_id","type_id","0","0","details","party_status","GlobalResources","borrow","borrow_mut","fmt","from","from_subset","into","is_in_subset","load","to_subset","to_subset_unchecked","try_from","try_into","type_id","player","world_object","world_object_package","Player","borrow","borrow_mut","clone","clone_into","fmt","from","from_subset","into","is_in_subset","new","position","size","to_owned","to_subset","to_subset_unchecked","try_from","try_into","type_id","velocity","ObjectCollider","PossiblyAnimatedTexture","WorldObject","WorldObjectRef","animated","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","bottom_texture","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","deserialize","deserialize","deserialize","deserialize","file_path","fmt","fmt","fmt","fmt","footprint_radius","friction","from","from","from","from","from_subset","from_subset","from_subset","from_subset","into","into","into","into","is_in_subset","is_in_subset","is_in_subset","is_in_subset","kind","name","name","physics_colliders","position","position","radius","rotation_radians","size","temperature","to_owned","to_owned","to_owned","to_owned","to_subset","to_subset","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","top_texture","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","JsonError","ResourceError","WorldObjectPackage","WorldObjectPackageLoadError","borrow","borrow","borrow_mut","borrow_mut","bottom_animated_textures","bottom_static_textures","fmt","fmt","fmt","from","from","from","from","from_subset","from_subset","into","into","is_in_subset","is_in_subset","load","object_definitions","object_references","source","to_string","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","top_animated_textures","top_static_textures","try_from","try_from","try_into","try_into","type_id","type_id","0","0","save_state","settings","GameSaveState","borrow","borrow_mut","clone","clone_into","default","deserialize","fmt","from","from_subset","get_save_location","into","is_in_subset","load_or_create","save","serialize","to_owned","to_subset","to_subset_unchecked","try_from","try_into","type_id","PersistentGameSettings","borrow","borrow_mut","clone","clone_into","default","deserialize","fmt","from","from_subset","get_save_location","into","is_in_subset","load_or_create","save","serialize","to_owned","to_subset","to_subset_unchecked","try_from","try_into","type_id","DiscordConstants","PlayerConstants","ProjectConstants","acceleration","app_id","artwork","base_window_size","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","deceleration","deserialize","deserialize","deserialize","discord","fmt","fmt","fmt","from","from","from","from_subset","from_subset","from_subset","game_name","into","into","into","is_in_subset","is_in_subset","is_in_subset","max_velocity","player","start_size","strings","target_fps","tile_size","to_subset","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","core_renderer_sm","event_loop","screens","utilities","FromFinishLoading","FromFinishPreload","FromForceSmFailure","FromInit","FromInit","Loading","LoadingState","Preload","PreloadState","RenderBackendStates","RenderGame","RenderGameState","SmFailed","SmFailedState","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","eq","eq","eq","eq","eq","finish_loading","finish_preload","fmt","fmt","fmt","fmt","fmt","force_sm_failure","force_sm_failure","force_sm_failure","from","from","from","from","from","from_subset","from_subset","from_subset","from_subset","from_subset","into","into","into","into","into","is_in_subset","is_in_subset","is_in_subset","is_in_subset","is_in_subset","ne","preload","sm_failed","to_owned","to_owned","to_owned","to_owned","to_owned","to_subset","to_subset","to_subset","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","0","0","0","0","handle_graphics_blocking","loading_screen","sm_failure_screen","LoadingScreen","borrow","borrow_mut","from","from_subset","has_updated_discord_status","into","is_in_subset","new","render","resources","to_subset","to_subset_unchecked","try_from","try_into","type_id","SmFailureScreen","borrow","borrow_mut","fmt","from","from_subset","has_updated_discord_status","into","is_in_subset","new","render","to_subset","to_subset_unchecked","try_from","try_into","type_id","anim_texture","map_render","AnimatedTexture","AnimatedTextureLoadError","AnimatedTextureMetadata","FrameTextureDescriptor","InvalidSpriteType","KnownSpriteTypesLoadError","MetadataLoadError","TextureLoadError","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","deserialize","deserialize","fmt","fmt","fmt","fmt","fmt","fps","frames","from","from","from","from","from","from","from","from_subset","from_subset","from_subset","from_subset","get_current_frame_index","height","into","into","into","into","into","is_in_subset","is_in_subset","is_in_subset","is_in_subset","new","render_automatic","render_frame_by_index","reset_animation","sheet_height","sheet_width","size","source","start_time","texture","texture_metadata","texture_source_rects","to_owned","to_owned","to_string","to_subset","to_subset","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","width","x","y","0","0","0","0","AssetNotFound","MapRenderError","MapRenderer","ProgramDataTileCache","TiledError","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","fmt","fmt","fmt","fmt","from","from","from","from","from_subset","from_subset","from_subset","get_or_try_insert_tileset_with","get_tileset","internal_loader","into","into","into","is_in_subset","is_in_subset","is_in_subset","map","new","new","render_map","sample_friction_at","sample_temperature_at","source","tile_textures","tilesets","to_string","to_subset","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","world_objects","0","0","SceneRenderDelegate","audio_subsystem","borrow","borrow_mut","drop","from","from_subset","into","is_in_subset","main_menu","menu_control_signal","needs_exit","on_game_start","player_interaction","process_ingame_frame","scene_main_menu","scene_playable","scene_test_fox","test_fox","to_subset","to_subset_unchecked","try_from","try_into","type_id","DoCredits","DoLeaderboard","DoMainMenu","DoOptions","MainMenu","MenuStateSignal","QuitGame","StartGame","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","fmt","fmt","from","from","from_subset","from_subset","has_updated_discord_rpc","into","into","is_in_subset","is_in_subset","new","render_credits_frame","render_leaderboard_frame","render_main_menu_frame","render_options_frame","to_owned","to_subset","to_subset","to_subset_unchecked","to_subset_unchecked","try_from","try_from","try_into","try_into","type_id","type_id","PlayableScene","borrow","borrow_mut","camera","draw_ui","draw_world","fmt","from","from_subset","game_soundtrack","has_updated_discord_rpc","into","is_in_subset","last_update","new","player","render_frame","to_subset","to_subset_unchecked","try_from","try_into","type_id","update_camera","update_physics","world_map","TestFoxScene","borrow","borrow_mut","camera","fmt","fox_animation","from","from_subset","into","is_in_subset","new","render_frame","to_subset","to_subset_unchecked","try_from","try_into","type_id","world_map"],"q":["game_logic","","","","","","","","","","game_logic::asset_manager","","","","game_logic::asset_manager::datastore","","","","","","","","","","","","","","","","game_logic::asset_manager::json","","","","","","","","","","","","","","","","","","","","game_logic::asset_manager::json::InternalJsonLoadError","","game_logic::asset_manager::sprite_types","","","","","","","","","","","","","","","","","","","","game_logic::asset_manager::texture","","","","","","","","","","","","","","","","","","","","","","","game_logic::asset_manager::texture::ResourceLoadError","","","game_logic::coord_convert","","game_logic::discord","","","","","","","","","","","","","","","","","","","","","","","game_logic::discord::ipc","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::discord::ipc::DiscordError","","","game_logic::discord::signal","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::discord::signal::DiscordRpcSignal","","","","game_logic::global_resource_package","","","","","","","","","","","","","","game_logic::model","","","game_logic::model::player","","","","","","","","","","","","","","","","","","","","game_logic::model::world_object","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::model::world_object_package","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::model::world_object_package::WorldObjectPackageLoadError","","game_logic::persistent","","game_logic::persistent::save_state","","","","","","","","","","","","","","","","","","","","","","game_logic::persistent::settings","","","","","","","","","","","","","","","","","","","","","","game_logic::project_constants","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::rendering","","","","game_logic::rendering::core_renderer_sm","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::rendering::core_renderer_sm::RenderBackendStates","","","","game_logic::rendering::event_loop","game_logic::rendering::screens","","game_logic::rendering::screens::loading_screen","","","","","","","","","","","","","","","","game_logic::rendering::screens::sm_failure_screen","","","","","","","","","","","","","","","","game_logic::rendering::utilities","","game_logic::rendering::utilities::anim_texture","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::rendering::utilities::anim_texture::AnimatedTextureLoadError","","","","game_logic::rendering::utilities::map_render","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::rendering::utilities::map_render::MapRenderError","","game_logic::scenes","","","","","","","","","","","","","","","","","","","","","","","","game_logic::scenes::main_menu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::scenes::player_interaction","","","","","","","","","","","","","","","","","","","","","","","","","game_logic::scenes::test_fox","","","","","","","","","","","","","","","","",""],"d":["Embedded asset management.","","Interfacing with Discord","This is the game logic entrypoint. Despite being async, …","Global resources","","This module contains the datastructure backing persistent …","The rust side of the dist/project-constants.json file","This module contains lower level rendering logic.","The render code for various scenes","Access to the game’s embedded files.","Utilities for loading JSON from the embedded filesystem.","","Code for loading textures from RAM to VRAM","This structure is dynamically packed with the contents of …","","","","","","Get an embedded file and its metadata.","","","Iterates over the file paths in the folder.","","","","","","","The JSON data was not found in the internal data store","Possible errors generated when deserializing JSON data …","An error occurred with the JSON data itself","","","","","","","","","","Load an embedded JSON file","","","","","","","","","","The structure backing the dist/known-sprite-types.json file","","","","","","","Sprite long name","","","","","Loads a list of all known sprite types from the …","Sprite short name (used in filenames)","","","","","","","","","","","","","","","","","","","","","","Loads an embedded texture into VRAM.","","","","","","","","","","","Converts from the game coordinate system to the tiled …","Converts from the tiled coordinate system to the game …","How long to wait before we give up on connecting to …","A cross-thread communication channel for sending Discord …","","Run the inner communication task in an async context","","","","","Get access to the inter-thread channel for communicating …","","","Discord Rich Presence utilities","","Construct a new DiscordRpcThreadHandle","","This file contains a system for signaling Discord RPC …","","","","","","","","","","","","The client wrapper for Discord RPC","","","","","","Clears the user rich presence","","","","","","","","","","","","","","","Creates a new DiscordRpcClient","Sets the user rich presence","","","","","","","","","","","","","","","","","","Signal to begin a game timer (Discord will display …","Signal to change the graphical assets in the info card","Signal to set the details in the info card","Signal to clear the game remaining timer","Definitions of signals that can be sent to the Discord RPC …","Signal to end a game timer","Signal to begin a countdown timer (Discord will display …","A struct that can keep track of incoming signals and their …","Apply a signal to generate a new activity","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","What the player is doing, eg. “Exploring the Wilds of …","The user’s currenty party status, eg. “Playing Solo”.","Global resource package","","","","","","","","Load the resources (blocking)","","","","","","","","","","","","","","","","","","","Construct a new player.","","","","","","","","","","Defines a collider in object space.","","Definition of an object. Only one of these should exist …","Used to reference an object in the world definition","Signal if the texture is animated or static","","","","","","","","","The object’s bottom texture","","","","","","","","","","","","","Relative file path from dist to the texture","","","","","colliders describing the object’s footprint","Friction","","","","","","","","","","","","","","","","","Object type","Object name. Must match the name of the texture","Object name","Colliders for physics","Position, relative to the object’s center (north east is …","Object position (tile-space not pixel-space). 1,1 being up …","Possible radius","Object rotation, positive is clockwise","Possible sizing","Temperature","","","","","","","","","","","","","The object’s top texture","","","","","","","","","","","","","","","A simply interface for the madness","","","","","","Bottom animated textures","Bottom static textures","","","","","","","","","","","","","","","The object definitions","The object references","","","","","","","Top animated textures","Top static textures","","","","","","","","","","","Game save state.","","","","","","","","","","Returns the optimal path for storing settings data.","","","Loads the savestate from disk.","Saves the savestate to disk.","","","","","","","","Settings for the game.","","","","","","","","","","Returns the optimal path for storing settings data.","","","Loads the settings from disk.","Saves the settings to disk.","","","","","","","","Constants relating to Discord","Constants relating to the Player","This structure is filled with the contents of …","Acceleration, tiles per second per second","The Discord application ID","Artwork name mapping","The window size to use on launch","","","","","","","Deceleration, tiles per second per second","","","","The Discord constants","","","","","","","","","","The name of the game","","","","","","","Maximum velocity, tiles per second","The Player constants","Starting size of player in tiles","Strings","The target framerate of the game","The size of the game tiles","","","","","","","","","","","","","","","","This module contains state machine definitions for the …","The Event Loop module","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Will begin rendering graphics. Returns when the window …","Handles loading the global resources and playing an intro …","","","","","","","","","","Construct a new LoadingScreen","","","","","","","","","","","","","","","","","Construct a new SmFailureScreen","","","","","","","This module handles the code for rendering …","","","Possible errors to be thrown during the animation texture …","Definition for the metadata structure attached to each …","Definition for the structure describing a frame’s size …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Get the current frame index","","","","","","","","","","","Construct a new AnimatedTexture","Render the animation based on timestamp","Render a single frame to the screen","Clear the internal tracker for when the animation started","","","","","The animation start timestamp","The whole internal spritesheet","The metadata describing the spritesheet","a list of source rects to reduce memory allocation needs …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Possible errors generated by the map loading process","","","","","","","","","","","","","","","","","","","","","","Load the tileset. First attempts to pull from an in-RAM …","","","","","","","","","","Construct a new MapRenderer.","","","","","","","","","","","","","","","","","","","","","","","","","","Delegate for handling rendering. This is a struct to allow …","","","","If you need anything to happen when the game closes, stick …","","","","","This scene encompasses the main menu system","","","This is called when the game first loads","This scene encompasses all of the game where the player …","This is called every frame once the game has started.","","","","This “scene” is used only for testing animation and …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Construct a new MainMenu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Construct a new PlayableScene","","Handler for each frame","","","","","","","","","","","","","","","","","","","Construct a new TestFoxScene","Handler for each frame","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,2,2,2,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2,3,4,0,5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,6,6,6,0,6,6,6,6,6,6,6,6,6,0,0,0,6,6,6,6,6,6,6,7,8,9,0,0,0,0,0,10,10,10,10,10,10,10,10,0,10,10,10,0,10,10,10,10,10,10,10,11,11,11,0,0,11,12,11,12,11,12,12,11,11,12,11,11,11,11,12,11,12,11,12,11,12,12,11,11,12,11,12,11,12,11,12,11,12,11,12,12,13,14,15,16,16,16,16,0,16,16,0,17,16,17,16,17,16,17,16,17,17,16,17,16,17,16,17,17,17,17,17,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,16,17,18,19,20,20,0,21,21,21,21,21,21,21,21,21,21,21,21,21,0,0,0,0,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,0,0,0,0,23,23,24,25,26,23,24,25,26,25,23,24,25,26,23,24,25,26,23,24,25,26,23,23,24,25,26,25,25,23,24,25,26,23,24,25,26,23,24,25,26,23,24,25,26,26,25,26,25,24,26,24,26,24,25,23,24,25,26,23,24,25,26,23,24,25,26,25,23,24,25,26,23,24,25,26,23,24,25,26,27,27,0,0,27,28,27,28,28,28,27,27,28,27,27,27,28,27,28,27,28,27,28,28,28,28,27,27,27,28,27,28,28,28,27,28,27,28,27,28,29,30,0,0,0,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,0,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,0,0,0,33,34,34,35,34,33,35,34,33,35,33,34,33,35,35,34,33,35,34,33,35,34,33,35,35,34,33,35,34,33,35,33,35,33,34,35,35,34,33,35,34,33,35,34,33,35,34,33,35,34,33,35,0,0,0,0,36,37,38,39,38,40,0,40,0,0,40,0,40,0,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,37,39,39,37,36,38,40,39,37,36,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,40,40,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,39,37,36,38,40,41,42,43,44,0,0,0,0,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,0,46,46,46,46,46,46,46,46,46,46,46,46,46,46,46,0,0,0,0,0,0,47,47,47,47,47,48,49,50,47,48,49,50,48,49,48,49,48,49,47,47,48,49,50,49,49,47,47,47,47,48,49,50,47,48,49,50,50,48,47,48,48,49,50,47,48,49,50,50,50,50,50,49,49,50,47,50,50,50,50,48,49,47,47,48,49,50,47,48,49,50,47,48,49,50,47,48,49,50,47,48,49,50,48,48,48,51,52,53,54,55,0,0,0,55,55,56,57,55,56,57,55,55,56,57,55,55,56,57,55,56,57,56,56,56,55,56,57,55,56,57,57,56,57,57,57,57,55,57,56,55,55,56,57,55,56,57,55,56,57,55,56,57,55,56,57,57,58,59,0,60,60,60,60,60,60,60,60,0,60,60,60,0,60,60,60,60,0,60,60,60,60,60,61,61,61,61,0,0,61,61,61,62,61,62,61,61,61,62,61,62,61,62,62,61,62,61,62,62,62,62,62,62,61,61,62,61,62,61,62,61,62,61,62,0,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,63,0,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64],"f":[null,null,null,[[["bool",15]]],null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["str",15]],["option",4,[["embeddedfile",3]]]],[[["str",15]],["option",4,[["embeddedfile",3]]]],[[]],[[],["bool",15]],[[]],[[],["filenames",4]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,[[]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[["error",3]]],[[]],[[]],[[],["bool",15]],[[["str",15]],["result",4,[["deserializeowned",8],["internaljsonloaderror",4]]]],[[],["option",4,[["error",8]]]],[[],["string",3]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,[[]],[[]],[[],["knownspritetype",3]],[[]],[[],["result",4]],[[["formatter",3]],["result",6]],null,[[]],[[]],[[]],[[],["bool",15]],[[],["result",4,[["vec",3,[["knownspritetype",3]]],["error",3]]]],null,[[]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,[[]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[["error",3]]],[[]],[[]],[[],["bool",15]],[[["raylibthread",3],["str",15]],["result",4,[["music",3],["resourceloaderror",4]]]],[[["str",15]],["result",4,[["sound",3],["resourceloaderror",4]]]],[[["raylibhandle",3],["raylibthread",3],["str",15]],["result",4,[["texture2d",3],["resourceloaderror",4]]]],[[],["option",4,[["error",8]]]],[[],["string",3]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,[[["vector2",6,[["f32",15]]]],["vector2",6,[["f32",15]]]],[[["vector2",6,[["f32",15]]]],["vector2",6,[["f32",15]]]],null,null,null,[[],["joinhandle",3]],[[]],[[]],[[]],[[]],[[],["sender",3,[["discordrpcsignal",4]]]],null,[[]],null,[[],["bool",15]],[[["i64",15]]],null,null,null,[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],null,[[],["typeid",3]],null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[["error",4]]],[[["recverror",3]]],[[["elapsed",3]]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[["i64",15],["subscriptions",3]]],[[["activitybuilder",3]]],[[],["option",4,[["error",8]]]],[[],["string",3]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,null,null,null,null,null,null,null,null,[[["discordrpcsignal",4]],["activitybuilder",3]],[[]],[[]],[[]],[[]],[[],["discordrpcsignal",4]],[[],["statefuldiscordrpcsignalhandler",3]],[[]],[[]],[[],["statefuldiscordrpcsignalhandler",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],null,null,null,null,null,[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[]],[[]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,[[]],[[]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],["bool",15]],[[["raylibhandle",3],["raylibthread",3]]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,[[]],[[]],[[],["player",3]],[[]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],["bool",15]],[[["vector2",6,[["f32",15]]]]],null,null,[[]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["possiblyanimatedtexture",3]],[[],["objectcollider",3]],[[],["worldobject",3]],[[],["worldobjectref",3]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,[[]],[[]],[[]],[[]],null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["internaljsonloaderror",4]]],[[["resourceloaderror",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[["raylibhandle",3],["raylibthread",3],["str",15]],["result",4,[["worldobjectpackageloaderror",4]]]],null,null,[[],["option",4,[["error",8]]]],[[],["string",3]],[[],["option",4]],[[],["option",4]],[[]],[[]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,[[]],[[]],[[],["gamesavestate",3]],[[]],[[]],[[],["result",4]],[[["formatter",3]],["result",6]],[[]],[[]],[[],["pathbuf",3]],[[]],[[],["bool",15]],[[["bool",15]],["result",4,[["error",3]]]],[[],["result",4,[["error",3]]]],[[],["result",4]],[[]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,[[]],[[]],[[],["persistentgamesettings",3]],[[]],[[]],[[],["result",4]],[[["formatter",3]],["result",6]],[[]],[[]],[[],["pathbuf",3]],[[]],[[],["bool",15]],[[["bool",15]],["result",4,[["error",3]]]],[[],["result",4,[["error",3]]]],[[],["result",4]],[[]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,null,null,null,null,null,[[],["option",4]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["preloadstate",4]],[[],["loadingstate",4]],[[],["rendergamestate",4]],[[],["smfailedstate",4]],[[],["renderbackendstates",4]],[[]],[[]],[[]],[[]],[[]],[[["preloadstate",4]],["bool",15]],[[["loadingstate",4]],["bool",15]],[[["rendergamestate",4]],["bool",15]],[[["smfailedstate",4]],["bool",15]],[[["renderbackendstates",4]],["bool",15]],[[],["renderbackendstates",4]],[[],["renderbackendstates",4]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[],["renderbackendstates",4]],[[],["renderbackendstates",4]],[[],["renderbackendstates",4]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[["renderbackendstates",4]],["bool",15]],[[],["renderbackendstates",4]],[[],["renderbackendstates",4]],[[]],[[]],[[]],[[]],[[]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,[[["u32",15],["projectconstants",3],["sender",3,[["discordrpcsignal",4]]]]],null,null,null,[[]],[[]],[[]],[[]],null,[[]],[[],["bool",15]],[[]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["projectconstants",3]]],null,[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,[[]],[[]],[[["formatter",3]],["result",6]],[[]],[[]],null,[[]],[[],["bool",15]],[[]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["projectconstants",3]]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["frametexturedescriptor",3]],[[],["animatedtexturemetadata",3]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],null,null,[[["internaljsonloaderror",4]]],[[["error",3]]],[[["resourceloaderror",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["option",4,[["usize",15]]]],null,[[]],[[]],[[],["rectangle",3]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[["raylibhandle",3],["raylibthread",3],["str",15],["str",15]],["result",4,[["animatedtextureloaderror",4]]]],[[["raylibmode2d",3],["vector2",6,[["f32",15]]],["option",4,[["vector2",6,[["f32",15]]]]],["option",4,[["vector2",6,[["f32",15]]]]],["option",4,[["f32",15]]],["option",4,[["color",3]]]]],[[["raylibmode2d",3],["usize",15],["vector2",6,[["f32",15]]],["option",4,[["vector2",6,[["f32",15]]]]],["option",4,[["vector2",6,[["f32",15]]]]],["option",4,[["f32",15]]],["option",4,[["color",3]]]]],[[]],null,null,[[],["vector2",6,[["f32",15]]]],[[],["option",4,[["error",8]]]],null,null,null,null,[[]],[[]],[[],["string",3]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["error",4]]],[[]],[[]],[[]],[[]],[[]],[[]],[[["resourcepathbuf",6]],["result",4,[["arc",3,[["tileset",3]]]]]],[[],["option",4,[["arc",3,[["tileset",3]]]]]],null,[[]],[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,[[]],[[["str",15],["str",15],["raylibhandle",3],["raylibthread",3]],["result",4,[["maprendererror",4]]]],[[["raylibmode2d",3],["camera2d",3],["bool",15],["vector2",6,[["f32",15]]]]],[[["vector2",6,[["f32",15]]]],["f32",15]],[[["vector2",6,[["f32",15]]]],["f32",15]],[[],["option",4,[["error",8]]]],null,null,[[],["string",3]],[[],["option",4]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["bool",15]],null,null,null,[[["raylibhandle",3],["raylibthread",3],["projectconstants",3]]],null,[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3]]],null,null,null,null,[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[],["menustatesignal",4]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[],["bool",15]],[[],["bool",15]],[[["raylibhandle",3],["raylibthread",3],["projectconstants",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3]]],[[]],[[],["option",4]],[[],["option",4]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,[[]],[[]],null,[[["raylibdrawhandle",3],["projectconstants",3]]],[[["raylibdrawhandle",3],["projectconstants",3]]],[[["formatter",3]],["result",6]],[[]],[[]],null,null,[[]],[[],["bool",15]],null,[[["raylibhandle",3],["raylibthread",3],["projectconstants",3]]],null,[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3],["raylibaudio",3]]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["raylibhandle",3]]],[[["raylibhandle",3],["projectconstants",3]]],null,null,[[]],[[]],null,[[["formatter",3]],["result",6]],null,[[]],[[]],[[]],[[],["bool",15]],[[["raylibhandle",3],["raylibthread",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3]]],[[],["option",4]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null],"p":[[3,"InternalData"],[4,"InternalJsonLoadError"],[13,"JsonError"],[13,"AssetNotFound"],[3,"KnownSpriteType"],[4,"ResourceLoadError"],[13,"Io"],[13,"AssetNotFound"],[13,"Generic"],[3,"DiscordRpcThreadHandle"],[4,"DiscordError"],[3,"DiscordRpcClient"],[13,"Sdk"],[13,"AwaitConnection"],[13,"ConnectionTimeout"],[4,"DiscordRpcSignal"],[3,"StatefulDiscordRpcSignalHandler"],[13,"SetGameTimeRemainingTimestamp"],[13,"ChangeAssets"],[13,"ChangeDetails"],[3,"GlobalResources"],[3,"Player"],[3,"PossiblyAnimatedTexture"],[3,"ObjectCollider"],[3,"WorldObject"],[3,"WorldObjectRef"],[4,"WorldObjectPackageLoadError"],[3,"WorldObjectPackage"],[13,"JsonError"],[13,"ResourceError"],[3,"GameSaveState"],[3,"PersistentGameSettings"],[3,"PlayerConstants"],[3,"DiscordConstants"],[3,"ProjectConstants"],[4,"RenderGameState"],[4,"LoadingState"],[4,"SmFailedState"],[4,"PreloadState"],[4,"RenderBackendStates"],[13,"Preload"],[13,"Loading"],[13,"RenderGame"],[13,"SmFailed"],[3,"LoadingScreen"],[3,"SmFailureScreen"],[4,"AnimatedTextureLoadError"],[3,"FrameTextureDescriptor"],[3,"AnimatedTextureMetadata"],[3,"AnimatedTexture"],[13,"MetadataLoadError"],[13,"KnownSpriteTypesLoadError"],[13,"InvalidSpriteType"],[13,"TextureLoadError"],[4,"MapRenderError"],[3,"ProgramDataTileCache"],[3,"MapRenderer"],[13,"AssetNotFound"],[13,"TiledError"],[3,"SceneRenderDelegate"],[4,"MenuStateSignal"],[3,"MainMenu"],[3,"PlayableScene"],[3,"TestFoxScene"]]}\ }'); if (window.initSearch) {window.initSearch(searchIndex)}; \ No newline at end of file diff --git a/rustdoc/src/game_logic/asset_manager/mod.rs.html b/rustdoc/src/game_logic/asset_manager/mod.rs.html index 5bdd6998..1386b02f 100644 --- a/rustdoc/src/game_logic/asset_manager/mod.rs.html +++ b/rustdoc/src/game_logic/asset_manager/mod.rs.html @@ -53,6 +53,6 @@ mod sprite_types; pub use sprite_types::{KnownSpriteType, load_known_sprite_types}; mod texture; -pub use texture::{load_texture_from_internal_data, ResourceLoadError};
+pub use texture::{load_texture_from_internal_data, ResourceLoadError, load_music_from_internal_data, load_sound_from_internal_data};
\ No newline at end of file diff --git a/rustdoc/src/game_logic/asset_manager/texture.rs.html b/rustdoc/src/game_logic/asset_manager/texture.rs.html index c800121e..2ed1ae91 100644 --- a/rustdoc/src/game_logic/asset_manager/texture.rs.html +++ b/rustdoc/src/game_logic/asset_manager/texture.rs.html @@ -1,76 +1,151 @@ texture.rs - source
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
+        
  1
+  2
+  3
+  4
+  5
+  6
+  7
+  8
+  9
+ 10
+ 11
+ 12
+ 13
+ 14
+ 15
+ 16
+ 17
+ 18
+ 19
+ 20
+ 21
+ 22
+ 23
+ 24
+ 25
+ 26
+ 27
+ 28
+ 29
+ 30
+ 31
+ 32
+ 33
+ 34
+ 35
+ 36
+ 37
+ 38
+ 39
+ 40
+ 41
+ 42
+ 43
+ 44
+ 45
+ 46
+ 47
+ 48
+ 49
+ 50
+ 51
+ 52
+ 53
+ 54
+ 55
+ 56
+ 57
+ 58
+ 59
+ 60
+ 61
+ 62
+ 63
+ 64
+ 65
+ 66
+ 67
+ 68
+ 69
+ 70
+ 71
+ 72
+ 73
+ 74
+ 75
+ 76
+ 77
+ 78
+ 79
+ 80
+ 81
+ 82
+ 83
+ 84
+ 85
+ 86
+ 87
+ 88
+ 89
+ 90
+ 91
+ 92
+ 93
+ 94
+ 95
+ 96
+ 97
+ 98
+ 99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
 
//! Code for loading textures from RAM to VRAM
 //!
 //! Largely coppied from last year: https://github.com/Ewpratten/ludum-dare-49/blob/master/game/src/utilities/datastore.rs
 
 use std::path::Path;
 
-use raylib::{texture::Texture2D, RaylibHandle, RaylibThread};
+use raylib::{
+    audio::{Music, RaylibAudio, Sound},
+    texture::Texture2D,
+    RaylibHandle, RaylibThread,
+};
 use tempfile::tempdir;
 
 use crate::asset_manager::InternalData;
@@ -128,6 +203,72 @@
 
     Ok(texture)
 }
-
+ +pub fn load_music_from_internal_data( + thread: &RaylibThread, + path: &str, +) -> Result<Music, ResourceLoadError> { + // Create a temp file path to work with + let temp_dir = tempdir()?; + debug!( + "Created temporary directory for passing embedded data to Raylib: {}", + temp_dir.path().display() + ); + let tmp_path = temp_dir.path().join(Path::new(path).file_name().unwrap()); + + // Unpack the raw sound data to a real file on the local filesystem so raylib will read it correctly + std::fs::write( + &tmp_path, + &InternalData::get(path) + .ok_or(ResourceLoadError::AssetNotFound(path.to_string()))? + .data, + )?; + + // Call through via FFI to re-load the file + let texture = Music::load_music_stream(thread, tmp_path.to_str().unwrap()) + .map_err(ResourceLoadError::Generic)?; + + // Close the file + debug!( + "Dropping temporary directory: {}", + temp_dir.path().display() + ); + // temp_dir.close()?; + + Ok(texture) +} + +pub fn load_sound_from_internal_data( + path: &str, +) -> Result<Sound, ResourceLoadError> { + // Create a temp file path to work with + let temp_dir = tempdir()?; + debug!( + "Created temporary directory for passing embedded data to Raylib: {}", + temp_dir.path().display() + ); + let tmp_path = temp_dir.path().join(Path::new(path).file_name().unwrap()); + + // Unpack the raw sound data to a real file on the local filesystem so raylib will read it correctly + std::fs::write( + &tmp_path, + &InternalData::get(path) + .ok_or(ResourceLoadError::AssetNotFound(path.to_string()))? + .data, + )?; + + // Call through via FFI to re-load the file + let texture = + Sound::load_sound(tmp_path.to_str().unwrap()).map_err(ResourceLoadError::Generic)?; + + // Close the file + debug!( + "Dropping temporary directory: {}", + temp_dir.path().display() + ); + temp_dir.close()?; + + Ok(texture) +}
\ No newline at end of file diff --git a/rustdoc/src/game_logic/rendering/event_loop.rs.html b/rustdoc/src/game_logic/rendering/event_loop.rs.html index 85a53e22..656d475e 100644 --- a/rustdoc/src/game_logic/rendering/event_loop.rs.html +++ b/rustdoc/src/game_logic/rendering/event_loop.rs.html @@ -132,6 +132,11 @@ 130 131 132 +133 +134 +135 +136 +137
//! The Event Loop module
 //!
 //! ## Overview
@@ -245,6 +250,11 @@
                         constants,
                     )
                     .await;
+
+                // Handle exiting the game
+                if render_delegate.needs_exit {
+                    break;
+                }
             }
             _ => backend_sm = RenderBackendStates::sm_failed(),
         };
diff --git a/rustdoc/src/game_logic/scenes/main_menu.rs.html b/rustdoc/src/game_logic/scenes/main_menu.rs.html
index b2f138af..4102695e 100644
--- a/rustdoc/src/game_logic/scenes/main_menu.rs.html
+++ b/rustdoc/src/game_logic/scenes/main_menu.rs.html
@@ -301,7 +301,7 @@
 
 #[derive(Debug)]
 pub struct MainMenu {
-    has_updated_discord_rpc: bool,
+    pub has_updated_discord_rpc: bool,
 }
 
 impl MainMenu {
diff --git a/rustdoc/src/game_logic/scenes/mod.rs.html b/rustdoc/src/game_logic/scenes/mod.rs.html
index 566093fb..12ad7087 100644
--- a/rustdoc/src/game_logic/scenes/mod.rs.html
+++ b/rustdoc/src/game_logic/scenes/mod.rs.html
@@ -113,6 +113,19 @@
 111
 112
 113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
 
//! The render code for various scenes
 //!
 //! ## Overview
@@ -138,6 +151,8 @@
 /// This is a struct to allow for stateful data (like sub-screens) to be set up
 pub struct SceneRenderDelegate {
     menu_control_signal: MenuStateSignal,
+    pub needs_exit: bool,
+    audio_subsystem: RaylibAudio,
     /* Scenes */
     scene_test_fox: TestFoxScene,
     scene_playable: PlayableScene,
@@ -151,7 +166,9 @@
         rl_thread: &RaylibThread,
         constants: &ProjectConstants,
     ) -> Self {
-        // TODO: Stick any init code you want here.
+        // Set up audio
+        let audio_subsystem = RaylibAudio::init_audio_device();
+        audio_subsystem.set_master_volume(0.4);
 
         // Init some scenes
         let scene_test_fox = TestFoxScene::new(raylib, rl_thread);
@@ -160,6 +177,8 @@
 
         Self {
             menu_control_signal: MenuStateSignal::DoMainMenu,
+            needs_exit: false,
+            audio_subsystem,
             scene_test_fox,
             scene_playable,
             scene_main_menu,
@@ -177,22 +196,29 @@
         global_resources: &GlobalResources,
         constants: &ProjectConstants,
     ) {
+
         // Render the main menu if in it, otherwise, render the game
         match self.menu_control_signal {
             MenuStateSignal::StartGame => {
                 self.scene_playable
-                    .render_frame(raylib, rl_thread, &discord, global_resources, constants)
-                    .await;
-                self.scene_playable
-                    .update_physics(raylib, constants)
+                    .render_frame(raylib, rl_thread, &discord, global_resources, constants, &mut self.audio_subsystem)
                     .await;
+                self.scene_playable.update_physics(raylib, constants).await;
+
+                // Clear the menu system discord status
+                self.scene_main_menu.has_updated_discord_rpc = false;
+            }
+            MenuStateSignal::QuitGame => {
+                self.needs_exit = true;
             }
-            MenuStateSignal::QuitGame => unimplemented!(),
             MenuStateSignal::DoMainMenu => {
                 self.menu_control_signal = self
                     .scene_main_menu
                     .render_main_menu_frame(raylib, rl_thread, discord, global_resources, constants)
-                    .await
+                    .await;
+
+                // Clear the ingame discord status
+                self.scene_playable.has_updated_discord_rpc = false;
             }
             MenuStateSignal::DoOptions => {
                 self.menu_control_signal = self
diff --git a/rustdoc/src/game_logic/scenes/player_interaction.rs.html b/rustdoc/src/game_logic/scenes/player_interaction.rs.html
index 57fae6ac..aabff2d3 100644
--- a/rustdoc/src/game_logic/scenes/player_interaction.rs.html
+++ b/rustdoc/src/game_logic/scenes/player_interaction.rs.html
@@ -187,6 +187,11 @@
 185
 186
 187
+188
+189
+190
+191
+192
 
//! This scene encompasses all of the game where the player can walk around.
 
 use nalgebra as na;
@@ -194,6 +199,7 @@
 use std::time::SystemTime;
 
 use crate::{
+    asset_manager::{load_music_from_internal_data, load_sound_from_internal_data},
     discord::{DiscordChannel, DiscordRpcSignal},
     global_resource_package::GlobalResources,
     model::player::Player,
@@ -203,40 +209,43 @@
 
 #[derive(Debug)]
 pub struct PlayableScene {
-    has_updated_discord_rpc: bool,
+    pub has_updated_discord_rpc: bool,
     player: Player,
     world_map: MapRenderer,
     camera: raylib::camera::Camera2D,
     last_update: SystemTime,
+    game_soundtrack: Music,
 }
 
 impl PlayableScene {
     /// Construct a new `PlayableScene`
     pub fn new(
         raylib_handle: &mut raylib::RaylibHandle,
-        thread: & raylib::RaylibThread,
+        thread: &raylib::RaylibThread,
         constants: &ProjectConstants,
     ) -> Self {
 
         let map_renderer = MapRenderer::new("map_gameMap.tmx", "map_gameMap.objects.json", raylib_handle, thread).unwrap();
 
+        // Load the game music
+        let game_soundtrack =
+            load_music_from_internal_data(thread, "assets/audio/gameSoundtrack.mp3").unwrap();
+
         Self {
             has_updated_discord_rpc: false,
             player: Player::new(na::Vector2::new(10.0, 10.0)),
             world_map: map_renderer,
             camera: raylib::camera::Camera2D {
-                target: raylib::math::Vector2 { 
-                    x: 0.0, 
-                    y: 0.0,
-                },
-                offset: raylib::math::Vector2 { 
+                target: raylib::math::Vector2 { x: 0.0, y: 0.0 },
+                offset: raylib::math::Vector2 {
                     x: (constants.base_window_size.0 as f32 / 2.0),
-                    y: (constants.base_window_size.1 as f32 / 2.0) 
+                    y: (constants.base_window_size.1 as f32 / 2.0),
                 },
                 rotation: 0.0,
-                zoom: 1.0
+                zoom: 1.0,
             },
-            last_update: SystemTime::UNIX_EPOCH
+            last_update: SystemTime::UNIX_EPOCH,
+            game_soundtrack,
         }
     }
 
@@ -248,6 +257,7 @@
         discord: &DiscordChannel,
         global_resources: &GlobalResources,
         constants: &ProjectConstants,
+        audio_subsystem: &mut RaylibAudio,
     ) {
         // Handle updating discord RPC
         if !self.has_updated_discord_rpc {
@@ -265,96 +275,101 @@
             self.has_updated_discord_rpc = true;
         }
 
+        // Ensure the game soundtrack is playing
+        if !audio_subsystem.is_music_playing(&self.game_soundtrack) {
+            debug!("Playing game soundtrack");
+            audio_subsystem.play_music_stream(&mut self.game_soundtrack);
+        } else {
+            audio_subsystem.update_music_stream(&mut self.game_soundtrack);
+        }
+
         // Get a drawing handle
         let mut draw = raylib.begin_drawing(rl_thread);
 
         // Clear the screen
         draw.clear_background(Color::WHITE);
-        
+
         self.draw_world(&mut draw, constants);
 
         self.draw_ui(&mut draw, constants);
     }
 
-    pub fn draw_world(
-        &mut self,
-        draw: &mut RaylibDrawHandle,
-        constants: &ProjectConstants,
-    ) {
+    pub fn draw_world(&mut self, draw: &mut RaylibDrawHandle, constants: &ProjectConstants) {
         // Begin camera mode
         let mut ctx2d = draw.begin_mode2D(self.camera);
 
         // Render the map
+
         self.world_map.render_map(&mut ctx2d, &self.camera, true, self.player.position);
        
         let player_size = (constants.tile_size as f32 * constants.player.start_size * self.player.size) as i32;
 
         ctx2d.draw_rectangle(
-            self.player.position[0] as i32 - player_size / 2, 
+            self.player.position[0] as i32 - player_size / 2,
             self.player.position[1] as i32 * -1 - player_size / 2,
             player_size,
             player_size,
-            Color::LIGHTBLUE
+            Color::LIGHTBLUE,
         );
     }
 
-    pub fn draw_ui(
-        &mut self,
-        draw: &mut RaylibDrawHandle,
-        constants: &ProjectConstants,
-    ) {
-        draw.draw_rectangle(
-            draw.get_screen_width() / 2 - 225, 0, 
-            450, 40,
-            Color::WHITE
-        );
+    pub fn draw_ui(&mut self, draw: &mut RaylibDrawHandle, constants: &ProjectConstants) {
+        draw.draw_rectangle(draw.get_screen_width() / 2 - 225, 0, 450, 40, Color::WHITE);
         draw.draw_text(
-           "Unregistered HyperCam 2",
-           draw.get_screen_width() / 2 - 215, 0, 
-           32, Color::BLACK
+            "Unregistered HyperCam 2",
+            draw.get_screen_width() / 2 - 215,
+            0,
+            32,
+            Color::BLACK,
         );
     }
-        
+
     // Physics
     pub async fn update_physics(
         &mut self,
-        raylib: & raylib::RaylibHandle,
+        raylib: &raylib::RaylibHandle,
         constants: &ProjectConstants,
     ) {
-
         // Get time since last physics update
         let time = SystemTime::now();
-        let elapsed = time.duration_since(self.last_update).expect("Time Appears to Have Moved Backwards!");
+        let elapsed = time
+            .duration_since(self.last_update)
+            .expect("Time Appears to Have Moved Backwards!");
         self.last_update = time;
         let delta_time = elapsed.as_millis() as f32 / 1000.0; // Physics will be scaled by this value
 
         let player = &mut self.player;
 
         // Get input direction components
-        let h_axis = raylib.is_key_down(KeyboardKey::KEY_D) as i8 - raylib.is_key_down(KeyboardKey::KEY_A) as i8;
-        let v_axis = raylib.is_key_down(KeyboardKey::KEY_W) as i8 - raylib.is_key_down(KeyboardKey::KEY_S) as i8;
+        let h_axis = raylib.is_key_down(KeyboardKey::KEY_D) as i8
+            - raylib.is_key_down(KeyboardKey::KEY_A) as i8;
+        let v_axis = raylib.is_key_down(KeyboardKey::KEY_W) as i8
+            - raylib.is_key_down(KeyboardKey::KEY_S) as i8;
         if h_axis != 0 || v_axis != 0 {
             // Normalize input and accelerate in desired direction
             let direction = na::Vector2::new(h_axis as f32, v_axis as f32).normalize();
-            player.velocity += &direction.xy() 
+            player.velocity += &direction.xy()
                 * constants.player.acceleration as f32
-                * constants.tile_size as f32 
+                * constants.tile_size as f32
                 * delta_time;
         }
 
         if player.velocity.magnitude() != 0.0 {
-            player.velocity -= player.velocity.normalize() 
-                * constants.player.deceleration as f32 
-                * constants.tile_size as f32 
+            player.velocity -= player.velocity.normalize()
+                * constants.player.deceleration as f32
+                * constants.tile_size as f32
                 * delta_time;
             if player.velocity.magnitude() < 1.0 {
                 player.velocity.set_magnitude(0.0);
             }
         }
 
-        if ((constants.player.max_velocity * constants.tile_size) as f32) 
-            < player.velocity.magnitude() {
-            player.velocity.set_magnitude((constants.player.max_velocity * constants.tile_size) as f32);
+        if ((constants.player.max_velocity * constants.tile_size) as f32)
+            < player.velocity.magnitude()
+        {
+            player
+                .velocity
+                .set_magnitude((constants.player.max_velocity * constants.tile_size) as f32);
         }
 
         player.position += &player.velocity * delta_time;
@@ -362,18 +377,13 @@
         self.update_camera(raylib);
     }
 
-    pub fn update_camera(
-        &mut self, 
-        raylib: & raylib::RaylibHandle,
-    ) {
+    pub fn update_camera(&mut self, raylib: &raylib::RaylibHandle) {
         self.camera.target = self.player.position.into();
         self.camera.target.y *= -1.0;
         self.camera.offset.x = raylib.get_screen_width() as f32 / 2.0;
         self.camera.offset.y = raylib.get_screen_height() as f32 / 2.0;
     }
 }
-
-
 
\ No newline at end of file