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;
+ }
}
{