From 1ecab31aff6f573ebb89e410b6a35ab1d3ba55f0 Mon Sep 17 00:00:00 2001 From: Ewpratten Date: Sun, 3 Apr 2022 17:25:18 +0000 Subject: [PATCH] deploy: 614822d464a89f439de8d8dc131444f5c9d2a74d --- rustdoc/game_logic/all.html | 2 +- .../game_logic/model/world_object/index.html | 5 +- .../model/world_object/sidebar-items.js | 2 +- .../world_object/struct.ObjectCollider.html | 4 +- .../world_object/struct.WorldObject.html | 14 +- .../world_object/struct.WorldObjectRef.html | 8 +- .../type.ObjectSpaceObjectCollider.html | 4 + .../type.WorldSpaceObjectCollider.html | 4 + .../model/world_object_package/index.html | 2 +- .../struct.WorldObjectPackage.html | 6 +- .../rendering/utilities/map_render/index.html | 2 +- .../map_render/struct.MapRenderer.html | 8 +- .../scenes/player_interaction/index.html | 2 +- .../struct.PlayableScene.html | 7 +- rustdoc/search-index.js | 2 +- .../src/game_logic/model/world_object.rs.html | 16 +- .../model/world_object_package.rs.html | 40 +++- .../rendering/utilities/map_render.rs.html | 174 +++++++++++++++++- .../scenes/player_interaction.rs.html | 70 ++++--- 19 files changed, 306 insertions(+), 66 deletions(-) create mode 100644 rustdoc/game_logic/model/world_object/type.ObjectSpaceObjectCollider.html create mode 100644 rustdoc/game_logic/model/world_object/type.WorldSpaceObjectCollider.html diff --git a/rustdoc/game_logic/all.html b/rustdoc/game_logic/all.html index b9416518..a0e3ab2f 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/model/world_object/index.html b/rustdoc/game_logic/model/world_object/index.html index e4dd768c..f1004d44 100644 --- a/rustdoc/game_logic/model/world_object/index.html +++ b/rustdoc/game_logic/model/world_object/index.html @@ -1,8 +1,9 @@ game_logic::model::world_object - Rust

Module game_logic::model::world_object[][src]

Structs

+

Module world_object

Module game_logic::model::world_object[][src]

Structs

Defines a collider in object space.

Definition of an object. Only one of these should exist per object, and they will be GPU instanced.

Used to reference an object in the world definition

-
+

Type Definitions

+
\ No newline at end of file diff --git a/rustdoc/game_logic/model/world_object/sidebar-items.js b/rustdoc/game_logic/model/world_object/sidebar-items.js index f67568e5..9c38a3c6 100644 --- a/rustdoc/game_logic/model/world_object/sidebar-items.js +++ b/rustdoc/game_logic/model/world_object/sidebar-items.js @@ -1 +1 @@ -initSidebarItems({"struct":[["ObjectCollider","Defines a collider in object space."],["PossiblyAnimatedTexture",""],["WorldObject","Definition of an object. Only one of these should exist per object, and they will be GPU instanced."],["WorldObjectRef","Used to reference an object in the world definition"]]}); \ No newline at end of file +initSidebarItems({"struct":[["ObjectCollider","Defines a collider in object space."],["PossiblyAnimatedTexture",""],["WorldObject","Definition of an object. Only one of these should exist per object, and they will be GPU instanced."],["WorldObjectRef","Used to reference an object in the world definition"]],"type":[["ObjectSpaceObjectCollider",""],["WorldSpaceObjectCollider",""]]}); \ No newline at end of file diff --git a/rustdoc/game_logic/model/world_object/struct.ObjectCollider.html b/rustdoc/game_logic/model/world_object/struct.ObjectCollider.html index 9309ea8f..9114554d 100644 --- a/rustdoc/game_logic/model/world_object/struct.ObjectCollider.html +++ b/rustdoc/game_logic/model/world_object/struct.ObjectCollider.html @@ -1,13 +1,11 @@ ObjectCollider in game_logic::model::world_object - Rust

