diff --git a/cooperative_cuisine/configs/layouts_archive/test_layouts/large.layout b/cooperative_cuisine/configs/layouts/large.layout similarity index 100% rename from cooperative_cuisine/configs/layouts_archive/test_layouts/large.layout rename to cooperative_cuisine/configs/layouts/large.layout diff --git a/cooperative_cuisine/configs/layouts_archive/test_layouts/large_t.layout b/cooperative_cuisine/configs/layouts/large_t.layout similarity index 100% rename from cooperative_cuisine/configs/layouts_archive/test_layouts/large_t.layout rename to cooperative_cuisine/configs/layouts/large_t.layout diff --git a/cooperative_cuisine/movement.py b/cooperative_cuisine/movement.py index 6ffaa6dce086447256520056345375ab01848e1e..2523e50f871758f6e9e3049a2b8ca60f0d59e042 100644 --- a/cooperative_cuisine/movement.py +++ b/cooperative_cuisine/movement.py @@ -193,47 +193,37 @@ class Movement: updated_movement * (self.player_movement_speed * d_time) ) + # check if players collided with counters through movement or through being pushed ( collided, relevant_axes, nearest_counter_to_player, ) = self.get_counter_collisions(new_targeted_positions) - new_targeted_positions[collided] = player_positions[collided] + # If collided, check if the players could still move along the axis, starting with x + # This leads to players beeing able to slide along counters, which feels alot nicer. projected_x = updated_movement.copy() projected_x[collided, 1] = 0 new_targeted_positions[collided] = player_positions[collided] + ( projected_x[collided] * (self.player_movement_speed * d_time) ) - + # checking collisions again ( collided, relevant_axes, nearest_counter_to_player, ) = self.get_counter_collisions(new_targeted_positions) new_targeted_positions[collided] = player_positions[collided] + # and now y axis collisions projected_y = updated_movement.copy() projected_y[collided, 0] = 0 new_targeted_positions[collided] = player_positions[collided] + ( projected_y[collided] * (self.player_movement_speed * d_time) ) new_positions = new_targeted_positions - # # Check if sliding against counters is possible - # for idx, player in enumerate(player_positions): - # axis = relevant_axes[idx] - # if collided[idx]: - # # collide with counter left or top - # if nearest_counter_to_player[idx][axis] > 0: - # updated_movement[idx, axis] = np.max( - # [updated_movement[idx, axis], 0] - # ) - # # collide with counter right or bottom - # if nearest_counter_to_player[idx][axis] < 0: - # updated_movement[idx, axis] = np.min( - # [updated_movement[idx, axis], 0] - # ) - - # Check collisions with counters again, now absolute with no sliding possible + + # Check collisions with counters a final time, now absolute with no sliding possible. + # Players should never be able to enter counters this way. ( collided, relevant_axes, @@ -241,7 +231,7 @@ class Movement: ) = self.get_counter_collisions(new_positions) new_positions[collided] = player_positions[collided] - # Collisions player world borders + # Collisions of players with world borders new_positions = np.clip( new_positions, self.world_borders_lower + self.player_radius,