diff --git a/src/agnostic_interface.rs b/src/agnostic_interface.rs index acb7250..ff2fb8f 100644 --- a/src/agnostic_interface.rs +++ b/src/agnostic_interface.rs @@ -114,6 +114,6 @@ pub trait GameInterface { fn get_camera(&mut self) -> Result, String>; fn get_default_camera(&mut self) -> Result, String>; - fn set_camera(&mut self, camera: &Box) -> Result<(), String>; + fn set_camera(&mut self, camera: &dyn CameraInterface) -> Result<(), String>; fn set_camera_xy(&mut self, x: f32, y: f32) -> Result<(), String>; } diff --git a/src/agnostic_interface/raylib_impl.rs b/src/agnostic_interface/raylib_impl.rs index e0eb388..5abaf6b 100644 --- a/src/agnostic_interface/raylib_impl.rs +++ b/src/agnostic_interface/raylib_impl.rs @@ -3,6 +3,7 @@ pub mod ffi { #![allow(non_camel_case_types)] #![allow(non_snake_case)] #![allow(dead_code)] + #![allow(clippy::approx_constant)] include!(concat!(env!("OUT_DIR"), "/raylib_bindings.rs")); } @@ -603,22 +604,22 @@ impl RaylibGame { impl Drop for RaylibGame { fn drop(&mut self) { unsafe { - for (_, shader) in &self.shaders { + for shader in self.shaders.values() { ffi::UnloadShader(shader.borrow().shader); } - for (_, image) in &self.images { + for image in self.images.values() { if let Some(texture) = image.borrow_mut().texture.take() { ffi::UnloadTexture(texture); } ffi::UnloadImage(image.borrow().image); } - for (_, font) in &self.fonts { + for font in self.fonts.values() { ffi::UnloadFont(font.font); } - for (_, sound) in &self.sounds { + for sound in self.sounds.values() { ffi::UnloadSound(sound.sound); } - for (_, music) in &self.music { + for music in self.music.values() { ffi::UnloadMusicStream(music.borrow().music); } ffi::CloseWindow(); @@ -917,22 +918,18 @@ impl GameInterface for RaylibGame { let path_buf: Vec = path_str.as_bytes().into(); let cstring: CString = CString::from_vec_unchecked(path_buf); let image = ffi::LoadImage(cstring.as_ptr()); - let tr_or_cam_shader: Option = - if let Some(shader) = self.shaders.get("transform_origin") { - Some(RaylibShaderHandler { - shader: shader.clone(), - }) - } else { - None - }; + let tr_or_cam_shader: Option = self + .shaders + .get("transform_origin") + .map(|shader| RaylibShaderHandler { + shader: shader.clone(), + }); let cam_shader: Option = - if let Some(shader) = self.shaders.get("camera") { - Some(RaylibShaderHandler { + self.shaders + .get("camera") + .map(|shader| RaylibShaderHandler { shader: shader.clone(), - }) - } else { - None - }; + }); let raylib_image_handler = RaylibImageHandler { image: Rc::new(RefCell::new(RaylibImage { image, @@ -1024,11 +1021,11 @@ impl GameInterface for RaylibGame { } fn get_default_camera(&mut self) -> Result, String> { - Ok(Box::new(Camera::default())) + Ok(Box::::default()) } - fn set_camera(&mut self, camera: &Box) -> Result<(), String> { - self.camera.borrow_mut().pos = camera.as_ref().get_view_xy()?.into(); + fn set_camera(&mut self, camera: &dyn super::CameraInterface) -> Result<(), String> { + self.camera.borrow_mut().pos = camera.get_view_xy()?.into(); Ok(()) } diff --git a/src/faux_quicksilver.rs b/src/faux_quicksilver.rs index b1ba0e7..e3630c9 100644 --- a/src/faux_quicksilver.rs +++ b/src/faux_quicksilver.rs @@ -344,7 +344,7 @@ impl Window { } pub fn update_music(&mut self) -> Result<(), String> { - for (_, music) in &mut self.music { + for music in self.music.values_mut() { music.update()?; } Ok(()) diff --git a/src/lib.rs b/src/lib.rs index 7e6484f..554072c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -38,11 +38,11 @@ pub extern "C" fn ld45_iterate(context: *mut ::std::os::raw::c_void) { (*state_ptr).get_window_mut().update_music().unwrap(); (*state_ptr) .get_state_mut() - .update(&mut (*state_ptr).get_window_mut()) + .update((*state_ptr).get_window_mut()) .unwrap(); (*state_ptr) .get_state_mut() - .draw(&mut (*state_ptr).get_window_mut()) + .draw((*state_ptr).get_window_mut()) .unwrap(); } } diff --git a/src/original_impl.rs b/src/original_impl.rs index 600aaaf..2da4c9b 100644 --- a/src/original_impl.rs +++ b/src/original_impl.rs @@ -583,15 +583,13 @@ impl ParticleSystem { self.particles[i].life_timer += dt; if self.particles[i].life_timer > self.particles[i].lifetime { self.particles.swap_remove(i); + } else if self.is_rect { + self.particles[i].rect.x += self.particles[i].velx * dt; + self.particles[i].rect.y += self.particles[i].vely * dt; + self.particles[i].r += self.particles[i].velr * dt; } else { - if self.is_rect { - self.particles[i].rect.x += self.particles[i].velx * dt as f32; - self.particles[i].rect.y += self.particles[i].vely * dt as f32; - self.particles[i].r += self.particles[i].velr * dt as f32; - } else { - self.particles[i].circle.x += self.particles[i].velx * dt as f32; - self.particles[i].circle.y += self.particles[i].vely * dt as f32; - } + self.particles[i].circle.x += self.particles[i].velx * dt; + self.particles[i].circle.y += self.particles[i].vely * dt; } } @@ -627,9 +625,8 @@ impl ParticleSystem { return; } for particle in &mut self.particles { - self.color.a = ((1.0 - (particle.life_timer / particle.lifetime) as f32) - * self.opacity - * 255.0) as u8; + self.color.a = + ((1.0 - particle.life_timer / particle.lifetime) * self.opacity * 255.0) as u8; if particle.is_rect { let pre_transform = Transform::translate(particle.rect.w / 2.0, particle.rect.h / 2.0) @@ -747,7 +744,7 @@ impl RotatingParticleSystem { self.particle_system.update(dt); self.particle_system.host_circle = saved_cir; } - self.r += self.velr * dt as f32 * 10.0; + self.r += self.velr * dt * 10.0; } fn draw(&mut self, window: &mut Window, transform: Transform) { @@ -846,7 +843,7 @@ impl ExplConvParticleSystem { } if self.life_timer < self.lifetime / 2.0 { - let amount = interp_sq_inv((self.life_timer / self.lifetime) as f32 * 2.0); + let amount = interp_sq_inv(self.life_timer / self.lifetime * 2.0); for particle in &mut self.particles { let dir = Transform::rotate(particle.r) * Vector::new(particle.offset * amount, 0.0); @@ -854,7 +851,7 @@ impl ExplConvParticleSystem { particle.circle.y = dir.y + self.host_circle.y; } } else { - let amount = 1.0 - interp_sq(((self.life_timer / self.lifetime) as f32 - 0.5) * 2.0); + let amount = 1.0 - interp_sq((self.life_timer / self.lifetime - 0.5) * 2.0); for particle in &mut self.particles { let dir = Transform::rotate(particle.r) * Vector::new(particle.offset * amount, 0.0); @@ -862,7 +859,7 @@ impl ExplConvParticleSystem { particle.circle.y = dir.y + self.host_circle.y; } } - return false; + false } fn draw(&mut self, window: &mut Window, transform: Transform) { @@ -870,9 +867,8 @@ impl ExplConvParticleSystem { return; } for particle in &mut self.particles { - self.color.a = (((self.life_timer / self.lifetime) as f32 / 2.0 + 0.5) - * self.opacity - * 255.0) as u8; + self.color.a = + ((self.life_timer / self.lifetime / 2.0 + 0.5) * self.opacity * 255.0) as u8; window .get_gi_mut() .draw_circle_transform( @@ -1019,7 +1015,7 @@ impl Star { fn update(&mut self, dt: f32) { self.particle_system.update(dt); - self.r += self.velr * dt as f32; + self.r += self.velr * dt; } fn draw(&mut self, image: &str, window: &mut Window, transform: Transform) { @@ -1104,7 +1100,7 @@ impl Fish { self.r = rand::thread_rng().gen_range(0.0, std::f32::consts::PI * 2.0); self.anim_timer = rand::thread_rng().gen_range(1.6, 2.0); self.anim_time = self.anim_timer; - self.swim_v = (self.anim_timer / 8.0) as f32; + self.swim_v = self.anim_timer / 8.0; } } } @@ -1127,7 +1123,7 @@ impl Fish { self.anim_timer = self.anim_time; } - self.pos -= Transform::rotate(self.r) * Vector::new(self.swim_v, 0.0) * dt as f32 * 200.0; + self.pos -= Transform::rotate(self.r) * Vector::new(self.swim_v, 0.0) * dt * 200.0; } fn draw(&mut self, i_fish: &str, window: &mut Window, transform: Transform) { @@ -1138,7 +1134,7 @@ impl Fish { let mut body_rect = self.body_rect; body_rect.x = self.pos.x - self.body_rect.w / 2.0; body_rect.y = self.pos.y - self.body_rect.h / 2.0; - let body_tr = Transform::rotate(anim_angle as f32 + self.r); + let body_tr = Transform::rotate(anim_angle + self.r); fish_img .draw_sub_transform( self.body_rect, @@ -1159,7 +1155,7 @@ impl Fish { .sin(); let tail_tr = body_tr * Transform::translate(-body_rect.w / 2.0, 0.0) - * Transform::rotate(-anim_angle as f32) + * Transform::rotate(-anim_angle) * Transform::translate(body_rect.w / 2.0, 0.0); fish_img .draw_sub_transform( @@ -1551,58 +1547,57 @@ impl GameState { } // check pressed keys - if window.get_gi_mut().get_key_pressed('s')? { - if self.state == 10 { - let save_data = SaveData { - planets: self.planets.clone(), - stars: self.stars.clone(), - fishes: self.fishes.clone(), - player: self.player.clone(), - joining_particles: self.joining_particles.clone(), - }; - // TODO - //save("OneAndAll_LD45", "slot0", &save_data)?; - self.save_load_notification = Some(SaveLoadNotification::Save { - text: None, - timer: SL_NOTIF_TIME, - }); - } - } else if window.get_gi_mut().get_key_pressed('l')? { - // TODO - //let load_result = load::("OneAndAll_LD45", "slot0"); - //if let Ok(save_data) = load_result { - // self.planets = save_data.planets; - // self.stars = save_data.stars; - // self.fishes = save_data.fishes; - // self.player = save_data.player; - // self.joining_particles = save_data.joining_particles; - // self.expl_conv_p_systems.clear(); - // self.move_to = Vector { - // x: self.player.x, - // y: self.player.y, - // }; - // self.camera.set_view_xy( - // self.player.x - WIDTH_F / 2.0, - // self.player.y - HEIGHT_F / 2.0, - // ); - // self.dbl_click_timeout = None; - // self.click_time = None; - // self.click_release_time = DOUBLE_CLICK_TIME; + //if window.get_gi_mut().get_key_pressed('s')? { + // TODO implement save + //if self.state == 10 { + // let save_data = SaveData { + // planets: self.planets.clone(), + // stars: self.stars.clone(), + // fishes: self.fishes.clone(), + // player: self.player, + // joining_particles: self.joining_particles.clone(), + // }; + // save("OneAndAll_LD45", "slot0", &save_data)?; + // self.save_load_notification = Some(SaveLoadNotification::Save { + // text: None, + // timer: SL_NOTIF_TIME, + // }); + //} + //} else if window.get_gi_mut().get_key_pressed('l')? { + // TODO + //let load_result = load::("OneAndAll_LD45", "slot0"); + //if let Ok(save_data) = load_result { + // self.planets = save_data.planets; + // self.stars = save_data.stars; + // self.fishes = save_data.fishes; + // self.player = save_data.player; + // self.joining_particles = save_data.joining_particles; + // self.expl_conv_p_systems.clear(); + // self.move_to = Vector { + // x: self.player.x, + // y: self.player.y, + // }; + // self.camera.set_view_xy( + // self.player.x - WIDTH_F / 2.0, + // self.player.y - HEIGHT_F / 2.0, + // ); + // self.dbl_click_timeout = None; + // self.click_time = None; + // self.click_release_time = DOUBLE_CLICK_TIME; - // self.state = 10; - // self.state_dirty = true; - // self.save_load_notification = Some(SaveLoadNotification::Load { - // text: None, - // timer: SL_NOTIF_TIME, - // }); - //} - } else if window.get_gi_mut().get_key_pressed('r')? { - if self.state == 10 { - self.state = 0; - self.state_dirty = true; - window.get_music_mut(&self.music2)?.stop()?; - self.music_on = false; - } + // self.state = 10; + // self.state_dirty = true; + // self.save_load_notification = Some(SaveLoadNotification::Load { + // text: None, + // timer: SL_NOTIF_TIME, + // }); + //} + //} else if window.get_gi_mut().get_key_pressed('r')? && self.state == 10 { + if window.get_gi_mut().get_key_pressed('r')? && self.state == 10 { + self.state = 0; + self.state_dirty = true; + window.get_music_mut(&self.music2)?.stop()?; + self.music_on = false; } self.click_release_time += dt; @@ -1633,7 +1628,7 @@ impl GameState { cx + (self.player.x - WIDTH_F / 2.0 - cx) / 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.as_ref())?; self.player_r += dt / 10.0; @@ -1721,7 +1716,7 @@ impl GameState { } if self.joining_particles.particle_system.opacity < 1.0 && self.state > 2 { - self.joining_particles.particle_system.opacity += JOINING_OPACITY_RATE * dt as f32; + self.joining_particles.particle_system.opacity += JOINING_OPACITY_RATE * dt; if self.joining_particles.particle_system.opacity > 1.0 { self.joining_particles.particle_system.opacity = 1.0; } @@ -1731,7 +1726,7 @@ impl GameState { } if self.player_particles.opacity < 1.0 && self.state > 1 { - self.player_particles.opacity += dt as f32 / 7.0; + self.player_particles.opacity += dt / 7.0; if self.player_particles.opacity > 1.0 { self.player_particles.opacity = 1.0; } @@ -1739,7 +1734,6 @@ impl GameState { if self.music_on { } else if self.state == 10 { - let mut music_on = false; let music = window.get_music_mut(&self.music2)?; music.set_loop(true)?; music.play(0.5)?; @@ -1953,7 +1947,7 @@ impl GameState { self.player, Color::from_rgba(255, 255, 255, (self.player_particles.opacity * 255.0) as u8), Transform::translate(self.player.w / 2.0, self.player.h / 2.0) - * Transform::rotate(self.player_r as f32), + * Transform::rotate(self.player_r), Vector { x: self.player.x + self.player.w / 2.0, y: self.player.y + self.player.h / 2.0, diff --git a/src/shaders.rs b/src/shaders.rs index 7e36794..70e9424 100644 --- a/src/shaders.rs +++ b/src/shaders.rs @@ -32,9 +32,9 @@ pub fn set_transform_3f(index: ::std::os::raw::c_uint, transform: Transform) { unsafe { glVertexAttrib3f( idx, - transform.mat[0 + i as usize], - transform.mat[3 + i as usize], - transform.mat[6 + i as usize], + transform.mat[i], + transform.mat[3 + i], + transform.mat[6 + i], ); } }