Struct game_logic::model::world_object::ObjectCollider[][src]

pub struct ObjectCollider {
+        

Struct ObjectCollider

Struct game_logic::model::world_object::ObjectCollider[][src]

pub struct ObjectCollider {
     pub position: Vector2<f32>,
     pub size: Option<Vector2<f32>>,
-    pub radius: Option<f32>,
 }
Expand description

Defines a collider in object space.

Fields

position: Vector2<f32>

Position, relative to the object’s center (north east is 1,1 south west is -1,-1)

size: Option<Vector2<f32>>

Possible sizing

-
radius: Option<f32>

Possible radius

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

diff --git a/rustdoc/game_logic/model/world_object/struct.WorldObject.html b/rustdoc/game_logic/model/world_object/struct.WorldObject.html index 198817c3..5f0b059e 100644 --- a/rustdoc/game_logic/model/world_object/struct.WorldObject.html +++ b/rustdoc/game_logic/model/world_object/struct.WorldObject.html @@ -1,10 +1,11 @@ WorldObject in game_logic::model::world_object - Rust

Fields

name: String

Object name. Must match the name of the texture

bottom_texture: PossiblyAnimatedTexture

The object’s bottom texture

top_texture: Option<PossiblyAnimatedTexture>

The object’s top texture

-
footprint_radius: Option<f32>

colliders describing the object’s footprint

+
footprint: Vec<ObjectCollider>

colliders describing the object’s footprint

+
visualization_radius: Option<f32>

A “sphere of influence” for the object. This is used for showing under the roof

physics_colliders: Vec<ObjectCollider>

Colliders for physics

temperature: Option<f32>

Temperature

friction: Option<f32>

Friction

-

Trait Implementations

Returns a copy of the value. Read more

+

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. 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

diff --git a/rustdoc/game_logic/model/world_object/struct.WorldObjectRef.html b/rustdoc/game_logic/model/world_object/struct.WorldObjectRef.html index ea28e706..20387d93 100644 --- a/rustdoc/game_logic/model/world_object/struct.WorldObjectRef.html +++ b/rustdoc/game_logic/model/world_object/struct.WorldObjectRef.html @@ -1,6 +1,6 @@ WorldObjectRef in game_logic::model::world_object - Rust

Struct game_logic::model::world_object::WorldObjectRef[][src]

pub struct WorldObjectRef {
+        

Struct WorldObjectRef

Struct game_logic::model::world_object::WorldObjectRef[][src]

pub struct WorldObjectRef {
     pub kind: String,
     pub name: String,
     pub position: Vector2<f32>,
@@ -10,10 +10,10 @@
 
name: String

Object name

position: Vector2<f32>

Object position (tile-space not pixel-space). 1,1 being up and to the right

rotation_radians: f32

Object rotation, positive is clockwise

-

Trait Implementations

Returns a copy of the value. Read more

+

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Deserialize this value from the given Serde deserializer. Read more

+

Formats the value using the given formatter. Read more

+

Deserialize this value from the given Serde deserializer. 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

diff --git a/rustdoc/game_logic/model/world_object/type.ObjectSpaceObjectCollider.html b/rustdoc/game_logic/model/world_object/type.ObjectSpaceObjectCollider.html new file mode 100644 index 00000000..2de13aab --- /dev/null +++ b/rustdoc/game_logic/model/world_object/type.ObjectSpaceObjectCollider.html @@ -0,0 +1,4 @@ +ObjectSpaceObjectCollider in game_logic::model::world_object - Rust +

Type Definition game_logic::model::world_object::ObjectSpaceObjectCollider[][src]

pub type ObjectSpaceObjectCollider = ObjectCollider;
+ \ No newline at end of file diff --git a/rustdoc/game_logic/model/world_object/type.WorldSpaceObjectCollider.html b/rustdoc/game_logic/model/world_object/type.WorldSpaceObjectCollider.html new file mode 100644 index 00000000..ffdf5785 --- /dev/null +++ b/rustdoc/game_logic/model/world_object/type.WorldSpaceObjectCollider.html @@ -0,0 +1,4 @@ +WorldSpaceObjectCollider in game_logic::model::world_object - Rust +

Type Definition game_logic::model::world_object::WorldSpaceObjectCollider[][src]

pub type WorldSpaceObjectCollider = ObjectCollider;
+ \ No newline at end of file diff --git a/rustdoc/game_logic/model/world_object_package/index.html b/rustdoc/game_logic/model/world_object_package/index.html index 997d299f..4e641241 100644 --- a/rustdoc/game_logic/model/world_object_package/index.html +++ b/rustdoc/game_logic/model/world_object_package/index.html @@ -1,6 +1,6 @@ game_logic::model::world_object_package - Rust

Module game_logic::model::world_object_package[][src]

Structs

+

Module world_object_package

diff --git a/rustdoc/game_logic/model/world_object_package/struct.WorldObjectPackage.html b/rustdoc/game_logic/model/world_object_package/struct.WorldObjectPackage.html index fff6ef80..8f6a8a10 100644 --- a/rustdoc/game_logic/model/world_object_package/struct.WorldObjectPackage.html +++ b/rustdoc/game_logic/model/world_object_package/struct.WorldObjectPackage.html @@ -1,12 +1,13 @@ WorldObjectPackage in game_logic::model::world_object_package - Rust

Struct game_logic::model::world_object_package::WorldObjectPackage[][src]

pub struct WorldObjectPackage {
+        

Struct WorldObjectPackage

Struct game_logic::model::world_object_package::WorldObjectPackage[][src]

pub struct WorldObjectPackage {
     pub object_definitions: HashMap<String, WorldObject>,
     pub object_references: Vec<WorldObjectRef>,
     pub bottom_static_textures: HashMap<String, Texture2D>,
     pub top_static_textures: HashMap<String, Texture2D>,
     pub bottom_animated_textures: HashMap<String, AnimatedTexture>,
     pub top_animated_textures: HashMap<String, AnimatedTexture>,
+    pub world_space_colliders: Vec<ObjectCollider>,
 }
Expand description

A simply interface for the madness

Fields

object_definitions: HashMap<String, WorldObject>

The object definitions

object_references: Vec<WorldObjectRef>

The object references

@@ -14,7 +15,8 @@
top_static_textures: HashMap<String, Texture2D>

Top static textures

bottom_animated_textures: HashMap<String, AnimatedTexture>

Bottom animated textures

top_animated_textures: HashMap<String, AnimatedTexture>

Top animated textures

-

Implementations

Trait Implementations

Formats the value using the given formatter. Read more

+
world_space_colliders: Vec<ObjectCollider>

A list of colliders in the world. We pre-solve these to make comput happy :)

+

Implementations

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

diff --git a/rustdoc/game_logic/rendering/utilities/map_render/index.html b/rustdoc/game_logic/rendering/utilities/map_render/index.html index bd602123..acca4ab3 100644 --- a/rustdoc/game_logic/rendering/utilities/map_render/index.html +++ b/rustdoc/game_logic/rendering/utilities/map_render/index.html @@ -1,6 +1,6 @@ game_logic::rendering::utilities::map_render - Rust

Module game_logic::rendering::utilities::map_render[][src]

Structs

+

Module map_render

Module game_logic::rendering::utilities::map_render[][src]

Structs

Enums

Possible errors generated by the map loading process

diff --git a/rustdoc/game_logic/rendering/utilities/map_render/struct.MapRenderer.html b/rustdoc/game_logic/rendering/utilities/map_render/struct.MapRenderer.html index e4891875..2537132d 100644 --- a/rustdoc/game_logic/rendering/utilities/map_render/struct.MapRenderer.html +++ b/rustdoc/game_logic/rendering/utilities/map_render/struct.MapRenderer.html @@ -1,11 +1,13 @@ MapRenderer in game_logic::rendering::utilities::map_render - Rust

Struct game_logic::rendering::utilities::map_render::MapRenderer[][src]

pub struct MapRenderer {
+        

Struct MapRenderer

Struct game_logic::rendering::utilities::map_render::MapRenderer[][src]

pub struct MapRenderer {
     map: Map,
     tile_textures: HashMap<PathBuf, Texture2D>,
     world_objects: WorldObjectPackage,
-}

Fields

map: Maptile_textures: HashMap<PathBuf, Texture2D>world_objects: WorldObjectPackage

Implementations

Construct a new MapRenderer.

-

Trait Implementations

Formats the value using the given formatter. Read more

+}

Fields

map: Maptile_textures: HashMap<PathBuf, Texture2D>world_objects: WorldObjectPackage

Implementations

Construct a new MapRenderer.

+

Gets the map size

+

Get the list of world colliders

+

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

diff --git a/rustdoc/game_logic/scenes/player_interaction/index.html b/rustdoc/game_logic/scenes/player_interaction/index.html index 56281756..79671d60 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 a2a2da1d..287f7b58 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 {
+        

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,
     game_soundtrack: Music,
-}

Fields

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

Implementations

Construct a new PlayableScene

+ world_colliders: Vec<ObjectCollider>, +}

Fields

has_updated_discord_rpc: boolplayer: Playerworld_map: MapRenderercamera: Camera2Dlast_update: SystemTimegame_soundtrack: Musicworld_colliders: Vec<ObjectCollider>

Implementations

Construct a new PlayableScene

Handler for each frame

-

Trait Implementations

Formats the value using the given formatter. Read more

+

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

diff --git a/rustdoc/search-index.js b/rustdoc/search-index.js index 0c8dd8b6..195a1cce 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,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,12,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,12,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,12,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","button_click_sound","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","volume","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","volume_percentage","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,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,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,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,[[]],[[]],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]],[[["resourceloaderror",4]]],[[]],[[["internaljsonloaderror",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,[[]],[[]],[[]],[[]],[[]],[[]],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]]],["persistentgamesettings",3],["gamesavestate",3]]],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]]],[[["resourceloaderror",4]]],[[["internaljsonloaderror",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]]]],["option",4,[["f32",15]]]],[[["vector2",6,[["f32",15]]]],["option",4,[["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],["raylibaudio",3],["persistentgamesettings",3],["gamesavestate",3]]],null,[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3],["persistentgamesettings",3],["gamesavestate",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],["persistentgamesettings",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3],["raylibaudio",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3],["raylibaudio",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3],["raylibaudio",3],["persistentgamesettings",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,[[]],[[]],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"]]}\ +"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,12,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,6,3,3,3,6,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,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,12,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,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,12,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,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,12,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,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","button_click_sound","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","ObjectSpaceObjectCollider","PossiblyAnimatedTexture","WorldObject","WorldObjectRef","WorldSpaceObjectCollider","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","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","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","visualization_radius","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","world_space_colliders","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","volume","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_map_size","get_or_try_insert_tileset_with","get_tileset","get_world_colliders","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","volume_percentage","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_colliders","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 …","Object rotation, positive is clockwise","Possible sizing","Temperature","","","","","","","","","","","","","The object’s top texture","","","","","","","","","","","","","A “sphere of influence” for the object. This is used …","","","A simply interface for the madness","","","","","","Bottom animated textures","Bottom static textures","","","","","","","","","","","","","","","The object definitions","The object references","","","","","","","Top animated textures","Top static textures","","","","","","","A list of colliders in the world. We pre-solve these to …","","","","","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","","","","","","","","","","","","","","","","","","","","","Gets the map size","","Load the tileset. First attempts to pull from an in-RAM …","Get the list of world colliders","","","","","","","","","","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,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,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,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,25,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,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,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,57,56,56,57,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,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,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,[[]],[[]],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,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,[[]],[[]],[[]],[[]],[[],["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,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,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,[[]],[[]],[[]],[[]],[[]],[[]],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]]],["persistentgamesettings",3],["gamesavestate",3]]],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,[[]],[[["resourceloaderror",4]]],[[["error",3]]],[[["internaljsonloaderror",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]]],[[]],[[]],[[]],[[]],[[]],[[],["vector2",6,[["f32",15]]]],[[["resourcepathbuf",6]],["result",4,[["arc",3,[["tileset",3]]]]]],[[],["option",4,[["arc",3,[["tileset",3]]]]]],[[],["vec",3,[["objectcollider",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]]]],["option",4,[["f32",15]]]],[[["vector2",6,[["f32",15]]]],["option",4,[["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],["raylibaudio",3],["persistentgamesettings",3],["gamesavestate",3]]],null,[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3],["persistentgamesettings",3],["gamesavestate",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],["persistentgamesettings",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3],["raylibaudio",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3],["raylibaudio",3]]],[[["raylibhandle",3],["raylibthread",3],["sender",3],["globalresources",3],["projectconstants",3],["raylibaudio",3],["persistentgamesettings",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,[[]],[[]],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,[[]],[[]],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/model/world_object.rs.html b/rustdoc/src/game_logic/model/world_object.rs.html index 9f27d318..10be5724 100644 --- a/rustdoc/src/game_logic/model/world_object.rs.html +++ b/rustdoc/src/game_logic/model/world_object.rs.html @@ -64,6 +64,9 @@ 62 63 64 +65 +66 +67
use std::collections::HashMap;
 
 use nalgebra as na;
@@ -89,10 +92,12 @@
     pub position: na::Vector2<f32>,
     /// Possible sizing
     pub size: Option<na::Vector2<f32>>,
-    /// Possible radius
-    pub radius: Option<f32>,
 }
 
+// Handy aliases
+pub type ObjectSpaceObjectCollider = ObjectCollider;
+pub type WorldSpaceObjectCollider = ObjectCollider;
+
 /// Definition of an object. Only one of these should exist *per object*, and they will be GPU instanced.
 #[derive(Debug, Clone, Deserialize)]
 pub struct WorldObject {
@@ -103,10 +108,11 @@
     /// The object's top texture
     pub top_texture: Option<PossiblyAnimatedTexture>,
     /// colliders describing the object's footprint
-    // pub footprint: Vec<ObjectCollider>,
-    pub footprint_radius: Option<f32>,
+    pub footprint: Vec<ObjectSpaceObjectCollider>,
+    /// A "sphere of influence" for the object. This is used for showing under the roof
+    pub visualization_radius: Option<f32>,
     /// Colliders for physics
-    pub physics_colliders: Vec<ObjectCollider>,
+    pub physics_colliders: Vec<ObjectSpaceObjectCollider>,
     /// Temperature
     pub temperature: Option<f32>,
     /// Friction
diff --git a/rustdoc/src/game_logic/model/world_object_package.rs.html b/rustdoc/src/game_logic/model/world_object_package.rs.html
index ec5362b5..c4c64077 100644
--- a/rustdoc/src/game_logic/model/world_object_package.rs.html
+++ b/rustdoc/src/game_logic/model/world_object_package.rs.html
@@ -111,6 +111,25 @@
 109
 110
 111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
 
use std::collections::HashMap;
 
 use raylib::{texture::Texture2D, RaylibHandle, RaylibThread};
@@ -120,7 +139,7 @@
     rendering::utilities::anim_texture::AnimatedTexture,
 };
 
-use super::world_object::{WorldObject, WorldObjectRef};
+use super::world_object::{WorldObject, WorldObjectRef, WorldSpaceObjectCollider};
 
 #[derive(Debug, thiserror::Error)]
 pub enum WorldObjectPackageLoadError {
@@ -145,6 +164,8 @@
     pub bottom_animated_textures: HashMap<String, AnimatedTexture>,
     /// Top animated textures
     pub top_animated_textures: HashMap<String, AnimatedTexture>,
+    /// A list of colliders in the world. We pre-solve these to make comput happy :)
+    pub world_space_colliders: Vec<WorldSpaceObjectCollider>,
 }
 
 impl WorldObjectPackage {
@@ -162,6 +183,7 @@
         let mut top_static_textures = HashMap::new();
         let mut bottom_animated_textures = HashMap::new();
         let mut top_animated_textures = HashMap::new();
+        let mut world_space_colliders: Vec<WorldSpaceObjectCollider> = Vec::new();
         for reference in &object_references {
             // If this is a new object, load it.
             let object_key = format!("{}:{}", reference.kind, reference.name);
@@ -207,6 +229,21 @@
                     }
                 }
 
+                // Keep track of all the colliders in the world
+                for collider in &object_definition.physics_colliders {
+                    // Get the object's position
+                    let object_position = reference.position;
+
+                    // Convert the collider's position to world space
+                    let world_space_collider = WorldSpaceObjectCollider {
+                        position: object_position + collider.position,
+                        size: collider.size,
+                    };
+
+                    // Add the collider to the list
+                    world_space_colliders.push(world_space_collider);
+                }
+
                 // Store the object definition
                 object_definitions.insert(object_key.to_string(), object_definition);
             }
@@ -219,6 +256,7 @@
             top_static_textures,
             bottom_animated_textures,
             top_animated_textures,
+            world_space_colliders,
         })
     }
 }
