diff --git a/client/svelte-client/src/components/TickWrapper.svelte b/client/svelte-client/src/components/TickWrapper.svelte index d6c6563..08fcc49 100644 --- a/client/svelte-client/src/components/TickWrapper.svelte +++ b/client/svelte-client/src/components/TickWrapper.svelte @@ -37,6 +37,6 @@ } } -{JSON.stringify($gameField)} +{JSON.stringify($gameField.score)} diff --git a/client/svelte-client/src/store/engine.ts b/client/svelte-client/src/store/engine.ts index bfeb040..dbf81e4 100644 --- a/client/svelte-client/src/store/engine.ts +++ b/client/svelte-client/src/store/engine.ts @@ -76,14 +76,12 @@ function createGameFieldStore(): Readable & {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[]) { diff --git a/client/wasm/src/lib.rs b/client/wasm/src/lib.rs index fbf08b7..3688543 100644 --- a/client/wasm/src/lib.rs +++ b/client/wasm/src/lib.rs @@ -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::>(); 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(); diff --git a/pong/src/game_field.rs b/pong/src/game_field.rs index 5aecf1d..3cd114b 100644 --- a/pong/src/game_field.rs +++ b/pong/src/game_field.rs @@ -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::>>>>(); - let ball_ids = balls.iter().map(|b| b.borrow().id().to_owned()).collect::>(); - 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::>>>>(); + let ball_collisions = { + let balls = self.objs.iter().filter(|o| o.borrow().obj_type() == "ball").collect::>>>>(); + let ball_ids = balls.iter().map(|b| b.borrow().id().to_owned()).collect::>(); + 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::>() + }; - 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; + } } {