forked from StrafesNET/strafe-client
boilerplate
This commit is contained in:
parent
f11742ef3b
commit
2c4e6f642b
119
src/body.rs
119
src/body.rs
@ -21,6 +21,125 @@ pub struct PhysicsState {
|
|||||||
pub jump_trying: bool,
|
pub jump_trying: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Clone,Copy)]
|
||||||
|
enum AabbFace{
|
||||||
|
Right,//+X
|
||||||
|
Top,
|
||||||
|
Back,
|
||||||
|
Left,
|
||||||
|
Bottom,
|
||||||
|
Front,
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Aabb {
|
||||||
|
min: glam::Vec3,
|
||||||
|
max: glam::Vec3,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Aabb {
|
||||||
|
// const FACE_DATA: [[f32; 3]; 6] = [
|
||||||
|
// [0.0f32, 0., 1.],
|
||||||
|
// [0.0f32, 0., -1.],
|
||||||
|
// [1.0f32, 0., 0.],
|
||||||
|
// [-1.0f32, 0., 0.],
|
||||||
|
// [0.0f32, 1., 0.],
|
||||||
|
// [0.0f32, -1., 0.],
|
||||||
|
// ];
|
||||||
|
const VERTEX_DATA_RIGHT: &'static [glam::Vec3; 4] = &[
|
||||||
|
glam::vec3(1., -1., -1.),
|
||||||
|
glam::vec3(1., 1., -1.),
|
||||||
|
glam::vec3(1., 1., 1.),
|
||||||
|
glam::vec3(1., -1., 1.),
|
||||||
|
];
|
||||||
|
const VERTEX_DATA_TOP: &'static [glam::Vec3; 4] = &[
|
||||||
|
glam::vec3(1., 1., -1.),
|
||||||
|
glam::vec3(-1., 1., -1.),
|
||||||
|
glam::vec3(-1., 1., 1.),
|
||||||
|
glam::vec3(1., 1., 1.),
|
||||||
|
];
|
||||||
|
const VERTEX_DATA_BACK: &'static [glam::Vec3; 4] = &[
|
||||||
|
glam::vec3(-1., -1., 1.),
|
||||||
|
glam::vec3(1., -1., 1.),
|
||||||
|
glam::vec3(1., 1., 1.),
|
||||||
|
glam::vec3(-1., 1., 1.),
|
||||||
|
];
|
||||||
|
const VERTEX_DATA_LEFT: &'static [glam::Vec3; 4] = &[
|
||||||
|
glam::vec3(-1., -1., 1.),
|
||||||
|
glam::vec3(-1., 1., 1.),
|
||||||
|
glam::vec3(-1., 1., -1.),
|
||||||
|
glam::vec3(-1., -1., -1.),
|
||||||
|
];
|
||||||
|
const VERTEX_DATA_BOTTOM: &'static [glam::Vec3; 4] = &[
|
||||||
|
glam::vec3(1., -1., 1.),
|
||||||
|
glam::vec3(-1., -1., 1.),
|
||||||
|
glam::vec3(-1., -1., -1.),
|
||||||
|
glam::vec3(1., -1., -1.),
|
||||||
|
];
|
||||||
|
const VERTEX_DATA_FRONT: &'static [glam::Vec3; 4] = &[
|
||||||
|
glam::vec3(-1., 1., -1.),
|
||||||
|
glam::vec3(1., 1., -1.),
|
||||||
|
glam::vec3(1., -1., -1.),
|
||||||
|
glam::vec3(-1., -1., -1.),
|
||||||
|
];
|
||||||
|
|
||||||
|
pub fn new() -> Self {
|
||||||
|
Self {min: glam::Vec3::INFINITY,max: glam::Vec3::NEG_INFINITY}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn grow(&mut self, point:glam::Vec3){
|
||||||
|
self.min=self.min.min(point);
|
||||||
|
self.max=self.max.max(point);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn normal(face:AabbFace) -> glam::Vec3 {
|
||||||
|
match face {
|
||||||
|
AabbFace::Right => glam::vec3(1.,0.,0.),
|
||||||
|
AabbFace::Top => glam::vec3(0.,1.,0.),
|
||||||
|
AabbFace::Back => glam::vec3(0.,0.,1.),
|
||||||
|
AabbFace::Left => glam::vec3(-1.,0.,0.),
|
||||||
|
AabbFace::Bottom => glam::vec3(0.,-1.,0.),
|
||||||
|
AabbFace::Front => glam::vec3(0.,0.,-1.),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pub fn face_vertices(face:AabbFace) -> &'static [glam::Vec3;4] {
|
||||||
|
match face {
|
||||||
|
AabbFace::Right => Self::VERTEX_DATA_RIGHT,
|
||||||
|
AabbFace::Top => Self::VERTEX_DATA_TOP,
|
||||||
|
AabbFace::Back => Self::VERTEX_DATA_BACK,
|
||||||
|
AabbFace::Left => Self::VERTEX_DATA_LEFT,
|
||||||
|
AabbFace::Bottom => Self::VERTEX_DATA_BOTTOM,
|
||||||
|
AabbFace::Front => Self::VERTEX_DATA_FRONT,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type Face = AabbFace;
|
||||||
|
type TreyMesh = Aabb;
|
||||||
|
|
||||||
|
pub struct Model {
|
||||||
|
//A model is a thing that has a hitbox. can be represented by a list of TreyMesh-es
|
||||||
|
//in this iteration, all it needs is extents.
|
||||||
|
transform: glam::Mat4,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Model {
|
||||||
|
pub fn face_vertices(&self,face:Face) -> &'static [glam::Vec3;4] {
|
||||||
|
Aabb::face_vertices(face)
|
||||||
|
}
|
||||||
|
pub fn face_mesh(&self,face:Face) -> TreyMesh {
|
||||||
|
let mut aabb=Aabb::new();
|
||||||
|
for &vertex in self.face_vertices(face).iter() {
|
||||||
|
aabb.grow(vertex);
|
||||||
|
}
|
||||||
|
return aabb;
|
||||||
|
}
|
||||||
|
pub fn face_normal(&self,face:Face) -> glam::Vec3 {
|
||||||
|
let mut n=glam::Vec3Swizzles::xyzz(Aabb::normal(face));
|
||||||
|
n.w=0.0;//what a man will do to avoid writing out the components
|
||||||
|
glam::Vec4Swizzles::xyz(self.transform*n)//this is wrong for scale
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub struct RelativeCollision {
|
pub struct RelativeCollision {
|
||||||
face: Face,//just an id
|
face: Face,//just an id
|
||||||
model: u32,//using id to avoid lifetimes
|
model: u32,//using id to avoid lifetimes
|
||||||
|
Loading…
Reference in New Issue
Block a user