diff --git a/rustdoc/src/game_logic/rendering/utilities/map_render.rs.html b/rustdoc/src/game_logic/rendering/utilities/map_render.rs.html
index af740ac6..082944d6 100644
--- a/rustdoc/src/game_logic/rendering/utilities/map_render.rs.html
+++ b/rustdoc/src/game_logic/rendering/utilities/map_render.rs.html
@@ -463,11 +463,96 @@
 461
 462
 463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
 
use std::{collections::HashMap, path::PathBuf, sync::Arc};
 
 use crate::{
     asset_manager::{load_texture_from_internal_data, InternalData},
-    model::world_object_package::WorldObjectPackage,
+    model::{world_object_package::WorldObjectPackage, world_object::WorldSpaceObjectCollider},
 };
 use nalgebra as na;
 use raylib::{
@@ -596,6 +681,14 @@
         })
     }
 
+    /// Gets the map size
+    pub fn get_map_size(&self) -> na::Vector2<f32> {
+        na::Vector2::new(
+            self.map.width as f32 * 128.0,
+            self.map.height as f32 * 128.0,
+        )
+    }
+
     pub fn sample_friction_at(&self, world_position: na::Vector2<f32>) -> Option<f32> {
         // Convert to a tile position
         let tile_position = na::Vector2::new(
@@ -841,7 +934,7 @@
                                                 // We need to detect if the player is in the footprint of the object
                                                 let mut tint = Color::WHITE;
                                                 if let Some(footprint_radius) =
-                                                    obj_def.footprint_radius
+                                                    obj_def.visualization_radius
                                                 {
                                                     let player_dist_to_object =
                                                         (obj_ref.position - player_position).norm();
@@ -925,6 +1018,83 @@
             }
         }
     }
