mirror of
https://github.com/thilo-behnke/wasm-pong.git
synced 2026-07-11 10:39:18 +00:00
fix bugs in pong lib
This commit is contained in:
@@ -37,6 +37,6 @@
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{JSON.stringify($gameField)}
|
||||
{JSON.stringify($gameField.score)}
|
||||
|
||||
<slot tick={$gameField} inputs={inputs} handleError={handleError}></slot>
|
||||
|
||||
@@ -76,14 +76,12 @@ function createGameFieldStore(): Readable<GameFieldState> & {tick: (inputs: Inpu
|
||||
const field = FieldWrapper.new();
|
||||
|
||||
function tick(inputs: Input[], dt: number) {
|
||||
field.tick([], dt);
|
||||
// field.tick(inputs, dt);
|
||||
field.tick(inputs, dt);
|
||||
|
||||
const objects = JSON.parse(field.objects());
|
||||
const ts = Date.now();
|
||||
// const score = JSON.parse(field.game_state()) as {goals_player_1: number, goals_player_2: number};
|
||||
// set({objects, ts, score: {player1: score.goals_player_1, player2: score.goals_player_2}});
|
||||
set({objects, ts, score: {player1: 0, player2: 0}});
|
||||
const score = JSON.parse(field.game_state()) as {goals_player_1: number, goals_player_2: number};
|
||||
set({objects, ts, score: {player1: score.goals_player_1, player2: score.goals_player_2}});
|
||||
}
|
||||
|
||||
function update(objects: GameObject[]) {
|
||||
|
||||
@@ -117,7 +117,6 @@ impl InputDTO {
|
||||
pub fn obj_id(&self) -> String {
|
||||
self.obj_id.clone()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#[wasm_bindgen]
|
||||
@@ -151,7 +150,6 @@ impl FieldWrapper {
|
||||
.collect::<Vec<Input>>();
|
||||
let ms_diff = ms_diff_js.as_f64();
|
||||
self.field.tick(inputs, ms_diff.unwrap());
|
||||
// log!("{:?}", self.field.collisions);
|
||||
}
|
||||
|
||||
pub fn objects(&self) -> String {
|
||||
@@ -164,10 +162,10 @@ impl FieldWrapper {
|
||||
let json = json!(objs);
|
||||
serde_json::to_string(&json).unwrap()
|
||||
}
|
||||
//
|
||||
// pub fn game_state(&self) -> String {
|
||||
// serde_json::to_string(&self.field.game_state).unwrap()
|
||||
// }
|
||||
|
||||
pub fn game_state(&self) -> String {
|
||||
serde_json::to_string(&self.field.game_state).unwrap()
|
||||
}
|
||||
|
||||
pub fn set_dimensions(&mut self, width_js: JsValue, height_js: JsValue) {
|
||||
let width = width_js.as_f64().unwrap();
|
||||
|
||||
@@ -208,32 +208,36 @@ impl Field {
|
||||
collision_handler.handle(&field_stats, &obj_a, &obj_b);
|
||||
}
|
||||
|
||||
let left_bound = self.objs.iter().find(|o| o.borrow().obj_type() == "left_bound").unwrap();
|
||||
let right_bound = self.objs.iter().find(|o| o.borrow().obj_type() == "right_bound").unwrap();
|
||||
let balls = self.objs.iter().filter(|o| o.borrow().obj_type() == "ball").collect::<Vec<&Rc<RefCell<Box<dyn GameObject>>>>>();
|
||||
let ball_ids = balls.iter().map(|b| b.borrow().id().to_owned()).collect::<Vec<String>>();
|
||||
let ball_collisions = registered_collisions
|
||||
.iter()
|
||||
.map(|c| {
|
||||
if ball_ids.contains(&c.0) {
|
||||
return Some(c.1.clone())
|
||||
}
|
||||
if ball_ids.contains(&c.1) {
|
||||
return Some(c.0.clone())
|
||||
}
|
||||
return None
|
||||
})
|
||||
.filter(|v| v.is_some())
|
||||
.map(|c| c.unwrap())
|
||||
.map(|c| self.objs.iter().find(|o| o.borrow().id() == c).unwrap())
|
||||
.collect::<Vec<&Rc<RefCell<Box<dyn GameObject>>>>>();
|
||||
let ball_collisions = {
|
||||
let balls = self.objs.iter().filter(|o| o.borrow().obj_type() == "ball").collect::<Vec<&Rc<RefCell<Box<dyn GameObject>>>>>();
|
||||
let ball_ids = balls.iter().map(|b| b.borrow().id().to_owned()).collect::<Vec<String>>();
|
||||
registered_collisions
|
||||
.iter()
|
||||
.map(|c| {
|
||||
if ball_ids.contains(&c.0) {
|
||||
return Some(c.1.clone())
|
||||
}
|
||||
if ball_ids.contains(&c.1) {
|
||||
return Some(c.0.clone())
|
||||
}
|
||||
return None
|
||||
})
|
||||
.filter(|v| v.is_some())
|
||||
.map(|c| c.unwrap())
|
||||
.collect::<Vec<String>>()
|
||||
};
|
||||
|
||||
if ball_collisions.iter().find(|c| c.borrow().id() == right_bound.borrow().id()).is_some() {
|
||||
// goal for player 1
|
||||
self.game_state.goals_player_1 += 1;
|
||||
} else if ball_collisions.iter().find(|c| c.borrow().id() == left_bound.borrow().id()).is_some() {
|
||||
// goal for player 2
|
||||
self.game_state.goals_player_2 += 1;
|
||||
if ball_collisions.len() > 0 {
|
||||
let left_bound = self.objs.iter().find(|o| o.borrow().id() == "bound_left").unwrap();
|
||||
let right_bound = self.objs.iter().find(|o| o.borrow().id() == "bound_right").unwrap();
|
||||
|
||||
if ball_collisions.iter().any(|id| id == right_bound.borrow().id()) {
|
||||
// goal for player 1
|
||||
self.game_state.goals_player_1 += 1;
|
||||
} else if ball_collisions.iter().any(|id| id == left_bound.borrow().id()) {
|
||||
// goal for player 2
|
||||
self.game_state.goals_player_2 += 1;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user