From 32a62cfcb925225359a5c90761b795f2f737ebd2 Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Tue, 18 Aug 2026 00:08:28 -0400 Subject: Re-populate games --- 2026/games/asrael_io/source/src/anim.rs | 42 +++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 2026/games/asrael_io/source/src/anim.rs (limited to '2026/games/asrael_io/source/src/anim.rs') diff --git a/2026/games/asrael_io/source/src/anim.rs b/2026/games/asrael_io/source/src/anim.rs new file mode 100644 index 0000000..427e22e --- /dev/null +++ b/2026/games/asrael_io/source/src/anim.rs @@ -0,0 +1,42 @@ +use crate::color::Palette; +use crate::sprite::Sprite; + +use std::rc::Rc; + +use glam::Vec2; + +const FRAME_TICKS: u32 = 6; + +pub struct Anim { + center: Vec2, + frames: Rc>, + tick: u32, +} + +impl Anim { + pub fn new(frames: Rc>, center: Vec2) -> Self { + Self { + center, + frames, + tick: 0, + } + } + + pub fn done(&self) -> bool { + self.tick >= FRAME_TICKS * self.frames.len() as u32 + } + + pub fn update(&mut self) { + self.tick += 1; + } + + pub fn draw(&self, frame: &mut [u32], palette: &Palette) { + let i = (self.tick / FRAME_TICKS) as usize; + let Some(sprite) = self.frames.get(i) else { + return; + }; + + let pos = self.center - sprite.size.as_vec2() / 2.0; + sprite.draw_at(frame, palette, pos.round().as_ivec2()); + } +} -- cgit v1.3.1