+
+    /// Get the list of world colliders
+    pub fn get_world_colliders(&self) -> Vec<WorldSpaceObjectCollider> {
+        self.world_objects.world_space_colliders.clone()
+    }
+
+    // /// Used to modify the player's velocity based on the effects of the world
+    // pub fn effect_velocity_with_collisions(
+    //     &self,
+    //     player_position: na::Vector2<f32>,
+    //     player_velocity: na::Vector2<f32>,
+    // ) -> na::Vector2<f32> {
+    //     // If the player is not moving, we don't need to do anything
+    //     if player_velocity.norm() == 0.0 {
+    //         return player_velocity;
+    //     }
+
+    //     // Get the velocity unit vector
+    //     let player_velocity_unit_vector = player_velocity.normalize();
+
+    //     // Find the position 1 pixel infront of the player
+    //     let player_position_1_pixel_infront = player_position + player_velocity_unit_vector;
+    //     let next_player_position = player_position + player_velocity;
+
+    //     // Check if this is in the collision zone of any objects
+    //     for obj_ref in &self.world_objects.object_references {
+    //         // Filter out anything more than 1000 pixels away
+    //         if (obj_ref.position - player_position).norm() > 1000.0 {
+    //             continue;
+    //         }
+
+    //         // Get the object definition
+    //         let object_key = format!("{}:{}", obj_ref.kind, obj_ref.name);
+    //         let obj_def = self
+    //             .world_objects
+    //             .object_definitions
+    //             .get(&object_key)
+    //             .unwrap();
+
+    //         // Check if the player is about to be in a collision zone
+    //         for collider in &obj_def.physics_colliders {
+    //             // Handle a radius collider vs a size collider
+    //             if let Some(radius) = collider.radius {
+    //                 // Check if we are about to collide with the circle
+    //                 if (next_player_position - obj_ref.position).norm() < radius {
+    //                     // Get the angle from the player to the center of the collider
+    //                     let angle_to_center =
+    //                         (obj_ref.position - player_position).angle(&na::Vector2::new(0.0, 0.0));
+    //                     if angle_to_center.abs() <= std::f32::consts::FRAC_PI_2 {
+    //                         // Apply the inverse of the velocity to the player
+    //                         return na::Vector2::zeros();
+    //                     }
+    //                 }
+    //             } else if let Some(size) = collider.size {
+    //                 // TODO: make this work for regular and rotated objects
+    //             }
+    //         }
+    //     }
+
+    //     // Check if the player is about to leave the map
+    //     let mut player_velocity = player_velocity;
+    //     if next_player_position.x < 0.0 {
+    //         player_velocity.x = 0.0;
+    //     } else if next_player_position.x > self.map.width as f32 * 128.0 {
+    //         player_velocity.x = 0.0;
+    //     }
+    //     if next_player_position.y > 0.0 {
+    //         player_velocity.y = 0.0;
+    //     } else if next_player_position.y < self.map.height as f32 * -128.0 {
+    //         player_velocity.y = 0.0;
+    //     }
+
+    //     // If we got here, the player is not in a collision zone
+    //     player_velocity
+    // }
+
+
 }
 
