Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Item placement #503

Merged
merged 2 commits into from
Dec 2, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 14 additions & 14 deletions assets/map/levels/level1.map.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1144,16 +1144,24 @@ layers:
kind: !element
elements:
- pos:
- 434.74872
- 361.5
- 434
- 361
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 84.00006
- 201.5
- 80
- 202
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 787.7432
- 201.5
- 784
- 202
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 288.0
- 105.5
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 576.0
- 105.5
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 90.666664
Expand Down Expand Up @@ -1262,14 +1270,6 @@ layers:
- 720.9998
- 121.5
element: ../elements/item/cannon/cannon.element.yaml
- pos:
- 312.0
- 105.5
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 576.0
- 105.5
element: ../elements/environment/sproinger/sproinger.element.yaml
- id: spawners
kind: !element
elements:
Expand Down
34 changes: 17 additions & 17 deletions assets/map/levels/level2.map.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -753,6 +753,22 @@ layers:
- id: decorations
kind: !element
elements:
- pos:
- 336
- 74
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 752
- 74
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 944
- 74
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 706.8572
- 337.5
element: ../elements/item/sword/sword.element.yaml
- pos:
- 536.0
- 185.5
Expand Down Expand Up @@ -824,22 +840,6 @@ layers:
- 1015.1428
- 95.5
element: ../elements/item/kick_bomb/kick_bomb.element.yaml
- pos:
- 343.1112
- 73.5
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 758.1111
- 73.5
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 949.4359
- 73.5
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 706.8572
- 337.5
element: ../elements/item/sword/sword.element.yaml
- pos:
- 224.0
- 311.5
Expand All @@ -852,7 +852,7 @@ layers:
- 192.0
element: ../elements/environment/player_spawner/player_spawner.element.yaml
- pos:
- 320.0
- 290.0
- 96.0
element: ../elements/environment/player_spawner/player_spawner.element.yaml
- pos:
Expand Down
6 changes: 3 additions & 3 deletions assets/map/levels/level3.map.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1420,11 +1420,11 @@ layers:
elements:
- pos:
- 48.0
- 233.5
- 234
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 820.0
- 233.5
- 816.0
- 234
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 792.0
Expand Down
18 changes: 9 additions & 9 deletions assets/map/levels/level4.map.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1163,14 +1163,14 @@ layers:
- id: decorations
kind: !element
elements:
- pos:
- 560
- 106
element: ../elements/environment/sproinger/sproinger.element.yaml
- pos:
- 984.5713
- 247.5
element: ../elements/item/sniper_rifle/sniper_rifle.element.yaml
- pos:
- 107.4286
- 225.5
element: ../elements/item/blunderbass/blunderbass.element.yaml
- pos:
- 560.0
- 271.5
Expand Down Expand Up @@ -1221,11 +1221,15 @@ layers:
element: ../elements/decoration/anemones/anemones.element.yaml
- pos:
- 968.0
- 257.5
- 249.5
element: ../elements/decoration/anemones/anemones.element.yaml
- id: items
kind: !element
elements:
- pos:
- 107.4286
- 225.5
element: ../elements/item/blunderbass/blunderbass.element.yaml
- pos:
- 120.40002
- 129.5
Expand Down Expand Up @@ -1274,10 +1278,6 @@ layers:
- 800.0
- 425.5
element: ../elements/item/mines/mines.element.yaml
- pos:
- 564.9702
- 105.5
element: ../elements/environment/sproinger/sproinger.element.yaml
- id: spawners
kind: !element
elements:
Expand Down
50 changes: 27 additions & 23 deletions src/physics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -133,29 +133,33 @@ fn update_kinematic_bodies(

let mut position = transform.translation.truncate() + body.offset;

// Shove objects out of walls
while collision_world.collide_solids(position, body.size.x, body.size.y)
== TileCollision::Solid
{
let rect = collisions::Rect::new(position.x, position.y, body.size.x, body.size.y);

match (
collision_world.collide_tag(1, rect.top_left(), 0.0, 0.0) == TileCollision::Solid,
collision_world.collide_tag(1, rect.top_right(), 0.0, 0.0) == TileCollision::Solid,
collision_world.collide_tag(1, rect.bottom_right(), 0.0, 0.0)
== TileCollision::Solid,
collision_world.collide_tag(1, rect.bottom_left(), 0.0, 0.0)
== TileCollision::Solid,
) {
// Check for collisions on each side of the rectangle
(false, false, _, _) => position.y += 1.0,
(_, false, false, _) => position.x += 1.0,
(_, _, false, false) => position.y -= 1.0,
(false, _, _, false) => position.x -= 1.0,
// If none of the sides of the rectangle are un-collided, then we don't know
// which direction to move to get out of the wall, and we just give up.
_ => {
break;
if body.has_mass {
// Shove objects out of walls
while collision_world.collide_solids(position, body.size.x, body.size.y)
== TileCollision::Solid
{
let rect = collisions::Rect::new(position.x, position.y, body.size.x, body.size.y);

match (
collision_world.collide_tag(1, rect.top_left(), 0.0, 0.0)
== TileCollision::Solid,
collision_world.collide_tag(1, rect.top_right(), 0.0, 0.0)
== TileCollision::Solid,
collision_world.collide_tag(1, rect.bottom_right(), 0.0, 0.0)
== TileCollision::Solid,
collision_world.collide_tag(1, rect.bottom_left(), 0.0, 0.0)
== TileCollision::Solid,
) {
// Check for collisions on each side of the rectangle
(false, false, _, _) => position.y += 1.0,
(_, false, false, _) => position.x += 1.0,
(_, _, false, false) => position.y -= 1.0,
(false, _, _, false) => position.x -= 1.0,
// If none of the sides of the rectangle are un-collided, then we don't know
// which direction to move to get out of the wall, and we just give up.
_ => {
break;
}
}
}
}
Expand Down