fix bugs in pong lib

This commit is contained in:
Thilo Behnke
2022-07-03 23:36:17 +02:00
parent 351c55d3ed
commit 6c3da2bb5b
4 changed files with 37 additions and 37 deletions

View File

@@ -37,6 +37,6 @@
}
}
</script>
{JSON.stringify($gameField)}
{JSON.stringify($gameField.score)}
<slot tick={$gameField} inputs={inputs} handleError={handleError}></slot>

View File

@@ -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[]) {

View File

@@ -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();

View File

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