diff --git a/rustdoc/src/game_logic/scenes/player_interaction.rs.html b/rustdoc/src/game_logic/scenes/player_interaction.rs.html index 902fed6e..75711024 100644 --- a/rustdoc/src/game_logic/scenes/player_interaction.rs.html +++ b/rustdoc/src/game_logic/scenes/player_interaction.rs.html @@ -242,6 +242,12 @@ 240 241 242 +243 +244 +245 +246 +247 +248
//! This scene encompasses all of the game where the player can walk around.
 
 use nalgebra as na;
@@ -252,7 +258,7 @@
     asset_manager::{load_music_from_internal_data, load_sound_from_internal_data},
     discord::{DiscordChannel, DiscordRpcSignal},
     global_resource_package::GlobalResources,
-    model::player::Player,
+    model::{player::Player, world_object::WorldSpaceObjectCollider},
     project_constants::ProjectConstants,
     rendering::utilities::{anim_texture::AnimatedTexture, map_render::MapRenderer},
 };
@@ -265,6 +271,7 @@
     camera: raylib::camera::Camera2D,
     last_update: SystemTime,
     game_soundtrack: Music,
+    world_colliders: Vec<WorldSpaceObjectCollider>,
 }
 
 impl PlayableScene {
@@ -281,6 +288,7 @@
             thread,
         )
         .unwrap();
