From e8337f14fb493fd3adcbff3473aea59a279972f0 Mon Sep 17 00:00:00 2001 From: Alula Date: Sat, 26 Sep 2020 01:48:32 +0200 Subject: [PATCH] directional lights lol --- src/builtin/lightmap/direct.png | Bin 0 -> 8690 bytes src/builtin_fs.rs | 1 + src/scene/game_scene.rs | 38 +++++++++++++++++++++++++++----- 3 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 src/builtin/lightmap/direct.png diff --git a/src/builtin/lightmap/direct.png b/src/builtin/lightmap/direct.png new file mode 100644 index 0000000000000000000000000000000000000000..af79222e1f478d114e9a45011dfe16f57b1bb475 GIT binary patch literal 8690 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 (Rect { left: 0, top: 0, right: 32, bottom: 32 }, -size * 32.0, -size * 16.0), + Direction::Up => (Rect { left: 32, top: 0, right: 64, bottom: 32 }, -size * 16.0, -size * 32.0), + Direction::Right => (Rect { left: 32, top: 32, right: 64, bottom: 64 }, 0.0, -size * 16.0), + Direction::Bottom => (Rect { left: 0, top: 32, right: 32, bottom: 64 }, -size * 16.0, -size * 0.0), + }; + + batch.add_rect_scaled_tinted(x + offset_x, y + offset_y, color, + size, + size, + &rect) + } + fn draw_light_map(&self, state: &mut SharedGameState, ctx: &mut Context) -> GameResult { if self.stage.data.background_type == BackgroundType::Black { return Ok(()); @@ -541,16 +555,28 @@ impl GameScene { graphics::set_canvas(ctx, Some(&state.lightmap_canvas)); graphics::set_blend_mode(ctx, BlendMode::Add)?; - graphics::clear(ctx, Color::from_rgb(130, 130, 130)); + graphics::clear(ctx, Color::from_rgb(150, 150, 150)); { - let batch = state.texture_set.get_or_load_batch(ctx, &state.constants, "builtin/lightmap/spot")?; + if !self.player.cond.hidden() && self.inventory.get_current_weapon().is_some() { + let batch = state.texture_set.get_or_load_batch(ctx, &state.constants, "builtin/lightmap/direct")?; - if state.control_flags.control_enabled() { - self.draw_light(((self.player.x - self.frame.x) / 0x200) as f32, - ((self.player.y - self.frame.y) / 0x200) as f32, - 3.0, (255, 255, 255), batch); + let direction = if self.player.up { + Direction::Up + } else if self.player.down { + Direction::Bottom + } else { + self.player.direction + }; + + self.draw_directional_light(((self.player.x - self.frame.x) / 0x200) as f32, + ((self.player.y - self.frame.y) / 0x200) as f32, + 3.0, direction, (255, 255, 255), batch); + + batch.draw_filtered(FilterMode::Linear, ctx)?; } + let batch = state.texture_set.get_or_load_batch(ctx, &state.constants, "builtin/lightmap/spot")?; + for bullet in self.bullet_manager.bullets.iter() { self.draw_light(((bullet.x - self.frame.x) / 0x200) as f32, ((bullet.y - self.frame.y) / 0x200) as f32,