From 7452803ba9ccf7521a7895c3586e694202083137 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 25 Apr 2021 09:49:16 -0400 Subject: [PATCH 01/24] Create a base screen for the shop --- src/gamecore.rs | 1 + src/logic/mod.rs | 3 +- src/logic/shopscreen.rs | 130 ++++++++++++++++++++++++++++++++++++++++ src/main.rs | 9 ++- 4 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 src/logic/shopscreen.rs diff --git a/src/gamecore.rs b/src/gamecore.rs index 19b9592..fcbe880 100644 --- a/src/gamecore.rs +++ b/src/gamecore.rs @@ -25,6 +25,7 @@ pub enum GameState { GameQuit, InGame, GameEnd, + InShop } impl fmt::Display for GameState { diff --git a/src/logic/mod.rs b/src/logic/mod.rs index 362eee2..19c7044 100644 --- a/src/logic/mod.rs +++ b/src/logic/mod.rs @@ -3,4 +3,5 @@ pub mod loadingscreen; pub mod mainmenu; pub mod pausemenu; pub mod ingame; -pub mod gameend; \ No newline at end of file +pub mod gameend; +pub mod shopscreen; \ No newline at end of file diff --git a/src/logic/shopscreen.rs b/src/logic/shopscreen.rs new file mode 100644 index 0000000..3c1db0a --- /dev/null +++ b/src/logic/shopscreen.rs @@ -0,0 +1,130 @@ +use raylib::prelude::*; + +use crate::{ + gamecore::{GameCore, GameState}, + lib::wrappers::audio::player::AudioPlayer, +}; + +use super::screen::Screen; + +const SCREEN_PANEL_SIZE: Vector2 = Vector2 { x: 300.0, y: 380.0 }; + +pub struct ShopScreen {} + +impl ShopScreen { + pub fn new() -> Self { + Self {} + } +} + +impl Screen for ShopScreen { + fn render( + &mut self, + draw_handle: &mut RaylibDrawHandle, + _thread: &RaylibThread, + audio_system: &mut AudioPlayer, + game_core: &mut GameCore, + ) -> Option { + let mouse_position = draw_handle.get_mouse_position(); + draw_handle.clear_background(Color::GRAY); + // TODO: Maybe we can stick some art here? + + // If escape is pressed again, return to the previous render state + if draw_handle.is_key_pressed(KeyboardKey::KEY_ESCAPE) { + return Some(game_core.last_state); + } + + // Window dimensions + let win_height = draw_handle.get_screen_height(); + let win_width = draw_handle.get_screen_width(); + + // Render the backing to the menu itself + draw_handle.draw_rectangle( + (win_width / 2) - ((SCREEN_PANEL_SIZE.x as i32 + 6) / 2), + (win_height / 2) - ((SCREEN_PANEL_SIZE.y as i32 + 6) / 2), + SCREEN_PANEL_SIZE.x as i32 + 6, + SCREEN_PANEL_SIZE.y as i32 + 6, + Color::BLACK, + ); + draw_handle.draw_rectangle( + (win_width / 2) - (SCREEN_PANEL_SIZE.x as i32 / 2), + (win_height / 2) - (SCREEN_PANEL_SIZE.y as i32 / 2), + SCREEN_PANEL_SIZE.x as i32, + SCREEN_PANEL_SIZE.y as i32, + Color::WHITE, + ); + + // Render heading text + draw_handle.draw_text( + "SHOP", + (win_width / 2) - 80, + (win_height / 2) - (SCREEN_PANEL_SIZE.y as i32 / 2) + 10, + 40, + Color::BLACK, + ); + + + // Close and quit buttons + let bottom_left_button_dimensions = Rectangle { + x: (win_width as f32 / 2.0) - (SCREEN_PANEL_SIZE.x / 2.0) + 5.0, + y: (win_height as f32 / 2.0) + (SCREEN_PANEL_SIZE.y / 2.0) - 50.0, + width: (SCREEN_PANEL_SIZE.x / 2.0) - 15.0, + height: 40.0, + }; + let bottom_right_button_dimensions = Rectangle { + x: (win_width as f32 / 2.0) + 5.0, + y: bottom_left_button_dimensions.y, + width: bottom_left_button_dimensions.width, + height: bottom_left_button_dimensions.height, + }; + + // Check if the mouse is over either button + let mouse_over_bottom_left_button = + bottom_left_button_dimensions.check_collision_point_rec(mouse_position); + let mouse_over_bottom_right_button = + bottom_right_button_dimensions.check_collision_point_rec(mouse_position); + + // Render buttons + draw_handle.draw_rectangle_lines_ex( + bottom_left_button_dimensions, + 3, + match mouse_over_bottom_left_button { + true => Color::GRAY, + false => Color::BLACK, + }, + ); + draw_handle.draw_text( + "Quit", + bottom_left_button_dimensions.x as i32 + 15, + bottom_left_button_dimensions.y as i32 + 5, + 30, + Color::BLACK, + ); + draw_handle.draw_rectangle_lines_ex( + bottom_right_button_dimensions, + 3, + match mouse_over_bottom_right_button { + true => Color::GRAY, + false => Color::BLACK, + }, + ); + draw_handle.draw_text( + "Close", + bottom_right_button_dimensions.x as i32 + 15, + bottom_right_button_dimensions.y as i32 + 5, + 30, + Color::BLACK, + ); + + // Handle click actions on the buttons + if draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) { + if mouse_over_bottom_left_button { + return Some(GameState::GameQuit); + } else if mouse_over_bottom_right_button { + return Some(game_core.last_state); + } + } + + return None; + } +} diff --git a/src/main.rs b/src/main.rs index aa48d4a..a98eed6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,7 +11,7 @@ mod items; use gamecore::{GameCore, GameProgress, GameState}; use lib::{utils::profiler::GameProfiler, wrappers::audio::player::AudioPlayer}; use log::info; -use logic::{gameend::GameEndScreen, ingame::InGameScreen, loadingscreen::LoadingScreen, mainmenu::MainMenuScreen, pausemenu::PauseMenuScreen, screen::Screen}; +use logic::{gameend::GameEndScreen, ingame::InGameScreen, loadingscreen::LoadingScreen, mainmenu::MainMenuScreen, pausemenu::PauseMenuScreen, screen::Screen, shopscreen::ShopScreen}; use raylib::prelude::*; use world::{World, load_world_colliders}; @@ -63,6 +63,7 @@ fn main() { let mut pause_menu_screen = PauseMenuScreen::new(); let mut ingame_screen = InGameScreen::new(); let mut game_end_screen = GameEndScreen::new(); + let mut shop_screen = ShopScreen::new(); // Main rendering loop while !raylib.window_should_close() { @@ -101,6 +102,12 @@ fn main() { &mut audio_system, &mut game_core, ), + GameState::InShop => shop_screen.render( + &mut draw_handle, + &raylib_thread, + &mut audio_system, + &mut game_core, + ), }; // If needed, update the global state From c4dd17f25da39ab56341ab21f4965e4532c843eb Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 25 Apr 2021 09:52:15 -0400 Subject: [PATCH 02/24] Add airbag item data Co-authored-by: wm-c --- src/items.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/items.rs b/src/items.rs index 547477e..8d46661 100644 --- a/src/items.rs +++ b/src/items.rs @@ -22,7 +22,27 @@ impl StunGun { } #[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] -pub struct AirBag; +pub struct AirBag{ + extra_oxygen: u32, +} + +impl AirBag { + pub fn lvl1() -> Self { + Self { + extra_oxygen: 15, + } + } + pub fn lvl2() -> Self { + Self { + extra_oxygen: 30, + } + } + pub fn lvl3() -> Self { + Self { + extra_oxygen: 45, + } + } +} #[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] pub struct Flashlight { From 73ac4d25a9944211b5afcd926d798e0e0dfda2f6 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 25 Apr 2021 09:53:24 -0400 Subject: [PATCH 03/24] lvl3 stun gun Co-authored-by: wm-c --- src/items.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/items.rs b/src/items.rs index 8d46661..fe5f47e 100644 --- a/src/items.rs +++ b/src/items.rs @@ -19,6 +19,12 @@ impl StunGun { duration: 1.25, } } + pub fn lvl3() -> Self { + Self { + range: 80.0, + duration: 1.0, + } + } } #[derive(Debug, PartialEq, Clone, Serialize, Deserialize)] From 6c288e91787412918a1fffbdd8ce07730f49eca4 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 25 Apr 2021 09:53:56 -0400 Subject: [PATCH 04/24] Add flashlight Co-authored-by: wm-c --- src/items.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/items.rs b/src/items.rs index fe5f47e..1b5e155 100644 --- a/src/items.rs +++ b/src/items.rs @@ -55,10 +55,20 @@ pub struct Flashlight { pub radius: f32 } -impl Flashlight { +impl Flashlight{ pub fn lvl1() -> Self { Self { - radius: 0.25 + radius: 0.25, + } + } + pub fn lvl2() -> Self { + Self { + radius: 0.5, + } + } + pub fn lvl3() -> Self { + Self { + radius: 1.0, } } } From a68d3e8e709b63bf339f568ea45c135f4019b67a Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 25 Apr 2021 09:54:23 -0400 Subject: [PATCH 05/24] lvl3 flippers Co-authored-by: wm-c --- src/items.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/items.rs b/src/items.rs index 1b5e155..e52b92c 100644 --- a/src/items.rs +++ b/src/items.rs @@ -89,4 +89,9 @@ impl Flippers { speed_increase: 1.5 } } + pub fn lvl3() -> Self { + Self { + speed_increase: 1.8 + } + } } From 2a24d45ccef5ee97ab57cdf76538a98f403d5354 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 25 Apr 2021 09:58:43 -0400 Subject: [PATCH 06/24] Pull in shop logic Co-authored-by: wm-c --- src/logic/shopscreen.rs | 187 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 184 insertions(+), 3 deletions(-) diff --git a/src/logic/shopscreen.rs b/src/logic/shopscreen.rs index 3c1db0a..b57c9bf 100644 --- a/src/logic/shopscreen.rs +++ b/src/logic/shopscreen.rs @@ -9,11 +9,62 @@ use super::screen::Screen; const SCREEN_PANEL_SIZE: Vector2 = Vector2 { x: 300.0, y: 380.0 }; -pub struct ShopScreen {} +pub struct Item { + x_pose: i32, + y_pose: i32, + width: i32, + height: i32, + cost: u8, + level: u8, + name: String, +} + +#[derive(Debug, Default)] +pub struct ShopScreen { + shop_items: Vec, +} impl ShopScreen { pub fn new() -> Self { - Self {} + Self { + ..Default::default() + } + } + + // Creates all the items + pub fn create_items(&mut self, screen_dimension: Vector2) { + // gets every item.. hacky + let items = ShopItems::get_inital_items(); + + // sets sizes any random number is just a number I think looks good + let screen_width = screen_dimension.x as f32; + let screen_height = screen_dimension.y as f32; + + let box_height = screen_height * 0.15; + let box_width = screen_width * 0.1; + + let start_width = screen_width - (box_width * 4.0) - 40.0; + let draw_height = screen_height - 20.0 - box_height; + + let mut item_vec = Vec::new(); + + for box_num in 0..4 { + let x_pose = start_width + box_width * box_num as f32; + + // adds an item struct to the item list + item_vec.push(Item { + x_pose: ((x_pose + (5 * box_num) as f32) as i32), + y_pose: (draw_height as i32), + width: (box_width as i32), + height: (box_height as i32), + // Crazy hacky but this gets the data from the enum + cost: (ShopItems::get_cost(&items.get(box_num).unwrap())), + level: (ShopItems::get_level(&items.get(box_num).unwrap())), + name: (ShopItems::get_name(&items.get(box_num).unwrap())), + }); + } + + self.shop_items = item_vec; } } @@ -63,7 +114,6 @@ impl Screen for ShopScreen { Color::BLACK, ); - // Close and quit buttons let bottom_left_button_dimensions = Rectangle { x: (win_width as f32 / 2.0) - (SCREEN_PANEL_SIZE.x / 2.0) + 5.0, @@ -128,3 +178,134 @@ impl Screen for ShopScreen { return None; } } +pub fn render_shop( + draw_handle: &mut RaylibDrawHandle, + game_core: &mut GameCore, + inGameScreen: &mut InGameScreen, +) { + // Pressing F exits from buying + if draw_handle.is_key_pressed(KeyboardKey::KEY_F) { + inGameScreen.current_state = InGameState::SWIMMING; + } + + let mouse_position = draw_handle.get_mouse_position(); + + draw_handle.draw_text( + &format!("Coins: {}", game_core.player.coins), + 15, + 15, + 30, + Color::WHITE, + ); + + // Draws shop boxes + for mut item in inGameScreen.shop.shop_items.iter_mut() { + // If hovering on square draw full + if mouse_position.x >= item.x_pose as f32 + && mouse_position.x <= item.x_pose as f32 + item.width as f32 + && mouse_position.y >= item.y_pose as f32 + && mouse_position.y <= item.y_pose as f32 + item.width as f32 + { + // Draw rect + draw_handle.draw_rectangle( + item.x_pose, + item.y_pose, + item.width, + item.height, + Color::BLACK, + ); + + // Preform purchasing functions + if draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) + && game_core.player.coins >= item.cost as u32 + { + // Remove currency + game_core.world.spend_coins(item.cost.into()); + game_core.player.coins -= item.cost as u32; + + // Upgrade item in inventory + match &(item.name)[..] { + "Stun Gun" => { + match item.level { + 0 => game_core.player.inventory.stun_gun = Some(items::StunGun::lvl1()), + 1 => game_core.player.inventory.stun_gun = Some(items::StunGun::lvl2()), + 2 => game_core.player.inventory.stun_gun = Some(items::StunGun::lvl3()), + _ => (return), + }; + item.cost += 5; + item.level += 1; + } + "Air Bag" => { + match item.level { + 0 => { + game_core.player.inventory.air_bag = Some(items::AirBag::lvl1()); + } + 1 => { + game_core.player.inventory.air_bag = Some(items::AirBag::lvl2()); + } + 2 => { + game_core.player.inventory.air_bag = Some(items::AirBag::lvl3()); + } + _ => (return), + }; + item.cost += 5; + item.level += 1; + } + "Flash Light" => { + match item.level { + 0 => { + game_core.player.inventory.flashlight = + Some(items::Flashlight::lvl1()); + } + 1 => { + game_core.player.inventory.flashlight = + Some(items::Flashlight::lvl2()); + } + 2 => { + game_core.player.inventory.flashlight = + Some(items::Flashlight::lvl3()); + } + _ => (return), + }; + item.cost += 5; + item.level += 1; + } + "Flippers" => { + match item.level { + 0 => { + game_core.player.inventory.flippers = Some(items::Flippers::lvl1()); + } + 1 => { + game_core.player.inventory.flippers = Some(items::Flippers::lvl2()); + } + 2 => { + game_core.player.inventory.flippers = Some(items::Flippers::lvl3()); + } + _ => (return), + }; + item.cost += 5; + item.level += 1; + } + _ => (return), + }; + } + } else { + // outlines if not hovered + draw_handle.draw_rectangle_lines( + item.x_pose, + item.y_pose, + item.width, + item.height, + Color::BLACK, + ); + } + // Draw text about object + draw_handle.draw_text( + &format!("{}: ${}", item.name, item.cost), + item.x_pose + 5, + item.y_pose + 5, + 12, + Color::BLACK, + ); + } +} From bed3f407d6a6602bfe465df0734b602f083933e2 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 25 Apr 2021 10:01:02 -0400 Subject: [PATCH 07/24] tmp disable shop code --- src/logic/shopscreen.rs | 310 ++++++++++++++++++++-------------------- 1 file changed, 155 insertions(+), 155 deletions(-) diff --git a/src/logic/shopscreen.rs b/src/logic/shopscreen.rs index b57c9bf..8ca2c6e 100644 --- a/src/logic/shopscreen.rs +++ b/src/logic/shopscreen.rs @@ -21,7 +21,7 @@ pub struct Item { #[derive(Debug, Default)] pub struct ShopScreen { - shop_items: Vec, + // shop_items: Vec, } impl ShopScreen { @@ -31,41 +31,41 @@ impl ShopScreen { } } - // Creates all the items - pub fn create_items(&mut self, screen_dimension: Vector2) { - // gets every item.. hacky - let items = ShopItems::get_inital_items(); + // // Creates all the items + // pub fn create_items(&mut self, screen_dimension: Vector2) { + // // gets every item.. hacky + // let items = ShopItems::get_inital_items(); - // sets sizes any random number is just a number I think looks good - let screen_width = screen_dimension.x as f32; - let screen_height = screen_dimension.y as f32; + // // sets sizes any random number is just a number I think looks good + // let screen_width = screen_dimension.x as f32; + // let screen_height = screen_dimension.y as f32; - let box_height = screen_height * 0.15; - let box_width = screen_width * 0.1; + // let box_height = screen_height * 0.15; + // let box_width = screen_width * 0.1; - let start_width = screen_width - (box_width * 4.0) - 40.0; - let draw_height = screen_height - 20.0 - box_height; + // let start_width = screen_width - (box_width * 4.0) - 40.0; + // let draw_height = screen_height - 20.0 - box_height; - let mut item_vec = Vec::new(); + // let mut item_vec = Vec::new(); - for box_num in 0..4 { - let x_pose = start_width + box_width * box_num as f32; + // for box_num in 0..4 { + // let x_pose = start_width + box_width * box_num as f32; - // adds an item struct to the item list - item_vec.push(Item { - x_pose: ((x_pose + (5 * box_num) as f32) as i32), - y_pose: (draw_height as i32), - width: (box_width as i32), - height: (box_height as i32), - // Crazy hacky but this gets the data from the enum - cost: (ShopItems::get_cost(&items.get(box_num).unwrap())), - level: (ShopItems::get_level(&items.get(box_num).unwrap())), - name: (ShopItems::get_name(&items.get(box_num).unwrap())), - }); - } + // // adds an item struct to the item list + // item_vec.push(Item { + // x_pose: ((x_pose + (5 * box_num) as f32) as i32), + // y_pose: (draw_height as i32), + // width: (box_width as i32), + // height: (box_height as i32), + // // Crazy hacky but this gets the data from the enum + // cost: (ShopItems::get_cost(&items.get(box_num).unwrap())), + // level: (ShopItems::get_level(&items.get(box_num).unwrap())), + // name: (ShopItems::get_name(&items.get(box_num).unwrap())), + // }); + // } - self.shop_items = item_vec; - } + // self.shop_items = item_vec; + // } } impl Screen for ShopScreen { @@ -178,134 +178,134 @@ impl Screen for ShopScreen { return None; } } -pub fn render_shop( - draw_handle: &mut RaylibDrawHandle, - game_core: &mut GameCore, - inGameScreen: &mut InGameScreen, -) { - // Pressing F exits from buying - if draw_handle.is_key_pressed(KeyboardKey::KEY_F) { - inGameScreen.current_state = InGameState::SWIMMING; - } +// pub fn render_shop( +// draw_handle: &mut RaylibDrawHandle, +// game_core: &mut GameCore, +// inGameScreen: &mut InGameScreen, +// ) { +// // Pressing F exits from buying +// if draw_handle.is_key_pressed(KeyboardKey::KEY_F) { +// inGameScreen.current_state = InGameState::SWIMMING; +// } - let mouse_position = draw_handle.get_mouse_position(); +// let mouse_position = draw_handle.get_mouse_position(); - draw_handle.draw_text( - &format!("Coins: {}", game_core.player.coins), - 15, - 15, - 30, - Color::WHITE, - ); +// draw_handle.draw_text( +// &format!("Coins: {}", game_core.player.coins), +// 15, +// 15, +// 30, +// Color::WHITE, +// ); - // Draws shop boxes - for mut item in inGameScreen.shop.shop_items.iter_mut() { - // If hovering on square draw full - if mouse_position.x >= item.x_pose as f32 - && mouse_position.x <= item.x_pose as f32 + item.width as f32 - && mouse_position.y >= item.y_pose as f32 - && mouse_position.y <= item.y_pose as f32 + item.width as f32 - { - // Draw rect - draw_handle.draw_rectangle( - item.x_pose, - item.y_pose, - item.width, - item.height, - Color::BLACK, - ); +// // Draws shop boxes +// for mut item in inGameScreen.shop.shop_items.iter_mut() { +// // If hovering on square draw full +// if mouse_position.x >= item.x_pose as f32 +// && mouse_position.x <= item.x_pose as f32 + item.width as f32 +// && mouse_position.y >= item.y_pose as f32 +// && mouse_position.y <= item.y_pose as f32 + item.width as f32 +// { +// // Draw rect +// draw_handle.draw_rectangle( +// item.x_pose, +// item.y_pose, +// item.width, +// item.height, +// Color::BLACK, +// ); - // Preform purchasing functions - if draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) - && game_core.player.coins >= item.cost as u32 - { - // Remove currency - game_core.world.spend_coins(item.cost.into()); - game_core.player.coins -= item.cost as u32; +// // Preform purchasing functions +// if draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) +// && game_core.player.coins >= item.cost as u32 +// { +// // Remove currency +// game_core.world.spend_coins(item.cost.into()); +// game_core.player.coins -= item.cost as u32; - // Upgrade item in inventory - match &(item.name)[..] { - "Stun Gun" => { - match item.level { - 0 => game_core.player.inventory.stun_gun = Some(items::StunGun::lvl1()), - 1 => game_core.player.inventory.stun_gun = Some(items::StunGun::lvl2()), - 2 => game_core.player.inventory.stun_gun = Some(items::StunGun::lvl3()), - _ => (return), - }; - item.cost += 5; - item.level += 1; - } - "Air Bag" => { - match item.level { - 0 => { - game_core.player.inventory.air_bag = Some(items::AirBag::lvl1()); - } - 1 => { - game_core.player.inventory.air_bag = Some(items::AirBag::lvl2()); - } - 2 => { - game_core.player.inventory.air_bag = Some(items::AirBag::lvl3()); - } - _ => (return), - }; - item.cost += 5; - item.level += 1; - } - "Flash Light" => { - match item.level { - 0 => { - game_core.player.inventory.flashlight = - Some(items::Flashlight::lvl1()); - } - 1 => { - game_core.player.inventory.flashlight = - Some(items::Flashlight::lvl2()); - } - 2 => { - game_core.player.inventory.flashlight = - Some(items::Flashlight::lvl3()); - } - _ => (return), - }; - item.cost += 5; - item.level += 1; - } - "Flippers" => { - match item.level { - 0 => { - game_core.player.inventory.flippers = Some(items::Flippers::lvl1()); - } - 1 => { - game_core.player.inventory.flippers = Some(items::Flippers::lvl2()); - } - 2 => { - game_core.player.inventory.flippers = Some(items::Flippers::lvl3()); - } - _ => (return), - }; - item.cost += 5; - item.level += 1; - } - _ => (return), - }; - } - } else { - // outlines if not hovered - draw_handle.draw_rectangle_lines( - item.x_pose, - item.y_pose, - item.width, - item.height, - Color::BLACK, - ); - } - // Draw text about object - draw_handle.draw_text( - &format!("{}: ${}", item.name, item.cost), - item.x_pose + 5, - item.y_pose + 5, - 12, - Color::BLACK, - ); - } -} +// // Upgrade item in inventory +// match &(item.name)[..] { +// "Stun Gun" => { +// match item.level { +// 0 => game_core.player.inventory.stun_gun = Some(items::StunGun::lvl1()), +// 1 => game_core.player.inventory.stun_gun = Some(items::StunGun::lvl2()), +// 2 => game_core.player.inventory.stun_gun = Some(items::StunGun::lvl3()), +// _ => (return), +// }; +// item.cost += 5; +// item.level += 1; +// } +// "Air Bag" => { +// match item.level { +// 0 => { +// game_core.player.inventory.air_bag = Some(items::AirBag::lvl1()); +// } +// 1 => { +// game_core.player.inventory.air_bag = Some(items::AirBag::lvl2()); +// } +// 2 => { +// game_core.player.inventory.air_bag = Some(items::AirBag::lvl3()); +// } +// _ => (return), +// }; +// item.cost += 5; +// item.level += 1; +// } +// "Flash Light" => { +// match item.level { +// 0 => { +// game_core.player.inventory.flashlight = +// Some(items::Flashlight::lvl1()); +// } +// 1 => { +// game_core.player.inventory.flashlight = +// Some(items::Flashlight::lvl2()); +// } +// 2 => { +// game_core.player.inventory.flashlight = +// Some(items::Flashlight::lvl3()); +// } +// _ => (return), +// }; +// item.cost += 5; +// item.level += 1; +// } +// "Flippers" => { +// match item.level { +// 0 => { +// game_core.player.inventory.flippers = Some(items::Flippers::lvl1()); +// } +// 1 => { +// game_core.player.inventory.flippers = Some(items::Flippers::lvl2()); +// } +// 2 => { +// game_core.player.inventory.flippers = Some(items::Flippers::lvl3()); +// } +// _ => (return), +// }; +// item.cost += 5; +// item.level += 1; +// } +// _ => (return), +// }; +// } +// } else { +// // outlines if not hovered +// draw_handle.draw_rectangle_lines( +// item.x_pose, +// item.y_pose, +// item.width, +// item.height, +// Color::BLACK, +// ); +// } +// // Draw text about object +// draw_handle.draw_text( +// &format!("{}: ${}", item.name, item.cost), +// item.x_pose + 5, +// item.y_pose + 5, +// 12, +// Color::BLACK, +// ); +// } +// } From 1bc5aa966d233f3eac3491a31c57925dbeea87f2 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 25 Apr 2021 10:05:35 -0400 Subject: [PATCH 08/24] improved menu navigation --- src/logic/mainmenu.rs | 28 +++++++++++++++++++++++----- src/logic/pausemenu.rs | 4 ++-- src/logic/shopscreen.rs | 8 ++++---- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/logic/mainmenu.rs b/src/logic/mainmenu.rs index e03d098..9f64a60 100644 --- a/src/logic/mainmenu.rs +++ b/src/logic/mainmenu.rs @@ -1,6 +1,10 @@ use raylib::prelude::*; -use crate::{gamecore::{GameCore, GameState}, lib::wrappers::audio::player::AudioPlayer, pallette::WATER_DARK}; +use crate::{ + gamecore::{GameCore, GameState}, + lib::wrappers::audio::player::AudioPlayer, + pallette::WATER_DARK, +}; use super::screen::Screen; @@ -38,10 +42,12 @@ impl Screen for MainMenuScreen { // Get mouse position data let mouse_position = draw_handle.get_mouse_position(); - let hovering_play_button = mouse_position.y > (win_width as f32 / 4.0) + let hovering_play_button = mouse_position.y > (win_width as f32 / 4.0) && mouse_position.y < (win_width as f32 / 4.0) + 60.0; - let hovering_quit_button = mouse_position.y > (win_width as f32 / 4.0) + 100.0 + let hovering_shop_button = mouse_position.y > (win_width as f32 / 4.0) + 100.0 && mouse_position.y < (win_width as f32 / 4.0) + 160.0; + let hovering_quit_button = mouse_position.y > (win_width as f32 / 4.0) + 200.0 + && mouse_position.y < (win_width as f32 / 4.0) + 260.0; // Play and quit draw_handle.draw_text( @@ -54,10 +60,20 @@ impl Screen for MainMenuScreen { false => Color::BLACK, }, ); + draw_handle.draw_text( + "Shop", + (win_height / 2) + 120, + (win_width / 4) + 100, + 60, + match hovering_shop_button { + true => Color::GREEN, + false => Color::BLACK, + }, + ); draw_handle.draw_text( "Quit", (win_height / 2) + 130, - (win_width / 4) + 100, + (win_width / 4) + 200, 60, match hovering_quit_button { true => Color::GREEN, @@ -72,7 +88,9 @@ impl Screen for MainMenuScreen { if mouse_clicked { if hovering_play_button { return Some(GameState::InGame); - } else if hovering_quit_button { + } else if hovering_shop_button { + return Some(GameState::InShop); + }else if hovering_quit_button { return Some(GameState::GameQuit); } } diff --git a/src/logic/pausemenu.rs b/src/logic/pausemenu.rs index 30c91f4..e89b0f1 100644 --- a/src/logic/pausemenu.rs +++ b/src/logic/pausemenu.rs @@ -157,7 +157,7 @@ impl Screen for PauseMenuScreen { }, ); draw_handle.draw_text( - "Quit", + "Menu", bottom_left_button_dimensions.x as i32 + 15, bottom_left_button_dimensions.y as i32 + 5, 30, @@ -182,7 +182,7 @@ impl Screen for PauseMenuScreen { // Handle click actions on the buttons if draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) { if mouse_over_bottom_left_button { - return Some(GameState::GameQuit); + return Some(GameState::MainMenu); } else if mouse_over_bottom_right_button { return Some(game_core.last_state); } diff --git a/src/logic/shopscreen.rs b/src/logic/shopscreen.rs index 8ca2c6e..43e7ddb 100644 --- a/src/logic/shopscreen.rs +++ b/src/logic/shopscreen.rs @@ -144,7 +144,7 @@ impl Screen for ShopScreen { }, ); draw_handle.draw_text( - "Quit", + "Menu", bottom_left_button_dimensions.x as i32 + 15, bottom_left_button_dimensions.y as i32 + 5, 30, @@ -159,7 +159,7 @@ impl Screen for ShopScreen { }, ); draw_handle.draw_text( - "Close", + "Play", bottom_right_button_dimensions.x as i32 + 15, bottom_right_button_dimensions.y as i32 + 5, 30, @@ -169,9 +169,9 @@ impl Screen for ShopScreen { // Handle click actions on the buttons if draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) { if mouse_over_bottom_left_button { - return Some(GameState::GameQuit); + return Some(GameState::MainMenu); } else if mouse_over_bottom_right_button { - return Some(game_core.last_state); + return Some(GameState::InGame); } } From 83aaa01133f88cf08190f74b72cb8b4f8c3c6eb4 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 25 Apr 2021 10:18:23 -0400 Subject: [PATCH 09/24] button --- src/lib/utils/button.rs | 71 +++++++++++++++++++++++++++ src/lib/utils/mod.rs | 1 + src/logic/shopscreen.rs | 105 +++++----------------------------------- 3 files changed, 83 insertions(+), 94 deletions(-) create mode 100644 src/lib/utils/button.rs diff --git a/src/lib/utils/button.rs b/src/lib/utils/button.rs new file mode 100644 index 0000000..7a17239 --- /dev/null +++ b/src/lib/utils/button.rs @@ -0,0 +1,71 @@ +use raylib::prelude::*; + +pub struct OnScreenButton { + bounds: Rectangle, + text: String, + background: Color, + border: Color, + border_hover: Color, + font_px: i32, + draw_border: bool, +} + +impl OnScreenButton { + pub fn new( + text: String, + bounds: Rectangle, + background: Color, + border: Color, + border_hover: Color, + font_px: i32, + draw_border: bool, + ) -> Self { + Self { + bounds, + text, + background, + border, + border_hover, + font_px, + draw_border, + } + } + + pub fn is_hovered(&self, draw_handle: &RaylibDrawHandle) -> bool { + return self + .bounds + .check_collision_point_rec(draw_handle.get_mouse_position()); + } + + pub fn render(&self, draw_handle: &mut RaylibDrawHandle) { + // Draw the button background + draw_handle.draw_rectangle_rec(self.bounds, self.background); + + // Check mouse info + let is_being_hovered = self.is_hovered(draw_handle); + + // Render the border + if self.draw_border { + draw_handle.draw_rectangle_lines_ex( + self.bounds, + 3, + match is_being_hovered { + true => self.border_hover, + false => self.border, + }, + ); + } + + // Render the text + draw_handle.draw_text( + &self.text, + self.bounds.x as i32 + 10, + self.bounds.y as i32 + ((self.bounds.height as i32 - self.font_px) / 2), + self.font_px, + match is_being_hovered { + true => self.border_hover, + false => self.border, + }, + ) + } +} diff --git a/src/lib/utils/mod.rs b/src/lib/utils/mod.rs index baba8af..2f1353d 100644 --- a/src/lib/utils/mod.rs +++ b/src/lib/utils/mod.rs @@ -1,5 +1,6 @@ pub mod profiler; pub mod triangles; +pub mod button; pub fn calculate_linear_slide(playthrough_percent: f64) -> f64 { if playthrough_percent < 0.25 { diff --git a/src/logic/shopscreen.rs b/src/logic/shopscreen.rs index 43e7ddb..e1f37db 100644 --- a/src/logic/shopscreen.rs +++ b/src/logic/shopscreen.rs @@ -31,6 +31,16 @@ impl ShopScreen { } } + fn render_buy_section( + &mut self, + draw_handle: &mut RaylibDrawHandle, + _thread: &RaylibThread, + audio_system: &mut AudioPlayer, + game_core: &mut GameCore, + draw_bounds: Rectangle + ) { + } + // // Creates all the items // pub fn create_items(&mut self, screen_dimension: Vector2) { // // gets every item.. hacky @@ -80,100 +90,7 @@ impl Screen for ShopScreen { draw_handle.clear_background(Color::GRAY); // TODO: Maybe we can stick some art here? - // If escape is pressed again, return to the previous render state - if draw_handle.is_key_pressed(KeyboardKey::KEY_ESCAPE) { - return Some(game_core.last_state); - } - - // Window dimensions - let win_height = draw_handle.get_screen_height(); - let win_width = draw_handle.get_screen_width(); - - // Render the backing to the menu itself - draw_handle.draw_rectangle( - (win_width / 2) - ((SCREEN_PANEL_SIZE.x as i32 + 6) / 2), - (win_height / 2) - ((SCREEN_PANEL_SIZE.y as i32 + 6) / 2), - SCREEN_PANEL_SIZE.x as i32 + 6, - SCREEN_PANEL_SIZE.y as i32 + 6, - Color::BLACK, - ); - draw_handle.draw_rectangle( - (win_width / 2) - (SCREEN_PANEL_SIZE.x as i32 / 2), - (win_height / 2) - (SCREEN_PANEL_SIZE.y as i32 / 2), - SCREEN_PANEL_SIZE.x as i32, - SCREEN_PANEL_SIZE.y as i32, - Color::WHITE, - ); - - // Render heading text - draw_handle.draw_text( - "SHOP", - (win_width / 2) - 80, - (win_height / 2) - (SCREEN_PANEL_SIZE.y as i32 / 2) + 10, - 40, - Color::BLACK, - ); - - // Close and quit buttons - let bottom_left_button_dimensions = Rectangle { - x: (win_width as f32 / 2.0) - (SCREEN_PANEL_SIZE.x / 2.0) + 5.0, - y: (win_height as f32 / 2.0) + (SCREEN_PANEL_SIZE.y / 2.0) - 50.0, - width: (SCREEN_PANEL_SIZE.x / 2.0) - 15.0, - height: 40.0, - }; - let bottom_right_button_dimensions = Rectangle { - x: (win_width as f32 / 2.0) + 5.0, - y: bottom_left_button_dimensions.y, - width: bottom_left_button_dimensions.width, - height: bottom_left_button_dimensions.height, - }; - - // Check if the mouse is over either button - let mouse_over_bottom_left_button = - bottom_left_button_dimensions.check_collision_point_rec(mouse_position); - let mouse_over_bottom_right_button = - bottom_right_button_dimensions.check_collision_point_rec(mouse_position); - - // Render buttons - draw_handle.draw_rectangle_lines_ex( - bottom_left_button_dimensions, - 3, - match mouse_over_bottom_left_button { - true => Color::GRAY, - false => Color::BLACK, - }, - ); - draw_handle.draw_text( - "Menu", - bottom_left_button_dimensions.x as i32 + 15, - bottom_left_button_dimensions.y as i32 + 5, - 30, - Color::BLACK, - ); - draw_handle.draw_rectangle_lines_ex( - bottom_right_button_dimensions, - 3, - match mouse_over_bottom_right_button { - true => Color::GRAY, - false => Color::BLACK, - }, - ); - draw_handle.draw_text( - "Play", - bottom_right_button_dimensions.x as i32 + 15, - bottom_right_button_dimensions.y as i32 + 5, - 30, - Color::BLACK, - ); - - // Handle click actions on the buttons - if draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) { - if mouse_over_bottom_left_button { - return Some(GameState::MainMenu); - } else if mouse_over_bottom_right_button { - return Some(GameState::InGame); - } - } + return None; } From eff489d9ffa7ee9bd594e7fa0854dd68b129b293 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 25 Apr 2021 10:33:11 -0400 Subject: [PATCH 10/24] Adding UI boxes --- src/logic/pausemenu.rs | 56 +++++++++++++-------------------- src/logic/shopscreen.rs | 68 ++++++++++++++++++++++++++++++++--------- 2 files changed, 74 insertions(+), 50 deletions(-) diff --git a/src/logic/pausemenu.rs b/src/logic/pausemenu.rs index e89b0f1..109d3f0 100644 --- a/src/logic/pausemenu.rs +++ b/src/logic/pausemenu.rs @@ -2,7 +2,7 @@ use raylib::prelude::*; use crate::{ gamecore::{GameCore, GameState}, - lib::wrappers::audio::player::AudioPlayer, + lib::{utils::button::OnScreenButton, wrappers::audio::player::AudioPlayer}, }; use super::screen::Screen; @@ -127,7 +127,8 @@ impl Screen for PauseMenuScreen { Color::BLACK, ); - // Close and quit buttons + // Bottom buttons + let bottom_left_button_dimensions = Rectangle { x: (win_width as f32 / 2.0) - (SCREEN_PANEL_SIZE.x / 2.0) + 5.0, y: (win_height as f32 / 2.0) + (SCREEN_PANEL_SIZE.y / 2.0) - 50.0, @@ -141,49 +142,34 @@ impl Screen for PauseMenuScreen { height: bottom_left_button_dimensions.height, }; - // Check if the mouse is over either button - let mouse_over_bottom_left_button = - bottom_left_button_dimensions.check_collision_point_rec(mouse_position); - let mouse_over_bottom_right_button = - bottom_right_button_dimensions.check_collision_point_rec(mouse_position); - - // Render buttons - draw_handle.draw_rectangle_lines_ex( + let menu_button = OnScreenButton::new( + "Menu".to_string(), bottom_left_button_dimensions, - 3, - match mouse_over_bottom_left_button { - true => Color::GRAY, - false => Color::BLACK, - }, - ); - draw_handle.draw_text( - "Menu", - bottom_left_button_dimensions.x as i32 + 15, - bottom_left_button_dimensions.y as i32 + 5, - 30, + Color::WHITE, Color::BLACK, + Color::GRAY, + 30, + true, ); - draw_handle.draw_rectangle_lines_ex( + let close_button = OnScreenButton::new( + "Close".to_string(), bottom_right_button_dimensions, - 3, - match mouse_over_bottom_right_button { - true => Color::GRAY, - false => Color::BLACK, - }, - ); - draw_handle.draw_text( - "Close", - bottom_right_button_dimensions.x as i32 + 15, - bottom_right_button_dimensions.y as i32 + 5, - 30, + Color::WHITE, Color::BLACK, + Color::GRAY, + 30, + true, ); + // Render both + menu_button.render(draw_handle); + close_button.render(draw_handle); + // Handle click actions on the buttons if draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) { - if mouse_over_bottom_left_button { + if menu_button.is_hovered(draw_handle) { return Some(GameState::MainMenu); - } else if mouse_over_bottom_right_button { + } else if menu_button.is_hovered(draw_handle) { return Some(game_core.last_state); } } diff --git a/src/logic/shopscreen.rs b/src/logic/shopscreen.rs index e1f37db..0b64f6a 100644 --- a/src/logic/shopscreen.rs +++ b/src/logic/shopscreen.rs @@ -9,16 +9,6 @@ use super::screen::Screen; const SCREEN_PANEL_SIZE: Vector2 = Vector2 { x: 300.0, y: 380.0 }; -pub struct Item { - x_pose: i32, - y_pose: i32, - width: i32, - height: i32, - cost: u8, - level: u8, - name: String, -} - #[derive(Debug, Default)] pub struct ShopScreen { // shop_items: Vec, @@ -31,14 +21,39 @@ impl ShopScreen { } } - fn render_buy_section( + fn render_shop( &mut self, draw_handle: &mut RaylibDrawHandle, _thread: &RaylibThread, audio_system: &mut AudioPlayer, game_core: &mut GameCore, - draw_bounds: Rectangle + bounds: Rectangle, + ) -> Option { + // Render background + draw_handle.draw_rectangle_rec(bounds, Color::WHITE); + draw_handle.draw_rectangle_lines_ex(bounds, 3, Color::BLACK); + + return None; + } + + fn render_stats( + &mut self, + draw_handle: &mut RaylibDrawHandle, + game_core: &mut GameCore, + bounds: Rectangle, ) { + // Render background + draw_handle.draw_rectangle_rec(bounds, Color::WHITE); + draw_handle.draw_rectangle_lines_ex(bounds, 3, Color::BLACK); + + // Coins + draw_handle.draw_text( + &format!("Fish: {}", game_core.player.coins.min(99)), + bounds.x as i32 + 5, + bounds.y as i32 + 5, + 20, + Color::BLACK, + ); } // // Creates all the items @@ -82,7 +97,7 @@ impl Screen for ShopScreen { fn render( &mut self, draw_handle: &mut RaylibDrawHandle, - _thread: &RaylibThread, + thread: &RaylibThread, audio_system: &mut AudioPlayer, game_core: &mut GameCore, ) -> Option { @@ -90,9 +105,32 @@ impl Screen for ShopScreen { draw_handle.clear_background(Color::GRAY); // TODO: Maybe we can stick some art here? - + // Window dimensions + let win_height = draw_handle.get_screen_height(); + let win_width = draw_handle.get_screen_width(); - return None; + // Build a rect for the shop UI to sit inside + let shop_ui_bounds = Rectangle { + x: win_width as f32 - (win_width as f32 / 5.0), + y: 0.0, + width: win_width as f32 / 5.0, + height: win_height as f32, + }; + let stats_ui_bounds = Rectangle { + x: win_width as f32 - (win_width as f32 / 5.0) - 100.0, + y: 10.0, + width: 90.0, + height: 120.0, + }; + + // Render the shop UI + let next_state = + self.render_shop(draw_handle, thread, audio_system, game_core, shop_ui_bounds); + + // Render the stats UI + self.render_stats(draw_handle, game_core, stats_ui_bounds); + + return next_state; } } // pub fn render_shop( From fa7040f6267e0c1cdd43e0eb7a765971446e0019 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 25 Apr 2021 10:38:41 -0400 Subject: [PATCH 11/24] Shop screen layout --- src/logic/shopscreen.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/logic/shopscreen.rs b/src/logic/shopscreen.rs index 0b64f6a..7bae2d5 100644 --- a/src/logic/shopscreen.rs +++ b/src/logic/shopscreen.rs @@ -33,6 +33,15 @@ impl ShopScreen { draw_handle.draw_rectangle_rec(bounds, Color::WHITE); draw_handle.draw_rectangle_lines_ex(bounds, 3, Color::BLACK); + // Title + draw_handle.draw_text( + "SHOP", + bounds.x as i32 + 30, + bounds.y as i32 + 20, + 40, + Color::BLACK, + ); + return None; } @@ -111,15 +120,15 @@ impl Screen for ShopScreen { // Build a rect for the shop UI to sit inside let shop_ui_bounds = Rectangle { - x: win_width as f32 - (win_width as f32 / 5.0), - y: 0.0, - width: win_width as f32 / 5.0, - height: win_height as f32, + x: win_width as f32 - (win_width as f32 / 2.0), + y: 10.0, + width: (win_width as f32 / 2.0) - 10.0, + height: win_height as f32 - 20.0, }; let stats_ui_bounds = Rectangle { - x: win_width as f32 - (win_width as f32 / 5.0) - 100.0, + x: win_width as f32 - (win_width as f32 / 2.0) - 130.0, y: 10.0, - width: 90.0, + width: 120.0, height: 120.0, }; From 010ad7ce264866dd0f7b8825001008ae1b78a0b0 Mon Sep 17 00:00:00 2001 From: Evan Pratten Date: Sun, 25 Apr 2021 10:42:03 -0400 Subject: [PATCH 12/24] move shop file --- src/logic/mod.rs | 2 +- src/logic/{shopscreen.rs => shop/mod.rs} | 2 +- src/main.rs | 29 ++++++++++++++++-------- 3 files changed, 21 insertions(+), 12 deletions(-) rename src/logic/{shopscreen.rs => shop/mod.rs} (99%) diff --git a/src/logic/mod.rs b/src/logic/mod.rs index 19c7044..7b1e5eb 100644 --- a/src/logic/mod.rs +++ b/src/logic/mod.rs @@ -4,4 +4,4 @@ pub mod mainmenu; pub mod pausemenu; pub mod ingame; pub mod gameend; -pub mod shopscreen; \ No newline at end of file +pub mod shop; \ No newline at end of file diff --git a/src/logic/shopscreen.rs b/src/logic/shop/mod.rs similarity index 99% rename from src/logic/shopscreen.rs rename to src/logic/shop/mod.rs index 7bae2d5..5cf2458 100644 --- a/src/logic/shopscreen.rs +++ b/src/logic/shop/mod.rs @@ -36,7 +36,7 @@ impl ShopScreen { // Title draw_handle.draw_text( "SHOP", - bounds.x as i32 + 30, + bounds.x as i32 + (bounds.width / 2.0) as i32 - 50, bounds.y as i32 + 20, 40, Color::BLACK, diff --git a/src/main.rs b/src/main.rs index a98eed6..a8a260f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,19 +1,22 @@ +mod entities; mod gamecore; +mod items; mod lib; mod logic; -mod resources; -mod player; -mod world; mod pallette; -mod entities; -mod items; +mod player; +mod resources; +mod world; use gamecore::{GameCore, GameProgress, GameState}; use lib::{utils::profiler::GameProfiler, wrappers::audio::player::AudioPlayer}; use log::info; -use logic::{gameend::GameEndScreen, ingame::InGameScreen, loadingscreen::LoadingScreen, mainmenu::MainMenuScreen, pausemenu::PauseMenuScreen, screen::Screen, shopscreen::ShopScreen}; +use logic::{ + gameend::GameEndScreen, ingame::InGameScreen, loadingscreen::LoadingScreen, + mainmenu::MainMenuScreen, pausemenu::PauseMenuScreen, screen::Screen, shop::ShopScreen, +}; use raylib::prelude::*; -use world::{World, load_world_colliders}; +use world::{load_world_colliders, World}; // Game Launch Configuration const DEFAULT_WINDOW_DIMENSIONS: Vector2 = Vector2 { @@ -32,7 +35,8 @@ fn main() { .size( DEFAULT_WINDOW_DIMENSIONS.x as i32, DEFAULT_WINDOW_DIMENSIONS.y as i32, - ).msaa_4x() + ) + .msaa_4x() .title(WINDOW_TITLE) .build(); raylib.set_target_fps(MAX_FPS); @@ -41,8 +45,13 @@ fn main() { raylib.set_exit_key(None); // Load the world - let world_colliders = load_world_colliders("./assets/img/map/cave.json".to_string()).expect("Failed to load world colliders"); - let world = World::load_from_json("./assets/worlds/mainworld.json".to_string(), world_colliders).expect("Failed to load main world JSON"); + let world_colliders = load_world_colliders("./assets/img/map/cave.json".to_string()) + .expect("Failed to load world colliders"); + let world = World::load_from_json( + "./assets/worlds/mainworld.json".to_string(), + world_colliders, + ) + .expect("Failed to load main world JSON"); // Load the game progress let game_progress = GameProgress::try_from_file("./assets/savestate.json".to_string()); From a4f2ee84d469635ed2e585dbcaf250c8514ef4da Mon Sep 17 00:00:00 2001 From: rsninja722 Date: Sun, 25 Apr 2021 10:49:39 -0400 Subject: [PATCH 13/24] shop background + tile map editor --- assets/img/map/shop.aseprite | Bin 0 -> 13590 bytes assets/img/map/shop.png | Bin 0 -> 20698 bytes assets/img/map/shopHighRes.png | Bin 0 -> 29380 bytes assets/tileEditor/game.js | 1068 ++++++++++++++++++++++++++++++++ assets/tileEditor/index.html | 8 + assets/tileEditor/main.js | 314 ++++++++++ assets/tileEditor/tileset.png | Bin 0 -> 894 bytes 7 files changed, 1390 insertions(+) create mode 100644 assets/img/map/shop.aseprite create mode 100644 assets/img/map/shop.png create mode 100644 assets/img/map/shopHighRes.png create mode 100644 assets/tileEditor/game.js create mode 100644 assets/tileEditor/index.html create mode 100644 assets/tileEditor/main.js create mode 100644 assets/tileEditor/tileset.png diff --git a/assets/img/map/shop.aseprite b/assets/img/map/shop.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..d8a7196857cc1178ba4e313c86a30ef9ad2a8e4a GIT binary patch literal 13590 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 literal 0 HcmV?d00001 diff --git a/assets/img/map/shop.png b/assets/img/map/shop.png new file mode 100644 index 0000000000000000000000000000000000000000..78772436c3ae6dfc78cc26bffd4403543b6a0da0 GIT binary patch literal 20698 zcmXtg1ymc)*LHBq4|jKm;_hz6ol@Lgio3hDNQ=9>6ewEU-QC?KxV+2%d|%E9o0Dv2 zXYM?5@63isWkqQu1bhS#2!tdnBcTccL0AH>FX3Tmxwd;sy~=GIh>JT_@aPM#VOJz5%^Hh8db;UrjH-2 zETNGqb2#g|8=^3|+y_3t$IF%G{`dl%0*BhbePZfKE?oYeuL|oV@CT=A3#%cBcs~Nt zN~&~rG6KCJXdKdrfweg5GY+Qxq8aA+FU@6q=*pZMXcba!J?qe_t2h^!$mQW zkB8F)q2~+Wk{{la2+I}{ftW6-&xQS$68iL()yYy^C(+$wXUTOV2W+Q1Bz-seXhPRN zb7Y;G>Aqj>gXMCOKHk3od){uhS%<`D)bV6|D=@#|*E2}^66=U|_c#%%+9T*JC%U2` z7Qp-X^_7HrX;_XwYG`D7=qirwg->W3%#|U>Js{g7NM4xJ)A8`4T&MYNV|fYx%!eF( z%efno6f|zOXRM)A{A^J?8v)xUP;I|akf+JF- z7UeO`A1NksgJiDF(>FrJ`$`(JM+wXeHQ|dJpXLi9w1yQL4P`mr?Cb)3{3UXdzEvglU@g(l(q6?9^qs-|4{nBwO2m~3-{A`9GI?fIu(V5ajo^%E_ee3_W84%O z`)Fh^v(*2F`KZT<{``)4w=luBv8AcfN*9csxI}A5^;GaE4_EBzfiQH1l9r1}EwO7bsm|t$e|D?dkP=2)8HJFW39H=mb1e&F2jEKHY z&@i3Z75cPj^=Dp{nAdtby9C{uzuks?G#6Fcnd`<-e)NkTqy-`Cit@Do=HyrM?p$nAOeddHN%RH;KKl9R)uxxFfw(uNyMhT9^a)q^>D3P% z`HMPoh}u^>VS4bb_xla1zDK(Xsa5C3zuotl{*(r33Ld?v_V$SJhUa3|Qp^VSzf=61d}zoZ^qBL+KA zAl=FTV3MOb2tk3civj(2NmLmOOtfWRX5wIf@LhLL+)^d<*ubwB#lfNjju&+i71ChR z!G1+Nb-`{SVmA_M(c~U@Q94^vcKp7fJJUhsNqimB({$Y)|B%v>KihGHbsB>Ko>{V^ zk*ec#(3LXXnua1Cg$wZB{@v;?=26S1{z01aacC*sMbk0vsX_Cbo5|f%!&>5@ESSww zhK?&Bx|G@sjd2y_Zu?(1UmmRsw!ls!8dS*82K#71amYWCVakd9g^I)4h7tVMpz-nj z#2L=p0!&~&GZErFRK`GDFj-f6aDx1kxRU=?HQ(SWCUY7JLo+vFHE8zY<2zf1W@0!N zE3yk|x+h5lkYiz|>upLFF_W4GSm-U!$ZQB#VUx0xg$t$p$SqY- zWEt_X8txMELs^n^F=ggP*eZ5#B~niuM=E= z`a-T%IWhH#&ctc^*EPcI5{i{D{`zSfs?SL<9G)-yELR*$LQ`s;{LlpWli@G+Q2Fnihmnk=Vw; zCk)V`cDFgfVv9ImLa?r zbJ2-;w>#c-XZQhKWW0H&jp&J%^^SfPQ6>hvdM^ngVp?klcs>Lr^Y})ks0QIV6jFt} zFY6CDjpc39jKNq&H}A}8{1XqPJb~8|yk3os^?ZYl3mOaQ_R`|PWWTW7xWEy7w*RjU z{bKOu7l`}z2gdW3V=r^6h>w1x*m}Wy;c7P~wW$qM`UZgpLt^sr0OoxM*wiwxcu48Y7L6s5r=h2=!Bx3g&IPTvo=J&%wfg!2Uk* zoieHhn;?(r6jAiVdqxwSh4}MyM-nVIk=jfmxB;rlO7fWoYOU^Mk%rA5tl0_Hck3#FWO*Oku0I&pp$4C_a*~ zr`q=3ywz&^{sQ@gNWA*le(l9w;E(oc!ST{;X;=B3-H zuA4I@aJ@`a;65=T$31TM<}k({9_vU$)tkD1zj&^PF}k4c3R*dX+0CT87wROO48xJO z9v!UI0OCgE>X_KMapuL*^nhv)?5Rh;{!dq8k433yiim{-)UFjIOtt~VCDO#C zFT|l{sr$&^{5!;bW~ztnwUStFYwyxUsclh(Qn@RB(iy!5zAS$H)a&)E_R9DeLSvC8 zRrcaBk{bh_=6c+4*K-v-PxZw9z{ILkmjt8UpXr>_-i?;gH8$q0B!>XQL2j{OfU!67 zbmfNgO`$qH1l6V*H&^suU-Sf6BZJ%FApT8~4ocfcSZDr|b{@p%hQM7%piS$kAXA?+ z{8dfWRSve4KozCkN5yP>rHvz`w!>p3ap3KJ(WjwRN+R&P;eu6~|A(5Zc4tsgh53u5 zyo;e#Si*T&8;bR2WX*LB468~?-WavclI}JDgFzvh(t>!fm83S9VsJgUKd3Ky00KZP zDVJrQ>P3Ia1qG72mRKb>O8j}Q1m5{hlO4y+;O$s*PkK|}35oM+3kq``f=|=hdU3gG zJ#C^sTV>+3C6%eW3mi4ErRilOn4lK>;KhxL=QT#6Xs@l{wOii?RKCdv-#_9Mtt7PW z9N{^E88i^Sb%hd?Re9F@qK%ZUC^6=}x+|L)J|-PG>9Q$NFcA61_h5-4gqiTJAm=r; z>Y0{tlLH-=x^UK8U&Iy>CjO6G$fYXhJG>9qrkMiVKF|Eszv?meIJ`SDbPNP7eHGcx}mMfeQGitW=Aw^*<|)6QhUiTc*LbNyWcTzPAu{ zHgcbmK?UUrlJ<%A7k*G5AMlHTv8&SkmAQd6uj=R2-FGn>wV zY~I&>f@criEswdSqG1A1hrpf>$C<78&eeI0GM`hrrarspLI7*qd6gPH~qm^poY2X@;M7`F^<~SO>PnE~N!_42N}U2&}ICRG=`62SNlfC^+E52x~J@l`_drQ?lve~58a zf@MgKqefWE$O8|A{ZL4VPe&IW{N8>@BS4sj-4!ClgIb?eyri%Yp5kilApWf#WQC>D zXqo%IaE9R^s6N**wUZy&UOaa_{N6++jK8iA2t+`x8!N?$ z`W9NRl3Y%WGi6*7Vjd|kwwe5XuY<~*NPj#4=^V6e)+9O>h>S~-3i3MnmB%@-x1#CS$$GM5CJ3f zCm;}9i`UgxBZBk=M$EXzuHxwEEzbrNpTW#VUXHdfoO>HwVmDgH69p)|!s+0wtG*>r z036O6G-z^tDHtx>3l)UR+SJGi0kXECh5(%#+_FgN@%~3K&uM&@@uhxs6j7Ssw?25MRdFT&BohIYOF&{X1*ZuD@Tg$ywxkiJ3Y+5*Ov?<`MN)ke0Ksw~SEILsRA@ib-Ov{munDJPG&?I$m9lpK#5crE`E*oyPh{s`AtTHB@Q$l|OZ?P6{f98Edi z70n~Kg$^V`TKZs-SpR5YPrh@#R-|%wSHrsyYmgz;ho>wyyp4-B5FeTB`T%pFzcdrF z9VttA!Z#|D>M*O@Ufv_}P*0=I{xeH37r)%SkbvmJOyBCQP@<$T3zf|GWDMPf5!8aU zTU$qJ6xSR}&|n_$sD84mkRU5N-oN|}7Wv9L@!rK*Qkfbu+=6eb(+SJ)i<{*l6(1q6 z0j|Bm2nu^VHEzC9c6G0dY?rAplU&JLm}>KDZjRNmtg>iv=R4 zK0n7IiBxbFw@)Nae3t^YaU8g|_%MUzG}&g8M|N!<3qItwTUe( z>|Mih^(?=#`s@W=fdb;f4GsntlBMXLL(pXZ-1y1fh))qPTPOIYKo#Z zx@uBv(Z`YI8n8&*$EoUP2Z}P{+)U*aJ!Z+SVYJBAqO$C_ph<+U6dPna z(Y8sh>JP<+YyNA(JV4_fj$2AB4sV1YLoOIjX!MV^N2dl-=enL}L6<-<99Q-Z>U*(j zA<%H63Wc0i1OZ|iYWQ1-LJZVU5e$YDWqzlS@j9i^q{dqO?hM zjo)VzQeOP7F?+=qxL&3fV0niPj&E}ucj0*R6$ItHwc)7-6`4isno)j06^Nv%({vk6 zrjm!D3Hz}L7H+cqric>r$=LbWFtHX=2tGdkII85dYY;Ao(ccm#T?EOeNzYFxeI6ij z==Y+XxV?#wHcNyZVDaBOi1j|(#kf406^%DT>&{mjHNxqTRoW@U9Io(t|E58b7~sD{ z7vPPTqt?b8=+l!`7{|wl`1jw$@{!jAn=a<5&-;)lNFMx?yr|~yJ`q2nslvNT59zD4 z#F(@{h^53btq~a22d&)TK%=GH)ZV*L`fENQ5DR_kzmnmQtxonbRU>s-aTD#H6HC@k zEH@)hhx_<}OwCl$@g%Z`zKMyxj`_?F;;yelY1g)6EXY@NBh{N5+n$ml6Y+&iPpeX5 zZ>7Q2=xiUoix{~I&hjgQ@RXFC2vNh{e*l})~ zK7v`=@d(Ar!-i42BbH z?Pem9T2V`Y5wW4ru=5>v=hb%aFf*#eE* z$arA$rD0PNGs0TX=LnOvj=HS8Tm@))jNc76!c(UQ7F+Wk_&%ZvQLMi~{PA%E=M*qk z0KkK36ihefrp+VHN#!%0K7E+)!Suz>pd@%SaXh>vPGtys`K~Cu$a;Ax#mLFh(ozCW zbU&5W;`4Ia<=?@&qpRpDrqg;NfLz~kbnsJ=3(XfeFRvvIKY?z%#D+d#ugFZ>j2doF1?PVge!LkG-@RG? zA5c1k2@@wFD9-Tn@%^SRcD+Q3Z18(hIN94N`1Dt5w%T6EFk&4Ppptw<8>f=|X-%Xg z_Xiw2c~*<#E-!|^&)6<~hCVA~Vd0Tf3t%s`zW!01rz-L{(ku8M(+7A``?@x193#Kpm~_15IVK1sYWRP1Ctvw(M{_y)e_+R0*3wPRSESE-utf22I&V52vH{x zAR1#Z>Y)646#(%5&gua`-R6}z?4k{dErUUWOFUKxwGHD0nPC*?!P*UVnaDp2Pb@Cvi77HwO?U5xmuf!IS+oW&*hNN2=WH zyR;VeR`5NrV8|af4F8j79*_m(vI=ZPwRxs*uiOhp0oJIlrN!=S|MKhwNKZSNSblk7 zELFuNl5Yc39sBV_dY9N40A0MR#8(v^tscf$Ku%1q7OKokH@KPg1AzQr;9)kH*UVjc zhctBY>NiKOR9y&w{i<&JmwH_@qMdwJ`_>m9?Ai~(W*koylBkg=+oijq@JXa!uk%A9 z$PK+PjBFC_@ZHG&AXO@}!pY-hA(rhjU@XpY1rVgf@fMUthp=M2Ui=KcbetS7Qe3{S zi{wY8>`X@1&5h>h(ZL@LeRLHcxs(hI1h{V~e~Pe)<-?A&O0J(E0KgQeFnsJl7vbrK zxPcS_WYBMJe`LkZYkYAOkG};4kNu*=EkBfFB{Y691G^pCmvSltmJ*mwgkt0}$L+{6 z?lfK>4yVf=*(Z&sa3h=9?r66bo``U-=2afjnD+ z%dBem;~RIt7D4;gFLLD8*~yy!sxdijD3dtXA^M$Qtah=|!X0=hmBlHPdVMw~eITQo zk%&3YfM)8a`h|Vy);=H4ASvLw?lHz_FW{DjiPzq@6lL0-b^@OA!BE!Gt;Jyd+V&Yk zmCG_L&`JDG+K@&J2S7}=Bo@#-FFHxGD0Ux^+kA-V2ldCE7k>^Q#YVrhd|-Tq;?EIL zLnG(bEkiW~XqCqzVl>~_{c=|xDWnaK$jlj8Hx>Dps(6nR;cc}4+Z!oKZCCuNLN8rh z6(pi-l0@f)_8TH~mb0AH29d-#pwY&1X&0ull%9r`puk!U*#`GJT=>+>uU4OdWFYLe zlSSm!0hM=P#|c}%m>r&zgJU#DeUbx8@++#2>JACXvwV)Sfa>%JKG!BdGZtrRWy*nW z-kH>&ut3e}8O|v*%@vXKIHfo0_?W91)8d?R+nJ-m`GY-ydf!99{$Ya|=r5XAC2hT) zQsao3E=pxD=V~`cB5D9xFe)xSXXpiWk^}ti9INMykLrJ}&Aki<021QTahO4%{m+Rs znaj6vx!p?K9A>nKyc^NETLy9Uo`A5A9m+%w^3pnZ`Oc^mrP(Orr~lYSl2}=Hj9wp? zqbzF)Qz*^l`%D=1|L+ArgEcNNeN^U=WAZe7LkfFiH#KqvX_NowprPyn&yqCn3sh1c zn5oG36LN9b)3rOjaS5Kf-ef)Su2*=AHkuN~fm?T!iAwdH5R!HXsod zP@(Wg-HA+98Yzkwa@e427F zfHBMEr7$SH_Kp$@Zl^94(!X2EX+-WKuLE)Cm*i3%@0&=f& z01O`-1_e}qW63hZSDkR-xBw`82_Wvn_kiTP#&zxQ?Q@tbhAfTTmqqC?;QA61>s1&M znNm;p(YXmX<>@FaV0pTA=p~U_w_GfT^A!8|R)d2~=E^GO*u%isW2A!0C}G>xJ|7FA zM=Hb}JCK4_jP~evuG$He=EqEWlU6xiYxw5}tI$fLP+YLx z6%bvZ;0Wf}Yst@t`bhbJd5FnfQ6aa+ElOlo@My{XG(z$Dfz@(7DjOu6S;_;KqGAN&qyfQJ`CM z+FZ$}HX8|qmtXWy8j;CFlTH#5rh1D$@&V1M7^u!j_Kk~?!}MkUH%^UOkP z88n($#3WIj`mJwY_ir1-&HhB!@E+1{HG|lrrq$sjc1i2r31OT+oQanM1}|tN98KH( zyorua$qO|dnHmvaG2uvV5dWc8ijq3dM{)BE%5dSm7aXw(mNu~!?Uk2t1#2!(Nmr1k ziu8TjKH^=31AUmy$EpTMJj>-Kj!0ewN*pQZqi{yQ08H*y*S-&Unyr7gp5cdO^8=8@ zpl{oqvU5OB!Bdoi0>0UzIi>$5wEx%6fgkzywkT0W(PdaEHrUV0*Dbk37v{vJB_bz@ z4dq8h;+4|ZpY_%qwzDq32Q{6fRjh161))oWs1s;jMHQ$%O1fyPBK@O7Zqd`~V4D3{ z5|Vznv7>^YKd%n9Ze@!hK^;jxSSW8aj?cw2H$=odkf7%GIg=mCle4sg;d4_CQL8{M z0=vVa%CH0K!YGSL+Uawh-cyD8j5p&US()6RIjbTT^Db(gh6!FQqm28e9?!nqvbY%d zvEBltO?a&1ADjdto3MO~OaRfx)WLrOkBm|vOc5<@XnF;Y;_d{mm_0k2T*CMjSmg*- zOb-6Fp0AS{ul(bCTXUSRdcs&wHHB7k1J)_M6)7P~dSkjmYCNs>)7r`JpmU*IbZ_K4 zG9CReU{S}Ux1~Sk5cwD{|PKcBGq>Xn7(v^9OP)ijqHve7qfC4^}av%|3Ht^T` zo4ckrFbOomPF*CuT@_In5PY_{s2KxpMW}6WMF-OqDywS`3Z1xPuK$gv+mk@7jSXHRt^j)E`&XT`~;4O+|r3BIZ;^2x3XVj}nqqcQqo_*!JYjAfq_& za3YezY`N%jlrTc4KuF~As(_=Ap53~fYKSQL`#{-HX){sPjTZK6p)g9l^37fK`kqGA z^?e^hUeJ;l(+{qoGT!s%K>Mz^D;Sf5&IvRsx8>ATYPJ0zLsWiKJ-WmB3+}&!jn&4c z%ve_1xLE~RI{Y^=$#MOl*#^z&E)fQ68%&j5SP`5ho(eaHQ5z9u8dPdPuA$oP7XE8n(6U|vQ^>Oq1;)-5oo*eVig(zBeC@=o zpw?VH7MU)YWjC^zAVxzJGD%Nzj9G;1{cT=rF*gNvTKpmE&@;eqT$NTl(R7k^xtHHR zn?^MC{95LQ_MScLS61w0B+xL_0#>8Sc<$#(%oN7;s|M&^s4e`~L}|fWpsSXq@7W$; z*yALcJor+$&lF}+yPH^_AA1A7$!7cS|1FVEf|#R$Ao7L)y_+1pC;zNrJmV*TIomI= zKRag8#sg|w8Cg7$@luOUcusgu1q43$AXqky2F=MWV;%-;aRb8J$DF^(zS(L9l?|+; zNewX>5Sv=jZ-J$IbbU>m$5$vOa#x=phD}WlX8p!bs}zT;$OSGeyUT9M81fqo&;xiy0iV3~y7g zcdtL7w(YlvJ03Tyg8n5%(x_kL3K3@AX<%lu!Yw{xvz&1GbeyBo-!b<-uU(LF;r5)r zX*S%R|HCWH?l&tQ9auWB>r2^(vh~Kv$UM)95VL%!Yx+*x+dnjfEo#_R$ z#cM|YZp+G`Z?M;r@O&-%ZLO8$w=2Q?pN=>vX}&3sO$Q#w0t}2{CCPy)H=i1Jf~aMC zZrh13h4QG`v+sXj1$($;Bxl@7oA6Gv}bJhQP~A0x5vZJ1&HH$Hasu!C}E&t9<*9n38D zB1{}#-!Hm^s`)pBCGvVz*B`UAMj&=INDVzX*-h|>mirLHSYlkn+<;IJ?s>7epn0-} zR2U(O2VYLhfkaB_FMN2hFII9S+uc&9E75kny{OOp=fx%m5-$H{wCB4saXZPDo%izM zwSee})KIWqJZ|IOp6IVkXgT@Fft`v@i`rs7AyKN~gdaESg5L7NqO+pnJxDLAvm*Ai zM|q~6sj9p*BO{CVcjLs$$T?;8uM$?D{4NVe68JI{AqId!ny*2Ea8q$(oyX5{+07Ak z?MHvJeq8@+t9x#vu|S9WPz3B-v;q1jdx|; zSMKf=e(~B|r{YoiPB%NPYblENzyztznv*ljV-D3lR^;FxCTC~y`QTptp!ngnvk)=S z0u%0iZ(?f9@$7#SPO#)oZmv2FjJJoRaU-hsc{(0iV>WbUUYA(6b$W^h^WEoP(HI72 zhWAN)jr#=g7cp$I@d*q!E{V!YWF+A&4HxNI@jF6rpAptCpLse9d_RX3R+k%twoM#) zLAA%#JYd}$H-7$H&$ffzqDs>Jpem+==f!KyrWIF z`kyaKjw^;Nn_8{q{}k`hL6eonGO2E*3eKpM(cxrPnqO(`yhu$Ohb8d4LoRy1{B~Qgjv#>j zHSzm7sX=l>gRmtC&vcBzQsi9x-Fiy+x4k^#-Q&1Y817LG@7-^{&-zhaLYRkXf%5N3>oxbu+b7l=h^YSs54Ig z@JR7STloz~+=D3B$|Ak%Tzi>Kx5dXQ4-({9(zMdVH(c{@ojcWMW;&91`gsEv!D@BB zE!dZ4?<{0-E#cPU!Uszbjz58sWLV~m_xIh~qgB~anJ0}>YSfu-6Hiq<(SyoH$#}Wg zdo89M0=sl=Jh>bOR>xYfQ5JV_5OoAaIS9BJFy!L4*e>+S%nY>_=rqvx%dJ1f`4=Iv ztUC<%rlZo7zVGf1#;*aFE8c#)zqCUiqovvcEDxe~#9edW`-m=h7Xu#)-@EpAD0tvs zeh1&%rdyxnakWD9M$2$H09St2SH+bEjC&EHg>Dy<@ya{7(=vpVFE*y@>V4)LkZejv6*lss)KalkSHs0NUydW|h!G3j)CBnM1A$#>D*`najSv)^vaFX6bT@!%* z8sEaA-3qQ0;Wtu<6~aFfNK5U$d_rdy`I?e~lg!S!i?;fcz3Y?g3fZChhB5{Fj|QR= z_*CJhf+RCaQ3(XlN|XH%DT7mHz*8)oNZ2tou-_qIijcMucKS8QHr`=DdEXkx;5Q>YpKiEwt5(HFY$c#kO%fgVW&`jYk1rfuC zw0qzE{>h;%tmpp89gPs{b8kyy z%~9LWBLEgg%vTGk)*BB5id@<9g4gd?*f1b*B8e4|JJ6* z10ofj!}Gb|p+*W~1HX;F@Uqlj3>~>qH|Wv{sBGyAh}(inC=5%242p?pwZr`dp3xBj zo^=Hmb#XsIuGCxK9opf1%*nU2pE&lRc${x(pWN(W4b`Uvc<%{MdtNu%Ke@lX(1HG` z!5H)@1ivG9T(B%5eZh%59EemZ-S)ua_uP(UEnCGk9&nG6(C5%0sVmMt-OjbUqO{{= z?zEq4d-w6>i=>fJ#TKO;3*TJ&!)Lki(3BpiP7<|a78Z_?`>s9A!psS;n8k(_dtqPW z%XB=E8rSd6om1va$k#e8#Q&q_Q1E5}YwdQ|V5aT%`K(Ecy&H2PeUt)Qb~eVNmq6#v zajS_20cGjcm`fpJJTXk>_NC*}l~cD`X0}Z)cbR+HVW~&zTT_hoqgzQ-L`T&lxHTj$q)%E*|a3yZ+{F~-Rxz< zY5q8P|7TW6k-VEx6~g-VRMh4F%f6gL#YlPBrOu3-+W{#e3s0C?(gF2>!vPeg?hrH@ zlmotwQqBk;6creH5khl{I7xmSHxh5q@)(@0Pkw@o83-Ex9Ektc=&;spPu)^Wt&}?a zhOzMF#@+2q^p$sJ$?JhHA~rfx&l~Y1=g7tHL)zYOKFPQ#ObZR=)WMs^hSk}G3oEjL zne>&)_#%24=z+_I=UiIXqN7*@SNJWUFN{d zEuauw!x;bb^P|3pG^e8W6)^Gf0M^1<#22Q{ewIv{gL(G_^M~=IkZxg+X@1inx+yZ) z&1B*{e)4+_RAD4S4@SIyat=XA(FoH6piAHUUu5T5(a|_V=dUP{K!q2KJv&X`0;b(l zYA3$Ck8{mNHY%(XYt4;U3Ce$-wn5ab-jw`#oVVBK`=6R%`7x=K|8E@v5Mp)6HbYMH zgp1Qm?U8WGhaq`uYiY!Z16BuUgOPr{ZF^#|yjde0(aMloQQaed>s`*(8q%roo50l@ znZMt|>-L0jXSF~X{ebKVHIveFKLh(4{?;!og<`9=5;TIGUNaA}d_L)IL0bEGxK0v* zL!RMrR{z+NW72sQSH`iTp`sfw7J=I1E6Wa%SNit7ct$@7oL|fFw-#W9@AkmqU&ch? z&|_>d2_$IN|9IwuHTX(zm_-*W38Iq{<7{8{N`tDmGo^)4fQ5oqZioQ3(YOuKRy5S@ zw&-I`g6^Zy>DFKEZ7?W8*R=MXXZ*Hr!UAB9XTP=Ae#K)Ar2oi!`>C-i#Ev}{tteO9 z{{HaI=Bix3%+{gEZ6@kaH2q#Oh{xhU>9Pay(;qQ_6T9Wp89KqO#Kg3fFL0~N)B@K^ zhc+C02|07cF+;0EFSnXbaM{}Pn4QbdigC6*`v1rpS{5E!hR8+LSDJJ;Y!5hXFq!jM zVP-I9-C#-dxzDzbEWa%TJVoyt&c_OaKri4)co1;E&wsVwNeXu5HN#}axsl%ZrKmds zd)l81qxf|6V>kS7XorXCrxq4m^8})*-{+fy>$J@0NtKB$xF-O$)J`Cb+O%9*i38Tp zmB$tMS1yNBpg@MC7KSoT3mF{P6KlK#29J;C<_Zzj(k?kx!iP=6!fKhPwsY)gHw{)` z?e-_v(JbFmqcn^Nq_6;9UJUhT>gX0UU$3h_KOLaeE4A(r~{DePqTCRd=|9$H7dprV8PDZa1(h4@J+rXt~S(1*zM1~L_e za;~ke`H@_xB2Gl2>^dh}8Z)=P6)yG!zozreIjPbg&6mBZ`#aG9i|+=kOJ>9>>QL&% zZ>#kt`|e?X?_u>n7yx)C*E^t028Lx@Dk{*=&iEZqNTdmnM=>^diYQ$>5-H~s^$HJ# zNmyn-BEb1VT^?*32Pn(d^t?Fr@%XeZe)v<(E_4=XGevXt?`wI*O*lg#UbA?q z?PO0rK0Bl+wGhB24R+cL5?gKDpUsr4@hbr*bb#+Am=EVL8z zaF4N+z0fbPNB3m}EPbw516qaFW;IbrT3w}7dY6Sv6wuZ^38PM#VbbRWZcB-w{|pN#Auw zL2J}bg4h_TRUPX*&nn_)Q7WVN9emtNoYW;1>%tfzE9*NMX3(L+?tZM={eaGATKz>!EB4n zzbPAP{|)k;PZp;siUk4}UDrdKj)_0kzsw2>*IJ-H-@LB?!w;_w4i|4i+#Gyk)o@Vx#Q4fcYbFH)AbQK)k^{L=D& zZlczyG}dYT(r(RNjb|4o{kQ)q9FQqFD9I^S_)H`BEe)T38a_|-42LQevciNebut{J z|6z7g`Xb{b?D6|C4-YJ!z2)CJ1xLS)*~0~Kb4a!%G;&PGkE}T$mHZ0NbAMn~(AR0T z_{VE>ov%0i=Uh+R#ZL&3jb-E4IAQy;CRBFdCz__(Zx1F#@7Y3rh$Gl9@fflU#yiID zO3daP9x(Ns5pAB%9oAhq+D-Z7ZPW*Kb+>BqN;k0oDq?|syocqr&TfJc1F5|I85y57 z?QHIp&X}31X4H3|vvyE`e+$E!_{QsqCX{w;_8X-jSB}Qc(jAIW?=HJyQ^rJPENPG} zQtd6q0+UYS)TISngS^E;7UG}EukqF`^05}HluXWn5>)2JOaef0$S6L>;P+~N-PhoA?dqsQoj-8J4Ibn0?4Q74eCwqlRvNvm&e zh^eD`Z#Qt}MU5UGraNIByT1!djk8UpCS9KrR2w$Jn9*M&Je9#1{5vi-=%-@uB&%## z*j?=?9-6#|{lS68`8ZL(ZxHw~K%JXvLsv5A{i})lwGkP78Sb>JLOd@o?^^E({S1L~ z$`Q}CAbd!(OR+BRRFR%%4^5o5rE8xZa)0(H>u-Mq0#o(~D9t*WdO@NM`-eOE!pv}9{S73 zimzs#8Od$H7FMHj;hNofCdzfzz`$fmsj$l!*Ks{{!M(H3UOixPA)GE`PeYDBN=^VW zyw7Tvp+--+@ste6TR3gHm!Bf2gNDKy-QO9SX2cJ^pulJ8=(v_k^J?3{(36P&Iu}4& z6g~pKf-GAep=V~p~mv!L8O8qjhcR6Rs64em`ED^nf-4=OsR~nlDl0RwMhY z{N|btWaK~s2SH77J=6;c!n`UN4R5=Wr3zqGDJ-`Vm)gK@qc6H(bKdV9dBc%@hiy{> zGB4luXO$G(*y!puRI|vb#Tw^KrsD|d|)U~2-!FZgg% zui?z^P=4TagLL}CHSaq}nH56lP7RI(%~32YtPbxDW6R7;88}wLNSTDelnaheB2qLj z^lTcB`9Q70G8-EqG5@y{ev0b{okCOfmifC*A9z_Oe$6iW*`d*odnM6sM7B8#(QU(Y zwZx^#fy}t5XzoQI>Vc#!IT!fFPS<^ai0md&aYS4=a2gqAdmbU zN$35MqZ=kMgA2cm6dpKWaDkcP&x?&sL?rDm+!<~$L3@-S5US6|{{`p^eK_3fgg}S+ zysg#w_-C)yWMC=Z6s`3#IH__SWUBmwbR!3jH2?dH-sjI@o~K;rgQQ+Tb&Qg8e0{E{ zy~GHfCHjBPxUeCwn-E%e&2fx(!w~B%<48AMNb3I#!`G>QUwV1*EPm{RRb>65*(fMB z1*9{Sb|M(HK1U9Soo4wCYJ(Xv`HEMfoBRXjr^f1CMutzo0tZV% z17fStDpMvhDE$3}Cg!CZC;1&pcq3C{UVWl)BjbWE6EK4$Igx)K z5j#8d_mWwCyeY0RKf8dWIuK&|3H%`gLqjxkyBv7cO-h}qV!{+IQ{YtM|yVC6_Ws5Zc~CaawV~EC~6~9>c`@%lDd^o zPnwnlBLV)1m9OMttbUCycaU}V8Fj$rjk!%GkKh}dbBg4ec5X!cDrtF;Aq|plVa%iA zyQH(G(Nh~9DBw;|LA(CW9TcGCe-8IBp+)ShG>trzsx^tXE5E@DqgP)Q;!EPsM}n0Z z`S5=Mc@Bp0*s;LtLj+a({9L z`FYD^6xZaOoP;*?OZ{d(lh6rL?d=%(g)idppZ^44h>+<&wvQ4kBuX|1-;*8r&sJj& z%B%p{1xn;4Mq-$O??|4q?nE@cy8-p*OgD_ILfac(S7#tySu_Km-Yu>JuxNh}B!E(vfA+E3zbs;&@p`R*g}B*GG%~xE?L62BDvPCv_mK&_ZJ~n9wvZ*E@XA@%?*@@`Utc%Ij+{tsDTyYpRK`1uUeC|ih#|?Sws|6H2<(TY1}w`_Rd!g|I02)r=dms z{Jb47zOD{$zrEVB9}c_Qvr5|*lT`TL@+>nG72B1jfOCXn<%O!CvUkipP}w?E+g2SL zvksbM^;7+}+NP5bH)*Q4WZzWE-KyUYB6L||3%@=)zBkRMjN+L2g)1$iIQsg!4ZX_| zoWwa3_{0~UoK+ww6a_Ma>cE6C!Y9fh5J^IMj)%$R`ODq8Q?;TY`oe6M)CtPW1;ypToo|`L*zzvumh0*_{KTjVo|Ai zr*X&B|Arq>ZQqOS$&RZVC`ZS&idUH7uy{lw)|D7bt6T*Hu8 zs)j*+2&%DF$qdg~v@S$)Rz++0k;d(`VNmrDIG(&j>NoS#sFCoWHY~;WzA??Qt>UEY zJeH1OCfh?rsN&F9b_iM=TTr!L+Wyxcm8XuY6m+&Xja|Z*-2k%iJ1gsfhaFOp#WK5X zh;!>>dI6c8LG_U-OFMDs1V`iyqh%pG7G_q43@X(xtE&uN#F<-lvn!$qFpd)_HtqqL zNh=~blO3W;LZNl=>EBT&=d!X2s0<$JLmB|uF6zh6AN>UY=bpFIva>6_eIiN~Nt2Rh zzbBr;zVl@5q`zt2+GzjqPXOf0$X-ij{-|soJA@=gKoIeYS%Lhzc}qgI4X5P6LzbLk zW%byxS-eU-F@wxb64Sd0vIr1a9nC`bREa%Su;b}kSrul4sLD1qK(bk<=SUXgZ&p91 zpk-qL@(>j?U{ua#eQ)sai=5pw3|iSIS#!O zbI9hc!75A7Z2k16#KVcYSHbLh5E~`4g-qca;-F={*{MS9ROI~P^5q{ zYP|q}=X-#Q(qH@fdQetY$&_`?TO~luf91@V<14{P+HRv^HVum^axP1Z#?mX^M_FPt zZvEqElQmd_dY%K+z08RaU%N#M15kIo4yaRi&5{ZD|H!ANZHaYuV(ZxLl*ldY5|LRq zm}blI-G4e!)OH(I&3>~m!V@XgcCs3sfY0_cTd!HRDGxiNx$yD-86LC>qJlPygXUAb ziQxStXD=ECl?wU<+AiuhD(JUL(s6P?pb9!0CG8Yu$W=bM1tb7-}HUNoedrSx0DjI;~Zz5cI*c1Z9~zkHez^cfRt zBV%j$Mb2eq6-ccAgkeASOkI_pzTw3569oOygr@@~XBkNY-VwEEi4Zx95N)Eb|F#If z|K`yX$JaO(q+0?fm^Bh*yDn1F_2*2tt>9&FTOTiOY9|pTst`Q4{;+JDRt<95!mIRh z9@!AJD(>73_;YJe&}No~%7doP_GOj_kh|n8Drh2Sae7$fEQ{_SxFu?ln8#NRjd1Pc zc&Y~M%|>O*M)0(KWn%=YNSh~TnkPtd?(6GzOlD5vs(C1 zUcEUXbSH3QAE;o~RjE_(jagrnN1>=d&4 zo2G7i^pcQG47Io(FD;~kyXVgxZ`#U}R{5FK=|91Wm_-m#(>lyj$bro8Iv_Je-EG676`YQJC&Ejc z!;E;G^!bquoP_Z?SqDLN&ABCPAUn_B5XHfho_G`TQ5+Oz2N?U14vL(e+8cl~a;E5w zk9wNeff_q^zjS)pMNN?)%|PuGhsV?G4aJJ2DY^p4BtxDQNcFmTwWg6=>_V1;EbD?a z3h*+;-iw43FA-))V^D;xjDr>E9tiP@I+h6paeH7eNqpP(#y+Cos(Q8tPS)xm6ib|5=WP7+7l4(DVScK6B4Sa%h&Az>#FuP3+r zA&rBUH4=&hoeSjb_H`V{Bw<>Qn+}=srL_C7lQj&QDQbRxnWFYfrFmgXxbZ}@u?p-& zkz~{RTo~}H2Sgr05wi+TMsDX}P|#xIAa7yF2>Pl8UkH?({q~-%$ay#`Xg6;n>EmWk zQQK)ijDqh845fPm>Vz4$gkU!c!*4k4>zbAcx}HwD?{sobylUtaM_qAxd@?*}Rj+ok z{-A><=dkS!`kxRsX-3K3u&b!8yy^6Iydh~X8_4+RjmCF3NVDghG&IT}8?wo&yV7jH z6BZv@=!ezdg_?J}j;K7?0T%?l>gAse+PO(r{`)FM&|kdu#>kViR|;ArXPQok0(nN6 zoJEob%spwD^5$)iXa2D~!#?Tj>%y1*^@wLT1;LD{ynbc&%CqDlBlK+R?dDb8i_Wjy zj_@9JSRKnECpRe}407)4>kgcp%MznqKOFL<^y+-uiRzHe-`>6hzyGFjy3FJLOpW^ma$~vFQFwV0Z+r(|hOtL{?Wut}=tg`x?rgvK* z8|CkHUF<^aINy&($!y*NvhA@>gv@r4H9WhH;#l#=#e=zU(?%_{&gwYiI%x-So}I=` z+p$Bu>f+QY{@PF2xtZNOK>UK=*@|9tHf3l3vk7tJp$e%4oIkJ}DQF=2F(_vuy>{ji{X%axdWY?ZUQ# z2Eu#Y1^l%)Wb3E>HM2eZ-jA?Kw|#A>><7SJvWkqX-70JTyty4aFtu{df-MCNgzH5{$=+~FUgCP9TzYZ7v#~GI+jp<5Ro9Cf zHSJf{oL{ihc&8eMN;PDcU#gO?t6u{KJ2@WWgT{=6#YR{=a57XF!BRm3xkJug*$>%x z&zhXQE1hN}I=x=(Dr+yvBWP9ag|F%-IeP(B{p^x6KUgcl?5#j-gmu~{j0~zSZcP<5 z5dO^y_?J0oCn-gfbM#BEJbp8U?NtZ&K_Oe!%Xe1gmVCs-8#~*y1H1j7WV8PwS(hd% z9JLuZ8Q;;Yo=OD`gnzRF{&~+%$=Qv);k5o?m)UyHQNKR?D*y2><3qPLWUwMGRgZ!E zzIc_8V|Ne)yYbZoKl>ZuA98*szL*lUOhE&~kDSH*7Ps$}w;k0o7sxr6j;Gs($siGA z2SRol`Kl_%*&C?|yRM-8$Cv@?-gig8@#y{alII_iF32jwK=-k0N4wLhn>WqGtexA=-5_35{qgg; z%V{3}fd#z}5O}QCA%cEa#j?iUEw86KDMd;Biuuz2pXA$res5{<&G*q42@k93=H}c_ zP4%nlYfX#lIdmr#KJMIdb~wFp?PFuMk9Nsu=wG8-H-*6ZetVt$;=L&N7l_E)!$-i6 zry<@qdH?y&|IPvM!#!K{B>3^$^2dL`56F}09}a>aU0N5wlR|D!)&2Di_<5H8|L3pP zy5?ViKq~!aKjA6txHXbxPNfFqw`Y5AW7W+5vzhw|;qxuH?zKZ=dv5L){qw7z3vnmz zQ7D`ycC7pv$W__@`3A)JN#GCx=lc`8t?U3~<{xmK|99Eu7Ps$RMQeuR*ts``nkke} z?Ldf)yvE*#IVyDfdrLIBo)Y>l5b`wQfBvsK5{Da_eQQqdtuYM@3}g>Rn0))|B z+?Vh6=l6Th@07yX9q`bd@j-lazsz9_xnscBKxtfO4rNM`WX zu8Y2b&nYP>Q85*}X1DJdA`u5}cuMVleGCHWeOfbGIXgS1zW?ZCiI*M?4sP`Jp%Zo> zNFy9v7QLZvKg2Y1+SWKj*niFTqrD98=S`b|klRRH4!XDRy5r})N6nw2jzSM*P$+49 zubhkL*J3CXkspujR zmjFRg9o~tuKDKt7wRd47_WBk#JY~&QKBRD4bFtRay5j#I1D2AdnkYL(^{TaHeiw4Z$}%bnnsfzWcVQrUnYW z@LT;6ouv`)t$$XfdXF_6xjHnBWN(z{?#r_1Qwr79l0^w%m5`Xcnr4GuH)|*C-X|_g zmj_?kDtz4k2kS;gJZi||2-m_|rR?>o!ujPdU36OYym@0oXZyYo!t*v@(RM=P6|smE z*UZ*{C_NwC&c0EeU4+Xy*A}#Izj_M_mFzO!Y4u5}Dqq@72Cry+^Py?~K=u>Nf6n#n zjn9HYNJrG*V0T~NvAQF#0{T|h@NH2qJHzTxFdT&uf!Wb45ElMZ_8WD+_z7a&rvT6*OB*v6cUww zJ!|7CdgvyzNBe&9yhcgCc}{9d=m-E6H{9YucIYg~iJ~LylKDkV_GB4f{@%aus-yqC zO+fqO7y1q7oz|yfsgjTXkJ@t zZjt6wU45sx-~8Y;o!(WhzJr5Op2iKijN_j;2hOGXLSN>Hi8B_!~wzoX_lAr-QeJ z`&PLYjoBLi1KyGCkV@|)bkTB$xfta3=i>S0YzpP#`!G?pVavUn9aUKRVsMbs%LJ(u zlb1r5te&rI(KwU6ck41rA`y!7*y`%neO-(nA+N$p=KYHR9(8Ya?|mSDA(X92b+wVQ zU$`9WIOKL)?`mD=N@`2dYo&cTUn~W(6IE>ks>-V6&~y;HrASS4Uk1-cw)+*6a30yS zXKEP)pNf%?+nmzbblV&PgI+?`iCL5Fu)*c1_4TzFM()eYipwC41&c{rh93b&OrdcE zr^0@7H?6(!+23(AWpMC;aNQBbf|}1i%+AivGu%iu{X^}6cmBA+&D3Jj`>N*&kC?rN zd$;YKG*OkbntfvMA*A>!I)g*3uI>-g?i(sT@FL-av&^#Hel+rFDJbk^wB~^@`=NxS zY|o4Ba2WFpraIi)x~#c#X@6w!gN5O#insp)=`TKLpzR;7v%xUYU%9VhgxgB z{QK)aoRPiZsb*zOpHa5V$?XG#0O@6Pi=NL&%gA&7q#qT9FXU)sXCIwtlSWP_fFBK{6maobeJ|&Y1d(8-2wZW8$;i6LtxEPu)=i;L;^U95{`-(|)Cp zYu&x8_~%m^uT+aAQ&nU3;XwxNsL<3^94>Qqmel)4xbond2d>Q8A-sDQoJz~t|3OVF z!kB{u=hOQKzqj1*yp#F7<_089wt7pvtnSFwr}u55ccJN(z3*479C?y>2WjN-8x9v& z-IsS_wen3MB-H>1-|6c^m+89Ph z=Id9K{`!}n0=xhuXcZ2U<-l+6Zg3lm$c|_+1@oa~;awEEeea)t`K`Id6bd&VbguUs zh_Ep(r|m}J0b`i{_uzgu7yl*58Kb-c`MQWs7Vmo@0Xq(PT0@s45#r5M!1|CV9x)bq z_3w=f3QO+}4t@Yvft-;5iD9cNW+S{WTbp>7O9Ge6_HfC8KzhuErgK6_2IuD79x)%D z`Fd~nfA6iPpKpqrN1yBe2J+OkIy^#{c{_a{l=NhPQ0AtF)(76^Hmll7a4^f}2MfWo z902)F5cz#?LMpfNGC79|c+gYj>hSDiqqoENg;ZE{JEB^>@7J}fIo>?z@6qn-QK~E=RF_AuCKhg)c$sXmMfA5QI&tgwSvm6I8P!o+G z7ve(iZJAo*`pq30rxu-r0ie^tih~Ledsm!dj4C3%yBv1l+D0EEo~$z(2(hxl5z5|~ zXYJpLg2Jk+2iyA?u4QEK(UAxg0h~vrbyM5ybwuwFiJrC>t%vZ@h{N-W5Ur-c!5WZ2 zZ<#&s+jYKCJx7HKlbRrVb0%9}Av_SoakX2&RZi-l<6|D-56#-WMF!FX9I4V$%BLLU^&xyotP;$ zr++oV-1^w`bzuNyrVhhLd1~&Oxn!Pe{gnm`jpokw_3vXPU*r`42O${;?5Y-Z=7%dduC;Yp zE|1^={C^<8_s53$?}wgEeOB1_IE(TM$9qh{=C5|z)_O8(=qJVw#k8`&D>TP7oAxow z)Ff_1IuxoH?IScP`W66*7~(}_@`#lfsPKybkjweqt-psQ!OX4qp2x@tzfh0alr9c; zceb+R0AwCO!9C90?5};lGShnYL71BUJ&j(*r{}`0J%^@G_5Q(fJ!!o!#7`+yTAk7pP$+C0LX(C0D0_w+4pwa`MxpYJj=bq^K+O?B27Ece4 zMbO4%PbomUUJUBMRlq~IM)Q1_-_-vt2Jb*c{-L@WU-Y>DVEfol<>K0(KHRAfG}MDe zx9LI6tr5;rm64P~+A{5A!`S>oS)jb78OE4NEpo^!nt!a}G4Hu=D6CCcX3e z<9T{%vQnzR;Vg1uI^%4rEftA~KdvDORfx(z6qk7P+N-5B*^k_WVNSPHL>P^OI8LDtuJXO;y1{K|{4vnx^1iJN;Soin zK6|&~RDb6y76R5$&J&W+thmN_K2&^ek7dR5JEG#_k6&2OgyU+;F8%L<*Tj?b@fDsn zrxxbBha^s}Gz`FWqw*mTeZWif!$&px_HnIc9>~`~S*b!o<3h(WSBcOBI#HNaZfl=E zQ8$J$lDUILMT)TGe0LVOvI%1Rn5gpj+$5(88$_mGV$0HHHR*p(7a+n7Pu=3W&I-kJF9D1c$`C0P13#2? z#Y{CSPnvAD^a1uL)l1dLLI6d}uEp9RRzJwa3?Z2src9=@-OrG#_XfAU%|>fG-S=)* zS(d!Qxhg&vD%w@1)l?NK_!}Z#LcR|i^W-NHm( zC=*(qtQ0MfbK%4ZQE<13OxuZPSju1dP7T%Q=8Za8ny zdrQKQCaBh$R}bUtEL2);3WR=2*ROgey?ur>t(;z{y0R`J86}7$iulloP$()nH_2U< zm&Qio=BoE(HFXry|MCCJL*)raykgwb^B1sz`lU~6!lR8KzmRI07jF~-+DqRb(25tp zv8_t7QfK3$h*S?LU*{{hil1cCl^FafR2!m_YLc;6RR40R#K|5Ke0$y}fO*j&Upm^X zf-VA=_t@zqLMtPs-f_wcN(zC9r3Z_dRd0!55pU;a=Z@{A$Nk$!g@i9>UWUm8!2$%@ z{Mu#Gu=vig^R~S%?$4kZWC5m1=&V{jdzxX|DIrUu-g?{hBXYF?+H)P@IGz@Xpy{P0 zE+5i%?O=^51C24uwLX|?h$Hwg?CDB3k(c-K0%IS*tLHVwl>H@5n&hHV55*Cwh9`Zv zGovevyt%Z}tiTx->^^V1X0^9*wKygKNoheTWvC!JXgF*wv5gvu$jnUaQ?s4Gx@%#D zoj(GM*hw?gW-(RInn_0xc^u+&w(g_B?bGHt4&i_8qe+~C!WUnhOQqCE?uIms(dzk? z5X_3qla}N-_nGg~MXKKvWXAGiEb}tlz1*JU0@WY+UrFQ?TVHd1!Z{ zM~h{FkVlknN@c`N9H&6Q{J#ZoSYbuW&Uz@xz-m|JE73v!r#y0ZLzL}7YC#%gte_<4HJ}ndZvIA z=A+xHefrA>xd~zlCV?~nY7s1kx0vi477>3z@_U|@W7zxnxrzRbNRL8zMEJdZ2lvU` z;#xelNDh@rF;i9Nfw>+mLO}KomYsOT$h8Bb)*QCvG0eGBJMxj#hD?t_jA=o8um~(G zUBp_Re-!>!-SY0nRb5e@K0!$bE>|cy?jKSf*uXqoM&)8}Cc>xRSV_d#iklpf|^T(&yF~g(dvOZg0JKqt1 zaavmP&T7FD6W<`Cavw#{d=xZUVE9J2-w%8c$TVGO2=9te#f)7VSV@v=#odqYPVvei z%0ZO=9MtItC0R{3rA1?^XrCEpr9||5)06XoWIC|&=Lm+p123Crz@nEjjx|uwW$@KB z@5bd-!;;N@GM8hqN}KELx_=BK4@E_K2^hqtH_Yb|deAEABLaux9H?&$qt@-RZ_fRd zG;Qq2ZIwMaf`+r!X>0$)XVv2qHr8vKVeURquKY&m;ka5o3{i1lyTuYx`1@hjLC|f` zRa1z}Pb2a=7ac4XDxSp-45@Nl`T0ZLlz_*UU9OzBFs0@us z2Z85nhcMif791C_oshn4GDp@YZ1dAa4+TFEo=!&$5iVLpoj9Hp8 z8NS5!E_nq^@*H6%In~S0IMZ9uVSQ!%@kh7Je=wAvAu-qTbq+FWBv`)+Kl$o8Cj7Ta zq?S-6;*zLwKmj?M|``ec-?2FxcfceEXjYu{;u za77~j6C+9uH9VRxt!gfyOmj3kzX1&$!VQHoec}ICJ{;egE@n2gdS+kTXo`On=fzj9 zqs)4O?LV*S+VNeg93CE-5BaVB#(J1$S)i+XegU~76k+squRB{HjEWL8BffRyK4@gu zFJ@I$JFPao4NZvZPML|<^!ZGJ&!-9EnJ{w2rxukthACyCz+2n2#}ary=&De|lQIhF z*Ze*iIga4BmpirU(QQSiZ8xRc#{_iqPBBe%iqUN|@91QB4cg7zq9PJuC7~hjS_p{P z7!1n)4A9DEVQAX{2)Fo?|21Zyd)8j`7d?rJGDjgY2`&1=8ZntzK~sdd=<{;y>5w%8 z3Oha_oPvH#1xpb{PlUd!@Q_CdqeV1+0$>)1^-Xy>t+c=|C5k$K4?8X>(-Y|(y3*vW zJyqQ?ww`Fp^Tx&6D$0Xh)yk8TJ;F zk_N%x@J{AutRMWtj6`xok#zdZSFM8QtdI!8_KqOgHg>TR!1-H$0hUgw0S| zRk9KXrF!_8bP)gHIIlz6Zd3ZE;jXpY6P-i#>^j-Zk0kgl<~yTo*;bp1pH!guw~lzj zOt-@Izz*u0_gnRgi`tjOgP0=Lb>p4rP`V(U(85p&VD@|KG_I{DE>jy@3XL)g1=7hC1a^o(o*+tC zP5zOw$?+3^i4;q}_hZLtQrOcHFH6vF<;gh?1TP=$*0W<4j}kvCq{AL%Cbp&8@7zKP zThkoz1rtw_^=^UY4Y&U3eT`+~y*QoEpK?*i<*g|FGsBiD6_Z0y4eg;CE-%bc0lPK~v-jsiYWWiIaalY)H1 z{Uo~9%olG5bbWt=iF*1yrBqeYI<541{vmeFP)#7yz=!Z+EzL=1qsqGxGra&x^7Bmm z-?U*4retA;(es3;`irjY^VleIspdwZcQ{Z9_0@7eL%O1YTg0EU&!{4etX8iD@u!Hq zi-bMQEsyuQgoq`2jW#u+eZo2mM&7kdM^{WM5BSGYsNt^k4C8C^zKlCbHJgKDvgfJ- zl`kO+YCPnjW7*?(lX)l+5e18O2gy)gnjzj;ww6}N{;{>I%ttslI>}0v=F+#i z;gosTcAx0+bUrC{`HVAFs`a;#5L!KjJ%Hwzo=9k3E#?bku7$DC!<@rz#sz1v{E3M) zC77!p6IXk0$Dh;0#lBJb?<~NOIkgSmkmWh)Q6^1Q^C zh}halpqPM5ywO}E60_bBwr}+%gdLTUUSkwZCc!>%lHnb`Ep#l9$%DLM&IOfQfwi47 z8JitRvdRkv;vv}DctJ}YJbfbDC^nP&qhV}1RbCb)?6dL3dU2k?Vy7ansDoe$&8d|p z`?V&IDHNoiQ6Bj2A=4-18Je&;G&;k8Ch0^3ZIw5&L6L7ntN1lIyLad*eGhTh#}WD? zlayrk3Wiz^#nkbmzQx#gNg{A{{M)IKgKgvEXOp~67|DoBV3b62DvLm}epWzbrV2c- z#j;XG=uvH0wp>g}*v^J%Jv;rN*a!*E>cY-aZTUvJcfP&W>U{K+$;z$2%MS)KFY3F1 zBVYU^n2-|&kNCpKz|$qhg<5ckiQzeM3#FBd3W1QX;U3#3EwtNNe)sMSN%8lm_ic!^9@GR}r*u@t ze^9$&3T8&!>|k-WIZm0_ko`M*45wZhQ<&N4;=cyJ-)c5SeJGb${=NspW&Upic2(=Gxh%-%1`5d>gsu4}K4oPzCp4t8Kp z!^@aLEbO7k)*EL)|B@36uYf|2SWVZzR+!KBGP><$TRz&cyZ(VYcXb}nA~RLidK`VA zYJz3$wRNesv*0zhU$(@6#nJPfMSOgnM6NGdyVYZvmb#l@Z8nIip!q@X@G(}>+D&0= ze$aWi9p3jVCcQr`c5mSx@{C4AnV)ZbigxQUb8a|gB7R)M0jgsiXA*kS1nEv;IW_qB{YlGDt7p>IU(P}}q?n4*6 zF)FG%5l~GNqbTRIQsAGgXc#N$qUAGb1p${N^ZO>Q@=@=Tkw!GKX;9eFGTmM8D|Y7R z?!F74B8W1?7$l4yl#zFs`I;q36kyUdoaq*;KY?L|()%wFIQG8hLT_;itb)@-zfMDg zfE}qAFYFlh;jL`BR@}Eu_};?sk@E zTsXZ|je*5Q73%S_@XLCEP){0r1D!)A?q!Dz>PtQ0N0GiMa+j^0SH_cXc8ZLOD8%3a zy%I@^Ni&ZDD8|487EC&AyrWL zfLxfYNTYRe(w6(rY+*IoO zn)3;uR+5eH(y|pb39%oj{Q@~_ZrPjewIl19#(=!HJNjfkG&^O23Yms3&N8N*e7mt* z?aTGmFMo!mCK?;jh;q_yt$@;*oEREy{XtJheToc?~{n(us5aCoiGTx8ZS=!1}{gs)=hz<;M9 z*yMv{^QRPii3YT1i7;~u=cCY=Kq^O*T$hV>qD%@IEx65OW5UL3M^>K?htBk-6-tu@ zQjkXS>TWbxL5Wg9iO<^;SmkQHkeB)$oVQ$znK1a5F~V{e`E+0+<=5c zkt=5d60aQ1xe$#PIROrVsOU>Ue58wZYT#(oaj;CDRIx|~&#)U&p*#kw4Yc8;s08M4b)!kW*LvoW>@A*(LCru~bq z|E}WSvfm1j0m~nySQC+pZVp=h+}P$uKX>+9L6`F6M8ng*?}42=KLps35;^hsGNq!; zm6du68C$5gN0Q+vh%NBQzL(mShZg2E!&G3cr+C^t2DGg~e%+S;zXTiIiMbHSpW<(# zLF7t6A3e-XGTxO_fnj91Y`2bpL^<*0Ph}%Rc;xD!8q8U6w+?EUT#F)8{5)%QcA{ed z3&4X?A}m|^F?^Biy=9ako8W*Sti;pPTP(@y>mI`zmn}~Dri3O_%@!J%3*O=FhV&VR zX3&CTpR9@9#)kQY*x^$tML5b`;2muRLJIfIC84*vcQ)%C^q?_+Pz&F*PJ7L2qYPsw z#ri*XkyM74qM;I^DO5}1ZhZ;=yC-Laq;jjzs6H_BNRsixsPac5Mp3{Jryy#kyMIR=pc1MZ&NFIix8MEZILx&Nj*R2 zpJ;uOD2Jf+CN|2(A{kItlE~Vdg7V}yGR=Cn_Rs~%%U)LZA`vw^;4p!wTkEy3>nJ_` zhz{tR=E_#;)k}oAcc~kBZD*-b*bI1G5Mny>qX9Rn{>ThthmP-Oi*-gs3!1IYrBe-^ z1E8SGgSrJqS?76{b9LW?V%!eN{sN?Z-ymXRK_OO9n`Ez&ME^F$+yCSI#LLmpGN#sMKts$Wg|lTIw*Pl zYvPqmvZ3eX&gQ2iS>`Aw=;G|X>sy~k+M@H3{SU|)4RE7^e5wt|S`OwaYn=y^?K-!@?iWHgcahefxC%6U zD(wLkARh}$7x9QPwDKL=MR%MxC$yb5t!m>@k3`Osdc3Pl65fBLCJWzf&{7%-SFsroc6 z9pHf$FN;Y=ptJ$mmp|7K{{DPUi$+D^mCRQ>vISUpOotv!N9`A**V|jg@|D^McOmC-279Dz{*!_Jy#bwYq}IEwn6` zAC(S=5fhEC3{<+A*6K_?b3?|Ds;fu5=DbcVg)<{*A;9FslR(Q}O*g>}*0&mAWqt4( zWq&e?T#xL&AMCgU0G+1<7_c7_TMUUx;sUZSs5B*B-~-&3q-9@-iKDVDt-XPoinuNy z8ATVO3-*JWS@S?d$hJE0GxI=tBItF3UcxghE2&XDgKBoebJP-aKFV@=qeEb}>@(w! zjeR!c>JuUeV^PP=zrDAfF}-IQfH=$)G&eWx8Xevas*+Hh8f?2^Y%TSJQBW97r_xXk z6z))ZI79W2Prv8@jVYnJ8^%7=gPA1i>pN@ve@?Yls-sudB4=TCes9{E zhDnPT{RDDCreb)8mi^@0enP=oCMq^RSr1hqVstj<$}eo-S$z!YA0FnU1QtPTlw3DxqtW*VaXR0M(kAQ_cWtI5q5($~I<^*RMIQhH`PAcs5ZE zMuR42MS}yF+IY_MbgCRe=CTE_$C2-n%x`!q;>wSl)7&!N5^OJ+{DrWRpPns&03&hN zA2DBz?bAG-&UbV5fQ~6o-gOeogFmXLTL@spM6Hd9P?lE7LR~GowMemhb$$rA4N_{p z0`1wNGPn|_1#OIuK9n;z8kSp|-Ey;)YDQfD;E|QIr4~~|tM=><;?W#nNUOq9!917y zVE|24k3xnMI04M%8w^&G$9yiRI*N-WgH6phO2D|7L3o(9l=lI}eSIMz;Py~ow%$7hgHpZ)b`(B@fA-bVzVWXT6~b0sBYz4v$awId;NhL$Y8``TB!@Y>95Og; zt_J`S5I@!-|L2Y^vH%9hK4@4@3|0==7WpX(^@!aj-oyQ%L`mEjyCA{ql?ZGtt95=R z?Yyq;i7IJeLzCnc2w%DZ`QuM%t2M(#_m3`JS&ZPZv5`>V_h#J!xE%JjM)R@OlzhpN zlU4L5%$^D}uGeHJBPcu9E<~cn-CfCr0h;f?DyLe$>0Mn0Q>djsi0AE18Zh)squS`j z8ij4887f);d*s8L&LLUlHQ?rs%MO6(3#3thMAE29iIMHUw`o5|!v~|Z@nP`@vlv*LB_loF6L}=;66jliseKTk#V02ti-xmL> zoV)eGoxbKhy4aSg2iBHmT^(*>Gx0xT$Y^uFu1|(TVMm{nsgZh_RZFEjTmeL5x$I>j zny|s42QWp{)q&p&f};cr+7s)Bgg4lb#_fAa>$KOSO!(BR1KG)1oP&np+kFg25sdu6 z-DFHW=xMn5rU<}N1^Rx47tJ%@JBwMhS2@e~MCT;Sg^-n61)PjPYV_;b-%Bxjy_k0* z0$$wj^dM!Qw6=2E=J-F(B>FkMztqg!K1g9xboo9rV5v*bel?;Ml<-*4WeaB|Xo-Ps zfJ6}q&ej0gsj>|@)aR@Ou2Q5}Q1aWBtJp6j$py*t-%jqU0<--M0X>QQDX;R# zvFSLjYwgIdO+hd)?_k@3jeTCKakE(hJ;W~kwM!fc z+EOyQiu)JDYi#sH0-%yrg;5e)EUgg2DB9S0RBX;6_D2FkLif!n_&G4Fl-y!QJWT6f z>#Sc`V0iYE=NYo%@O0q-5aZU$P;t0S>bFWV<;i|y3a_d_`<-9*I{!Y|f3ALkaE*3{ zAr^Y2R{TVnT)If2z5=m?{Be+kv4<8*Qp^Mz<<(`D+2}QHu9`I(J=`(0T4S7Qs{}Pc zsZY&-*_d>%S+Fm?H^pugs*O|ANuI zZ|*vsz!(MMBTo+Myoqh=++M6#B7U20YhdDP{LF=dG&xS!6MFi?IjSxdS(v`pCPM>a z?3^hrF8G{$D2uFmc2z)1XmK>us5YKImUIEP$WRorrX^Di??;zE_Q+~Z393G^T6cX| zif7#sZQy`z02vb@zyxHa@P6524;jT0HYhB32clvRG}Y|1W0Ht94E6mKy^F419WD-D z7E;^ye$xoAdo=*Ys`P|0^8C;7hq5@2S}ch$-;|z+fTgl`WpFQn*S3KZ-AU}#`cMh3 z&*>f0;ZQJ)4_r3k=U|kMEX=&Hm`QyabhLqPs#GOzcWjpdt9ObILZhB*{Xojwv@lh0DakVGB6 zq6t&cc}h9qq`z%#e3^DqwRK!kKZBgwVv2Bb=~Pw6hWld* zlT@?zuR$sYTk-cg%s!#B^Eiz$`g^bGz6Kg?yN%2R{hKzi<>Vr*f$#%pPV@S^2M5J= zN(HkSq~-{w80gu8T66*U8jBybLmFY^#1=F0k#PDm@zodB+Ehz2cNzYfq1i-O#5Q6o z;?H}pM**XF+s92?-Rv#-kUpBPl$VOwjQfz7tz7_js%Tg;2v>ev+J8GCe-tuj7#@C ziAX#iy1h$RG#4rLYiZ^tp_hU5^lV|#DmO$wQ`n&!> zrY>Ovz9POnY&yaqExud?tv8Pc68-h@j-j)Pp-jS3`c4q7QNMc2^YyvjJUWh<@NLUW z5XYw813_+!Fj;W|auHVE873-dRL9gDO&>E^4O}rVP*W}u8dHFDlz>J!m@u7uzPHXZ zN;Lyizrot|n1QAGR?sLDX(C26XBp^N$jEvOe2BEBwRv;rz~9ozmMUS!i;@S$S0}u~ z-6N~0oY(b>pBeBaDR{+%&NyszYatl4Z#_1$j%`kljE{#n$L3EJ$thZ@luPPWRmdS? z)4k*(16sy&09D=^5oNyx{fkFQWnpa3o{>(+h`DDH^9)_7Gcm#*-`uw9T@9&EDN?LV zYyEpa&+>G(cy=D+EU!xka?F!2Q}2h>yD!@Zf3=PRR)Z1k<9eLRX^@nk6+p$!F53>O z)tRl|%FO|oa-tx!m6Ir zeSD5(^JTB4dy9?B0wuT6owMOp+q5`BW9ALK<#}5<@OxJ{0qCo>hSf3UT#v+2| zkmB`C1PXYSWLdKHB)M_b++5u)_HM`DRj1SjbkLw3PHM9>A@o$@nM{U`53P-?{m%yv zA2;&c#>l*pc%>(O8qaiE&r>nRYeF^!%lY@!-X{)g@GdTVw;<|-IS@R<1DxFZ>7D8p zu@12;pIYSL^PJELek1XnUMWIx?e;D%bDldjt}MIyrueH6ey`nLI=JId8!>n%$?$Zy zbxCP^ zY>WausWiSZ>G^%O4bN|w0^CZ#HsF-GKoRK6*=_~$84uo#*Thyl@XWpCP8O~yf{BF>us6$0BXElw#|BFHwuZdLo)_vp z&s>Rx()|J9sb@R(SYA?Mf;p$pjK`x9txv;UkLb*O8R6WiU(9IV2Ze(uH4~Gut8l2wva4XDW2?#YeJN(7Z z6Xq1Qwa@m_)3(kM{RsGn*I{$l?Zi2MNzdZD1RrlV(l(=VjKYP(kxaOR-N!rs|(qZiUqnLDlaneg7OaB*UR}dA3k6dg-hS90x&9&2iG`;SbcIdPL(+9FW ze*M8sYAMTLT@{|UR?M?iQ?!vrfKgj6X`AWdLum9_DTZm&={7OV^eSF~_DpCaFju$b zrAIebcZSdj{gSQNu@FSWHkKR3RoSrXpd7|C79S*zj-P9m%~|R-32z)iG+}_f>RBIn9tEsj09If#ADj&PC$UYBwVwEs5@F^3W6(tq24mtpJJ)e2 zz-fC1|5!_=)sQHr$t@$C2RvCK@3ijo!b7;Xu?2lHC)OUe#DM1BViG>sWQ>qU;mUsPqanYywjrnQkqKhe6hC}M!s8Ovy3oAa;n*=8o>Zo1l6fx-v`M= z+~o7Yy8&P>{+f1eKb^ynr_&gdu=yZc(GOi#wYlA~))E>Uc5Uv4nVA(*QQx|-l7L+g z$XzB;;2rUM-;UnRjdIf$Y4OJD?xy-0Pg}ET4X2OyTWu6tGXg?3ArZ zPjqJTCbF|2C)VQ_op>A->v0G-t^#8gnRR#lq+*NaRyiAhm;3af{Asz(cPf?>>T00( zw@;%xg*moi!{d6-Z1rN>Mu%66^mSn2F^DF&$NqL>X&>HJH3<)d z><9RDiTVX6%DD@mS0qv$nWQtOUfJflJ*jPd^kntQQDC$H18w}sPu!n|Z^AAum1VDu z1KtfL*+5TIA1q!3sN65%B?Mr|zO^)RDuLmQZ1L~Aq7+!`u$@^yEmOm{R$kY^Xfa46 zq6nNe>+9D}(S5AtQar)5@xxUTNE&vX!Y{pcbaz^~9<(u$o@fuH3Zbr!H5m=HGqBA{Q!UfSJ4DEj=eO@3gsus&$ zw?i}?t7waGqi>sbrCC*l%&c9qsF==WmE@ux!}@VE^aqJ+n_cT8RZSP#kOQKW2Xj7g zN`qQ4+8uv)(N}F_Jv-dS!6>$%GVN4}ZnH|o{$xF8d-s|2JKUrZ$)KLi9*hnDRn{r{83}I;U`? z&HKs-9TwpSsslbD%G{a=+gbXOR`Yu9L@L$Nwedlsrz%N%Q$+<%u00)5u?d{%^CVXW zusH_s6VxifIt4q1v8HLjEFd6SND;kI5$k#Gd| z;uWL0(Eb zr@NLbP?5-3@|+M{{!5~@Qx~Z=d}Fz>?c-L8A@BhUgp8spm^mQQVa{B8+DcOCVIL$q za8(8JSj&fI@fZpG-Zw-!Fz*^ul`Nvs4PKqlrS;y=rKeQi0Fvq;)23g~hZz&Lp`1vXwSE+?__yho7MAAPu=IX&&bW)-bfS z;WXMgUBYM_YH36AgvKX11pMG>?FR1~Nye&}f~rH>riT-hHykrsEFPU8f9ldclr?tt zZ0flwjvHPyRP27Xn_Uj!zR5(#J`6p_f>(&>2X*+it<=7JocUZYGjnM)lWUZ;!+K3y z>c%%wCPDy!25-K01MD9DwU%q~Uf$_fZYA7TNY|?9Z;s6H!gVx<=>%{LWw?*;V(@)s zrQ2N--+0R6KUBK;Awl74HFE~LSu*!wfKYy9`@PUG2i`DlTF>6_x#h6P>c)?(ZF`3= zv?LKwgqh|b@f7MK@xg&n)nhyPD}~RrtDkLo%`~TFX$SepJnuc7QJ4rczY9_c+CGvr zfX8>xYjdaN(=R6*Z$(!8IP_Nu2i;yNhd6&-Qlak1z|q9Hkjl1J4<%o?Zw{Dx+uDpx zco(tYviM-#zP?F&ZW?`dYMMa1dk-1rb13Uo;=Cl@OV~KBLSCr5YxG#94j6$*l)sV= z>lr|FnhPWy_t$Qt#t?HC=V6N_a@?l)R-{lzM86)UNm#d;0WDyM!&b^Moob}D*Imo8 zU?e|Io$iP~LTHcOusgJM=nN^Rd_T4IbfkQKU?g!KZ6H=oMvv|`-~F4vM0+=G=ufZc ztoAJKjE`_yb2xRNhhrfAnQ=jz{hY%7JepNid?canV2(UREXNThFYKL>xUAs9_o+M`wn}h|PlEM0k6sjp0&7Fzf@qDin zJ`lOFS0z_1(8rvnPxFEsSc7&AQ~gfo=E`eF&d;oi`ZRdZFeci8<4^q^ z@$+Coeyt(ASp_&~$J>=B&$v7ebDf>eWYB50bDv}hOR=E8|2zWg8w)c(m(6o=Cd_vpk0pk;VwMWk>SN0|v2gN_6_sX{ItnHw8HY$bla+S?&-`XDC>Eo2nuPzPA z;`+)Q*J^q12mm2sg0dBrAz^#Wh_^c0nj7-g(m)YBx&~fzQjrLIJ8^D%wi&!O&?ek- zD;#0>tD5c*9U+t3!Et)sS*4>6jUiIk4P#R?eOsGFRz93KlvOD3?o=vxa})2^v2r(Y z#x}Y7wk!U0x`ir#^P}`8ys!Fg=a%Q?K6<#mm9}O7gt2@Xnq*ude}z>(U{Tc3 zRTfC&%9{IWKWH^8U}q~0(7UGN#<)TG5jwGTM|z%|JR75}G#wcEsCJR`q_oZc;O+$I zm!0b1opOQ$JG>3<(d-#1rrCORTm*mSTVEnpO+d!%hn6J7+r-mo8}s*po|mo->pd9s za1m6^cKzrhOpO0bc{R#T;J zn`ohd$jb`i8+lD{X;Vg11|EO_Z-1f(jY~9aw|Z|DP5K0nJG^&j8H>udnGRgBaY`-d z|H28rBAcABv)~okYIgeLmqhQ)1*c8-3pE|eWAQO(9Qo_(R-E0~?Snvwj{JRtls=0EwG#?Jy!<)?)5 z#}8!F57M_PYNB+GQRwb>Wkbu1!o=-z95{pqduCS;4a(WbVJ_aQrY9FBSDVJ!70!&t zB%4@5w_Ww6tn1?ciXOs~`Gk1CkDnprjD^BbVAnt*+j!%1mBDpme>isz<3!A?s1HyQZMuA`LJoJw>*j>;kiS) z$oAUV^!|8eXVJPhPGa-#Vkf4289UkO^4oyw@%u~ElcnU-nl(OrVt0Z#HWy-2((D`# zm115{qHoy@zbqv~#pSc~R&K3?nRk{~C3}*~-dR5J9`1qVokC?}R`tSPvrcX-ntt|l z&dQr!mb5a_4{AHSP<+P8%3xCtqxyUJn!n&B%D! zem7Tg{P}L&%@BKXMUTfX=TF(kFzOE+N=Jmp1dM;6Syz%q!(n%)|%O4{*%yvxAvRi6b z%4Fp{H^QuRhwyv9;m`=WSEQ24(P8_?U9)yupwdO(HgRxZ%@nhxd#i`yQp0a5?5+Jp zq?NXS^Nqi_l`O;W!n!;Oj$9>W60?(FPa|(O%&o*@((Du~(sUy(10AVhM5QCO{IQH6 zC>%8}Gcpm|u8XEdNKM+26y-)|``{HRN8PA4vio_TvqN6w+fjL0cxZ9UbLmFSi=@q$ zuXzV~R@45~Z`~PPM_^sYm`f^pK6{Zq;#$q>tZ#eGft~~QdY`;^@aWucov%fS8*1XK z)yR?N5}RWf70tTC<1f?Je6AwFIaq#iuZI0Qa#@n?83?rG(<}||%uD|;0rQTvIfFUO zc?%ui`?M#J-opN2nIV^7VSefsh!%-=&{k%yGWqk$BX$+9{xso_24)YvpQi;h8MXq= zoe1OZx)fIUSK9DVWm`*&EQY<%l<=-2IriLXZ8+z-00;G^PokLdS-h#16_v1vZYSmw zSZ`~CQn-R2!04hZS-1p_0C`!W+`ZnBR&7MoILisX-ZRE`RJ?rD8OB^aM`8rWQL;ul zK!nf-UNDKev>_jx*I}7r@{Y{LFrHKE_*aXY=af~+tjj;!?hoa9uDDb7J(a4AMw)*( zB4KH?V1N4it)0803r`ns;AF=iI%t7lzu5DBk*JbBK_e?iDDxAKnd<>5?FqC`;cMsJ zZI4s#t@<_FUK;)iRHc>@R)0T(=oc-GN7;TXwsphn@TbkH#|wj$ARL&BFnm8(@cr<_ ztsmddQUnGiM*OhdRq5HWb$7Nwx#+*&|7y2GA@(m&_>dUPv?n=qboVHGO4c^H^+ru` zu!+NE#N(`*abQ8XRWl^uRF-AL)uR@&n3vgxf`)`VFxzvKF{ zjQOh!dV5fBDlN%+YT@O8A~g!p(Fa$0Sp)WqQ7%tQdpeW{OFlb(z0moD%?pyhV$8R+ zEkeq4GoZ~A*L~WwOoZ8nqPMBOf=%H!mra@+_OUbr-X_*^cQY93Ql1+ONU3AK&>zY* zNW%GqtGwAq3PGMI_%rS>_>!)}+Wf2Jdi8UnW@iSWz$I7psQ`T|NSSDl$@~b-Px8o& zMqC{SZ`zBS4fb3aST*=Uysrl=p`$!W@PL1#SCObs7i@Vhd|9}jfa|um)UT5Mx)zy8 z8^r47!hZQ{4Rg%?T2^Xf=oEVGh=UBHXTnVbeB%DtsoUep%Wx(B=Dup_g>(%a!S1UQX?pPOm6G|E@z9qW zdwW~d&dG-a$9!K={)AFU>iGJ}UQ*h!NG30HR8f4;}d<=um$2eM*9eH^rx-sDMJqn6Gx z++CkwV|NyP-0Ls=hxY&<4?X^GH%5Bi4TL%3`F{GXr+K%2{>rpshd5{Ya=FRcOfh&`n{Pg+#oD7@XRhVvFOc5-{W(U6wF8(JhI_95I2Anx~m#rPUA=?pj;2TeZskl9UWa)vZ zYiw$9BsXjQm}hicxzLx|)v7G-Ff_5Mz$S?uhf)b#j-A0Uu@4h8_pO?&U#l;dg3XSp)|t^yG=yP5K2WomU$ zIlt2>s?x@t3g|(NM8vyTx34O8R@WVO`2I9#YyAB#jN8WM^2+X-89$|_$Cdenr~x0{ zs5N;sYZv9MC)&yEQ>I$)&(D@{l=34qcZ4R`};RbHFrUIkp+f=oty+M%v(M|lV=s}HxUp^h8^`L?r zWT745lE7Bw-&n}Lj5HdNlmU;NnQQm~2lq_Pku#&yOZ*8f?>p-@kTQKAv38WQ-iaob z-_C6K4hAgScfI>1X&VnGw=QOWA3vmd7OV@mF%iKe$~l#`@SCa16qT3&BWmsMWg#m!1ioF7>UnysE|_u6~uxWx(I&7IyQg=6Vi#2(ap zAofm(gh(;gi>J0kq$A1DMJnn?4LIkGq0>6yfFNoiRbLvxg$IIfpYqFXAG-&puB_Bf`Es~leLNI(C~gQL#hU6!(Si#kG|4&Rp7u?Oaa z=bz;&6w4-nf7!lzQHx?gVz`P6f_4<}xEuoBCKbg!gdk!g4;ZE5WQ4QG#8BF%;pBJ! zhWpk0;X-aGsjGXvP15Qh+;m6`E43513-CCKZ8^Ej`GPun?PVG9%g2PT3Jtx!*1)IC zCAxXPjV?3ael0n=5Q3?8kBI}$5lxZLJ4@s3O5`K5BAa7bQ|L4;yU2%F>AipbZw6r3 z{_4-5_t5}`yRVz_=A^dTWm%@m-i_cSBkBw%V0f`G$M-&P$AL%8rIFO^ z)A3xb1afvTPz`{CW&J+9EBb!sHx8FK&VR=Wf-vmNfVmG*HJpKmjh{bfKkVjKL7~b6 zV18i}jwaY^oyP%Fi~fAojo$s=NcP)5(A<^TlA?}b2oQ}lP6`a1Vb*F{8ZpR`{hG`0 zdU)3IH1W_6aT+Af&=(dz*i&l(JMUD3n_qYgB#}=WSGa`bb0BOz!*O47_X+V5+|QJ~ zwb&pQs;;uKY`9De)E9 zYC2|pxpVuIgPRH!4 z+XG3iBxj$l5aya^#UN_dvA5?f0{14FHMd<^QY?L(Ogs^^7X1q)zVzo082&0@`Ni@{ z&FY6Prr^m-%$FHG7(1jcf4}Ar*ZOF{RiSX|X*X9CTp8vx3)lQ2<9jNK1vC*`y~~!-li*gJ6@G`1alGIGg^Ozl7zeXO;I04F|si3+j9K<3gvWNGf`Xgkc5Z+Wy7%-ONGNQF3hp zDI&NC!p_l%zQS$ub3)ji-hnH;2=f4Gn7vEO>h;8hO%BG?ZBKrInn8NicSZY+;NiQ8 z9n@d)4eFX`xfW*wIA#bBUY#DF1D$Syyw%r!jTGQ17fWQ7w&@1^?MoN%@s0fT_v^dfy=EZML3L-qM<%^pb4#uwOC|-o$ z2S4jx{BmX?N>!X06ORLHx5)_SWCS?CIZt>QLuYj`jqQe(C8{l7T2N8?>F%~vI*)zr zEQyG<96$G@MAbAAuJm(0@ue9n&*&mbpQ;LVrXHg+ck+AS zUDiyN5vywLJ4nNX8UIoLELbnuE=~Hy`xJ17E|aJrkX1Uq-VLE7HL?*Q#R>W_;D7`%{StQ&?rDA_% zG0a;&8!{HH`#+WztlC_OZaON?RM+s1h{FF|cAn`UmD_~Kuh z+6jNn;6UO>AF2Ah|BrybR>k+-epAP`*(tMMZOb7hCFh4pO`%ig{oqB;zhbJF=5Fgw}`Cj zWs=)Kw}%Bd(4uC9qU-&uF{E?k`RDGpRRdq1cQl&ON~wV@TteD%g|5a>G^dQ56tv|0 zoknrr@HHL^vsqu5KogtK-uS;~`|pnD?LQ@!1Rr<;h3XP&WxdGLl@()i*Hg1cYhkgO4#puHu{y3ZLSdu7vpW-l%H*=iMR^| z;v&zzFeYqx)q9zeCbnq|R_~UNVL4jTh5+gWMxdIdp<#3Lrt(#Cua!XPRej2Zh4;ja zHsA3qT+Z~Opr6wA-VkjdO`V7AMAJL2XlqPLJ>)7#$~dLc>|nIkoRu2xIt=2;H$kFk z^+|+ft%v^V7rr_!X=bXX(P1Sqv?TMnJ;vYpMZc+`!1N?iU~1SqXwnVrViynrtbiue zkO$sYU1~r~C8SDABbIyWbQD&hF>a&pmK;w^cdD1*4Kj`l2HH=6B+ZncUVcuH}`!v*Jd@B zT34%@$B(D1J_}CQHAm4L8gp%U}1U*_7k!s)!XS?@ylp>EJGHZiM#-3ed*Tftt z#h=pt4E(JKRqw>}$)LJ=`lQ8rML0jw;O84-@JB>1VgmamMmv6jr5Ze49^^*d3$3(? zy`IvTpTUASK8;aed3Cax{2QY=wGQL!fN*={@3c8676~>PgM!9JPctyYvp6SX@vgj& zS28a#$~aje6kUUAX*}iN`Gf#(Ee#SQIViq_fCO9nN5@gd$QcYsi4?PpUDbWtWfw>V z`L&D;VSAWNgWg-W72a)nq-x_uv!z+Az{=6{&R1}lUT#0L_d)^!Iy<>vU2{WoA{}Jr?w2GrOgQqk&8qF!G-wl}@4nFRFqAOG^CvIO@gI z@7_rd=5*2pc^Zn*h_}3qisReWdlsHg*ZqeQ5Ll>52%%dIiu5uD!B+aHHS9$RNrId; zjGNp@JGfanndMgEU=!C)`R82_qyGuzfz#UYnq|Wl*3=}ad=Yn_PEj;m77x-Iym#8s zyf2pCs*w&1U0Kv?YXo}5a_Jy2jE4%za<0@KiS~e%|5~{6^J?-L_rHfhmZ>3)rT-o; zBeIEi&mVF*Jt)FM-SHiN^>PesDgk($=SkcOG*B{2&0q{!q|J=C+&EeT@dhZL?n7Ep z%Xdfk3aSbF-u5`^jM%S}~V28^oD2dPxv<#XttRZ~f+Z}x*lg@O@GQXo)3aY7o-Hs=GDCZNh^feKZ zqogEsR5!+sqb_aBU|grMjnBMVsJfCkb!t4-uw@^gkh&2%4eCy|OuH z&->(H0MMh^n}d174UdxgEF@Z-sWyUGQc<=<6j$vYby~7GbYC^FaM9vg)t1ZJDD$N7 z{0$EiQHsk|@5J^GdE`rOc1U$NYbz5Pa0-xW(UObCpcKF1FVrgDJ7c+%|FKQ?&h?=E zi3C#h{I1|WXITS$G!H9NYuIkN!>?YKq*Og2u2=8FE@07-l)?mCt)VXpDmy)nJ}`$5 z*a!C4@UAhVhvY!vgi21*hu081z(+qm9~~910|*_0JnZkhg$#$QaxZlQF4bq{M&4=x z)@g#-&A)}kr+*+_L^>s{y?ne$@29bE`qK zJNk6#gqoEnqh%ZIbGQ2O2Q*C6c;)!?ZoX2f=d}jVRLH5bA%H|2-Wn+HX_ixiC0aOe z^+UD^klj9Uuua=})Lt}IyYJIX>xrT1Chtw`^|Pi#E9E~bez%jG0DNMu)Lat~fYfO~ zNo9-!z0iz?IV0)Jd18zyuf!I$7H=mOKeP_h1uWltq`Bz4&2ei#JhS3rSnhH7k=%Pi z7`ZnI_~#MkEprC5X-r=QL@UOoVKABX6=Tcnga3br^SDcmF7Dc#ii}hGI77OL&wx9x z9zVn(uO&c%7_M{TME1Sle6>ER^`_)OtsaRx^o7y)v~6h06r6C?P}f^fD||0nO`Oq= zen(Ej=w1rRV4*FAC|lOdHOh;m)X)4&O}jkDh7%#(?jy@KJk7pYEl(-F77Fq4`VfH- zKtVqb-|Eg2Lc8UDT_~Z%^N3h#Mew|wdB39X+~;vVnag)f4g1Z6t=e^c&w%n+T?bnd zpSraXF%b14>I&kgPSqucSEKFqqK;IA^;A>D%1_QwEMc)WGb&Qr?i>Kq#F>d*H9mgv z&6YN7!al^{cEqQGyx~e4uO9?Y7**TN&)1Emw&j0M0Zg}EAlhPvk5Yo%>@S>W>mrz8 zFo;J6<4y4E=I( zRQj@)#t%x|XEeOJ$_VwR^MgkdSV>FG{wD+#@PWV$FyEIYC&pr~G*H;0cg>H>e3HPT zM{^R!Pnxr*tupr8@PWP`;OKzQ^*RkHH8`OS6oG&nyKCX^WE|MPx?aicuP9_Y%KObi z4i60a2KKXzXtOR0TomTnriZ1UAkq3B8TDEy?Tij>sCg!2h-m0u{chJ+TBP$=*d54)Lf7TH z;TVv130M&G>7dYnRDRnPX7`Aaw}PDv3o)$@&y`p_PB%S0vDs=DStaCDYCE*}EO0d# zzCCsl^tc@Q_k^aITVb$Nq)K8{1Verf2haA4UUZkvt*(=$vo>av9gM~&9|O;fI&1@sRHM^F$Jqv*?!pcr zqj)}fMqEc!YkFCi!szM)cKF zE8OO3M4-4g%M#cO24ywIQ=f`k;-Q}I;b_|HrR3GeFnnJp8cXrev ze~f+{3@d@N;yqaWkMEumA2Zhdj{bKLosrV%@}!ma4xN?eZEoi$HIEL*=gxT^30$Iu zpQ<4gARA%=uF-(>pkK16t+vF%4NON#grUYhRW-4p(+)ra{p@TD$8)S06(Y@KL4GKR z%iK$viZg8JMi_H%jEvbA5?M#2(f@8Z0e2DLoN1b(*j@=G=m^HG$gX`+)VO*K{&zd_ zeOHi_+L%>wWvVrH4xeFRj56+y_N!`?(9_p{OKy=@rAwOT5)c!mjix3ets%hKAGjrb zCi8SXI^4d@yzenS`>WTV){qCvE5dZ$0{hqfVL_ibTX;CT=DH>|@=E{q`t(bhQj3|_SAx&||=~gvLi&XguB6~S7&i)?C z5L>4j*bnZQDgk=>9EaUuKlJ_W7uQmb1!B zZ{3M)d!}&^-6wrfcOXPD@#TGq?cMEGNGSp|bDEaoHf(+twCu4H{hz-l8Aem@*LtL7 z1lU`~Q0s{h;5|7dgYorr@6Pr8Pr;LD81H7tR+6QsHMQYNY&*5|Adpk>7BH?@EAjSn<|ct6e}R@EfO)eIQ*j`?2!T9#_l zfc(5NZ0~EwrPivjlyCg`$wy@ORplUVeLbqSof`0IKuFuujF?@)HwtaE@5wT*nR|*C zgx>_&yypc8Fy^+!f(v15qpk}@IB?|j2Y?>x>)~-kT#HZe8@{qE&5RksI{4}Xr}Eb; z6W(7nIZS$g`v)MF0v}qf3dg1S9usQ9?57O)o_%BF<#2_XVMKG_B5kQ>N;B+8BVwQcpmSExq{Lo2GOFiMOrK2Qc#U zp9X^$t+rM@>TgJo$wP&Qf#2iiSC)Z$5D=qg2IN=^MC+$n+VEo*hEW^MgSS^M+&Flj z%mN|15M>P&GOBrr*53iZe@nmE990b9dUa?Fr)3DD&VXkTU?uDIHa)p`dyF>S@HIc0 zXD64GoZYCkHMxZBxm!T~`o=T+kuw0p5?wnYqiWL*{r!g{pjs5|-njzDIA9kXe4?)= z4Tz_$?EGO(m9KZccHD2RdcE!YIKgu~C5X1&aBgK=kU$@4!A(wAgqhu|M>p^QJ@FZ literal 0 HcmV?d00001 diff --git a/assets/tileEditor/game.js b/assets/tileEditor/game.js new file mode 100644 index 0000000..6f0731c --- /dev/null +++ b/assets/tileEditor/game.js @@ -0,0 +1,1068 @@ +function createCanvas(id) { + var tempCanvas = document.createElement("canvas"); + tempCanvas.id = id; + tempCanvas.width = canvases.cvs.width; + tempCanvas.height = canvases.cvs.height; + tempCanvas.style = "image-rendering:pixelated;image-rendering: crisp-edges;display:none";//display:none; + + document.body.appendChild(tempCanvas); + + canvases[`${id}cvs`] = document.getElementById(id); + canvases[`${id}ctx`] = canvases[`${id}cvs`].getContext("2d"); +} + +function startLoops() { + try {draw} catch (err){console.warn(bug+" no draw function found");return null;} + try {update} catch (err){console.warn(bug+" no update function found");return null;} + try {input} catch (err){seperateInputLoop=false;} + try {onAssetsLoaded()} catch (err) {} + + requestAnimationFrame(drawLoop); + setInterval(updateLoop,1000/updateFPS); + + if(seperateInputLoop) { + setInterval(inputLoop,4); + } +} + +function mousePosition() { + if(drawMode===0) { + return {x:(mousePos.x)-camera.x,y:(mousePos.y)-camera.y}; + } else if(drawMode===1) { + var xoff = canvases.cvs.width/2; + var yoff = canvases.cvs.height/2; + return {x:((mousePos.x-xoff)/camera.zoom+xoff)-camera.x,y:((mousePos.y-yoff)/camera.zoom+yoff)-camera.y}; + } else { + var xoff = canvases.cvs.width/2; + var yoff = canvases.cvs.height/2; + var tempPos = {x:((mousePos.x-xoff)/camera.zoom+xoff)-camera.x,y:((mousePos.y-yoff)/camera.zoom+yoff)-camera.y}; + + var center = {x:-camera.x + cw/2, y:-camera.y + ch/2}; + var tempAngle = pointTo(center,tempPos) - camera.angle; + var tempDist = dist(center,tempPos); + + return {x:center.x + (Math.cos(tempAngle) * tempDist),y:center.y + (Math.sin(tempAngle) * tempDist)} + } +} + +function addStyle() { + var tempStyle = document.createElement("style"); + tempStyle.id="gamejsstyle"; + document.head.appendChild(tempStyle); + var tempMeta = document.createElement("meta"); + tempMeta.setAttribute("charset","utf-8"); + document.head.appendChild(tempMeta); +} + +function rand(min,max) { + return Math.floor(Math.random() * (max - min + 1)) + min; +} + +function radToDeg(rad) {return rad / Math.PI * 180;} +function degToRad(deg) {return deg * Math.PI / 180;} + +function velocity(angle) { + return {x:Math.sin(angle),y:Math.cos(angle)}; +} + +function pointTo(point,targetPoint) { + var adjacent = (targetPoint.x - point.x); + var opposite = (targetPoint.y - point.y); + var h = Math.atan2(opposite, adjacent); + return h; +} + +function loadImagesAndSounds() { + var curpath=""; + context = new AudioContext(); + sfxVolumeNode = context.createGain(); + sfxVolumeNode.connect(context.destination); + bmgVolumeNode = context.createGain(); + bmgVolumeNode.connect(context.destination); + deeper(images,"image"); + deeper(audio,"sound"); + function deeper(curpos,type) { + let addedPath=""; + for(let j=0;jcw-32&&mousePos.y<32) { + if(mousePress[0]&&ImTierdMakemenuwork) { + clickSound.play(); + paused=true; + optionsMenu=!optionsMenu; + } + optionsHover = 25; + } else { + optionsHover = 0; + } + if(mousePos.xcw-64&&mousePos.y<32) { + pauseHover = 25; + if(mousePress[0]) { + clickSound.play(); + paused=!paused; + } + } else { + pauseHover = 0; + } + +} +function addFont() { + var tempStyle = document.createElement("style"); + tempStyle.innerHTML = ` + @font-face { + font-family: 'PixelArial11'; + src: url(data:font/truetype;charset=utf-8;base64,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) format('truetype'); + font-weight: 900; + font-style: normal; + + } + html {font-family: 'PixelArial11' !important; font-size: 16px;} + `; + document.head.appendChild(tempStyle); + canvases.ctx.textBaseline = "hanging"; + canvases.ctx.textAlign = "left"; +} +function img(img,x,y,angle=0,sx=1,sy=1) { + var half = img.drawLimitSize; + if((x+half>drawLimitLeft&&x-halfdrawLimitTop&&y-halfmaxWidth) { //if the string is too big, divide up into smaller strings + var tempTxt = txtList[i].split(" "); //split into individual words + var tempStr=""; //string for measuring size + var addAmount=0; //track where in the txtList we are + txtList.splice(i,1); //remove the too long string + for(let j=0;j= rect2.x - rect2.w/2 && + rect1.x - rect1.w/2 <= rect2.x + rect2.w/2 && + rect1.y + rect1.h/2 >= rect2.y - rect2.h/2 && + rect1.y - rect1.h/2 <= rect2.y + rect2.h/2) { + return true; + } else { + return false; + } +} + +function rectpoint(rect,point) { + if(rect.x + rect.w/2 >= point.x && + rect.x - rect.w/2 <= point.x && + rect.y + rect.h/2 >= point.y && + rect.y - rect.h/2 <= point.y ) { + return true; + } else { + return false; + } +} + +function circlerect(circle,rect) { //credit: https://yal.cc/rectangle-circle-intersection-test/ + let rectHalfWidth = rect.w/2; + let rectHalfHeight = rect.h/2; + let deltaX = circle.x - Math.max(rect.x - rectHalfWidth, Math.min(circle.x, rect.x + rectHalfWidth)); + let deltaY = circle.y - Math.max(rect.y - rectHalfHeight, Math.min(circle.y, rect.y + rectHalfHeight)); + return (deltaX * deltaX + deltaY * deltaY) < (circle.r * circle.r); +} + +function circleOnSideRect(circle,rect) { + let rectHalfWidth = rect.w/2; + let rectHalfHeight = rect.h/2; + let left = rect.x - rectHalfWidth; + let right = rect.x + rectHalfWidth; + let top = rect.y - rectHalfHeight; + let bottom = rect.y + rectHalfHeight; + let cx = circle.x; + let cy = circle.y; + if(cy < top && cx > left && cx < right) { // top side + return 0; + } else if(cy > bottom && cx > left && cx < right) { // bottom side + return 2; + } else if (cx < left && cy > top && cy < bottom) { // left side + return 3; + } else if (cx > right && cy > top && cy < bottom) { // right side + return 1; + } else { + let returnValue=0; // 0 = top, 1 = right, 2 = bottom, 3 = left + let topleft = dist (circle,{x:left,y:top}); + let topright = dist (circle,{x:right,y:top}); + let bottomleft = dist (circle,{x:left,y:bottom}); + let bottomright = dist (circle,{x:right,y:bottom}); + switch(Math.min(topleft,topright,bottomleft,bottomright)) { // find what corner the cricle is closer to, then determine what side it is closer to + case topleft: + var m = slope(rect,{x:left,y:top}); + var mperp = -(1/m); + var b = yIntercept(rect,m); + var bperp = yIntercept(circle,mperp); + var mid = POI(m,b,mperp,bperp); + if(cx left2 && cx < right2) { // top side + return 0; + } else if(cy > bottom2 && cx > left2 && cx < right2) { // bottom side + return 2; + } else if (cx < left2 && cy > top2 && cy < bottom2) { // left side + return 3; + } else if (cx > right2 && cy > top2 && cy < bottom2) { // right side + return 1; + } else { + let returnValue=0; // 0 = top, 1 = right, 2 = bottom, 3 = left + let determiningPoint = {x:cx,y:cy}; + let topleft = dist (determiningPoint,{x:left2,y:top2}); + let topright = dist (determiningPoint,{x:right2,y:top2}); + let bottomleft = dist (determiningPoint,{x:left2,y:bottom2}); + let bottomright = dist (determiningPoint,{x:right2,y:bottom2}); + switch(Math.min(topleft,topright,bottomleft,bottomright)) { // find what corner the point is closer to, then determine what side it is closer to + case topleft: + var m = slope(rect2,{x:left2,y:top2}); + var mperp = -(1/m); + var b = yIntercept(rect2,m); + var bperp = yIntercept(determiningPoint,mperp); + var mid = POI(m,b,mperp,bperp); + if(cxedge.right) { + rect.v.x *= -1; + rect.x = edge.right-rw; + } + if(rx-rwedge.bottom) { + rect.v.y *= -1; + rect.y = edge.bottom-rh; + } + if(ry-rhedge.right) { + circle.v.x *= -1; + circle.x = edge.right-cr; + } + if(cx-credge.bottom) { + circle.v.y *= -1; + circle.y = edge.bottom-cr; + } + if(cy-cr