+        let world_colliders = map_renderer.get_world_colliders();
 
         // Load the game music
         let game_soundtrack =
@@ -288,22 +296,20 @@
 
         Self {
             has_updated_discord_rpc: false,
-            player: Player::new(na::Vector2::new(10.0 * constants.tile_size as f32, -10.0 * constants.tile_size as f32)),
+            player: Player::new(na::Vector2::new(
+                10.0 * constants.tile_size as f32,
+                -10.0 * constants.tile_size as f32,
+            )),
             world_map: map_renderer,
             camera: raylib::camera::Camera2D {
-                target: raylib::math::Vector2 { 
-                    x: 0.0, 
-                    y: 0.0,
-                },
-                offset: raylib::math::Vector2 { 
-                    x: 0.0,
-                    y: 0.0
-                },
+                target: raylib::math::Vector2 { x: 0.0, y: 0.0 },
+                offset: raylib::math::Vector2 { x: 0.0, y: 0.0 },
                 rotation: 0.0,
                 zoom: 1.0,
             },
             last_update: SystemTime::UNIX_EPOCH,
             game_soundtrack,
+            world_colliders,
         }
     }
 
@@ -360,10 +366,6 @@
         self.world_map
             .render_map(&mut ctx2d, &self.camera, true, self.player.position);
 
