mirror of
https://github.com/doukutsu-rs/doukutsu-rs
synced 2025-07-05 03:16:15 +00:00
Better control over tilemap ticks
This commit is contained in:
parent
6302258817
commit
95fd91b8a0
|
@ -5,7 +5,10 @@ use crate::framework::error::GameResult;
|
|||
use crate::shared_game_state::{SharedGameState, TileSize};
|
||||
use crate::stage::{BackgroundType, Stage, StageTexturePaths};
|
||||
|
||||
pub struct Tilemap;
|
||||
pub struct Tilemap {
|
||||
tick: u32,
|
||||
prev_tick: u32,
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
|
||||
pub enum TileLayer {
|
||||
|
@ -17,7 +20,17 @@ pub enum TileLayer {
|
|||
|
||||
impl Tilemap {
|
||||
pub fn new() -> Self {
|
||||
Tilemap
|
||||
Tilemap { tick: 0, prev_tick: 0 }
|
||||
}
|
||||
|
||||
pub fn tick(&mut self) -> GameResult {
|
||||
self.tick = self.tick.wrapping_add(1);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn set_prev(&mut self) -> GameResult {
|
||||
self.prev_tick = self.tick;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn draw(
|
||||
|
@ -28,7 +41,6 @@ impl Tilemap {
|
|||
layer: TileLayer,
|
||||
textures: &StageTexturePaths,
|
||||
stage: &Stage,
|
||||
tick: u32,
|
||||
) -> GameResult {
|
||||
if stage.map.tile_size == TileSize::Tile8x8 && layer == TileLayer::Snack {
|
||||
return Ok(());
|
||||
|
@ -181,7 +193,8 @@ impl Tilemap {
|
|||
continue;
|
||||
}
|
||||
|
||||
let shift = ((tick as f64 + state.frame_time) * 2.0) as u16 % 16;
|
||||
let shift =
|
||||
((self.tick as f64 + (self.tick - self.prev_tick) as f64 * state.frame_time) * 2.0) as u16 % 16;
|
||||
let mut push_rect = state.constants.world.water_push_rect;
|
||||
|
||||
match attr {
|
||||
|
|
|
@ -1381,6 +1381,9 @@ impl GameScene {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
self.tilemap.tick()?;
|
||||
|
||||
self.frame.update(state, &self.stage);
|
||||
|
||||
if state.control_flags.control_enabled() {
|
||||
|
@ -1742,6 +1745,8 @@ impl Scene for GameScene {
|
|||
|
||||
self.whimsical_star.set_prev();
|
||||
|
||||
self.tilemap.set_prev()?;
|
||||
|
||||
self.inventory_dim += 0.1
|
||||
* if state.textscript_vm.mode == ScriptMode::Inventory {
|
||||
state.frame_time as f32
|
||||
|
@ -1765,25 +1770,9 @@ impl Scene for GameScene {
|
|||
|
||||
let stage_textures_ref = &*self.stage_textures.deref().borrow();
|
||||
self.background.draw(state, ctx, &self.frame, stage_textures_ref, &self.stage)?;
|
||||
self.tilemap.draw(
|
||||
state,
|
||||
ctx,
|
||||
&self.frame,
|
||||
TileLayer::Background,
|
||||
stage_textures_ref,
|
||||
&self.stage,
|
||||
self.tick,
|
||||
)?;
|
||||
self.tilemap.draw(state, ctx, &self.frame, TileLayer::Background, stage_textures_ref, &self.stage)?;
|
||||
self.draw_npc_layer(state, ctx, NPCLayer::Background)?;
|
||||
self.tilemap.draw(
|
||||
state,
|
||||
ctx,
|
||||
&self.frame,
|
||||
TileLayer::Middleground,
|
||||
stage_textures_ref,
|
||||
&self.stage,
|
||||
self.tick,
|
||||
)?;
|
||||
self.tilemap.draw(state, ctx, &self.frame, TileLayer::Middleground, stage_textures_ref, &self.stage)?;
|
||||
|
||||
if state.settings.shader_effects && self.lighting_mode == LightingMode::BackgroundOnly {
|
||||
self.draw_light_map(state, ctx)?;
|
||||
|
@ -1800,16 +1789,8 @@ impl Scene for GameScene {
|
|||
}
|
||||
|
||||
self.water_renderer.draw(state, ctx, &self.frame)?;
|
||||
self.tilemap.draw(
|
||||
state,
|
||||
ctx,
|
||||
&self.frame,
|
||||
TileLayer::Foreground,
|
||||
stage_textures_ref,
|
||||
&self.stage,
|
||||
self.tick,
|
||||
)?;
|
||||
self.tilemap.draw(state, ctx, &self.frame, TileLayer::Snack, stage_textures_ref, &self.stage, self.tick)?;
|
||||
self.tilemap.draw(state, ctx, &self.frame, TileLayer::Foreground, stage_textures_ref, &self.stage)?;
|
||||
self.tilemap.draw(state, ctx, &self.frame, TileLayer::Snack, stage_textures_ref, &self.stage)?;
|
||||
|
||||
self.draw_carets(state, ctx)?;
|
||||
self.player1.popup.draw(state, ctx, &self.frame)?;
|
||||
|
|
Loading…
Reference in a new issue