mirror of
https://github.com/Mercantec-GHC/h5-projekt-mst.git
synced 2026-08-26 21:27:38 +02:00
collision with obstacles
This commit is contained in:
parent
af06d8f387
commit
aaa412952d
@ -4,6 +4,7 @@ mod engine;
|
|||||||
mod event_queue;
|
mod event_queue;
|
||||||
pub mod vermiparous;
|
pub mod vermiparous;
|
||||||
|
|
||||||
|
use core::panic;
|
||||||
use std::{
|
use std::{
|
||||||
collections::HashSet,
|
collections::HashSet,
|
||||||
f64::consts::PI,
|
f64::consts::PI,
|
||||||
@ -12,7 +13,7 @@ use std::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
engine::{Color, Key, Renderer, Scene, Shape, V3},
|
engine::{Color, Key, Renderer, Scene, Shape, V2, V3},
|
||||||
event_queue::EventQueue,
|
event_queue::EventQueue,
|
||||||
vermiparous::Server,
|
vermiparous::Server,
|
||||||
};
|
};
|
||||||
@ -34,12 +35,6 @@ impl Skateboard {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn render(&self, scene: &mut Scene) {
|
fn render(&self, scene: &mut Scene) {
|
||||||
scene.draw_shape(
|
|
||||||
self.pos,
|
|
||||||
&Shape::new_cube(self.size),
|
|
||||||
Color::Green,
|
|
||||||
Color::Black,
|
|
||||||
);
|
|
||||||
let board_size = V3(0.175, 0.005, 0.05);
|
let board_size = V3(0.175, 0.005, 0.05);
|
||||||
let trucks = {
|
let trucks = {
|
||||||
let anchor_size = V3(0.005, 0.01, 0.005);
|
let anchor_size = V3(0.005, 0.01, 0.005);
|
||||||
@ -151,6 +146,10 @@ impl Skateboard {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct UpdateCx<'game> {
|
||||||
|
skateboard: &'game mut Skateboard,
|
||||||
|
}
|
||||||
|
|
||||||
struct Game {
|
struct Game {
|
||||||
skateboard: Skateboard,
|
skateboard: Skateboard,
|
||||||
camera_pos: V3,
|
camera_pos: V3,
|
||||||
@ -165,7 +164,7 @@ impl Game {
|
|||||||
Self {
|
Self {
|
||||||
skateboard: Skateboard {
|
skateboard: Skateboard {
|
||||||
pos: V3(0.0, -0.15, -0.4),
|
pos: V3(0.0, -0.15, -0.4),
|
||||||
size: V3(0.1, 0.05, 0.2),
|
size: V3(0.05, 0.02, 0.15),
|
||||||
vel: V3(0.0, 0.0, 0.2),
|
vel: V3(0.0, 0.0, 0.2),
|
||||||
rot: V3(0.0, PI * 0.5, 0.0),
|
rot: V3(0.0, PI * 0.5, 0.0),
|
||||||
nyoom_factor: 0.0,
|
nyoom_factor: 0.0,
|
||||||
@ -224,8 +223,21 @@ impl<R: Renderer> engine::Game<R> for Game {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for object in &mut self.objects {
|
let ids = self
|
||||||
object.update(delta_time);
|
.objects
|
||||||
|
.iter()
|
||||||
|
.enumerate()
|
||||||
|
.map(|(i, object)| (i, object.id))
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
let mut cx = UpdateCx {
|
||||||
|
skateboard: &mut self.skateboard,
|
||||||
|
};
|
||||||
|
|
||||||
|
for (i, id) in ids {
|
||||||
|
let object = &mut self.objects[i];
|
||||||
|
|
||||||
|
object.update(&mut cx, delta_time);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,10 +320,27 @@ impl ShapeGroup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Object {
|
impl Object {
|
||||||
fn update(&mut self, delta_time: Duration) {
|
fn update<'game>(&mut self, cx: &mut UpdateCx<'game>, delta_time: Duration) {
|
||||||
match &mut self.kind {
|
match &mut self.kind {
|
||||||
ObjectKind::Obstacle { pos, vel, .. } => {
|
ObjectKind::Obstacle { pos, vel, size, .. } => {
|
||||||
*pos += *vel * delta_time.as_secs_f64();
|
*pos += *vel * delta_time.as_secs_f64();
|
||||||
|
let (skateboard_pos, skateboard_pos_and_size) = (
|
||||||
|
V2(
|
||||||
|
cx.skateboard.pos.0 - cx.skateboard.size.0 / 2.0,
|
||||||
|
cx.skateboard.pos.2 - cx.skateboard.size.2 / 2.0,
|
||||||
|
),
|
||||||
|
V2(
|
||||||
|
cx.skateboard.pos.0 + cx.skateboard.size.0 / 2.0,
|
||||||
|
cx.skateboard.pos.2 + cx.skateboard.size.2 / 2.0,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
if skateboard_pos.0 < pos.0 + size.0
|
||||||
|
&& skateboard_pos_and_size.0 > pos.0
|
||||||
|
&& skateboard_pos.1 < pos.2 + size.2
|
||||||
|
&& skateboard_pos_and_size.1 > pos.2
|
||||||
|
{
|
||||||
|
panic!("You lost 🫵 😂");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ObjectKind::Ground { .. } => {}
|
ObjectKind::Ground { .. } => {}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user