-        // NOTE: This is how to check friction and temperature
-        let current_friction = self.world_map.sample_friction_at(self.player.position);
-        let current_temperature = self.world_map.sample_temperature_at(self.player.position);
-
         let player_size =
             (constants.tile_size as f32 * constants.player.start_size * self.player.size) as i32;
 
@@ -403,6 +405,12 @@
 
         let player = &mut self.player;
 
+        // NOTE: This is how to check friction and temperature
+        let current_friction = self.world_map.sample_friction_at(player.position);
+        let current_temperature = self.world_map.sample_temperature_at(player.position);
+        let map_size = self.world_map.get_map_size();
+        // TODO: You can access the colission list with: self.world_colliders
+
         // 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;
@@ -435,38 +443,42 @@
                 .set_magnitude((constants.player.max_velocity * constants.tile_size) as f32);
         }
 
-        player.position += &player.velocity * delta_time;
+        let velocity_modifier = &player.velocity * delta_time;
+
+        player.position += velocity_modifier;
 
         self.update_camera(raylib);
     }
 
     // Update the camera
-    pub fn update_camera(
-        &mut self, 
-        raylib: & raylib::RaylibHandle,
-    ) {
-        
+    pub fn update_camera(&mut self, raylib: &raylib::RaylibHandle) {
         // Bounding box
         let bbox = na::Vector2::new(0.2, 0.2);
 
         // Get bounding box dimensions on the screen
-        let bbox_screen_min: raylib::math::Vector2 = (((na::Vector2::new(1.0, 1.0) - bbox) * 0.5).component_mul(
-            &na::Vector2::new(raylib.get_screen_width() as f32, raylib.get_screen_height() as f32)
-        )).into();
-        let bbox_screen_max: raylib::math::Vector2 = (((na::Vector2::new(1.0, 1.0) + bbox) * 0.5).component_mul(
-            &na::Vector2::new(raylib.get_screen_width() as f32, raylib.get_screen_height() as f32)
-        )).into();
+        let bbox_screen_min: raylib::math::Vector2 = (((na::Vector2::new(1.0, 1.0) - bbox) * 0.5)
+            .component_mul(&na::Vector2::new(
+                raylib.get_screen_width() as f32,
+                raylib.get_screen_height() as f32,
+            )))
+        .into();
+        let bbox_screen_max: raylib::math::Vector2 = (((na::Vector2::new(1.0, 1.0) + bbox) * 0.5)
+            .component_mul(&na::Vector2::new(
+                raylib.get_screen_width() as f32,
+                raylib.get_screen_height() as f32,
+            )))
+        .into();
 
         // Get bounding box in world space
         let mut bbox_world_min = raylib.get_screen_to_world2D(bbox_screen_min, self.camera);
         let mut bbox_world_max = raylib.get_screen_to_world2D(bbox_screen_max, self.camera);
 
-        // Invert y 
+        // Invert y
         bbox_world_min.y *= -1.0;
         bbox_world_max.y *= -1.0;
 
         self.camera.offset = bbox_screen_min;
-        
+
         if self.player.position.x < bbox_world_min.x {
             self.camera.target.x = self.player.position.x;
         }
@@ -478,7 +490,7 @@
         if self.player.position.x > bbox_world_max.x {
             self.camera.target.x = bbox_world_min.x + (self.player.position.x - bbox_world_max.x);
         }
-        
+
         if self.player.position.y < bbox_world_max.y {
             self.camera.target.y = bbox_world_max.y - (self.player.position.y + bbox_world_min.y);
         }