use cgmath::Point2; use crate::{ physics::Pfloat, physics::PhysicsBody, render::Sprite, render::SpriteTexture, render::Spriteable, }; pub enum ShipKind { Gypsum, } impl ShipKind { fn sprite(&self) -> SpriteTexture { let name = match self { Self::Gypsum => "ship::gypsum", }; return SpriteTexture(name.to_owned()); } fn size(&self) -> Pfloat { match self { Self::Gypsum => 100.0, } } } pub struct Ship { pub physicsbody: PhysicsBody, kind: ShipKind, } impl Ship { pub fn new(kind: ShipKind, pos: Point2) -> Self { Ship { physicsbody: PhysicsBody::new(pos), kind, } } } impl Spriteable for Ship { fn get_sprite(&self) -> Sprite { return Sprite { pos: (self.physicsbody.pos.x, self.physicsbody.pos.y, 1.0).into(), texture: self.kind.sprite(), angle: self.physicsbody.angle, scale: 1.0, size: self.kind.size(), }; } }