Fixes, still kind of broken
This commit is contained in:
parent
20697c37b0
commit
71c699cd7e
7 changed files with 125 additions and 62 deletions
|
@ -66,9 +66,12 @@ pub trait GameInterface {
|
||||||
fn get_dimensions(&self) -> Result<(f32, f32), String>;
|
fn get_dimensions(&self) -> Result<(f32, f32), String>;
|
||||||
fn get_key_pressed(&mut self, key: char) -> Result<bool, String>;
|
fn get_key_pressed(&mut self, key: char) -> Result<bool, String>;
|
||||||
fn get_mouse_pressed(&mut self) -> Result<Option<(f32, f32)>, String>;
|
fn get_mouse_pressed(&mut self) -> Result<Option<(f32, f32)>, String>;
|
||||||
|
fn get_mouse_released(&mut self) -> Result<bool, String>;
|
||||||
fn get_mouse_down(&mut self) -> Result<Option<(f32, f32)>, String>;
|
fn get_mouse_down(&mut self) -> Result<Option<(f32, f32)>, String>;
|
||||||
fn get_mouse_xy(&self) -> Result<(f32, f32), String>;
|
fn get_mouse_xy(&self) -> Result<(f32, f32), String>;
|
||||||
fn get_mouse_xy_vec(&self) -> Result<Vector, String>;
|
fn get_mouse_xy_vec(&self) -> Result<Vector, String>;
|
||||||
|
fn xy_to_world(&self, x: f32, y: f32) -> Result<Vector, String>;
|
||||||
|
fn vec_to_world(&self, vec: Vector) -> Result<Vector, String>;
|
||||||
fn get_delta_time(&self) -> f32;
|
fn get_delta_time(&self) -> f32;
|
||||||
fn clear_window(&mut self, color: Color) -> Result<(), String>;
|
fn clear_window(&mut self, color: Color) -> Result<(), String>;
|
||||||
fn begin_drawing(&mut self) -> Result<(), String>;
|
fn begin_drawing(&mut self) -> Result<(), String>;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
mod ffi {
|
pub mod ffi {
|
||||||
#![allow(non_upper_case_globals)]
|
#![allow(non_upper_case_globals)]
|
||||||
#![allow(non_camel_case_types)]
|
#![allow(non_camel_case_types)]
|
||||||
#![allow(non_snake_case)]
|
#![allow(non_snake_case)]
|
||||||
|
@ -167,8 +167,8 @@ impl RaylibImageHandler {
|
||||||
fn image_to_texture(&mut self) -> Result<(), String> {
|
fn image_to_texture(&mut self) -> Result<(), String> {
|
||||||
if self.image.borrow().texture.is_none() {
|
if self.image.borrow().texture.is_none() {
|
||||||
unsafe {
|
unsafe {
|
||||||
self.image.borrow_mut().texture =
|
let texture = ffi::LoadTextureFromImage(self.image.borrow().image);
|
||||||
Some(ffi::LoadTextureFromImage(self.image.borrow().image));
|
self.image.borrow_mut().texture = Some(texture);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -545,7 +545,7 @@ impl CameraInterface for Camera {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct RaylibGame {
|
pub struct RaylibGame {
|
||||||
images: HashMap<String, Rc<RefCell<RaylibImage>>>,
|
images: HashMap<String, Rc<RefCell<RaylibImage>>>,
|
||||||
fonts: HashMap<String, Rc<RaylibFont>>,
|
fonts: HashMap<String, Rc<RaylibFont>>,
|
||||||
sounds: HashMap<String, Rc<RaylibSound>>,
|
sounds: HashMap<String, Rc<RaylibSound>>,
|
||||||
|
@ -574,7 +574,12 @@ impl RaylibGame {
|
||||||
string.as_ptr() as *const c_char,
|
string.as_ptr() as *const c_char,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Self::native_setup();
|
Self::native_setup();
|
||||||
|
unsafe {
|
||||||
|
ffi::InitAudioDevice();
|
||||||
|
}
|
||||||
|
|
||||||
let mut self_unboxed = Self {
|
let mut self_unboxed = Self {
|
||||||
images: HashMap::new(),
|
images: HashMap::new(),
|
||||||
fonts: HashMap::new(),
|
fonts: HashMap::new(),
|
||||||
|
@ -638,6 +643,16 @@ impl GameInterface for RaylibGame {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn get_mouse_released(&mut self) -> Result<bool, String> {
|
||||||
|
unsafe {
|
||||||
|
if ffi::IsMouseButtonReleased(0) {
|
||||||
|
Ok(true)
|
||||||
|
} else {
|
||||||
|
Ok(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn get_mouse_down(&mut self) -> Result<Option<(f32, f32)>, String> {
|
fn get_mouse_down(&mut self) -> Result<Option<(f32, f32)>, String> {
|
||||||
unsafe {
|
unsafe {
|
||||||
if ffi::IsMouseButtonDown(0) {
|
if ffi::IsMouseButtonDown(0) {
|
||||||
|
@ -1019,6 +1034,20 @@ impl GameInterface for RaylibGame {
|
||||||
self.camera.borrow_mut().pos = Vector { x, y };
|
self.camera.borrow_mut().pos = Vector { x, y };
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn xy_to_world(&self, x: f32, y: f32) -> Result<Vector, String> {
|
||||||
|
Ok(Vector {
|
||||||
|
x: x + self.camera.borrow().pos.x,
|
||||||
|
y: y + self.camera.borrow().pos.y,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn vec_to_world(&self, vec: Vector) -> Result<Vector, String> {
|
||||||
|
Ok(Vector {
|
||||||
|
x: vec.x + self.camera.borrow().pos.x,
|
||||||
|
y: vec.y + self.camera.borrow().pos.y,
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RaylibGame {
|
impl RaylibGame {
|
||||||
|
|
|
@ -335,4 +335,11 @@ impl Window {
|
||||||
.ok_or_else(|| format!("Music \"{name}\" not found"))?
|
.ok_or_else(|| format!("Music \"{name}\" not found"))?
|
||||||
.as_mut())
|
.as_mut())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn update_music(&mut self) -> Result<(), String> {
|
||||||
|
for (_, music) in &mut self.music {
|
||||||
|
music.update()?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
18
src/main.rs
18
src/main.rs
|
@ -1,8 +1,16 @@
|
||||||
|
use agnostic_interface::raylib_impl::RaylibGame;
|
||||||
|
use faux_quicksilver::Window;
|
||||||
|
use original_impl::GameState;
|
||||||
|
|
||||||
mod agnostic_interface;
|
mod agnostic_interface;
|
||||||
mod faux_quicksilver;
|
mod faux_quicksilver;
|
||||||
mod original_impl;
|
mod original_impl;
|
||||||
mod shaders;
|
mod shaders;
|
||||||
|
|
||||||
|
fn will_close() -> bool {
|
||||||
|
unsafe { agnostic_interface::raylib_impl::ffi::WindowShouldClose() }
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
// TODO
|
// TODO
|
||||||
//run::<GameState>(
|
//run::<GameState>(
|
||||||
|
@ -10,4 +18,14 @@ fn main() {
|
||||||
// Vector::new(800, 600),
|
// Vector::new(800, 600),
|
||||||
// Settings::default(),
|
// Settings::default(),
|
||||||
//);
|
//);
|
||||||
|
|
||||||
|
let game_interface = RaylibGame::new_boxed(800, 600);
|
||||||
|
let mut window = Window::new(game_interface);
|
||||||
|
let mut game_state = GameState::new(&mut window).unwrap();
|
||||||
|
|
||||||
|
while !will_close() {
|
||||||
|
window.update_music().unwrap();
|
||||||
|
game_state.update(&mut window).unwrap();
|
||||||
|
game_state.draw(&mut window).unwrap();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,15 +8,15 @@ use serde::{Deserialize, Serialize};
|
||||||
const WIDTH_F: f32 = 800.0;
|
const WIDTH_F: f32 = 800.0;
|
||||||
const HEIGHT_F: f32 = 600.0;
|
const HEIGHT_F: f32 = 600.0;
|
||||||
const MUSIC2_LENGTH: f32 = 2.0 * 60.0 * 1000.0;
|
const MUSIC2_LENGTH: f32 = 2.0 * 60.0 * 1000.0;
|
||||||
const TEXT_RATE: f32 = 100.0;
|
const TEXT_RATE: f32 = 0.1;
|
||||||
const PP_GEN_RATE: f32 = 75.0;
|
const PP_GEN_RATE: f32 = 0.075;
|
||||||
const PARTICLE_RAND_VEL_RANGE: f32 = 0.2;
|
const PARTICLE_RAND_VEL_RANGE: f32 = 0.2;
|
||||||
const PARTICLE_RAND_VEL_DIST: f32 = 0.2828427; // dist where x and y = 0.2
|
const PARTICLE_RAND_VEL_DIST: f32 = 0.2828427; // dist where x and y = 0.2
|
||||||
const PARTICLE_RAND_ROT_RANGE: f32 = 0.5;
|
const PARTICLE_RAND_ROT_RANGE: f32 = 0.5;
|
||||||
const JOINING_OPACITY_RATE: f32 = 0.00013;
|
const JOINING_OPACITY_RATE: f32 = 0.00013;
|
||||||
const JOINING_FAR_DIST: f32 = 700.0;
|
const JOINING_FAR_DIST: f32 = 700.0;
|
||||||
const JOINING_NEAR_DIST: f32 = 150.0;
|
const JOINING_NEAR_DIST: f32 = 150.0;
|
||||||
const DOUBLE_CLICK_TIME: f32 = 350.0;
|
const DOUBLE_CLICK_TIME: f32 = 0.350;
|
||||||
const SL_NOTIF_TIME: f32 = 5000.0;
|
const SL_NOTIF_TIME: f32 = 5000.0;
|
||||||
const MAX_MOONS: usize = 5;
|
const MAX_MOONS: usize = 5;
|
||||||
|
|
||||||
|
@ -218,9 +218,9 @@ impl Menu {
|
||||||
fn s_01() -> Menu {
|
fn s_01() -> Menu {
|
||||||
Menu {
|
Menu {
|
||||||
items: vec![
|
items: vec![
|
||||||
Menu::pause(500.0, true),
|
Menu::pause(0.500, true),
|
||||||
Menu::text(50.0, HEIGHT_F - 140.0, 40.0, false, "This is how it is."),
|
Menu::text(50.0, HEIGHT_F - 140.0, 40.0, false, "This is how it is."),
|
||||||
Menu::pause(500.0, false),
|
Menu::pause(0.500, false),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
50.0,
|
50.0,
|
||||||
HEIGHT_F - 100.0,
|
HEIGHT_F - 100.0,
|
||||||
|
@ -228,9 +228,9 @@ impl Menu {
|
||||||
false,
|
false,
|
||||||
"Nothing is, and everything is nothing.",
|
"Nothing is, and everything is nothing.",
|
||||||
),
|
),
|
||||||
Menu::pause(500.0, false),
|
Menu::pause(0.500, false),
|
||||||
Menu::text(50.0, HEIGHT_F - 60.0, 40.0, false, "...until you appeared."),
|
Menu::text(50.0, HEIGHT_F - 60.0, 40.0, false, "...until you appeared."),
|
||||||
Menu::pause(100.0, false),
|
Menu::pause(0.100, false),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
570.0,
|
570.0,
|
||||||
HEIGHT_F - 50.0,
|
HEIGHT_F - 50.0,
|
||||||
|
@ -252,7 +252,7 @@ impl Menu {
|
||||||
true,
|
true,
|
||||||
"Just by being, you brought light into existence.",
|
"Just by being, you brought light into existence.",
|
||||||
),
|
),
|
||||||
Menu::pause(500.0, false),
|
Menu::pause(0.500, false),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
50.0,
|
50.0,
|
||||||
HEIGHT_F - 110.0,
|
HEIGHT_F - 110.0,
|
||||||
|
@ -260,7 +260,7 @@ impl Menu {
|
||||||
false,
|
false,
|
||||||
"What brings you here? What drives you?",
|
"What brings you here? What drives you?",
|
||||||
),
|
),
|
||||||
Menu::pause(500.0, false),
|
Menu::pause(0.500, false),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
50.0,
|
50.0,
|
||||||
HEIGHT_F - 70.0,
|
HEIGHT_F - 70.0,
|
||||||
|
@ -327,7 +327,7 @@ impl Menu {
|
||||||
true,
|
true,
|
||||||
"Hope... hope that your actions will inspire others..",
|
"Hope... hope that your actions will inspire others..",
|
||||||
),
|
),
|
||||||
Menu::pause(500.0, false),
|
Menu::pause(0.500, false),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
50.0,
|
50.0,
|
||||||
HEIGHT_F - 130.0,
|
HEIGHT_F - 130.0,
|
||||||
|
@ -335,7 +335,7 @@ impl Menu {
|
||||||
false,
|
false,
|
||||||
"Hope that a brighter future will come tomorrow...",
|
"Hope that a brighter future will come tomorrow...",
|
||||||
),
|
),
|
||||||
Menu::pause(500.0, false),
|
Menu::pause(0.500, false),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
50.0,
|
50.0,
|
||||||
HEIGHT_F - 90.0,
|
HEIGHT_F - 90.0,
|
||||||
|
@ -358,7 +358,7 @@ impl Menu {
|
||||||
true,
|
true,
|
||||||
"Miracles huh?.. I see, then your appearance is special.",
|
"Miracles huh?.. I see, then your appearance is special.",
|
||||||
),
|
),
|
||||||
Menu::pause(500.0, false),
|
Menu::pause(0.500, false),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
30.0,
|
30.0,
|
||||||
HEIGHT_F - 130.0,
|
HEIGHT_F - 130.0,
|
||||||
|
@ -366,7 +366,7 @@ impl Menu {
|
||||||
false,
|
false,
|
||||||
"With your appearance, things may change for the better..",
|
"With your appearance, things may change for the better..",
|
||||||
),
|
),
|
||||||
Menu::pause(500.0, false),
|
Menu::pause(0.500, false),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
30.0,
|
30.0,
|
||||||
HEIGHT_F - 90.0,
|
HEIGHT_F - 90.0,
|
||||||
|
@ -389,7 +389,7 @@ impl Menu {
|
||||||
true,
|
true,
|
||||||
"Kindness?.. I am in your debt.",
|
"Kindness?.. I am in your debt.",
|
||||||
),
|
),
|
||||||
Menu::pause(250.0, false),
|
Menu::pause(0.250, false),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
50.0,
|
50.0,
|
||||||
HEIGHT_F - 130.0,
|
HEIGHT_F - 130.0,
|
||||||
|
@ -398,7 +398,7 @@ impl Menu {
|
||||||
"It has been a long time since I have encountered",
|
"It has been a long time since I have encountered",
|
||||||
),
|
),
|
||||||
Menu::text(50.0, HEIGHT_F - 90.0, 40.0, false, "another being..."),
|
Menu::text(50.0, HEIGHT_F - 90.0, 40.0, false, "another being..."),
|
||||||
Menu::pause(500.0, false),
|
Menu::pause(0.500, false),
|
||||||
Menu::text(270.0, HEIGHT_F - 90.0, 40.0, false, "... Thank you..."),
|
Menu::text(270.0, HEIGHT_F - 90.0, 40.0, false, "... Thank you..."),
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
@ -415,7 +415,7 @@ impl Menu {
|
||||||
true,
|
true,
|
||||||
"Determination.. I see...",
|
"Determination.. I see...",
|
||||||
),
|
),
|
||||||
Menu::pause(500.0, false),
|
Menu::pause(0.500, false),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
400.0,
|
400.0,
|
||||||
HEIGHT_F - 170.0,
|
HEIGHT_F - 170.0,
|
||||||
|
@ -430,7 +430,7 @@ impl Menu {
|
||||||
false,
|
false,
|
||||||
"must have been difficult to come here..",
|
"must have been difficult to come here..",
|
||||||
),
|
),
|
||||||
Menu::pause(500.0, false),
|
Menu::pause(0.500, false),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
50.0,
|
50.0,
|
||||||
HEIGHT_F - 90.0,
|
HEIGHT_F - 90.0,
|
||||||
|
@ -459,7 +459,7 @@ impl Menu {
|
||||||
false,
|
false,
|
||||||
"creation for all that will be.",
|
"creation for all that will be.",
|
||||||
),
|
),
|
||||||
Menu::pause(200.0, false),
|
Menu::pause(0.200, false),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
50.0,
|
50.0,
|
||||||
HEIGHT_F - 50.0,
|
HEIGHT_F - 50.0,
|
||||||
|
@ -486,7 +486,7 @@ impl Menu {
|
||||||
fn s_09() -> Menu {
|
fn s_09() -> Menu {
|
||||||
Menu {
|
Menu {
|
||||||
items: vec![
|
items: vec![
|
||||||
Menu::pause(400.0, true),
|
Menu::pause(0.400, true),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
50.0,
|
50.0,
|
||||||
HEIGHT_F - 140.0,
|
HEIGHT_F - 140.0,
|
||||||
|
@ -494,7 +494,7 @@ impl Menu {
|
||||||
false,
|
false,
|
||||||
"A new planet... It has most certainly been a while.",
|
"A new planet... It has most certainly been a while.",
|
||||||
),
|
),
|
||||||
Menu::pause(500.0, false),
|
Menu::pause(0.500, false),
|
||||||
Menu::text(
|
Menu::text(
|
||||||
50.0,
|
50.0,
|
||||||
HEIGHT_F - 100.0,
|
HEIGHT_F - 100.0,
|
||||||
|
@ -502,7 +502,7 @@ impl Menu {
|
||||||
false,
|
false,
|
||||||
"Please, go out and create the new universe, and again..",
|
"Please, go out and create the new universe, and again..",
|
||||||
),
|
),
|
||||||
Menu::pause(300.0, false),
|
Menu::pause(0.300, false),
|
||||||
Menu::text(50.0, HEIGHT_F - 60.0, 40.0, false, "Thank you."),
|
Menu::text(50.0, HEIGHT_F - 60.0, 40.0, false, "Thank you."),
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
@ -914,8 +914,8 @@ impl Planet {
|
||||||
circle,
|
circle,
|
||||||
color,
|
color,
|
||||||
particle_system: ParticleSystem::new(
|
particle_system: ParticleSystem::new(
|
||||||
rand::thread_rng().gen_range(2000.0, 3800.0),
|
rand::thread_rng().gen_range(2.0, 3.8),
|
||||||
900.0,
|
0.9,
|
||||||
Rectangle::new(0.0, 0.0, 1.0, 1.0),
|
Rectangle::new(0.0, 0.0, 1.0, 1.0),
|
||||||
circle,
|
circle,
|
||||||
false,
|
false,
|
||||||
|
@ -931,8 +931,8 @@ impl Planet {
|
||||||
let clockwise = rand::thread_rng().gen_bool(0.5);
|
let clockwise = rand::thread_rng().gen_bool(0.5);
|
||||||
for i in 0..rand::thread_rng().gen_range(0, MAX_MOONS) {
|
for i in 0..rand::thread_rng().gen_range(0, MAX_MOONS) {
|
||||||
planet.moons.push(RotatingParticleSystem::new(
|
planet.moons.push(RotatingParticleSystem::new(
|
||||||
rand::thread_rng().gen_range(1000.0, 2600.0),
|
rand::thread_rng().gen_range(1.0, 2.6),
|
||||||
600.0,
|
0.6,
|
||||||
Rectangle::new(0.0, 0.0, 1.0, 1.0),
|
Rectangle::new(0.0, 0.0, 1.0, 1.0),
|
||||||
smaller_circle,
|
smaller_circle,
|
||||||
false,
|
false,
|
||||||
|
@ -997,8 +997,8 @@ impl Star {
|
||||||
let mut star = Star {
|
let mut star = Star {
|
||||||
color,
|
color,
|
||||||
particle_system: ParticleSystem::new(
|
particle_system: ParticleSystem::new(
|
||||||
rand::thread_rng().gen_range(80.0, 200.0),
|
rand::thread_rng().gen_range(0.08, 0.2),
|
||||||
850.0,
|
0.85,
|
||||||
Rectangle::new(0.0, 0.0, 1.0, 1.0),
|
Rectangle::new(0.0, 0.0, 1.0, 1.0),
|
||||||
circle,
|
circle,
|
||||||
false,
|
false,
|
||||||
|
@ -1073,12 +1073,12 @@ enum FishState {
|
||||||
|
|
||||||
impl Fish {
|
impl Fish {
|
||||||
fn new(pos: Vector, r: f32, color: Color) -> Self {
|
fn new(pos: Vector, r: f32, color: Color) -> Self {
|
||||||
let anim_timer = rand::thread_rng().gen_range(800.0, 1000.0);
|
let anim_timer = rand::thread_rng().gen_range(0.8, 1.0);
|
||||||
Self {
|
Self {
|
||||||
pos,
|
pos,
|
||||||
r,
|
r,
|
||||||
swim_time: 800.0,
|
swim_time: 0.8,
|
||||||
swim_timer: 800.0,
|
swim_timer: 0.8,
|
||||||
swim_v: 0.2,
|
swim_v: 0.2,
|
||||||
anim_timer,
|
anim_timer,
|
||||||
anim_time: anim_timer,
|
anim_time: anim_timer,
|
||||||
|
@ -1101,26 +1101,26 @@ impl Fish {
|
||||||
fn set_next(&mut self, state: FishState) {
|
fn set_next(&mut self, state: FishState) {
|
||||||
match state {
|
match state {
|
||||||
FishState::Idle => {
|
FishState::Idle => {
|
||||||
self.swim_time = rand::thread_rng().gen_range(1100.0, 2400.0);
|
self.swim_time = rand::thread_rng().gen_range(1.1, 2.4);
|
||||||
self.swim_timer = self.swim_time;
|
self.swim_timer = self.swim_time;
|
||||||
self.anim_timer = 1600.0;
|
self.anim_timer = 1.6;
|
||||||
self.anim_time = 1600.0;
|
self.anim_time = 1.6;
|
||||||
self.swim_v = 0.0;
|
self.swim_v = 0.0;
|
||||||
}
|
}
|
||||||
FishState::Swim => {
|
FishState::Swim => {
|
||||||
self.swim_time = rand::thread_rng().gen_range(1400.0, 2300.0);
|
self.swim_time = rand::thread_rng().gen_range(1.4, 2.3);
|
||||||
self.swim_timer = self.swim_time;
|
self.swim_timer = self.swim_time;
|
||||||
self.r = rand::thread_rng().gen_range(0.0, 360.0);
|
self.r = rand::thread_rng().gen_range(0.0, 360.0);
|
||||||
self.anim_timer = rand::thread_rng().gen_range(600.0, 1000.0);
|
self.anim_timer = rand::thread_rng().gen_range(0.6, 1.0);
|
||||||
self.anim_time = self.anim_timer;
|
self.anim_time = self.anim_timer;
|
||||||
self.swim_v = (self.anim_timer / 8000.0) as f32;
|
self.swim_v = (self.anim_timer / 8.0) as f32;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update(&mut self, dt: f32) {
|
fn update(&mut self, dt: f32) {
|
||||||
self.swim_time -= dt;
|
self.swim_time -= dt;
|
||||||
if self.swim_time < 220.0 {
|
if self.swim_time < 0.22 {
|
||||||
self.swim_v /= 1.1;
|
self.swim_v /= 1.1;
|
||||||
}
|
}
|
||||||
if self.swim_time <= 0.0 {
|
if self.swim_time <= 0.0 {
|
||||||
|
@ -1201,7 +1201,7 @@ enum SaveLoadNotification {
|
||||||
Load { text: Option<String>, timer: f32 },
|
Load { text: Option<String>, timer: f32 },
|
||||||
}
|
}
|
||||||
|
|
||||||
struct GameState {
|
pub struct GameState {
|
||||||
s_boom: String,
|
s_boom: String,
|
||||||
s_get: String,
|
s_get: String,
|
||||||
s_power_up: String,
|
s_power_up: String,
|
||||||
|
@ -1239,7 +1239,7 @@ struct GameState {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GameState {
|
impl GameState {
|
||||||
fn new(window: &mut Window) -> Result<Self, String> {
|
pub fn new(window: &mut Window) -> Result<Self, String> {
|
||||||
let s_boom = String::from("boom.mp3");
|
let s_boom = String::from("boom.mp3");
|
||||||
window.load_sound(
|
window.load_sound(
|
||||||
&PathBuf::from_str("static/boom.mp3")
|
&PathBuf::from_str("static/boom.mp3")
|
||||||
|
@ -1329,7 +1329,7 @@ impl GameState {
|
||||||
player_r: 0.0,
|
player_r: 0.0,
|
||||||
player_particles: ParticleSystem::new(
|
player_particles: ParticleSystem::new(
|
||||||
PP_GEN_RATE,
|
PP_GEN_RATE,
|
||||||
1000.0,
|
1.0,
|
||||||
Rectangle::new(400.0, 300.0, 32.0, 32.0),
|
Rectangle::new(400.0, 300.0, 32.0, 32.0),
|
||||||
Circle::new(100.0, 100.0, 32.0),
|
Circle::new(100.0, 100.0, 32.0),
|
||||||
true,
|
true,
|
||||||
|
@ -1340,7 +1340,7 @@ impl GameState {
|
||||||
),
|
),
|
||||||
joining_particles: RotatingParticleSystem::new(
|
joining_particles: RotatingParticleSystem::new(
|
||||||
PP_GEN_RATE,
|
PP_GEN_RATE,
|
||||||
1000.0,
|
1.0,
|
||||||
Rectangle::new(400.0, 300.0, 16.0, 16.0),
|
Rectangle::new(400.0, 300.0, 16.0, 16.0),
|
||||||
Circle::new(100.0, 100.0, 32.0),
|
Circle::new(100.0, 100.0, 32.0),
|
||||||
true,
|
true,
|
||||||
|
@ -1368,12 +1368,13 @@ impl GameState {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update(&mut self, window: &mut Window) -> Result<(), String> {
|
pub fn update(&mut self, window: &mut Window) -> Result<(), String> {
|
||||||
let dt = window.get_gi().get_delta_time();
|
let dt = window.get_gi().get_delta_time();
|
||||||
|
|
||||||
// check mouse pos
|
// check mouse pos
|
||||||
{
|
{
|
||||||
self.mouse_pos = window.get_gi().get_mouse_xy_vec()?;
|
self.mouse_pos = window.get_gi().get_mouse_xy_vec()?;
|
||||||
|
//self.mouse_pos = window.get_gi().vec_to_world(self.mouse_pos)?;
|
||||||
let mut hovered = false;
|
let mut hovered = false;
|
||||||
for i in 0..self.menu.items.len() {
|
for i in 0..self.menu.items.len() {
|
||||||
if self.menu.items[i].is_inside(self.mouse_pos.x, self.mouse_pos.y) {
|
if self.menu.items[i].is_inside(self.mouse_pos.x, self.mouse_pos.y) {
|
||||||
|
@ -1390,11 +1391,11 @@ impl GameState {
|
||||||
}
|
}
|
||||||
|
|
||||||
// check mouse down
|
// check mouse down
|
||||||
if window.get_gi_mut().get_mouse_down()?.is_none() {
|
if window.get_gi_mut().get_mouse_released()? {
|
||||||
if self.dbl_click_timeout.is_none() {
|
if self.dbl_click_timeout.is_none() {
|
||||||
self.click_release_time = 0.0;
|
self.click_release_time = 0.0;
|
||||||
}
|
}
|
||||||
} else {
|
} else if window.get_gi_mut().get_mouse_pressed()?.is_some() {
|
||||||
if self.current_finished {
|
if self.current_finished {
|
||||||
if self.is_create_mode {
|
if self.is_create_mode {
|
||||||
if self.click_release_time < DOUBLE_CLICK_TIME {
|
if self.click_release_time < DOUBLE_CLICK_TIME {
|
||||||
|
@ -1403,12 +1404,12 @@ impl GameState {
|
||||||
self.click_time = None;
|
self.click_time = None;
|
||||||
if self.state == 8 {
|
if self.state == 8 {
|
||||||
let mut expl_conv_system = ExplConvParticleSystem::new(
|
let mut expl_conv_system = ExplConvParticleSystem::new(
|
||||||
1500.0,
|
1.5,
|
||||||
Circle::new(self.mouse_pos.x, self.mouse_pos.y, 20.0),
|
Circle::new(self.mouse_pos.x, self.mouse_pos.y, 20.0),
|
||||||
Color::from_rgba(0x99, 0xFF, 0x99, 255),
|
Color::from_rgba(0x99, 0xFF, 0x99, 255),
|
||||||
1.0,
|
1.0,
|
||||||
);
|
);
|
||||||
expl_conv_system.activate(30, 200.0);
|
expl_conv_system.activate(30, 0.2);
|
||||||
self.expl_conv_p_systems.push(expl_conv_system);
|
self.expl_conv_p_systems.push(expl_conv_system);
|
||||||
self.state = 9;
|
self.state = 9;
|
||||||
self.state_dirty = true;
|
self.state_dirty = true;
|
||||||
|
@ -1419,7 +1420,7 @@ impl GameState {
|
||||||
if rand_out < 0.6 {
|
if rand_out < 0.6 {
|
||||||
// spawn planet
|
// spawn planet
|
||||||
let mut expl_conv_system = ExplConvParticleSystem::new(
|
let mut expl_conv_system = ExplConvParticleSystem::new(
|
||||||
rng.gen_range(1200.0, 1600.0),
|
rng.gen_range(1.2, 1.6),
|
||||||
Circle::new(
|
Circle::new(
|
||||||
self.mouse_pos.x,
|
self.mouse_pos.x,
|
||||||
self.mouse_pos.y,
|
self.mouse_pos.y,
|
||||||
|
@ -1434,7 +1435,7 @@ impl GameState {
|
||||||
1.0,
|
1.0,
|
||||||
);
|
);
|
||||||
expl_conv_system
|
expl_conv_system
|
||||||
.activate(rng.gen_range(13, 40), rng.gen_range(150.0, 300.0));
|
.activate(rng.gen_range(13, 40), rng.gen_range(0.15, 0.3));
|
||||||
self.expl_conv_p_systems.push(expl_conv_system);
|
self.expl_conv_p_systems.push(expl_conv_system);
|
||||||
} else if rand_out < 0.85 {
|
} else if rand_out < 0.85 {
|
||||||
// spawn star
|
// spawn star
|
||||||
|
@ -1613,6 +1614,8 @@ impl GameState {
|
||||||
if self.state == 10 {
|
if self.state == 10 {
|
||||||
self.state = 0;
|
self.state = 0;
|
||||||
self.state_dirty = true;
|
self.state_dirty = true;
|
||||||
|
window.get_music_mut(&self.music2)?.stop()?;
|
||||||
|
self.music_on = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1626,7 +1629,7 @@ impl GameState {
|
||||||
|
|
||||||
if let Some(t) = &mut self.dbl_click_timeout {
|
if let Some(t) = &mut self.dbl_click_timeout {
|
||||||
*t += dt;
|
*t += dt;
|
||||||
if *t > 300.0 {
|
if *t > 0.3 {
|
||||||
self.dbl_click_timeout = None;
|
self.dbl_click_timeout = None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1641,8 +1644,8 @@ impl GameState {
|
||||||
(self.player.y - self.joining_particles.particle_system.host_rect.y) / 30.0;
|
(self.player.y - self.joining_particles.particle_system.host_rect.y) / 30.0;
|
||||||
let (cx, cy) = self.camera.get_view_xy()?;
|
let (cx, cy) = self.camera.get_view_xy()?;
|
||||||
self.camera.set_view_xy(
|
self.camera.set_view_xy(
|
||||||
(self.player.x - WIDTH_F / 2.0 - cx) / 40.0,
|
cx + (self.player.x - WIDTH_F / 2.0 - cx) / 40.0,
|
||||||
(self.player.y - HEIGHT_F / 2.0 - cy) / 40.0,
|
cy + (self.player.y - HEIGHT_F / 2.0 - cy) / 40.0,
|
||||||
)?;
|
)?;
|
||||||
window.get_gi_mut().set_camera(&self.camera)?;
|
window.get_gi_mut().set_camera(&self.camera)?;
|
||||||
|
|
||||||
|
@ -1742,7 +1745,7 @@ impl GameState {
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.player_particles.opacity < 1.0 && self.state > 1 {
|
if self.player_particles.opacity < 1.0 && self.state > 1 {
|
||||||
self.player_particles.opacity += dt as f32 / 7000.0;
|
self.player_particles.opacity += dt as f32 / 7.0;
|
||||||
if self.player_particles.opacity > 1.0 {
|
if self.player_particles.opacity > 1.0 {
|
||||||
self.player_particles.opacity = 1.0;
|
self.player_particles.opacity = 1.0;
|
||||||
}
|
}
|
||||||
|
@ -1792,6 +1795,7 @@ impl GameState {
|
||||||
if *timer > TEXT_RATE {
|
if *timer > TEXT_RATE {
|
||||||
*timer -= TEXT_RATE;
|
*timer -= TEXT_RATE;
|
||||||
*text_idx += 1;
|
*text_idx += 1;
|
||||||
|
window.get_sound_mut(&self.s_tap).unwrap().play(0.2)?;
|
||||||
if *text_idx >= text.len() {
|
if *text_idx >= text.len() {
|
||||||
mi.is_loaded = true;
|
mi.is_loaded = true;
|
||||||
if i + 1 < self.menu.items.len() {
|
if i + 1 < self.menu.items.len() {
|
||||||
|
@ -1898,7 +1902,8 @@ impl GameState {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn draw(&mut self, window: &mut Window) -> Result<(), String> {
|
pub fn draw(&mut self, window: &mut Window) -> Result<(), String> {
|
||||||
|
window.get_gi_mut().begin_drawing()?;
|
||||||
window.get_gi_mut().clear_window(Color::BLACK)?;
|
window.get_gi_mut().clear_window(Color::BLACK)?;
|
||||||
let mut rect = Rectangle::default();
|
let mut rect = Rectangle::default();
|
||||||
for mi in &mut self.menu.items {
|
for mi in &mut self.menu.items {
|
||||||
|
@ -2000,6 +2005,7 @@ impl GameState {
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
//}
|
//}
|
||||||
|
window.get_gi_mut().end_drawing()?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,13 +28,13 @@ pub fn get_attrib_location(raylib_shader: &RaylibShader, name: &CStr) -> ::std::
|
||||||
|
|
||||||
pub fn set_transform_3f(index: ::std::os::raw::c_uint, transform: Transform) {
|
pub fn set_transform_3f(index: ::std::os::raw::c_uint, transform: Transform) {
|
||||||
// OpenGL stores matrix indices in column major order.
|
// OpenGL stores matrix indices in column major order.
|
||||||
for idx in index..(index + 3) {
|
for (i, idx) in (index..(index + 3)).enumerate() {
|
||||||
unsafe {
|
unsafe {
|
||||||
glVertexAttrib3f(
|
glVertexAttrib3f(
|
||||||
idx,
|
idx,
|
||||||
transform.mat[0 + idx as usize],
|
transform.mat[0 + i as usize],
|
||||||
transform.mat[3 + idx as usize],
|
transform.mat[3 + i as usize],
|
||||||
transform.mat[6 + idx as usize],
|
transform.mat[6 + i as usize],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,5 +22,5 @@ void main() {
|
||||||
fragColor = vertexColor;
|
fragColor = vertexColor;
|
||||||
|
|
||||||
vec3 pos = transform * (vertexPosition - vec3(origin, 0.0)) + vec3(origin, 0.0);
|
vec3 pos = transform * (vertexPosition - vec3(origin, 0.0)) + vec3(origin, 0.0);
|
||||||
gl_Position = mvp * vec4(pos - camera, 1.0);
|
gl_Position = mvp * vec4(pos - vec3(camera, 0.0), 1.0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue