Galactica/src/objects/projectile.rs
2023-12-29 16:01:15 -08:00

69 lines
1.3 KiB
Rust

use cgmath::Point3;
use rapier2d::{
dynamics::{RigidBody, RigidBodyBuilder, RigidBodyHandle},
geometry::{ColliderBuilder, ColliderHandle},
};
use crate::{
physics::util,
render::{Sprite, SpriteTexture},
};
pub struct ProjectileBuilder {
pub rigid_body: RigidBodyBuilder,
pub collider: ColliderBuilder,
pub sprite: SpriteTexture,
pub lifetime: f32,
pub size: f32,
pub damage: f32,
}
impl ProjectileBuilder {
pub fn build(self, r: RigidBodyHandle, c: ColliderHandle) -> Projectile {
Projectile {
rigid_body: r,
collider: c,
sprite: self.sprite,
lifetime: self.lifetime,
size: self.size,
damage: self.damage,
}
}
}
#[derive(Debug)]
pub struct Projectile {
pub rigid_body: RigidBodyHandle,
pub collider: ColliderHandle,
pub sprite: SpriteTexture,
pub lifetime: f32,
pub size: f32,
pub damage: f32,
}
impl Projectile {
pub fn tick(&mut self, t: f32) {
self.lifetime -= t;
}
pub fn is_expired(&self) -> bool {
return self.lifetime < 0.0;
}
pub fn get_sprite(&self, r: &RigidBody) -> Sprite {
let pos = util::rigidbody_position(r);
let ang = util::rigidbody_angle(r);
Sprite {
texture: self.sprite.clone(),
pos: Point3 {
x: pos.x,
y: pos.y,
z: 1.0,
},
size: self.size,
angle: ang,
children: None,
}
}
}