Galactica/src/game/ship.rs
2023-12-25 16:21:14 -08:00

53 lines
888 B
Rust

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<Pfloat>) -> 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(),
};
}
}