summaryrefslogtreecommitdiff
path: root/src/cell.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/cell.rs')
-rw-r--r--src/cell.rs59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/cell.rs b/src/cell.rs
new file mode 100644
index 0000000..13d095f
--- /dev/null
+++ b/src/cell.rs
@@ -0,0 +1,59 @@
+use ggez::graphics::spritebatch::SpriteBatch;
+use ggez::nalgebra::Point2;
+
+use crate::animations::Animation;
+use crate::constants;
+use crate::entity::Operable;
+use crate::tileset::Tileset;
+
+#[derive(Debug, Clone)]
+pub struct Cell {
+ pub id: usize,
+ pub animation: Animation,
+ pub destination: Point2<f32>,
+}
+
+impl Operable for Cell {
+ fn update(&mut self) {
+ self.animation.update();
+ }
+
+ fn draw(&self, spritebatch: &mut SpriteBatch) {
+ self.animation.draw(spritebatch, self.destination);
+ }
+}
+
+impl Cell {
+ pub fn new(text: &str, i: usize, tileset: &Tileset, dimensions: (usize, usize)) -> Cell {
+ let id = text.parse::<usize>().unwrap();
+
+ /*
+ let (source, rotation) = match (flip_d, flip_h, flip_v) {
+ (true, true, true) => (flip(tileset.get(id)), convert_angle_to_rad(90.0)),
+ (true, true, false) => (tileset.get(id), convert_angle_to_rad(90.0)),
+ (true, false, true) => (tileset.get(id), convert_angle_to_rad(270.0)),
+ //(true, false, false) => (),
+ (false, true, true) => (tileset.get(id), convert_angle_to_rad(180.0)),
+ (false, true, false) => (flip(tileset.get(id)), 0.0),
+ //(false, false, true) => (),
+ //(false, false, false) => (),
+ _ => (tileset.get(id), 0.0),
+ };
+ */
+
+ let x = i as f32 % dimensions.0 as f32;
+ let y = (i as f32 / dimensions.1 as f32).floor();
+ //let offset = (constants::TILE_WIDTH / 2.0) * constants::TILE_SCALE;
+
+ let destination = Point2::new(
+ constants::TILE_WIDTH * constants::TILE_SCALE * x, //+ offset,
+ constants::TILE_HEIGHT * constants::TILE_SCALE * y, //+ offset,
+ );
+
+ Cell {
+ id,
+ animation: tileset.get_animation(id),
+ destination,
+ }
+ }
+}