Forests
This commit is contained in:
147
assets/test.ldtk
147
assets/test.ldtk
@@ -11,7 +11,7 @@
|
|||||||
"iid": "57508490-fa90-11f0-8c51-0f60a8049179",
|
"iid": "57508490-fa90-11f0-8c51-0f60a8049179",
|
||||||
"jsonVersion": "1.5.3",
|
"jsonVersion": "1.5.3",
|
||||||
"appBuildId": 473703,
|
"appBuildId": 473703,
|
||||||
"nextUid": 74,
|
"nextUid": 78,
|
||||||
"identifierStyle": "Capitalize",
|
"identifierStyle": "Capitalize",
|
||||||
"toc": [],
|
"toc": [],
|
||||||
"worldLayout": "Free",
|
"worldLayout": "Free",
|
||||||
@@ -113,6 +113,70 @@
|
|||||||
"active": true,
|
"active": true,
|
||||||
"isOptional": false,
|
"isOptional": false,
|
||||||
"rules": [
|
"rules": [
|
||||||
|
{
|
||||||
|
"uid": 74,
|
||||||
|
"active": true,
|
||||||
|
"size": 3,
|
||||||
|
"tileRectsIds": [[32]],
|
||||||
|
"alpha": 1,
|
||||||
|
"chance": 1,
|
||||||
|
"breakOnMatch": true,
|
||||||
|
"pattern": [4,4,0,4,-4,0,0,0,0],
|
||||||
|
"flipX": false,
|
||||||
|
"flipY": false,
|
||||||
|
"xModulo": 1,
|
||||||
|
"yModulo": 1,
|
||||||
|
"xOffset": 0,
|
||||||
|
"yOffset": 0,
|
||||||
|
"tileXOffset": 0,
|
||||||
|
"tileYOffset": 0,
|
||||||
|
"tileRandomXMin": 0,
|
||||||
|
"tileRandomXMax": 0,
|
||||||
|
"tileRandomYMin": 0,
|
||||||
|
"tileRandomYMax": 0,
|
||||||
|
"checker": "None",
|
||||||
|
"tileMode": "Single",
|
||||||
|
"pivotX": 0,
|
||||||
|
"pivotY": 0,
|
||||||
|
"outOfBoundsValue": null,
|
||||||
|
"invalidated": false,
|
||||||
|
"perlinActive": false,
|
||||||
|
"perlinSeed": 4982073,
|
||||||
|
"perlinScale": 0.2,
|
||||||
|
"perlinOctaves": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": 75,
|
||||||
|
"active": true,
|
||||||
|
"size": 3,
|
||||||
|
"tileRectsIds": [[30]],
|
||||||
|
"alpha": 1,
|
||||||
|
"chance": 1,
|
||||||
|
"breakOnMatch": true,
|
||||||
|
"pattern": [0,4,4,0,-4,4,0,0,0],
|
||||||
|
"flipX": false,
|
||||||
|
"flipY": false,
|
||||||
|
"xModulo": 1,
|
||||||
|
"yModulo": 1,
|
||||||
|
"xOffset": 0,
|
||||||
|
"yOffset": 0,
|
||||||
|
"tileXOffset": 0,
|
||||||
|
"tileYOffset": 0,
|
||||||
|
"tileRandomXMin": 0,
|
||||||
|
"tileRandomXMax": 0,
|
||||||
|
"tileRandomYMin": 0,
|
||||||
|
"tileRandomYMax": 0,
|
||||||
|
"checker": "None",
|
||||||
|
"tileMode": "Single",
|
||||||
|
"pivotX": 0,
|
||||||
|
"pivotY": 0,
|
||||||
|
"outOfBoundsValue": null,
|
||||||
|
"invalidated": false,
|
||||||
|
"perlinActive": false,
|
||||||
|
"perlinSeed": 4982073,
|
||||||
|
"perlinScale": 0.2,
|
||||||
|
"perlinOctaves": 2
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"uid": 62,
|
"uid": 62,
|
||||||
"active": true,
|
"active": true,
|
||||||
@@ -177,6 +241,70 @@
|
|||||||
"perlinScale": 0.2,
|
"perlinScale": 0.2,
|
||||||
"perlinOctaves": 2
|
"perlinOctaves": 2
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"uid": 76,
|
||||||
|
"active": true,
|
||||||
|
"size": 3,
|
||||||
|
"tileRectsIds": [[18]],
|
||||||
|
"alpha": 1,
|
||||||
|
"chance": 1,
|
||||||
|
"breakOnMatch": true,
|
||||||
|
"pattern": [0,0,0,0,-4,4,0,0,0],
|
||||||
|
"flipX": false,
|
||||||
|
"flipY": false,
|
||||||
|
"xModulo": 1,
|
||||||
|
"yModulo": 1,
|
||||||
|
"xOffset": 0,
|
||||||
|
"yOffset": 0,
|
||||||
|
"tileXOffset": 0,
|
||||||
|
"tileYOffset": 0,
|
||||||
|
"tileRandomXMin": 0,
|
||||||
|
"tileRandomXMax": 0,
|
||||||
|
"tileRandomYMin": 0,
|
||||||
|
"tileRandomYMax": 0,
|
||||||
|
"checker": "None",
|
||||||
|
"tileMode": "Single",
|
||||||
|
"pivotX": 0,
|
||||||
|
"pivotY": 0,
|
||||||
|
"outOfBoundsValue": null,
|
||||||
|
"invalidated": false,
|
||||||
|
"perlinActive": false,
|
||||||
|
"perlinSeed": 7205227,
|
||||||
|
"perlinScale": 0.2,
|
||||||
|
"perlinOctaves": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"uid": 77,
|
||||||
|
"active": true,
|
||||||
|
"size": 3,
|
||||||
|
"tileRectsIds": [[7]],
|
||||||
|
"alpha": 1,
|
||||||
|
"chance": 1,
|
||||||
|
"breakOnMatch": true,
|
||||||
|
"pattern": [0,0,0,0,-4,0,0,4,0],
|
||||||
|
"flipX": false,
|
||||||
|
"flipY": false,
|
||||||
|
"xModulo": 1,
|
||||||
|
"yModulo": 1,
|
||||||
|
"xOffset": 0,
|
||||||
|
"yOffset": 0,
|
||||||
|
"tileXOffset": 0,
|
||||||
|
"tileYOffset": 0,
|
||||||
|
"tileRandomXMin": 0,
|
||||||
|
"tileRandomXMax": 0,
|
||||||
|
"tileRandomYMin": 0,
|
||||||
|
"tileRandomYMax": 0,
|
||||||
|
"checker": "None",
|
||||||
|
"tileMode": "Single",
|
||||||
|
"pivotX": 0,
|
||||||
|
"pivotY": 0,
|
||||||
|
"outOfBoundsValue": null,
|
||||||
|
"invalidated": false,
|
||||||
|
"perlinActive": false,
|
||||||
|
"perlinSeed": 7205227,
|
||||||
|
"perlinScale": 0.2,
|
||||||
|
"perlinOctaves": 2
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"uid": 58,
|
"uid": 58,
|
||||||
"active": true,
|
"active": true,
|
||||||
@@ -1456,13 +1584,18 @@
|
|||||||
{ "px": [0,48], "src": [112,16], "f": 0, "t": 19, "d": [58,69], "a": 1 },
|
{ "px": [0,48], "src": [112,16], "f": 0, "t": 19, "d": [58,69], "a": 1 },
|
||||||
{ "px": [0,64], "src": [112,16], "f": 0, "t": 19, "d": [58,92], "a": 1 },
|
{ "px": [0,64], "src": [112,16], "f": 0, "t": 19, "d": [58,92], "a": 1 },
|
||||||
{ "px": [0,80], "src": [112,16], "f": 0, "t": 19, "d": [58,115], "a": 1 },
|
{ "px": [0,80], "src": [112,16], "f": 0, "t": 19, "d": [58,115], "a": 1 },
|
||||||
|
{ "px": [240,128], "src": [112,16], "f": 0, "t": 19, "d": [58,199], "a": 1 },
|
||||||
|
{ "px": [240,112], "src": [112,0], "f": 0, "t": 7, "d": [77,176], "a": 1 },
|
||||||
|
{ "px": [224,128], "src": [96,16], "f": 0, "t": 18, "d": [76,198], "a": 1 },
|
||||||
{ "px": [0,96], "src": [112,32], "f": 0, "t": 31, "d": [60,138], "a": 1 },
|
{ "px": [0,96], "src": [112,32], "f": 0, "t": 31, "d": [60,138], "a": 1 },
|
||||||
|
{ "px": [240,144], "src": [112,32], "f": 0, "t": 31, "d": [60,222], "a": 1 },
|
||||||
{ "px": [64,0], "src": [128,16], "f": 0, "t": 20, "d": [62,4], "a": 1 },
|
{ "px": [64,0], "src": [128,16], "f": 0, "t": 20, "d": [62,4], "a": 1 },
|
||||||
{ "px": [48,16], "src": [128,16], "f": 0, "t": 20, "d": [62,26], "a": 1 },
|
|
||||||
{ "px": [32,32], "src": [128,16], "f": 0, "t": 20, "d": [62,48], "a": 1 },
|
|
||||||
{ "px": [16,48], "src": [128,16], "f": 0, "t": 20, "d": [62,70], "a": 1 },
|
|
||||||
{ "px": [16,64], "src": [128,16], "f": 0, "t": 20, "d": [62,93], "a": 1 },
|
{ "px": [16,64], "src": [128,16], "f": 0, "t": 20, "d": [62,93], "a": 1 },
|
||||||
{ "px": [16,80], "src": [128,16], "f": 0, "t": 20, "d": [62,116], "a": 1 }
|
{ "px": [16,80], "src": [128,16], "f": 0, "t": 20, "d": [62,116], "a": 1 },
|
||||||
|
{ "px": [256,128], "src": [128,16], "f": 0, "t": 20, "d": [62,200], "a": 1 },
|
||||||
|
{ "px": [48,16], "src": [128,32], "f": 0, "t": 32, "d": [74,26], "a": 1 },
|
||||||
|
{ "px": [32,32], "src": [128,32], "f": 0, "t": 32, "d": [74,48], "a": 1 },
|
||||||
|
{ "px": [16,48], "src": [128,32], "f": 0, "t": 32, "d": [74,70], "a": 1 }
|
||||||
],
|
],
|
||||||
"seed": 7565984,
|
"seed": 7565984,
|
||||||
"overrideTilesetUid": null,
|
"overrideTilesetUid": null,
|
||||||
@@ -1493,7 +1626,7 @@
|
|||||||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,4,1,1,1,1,1,2,2,2,1,1,1,1,
|
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,4,1,1,1,1,1,2,2,2,1,1,1,1,
|
||||||
1,1,1,1,1,3,1,1,1,1,4,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,3,1,1,1,1,1,1,
|
1,1,1,1,1,3,1,1,1,1,4,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,3,1,1,1,1,1,1,
|
||||||
1,1,1,2,2,5,2,2,2,1,1,3,3,3,3,3,3,1,1,1,1,1,1,2,2,1,1,2,5,2,1,1,1,1,3,
|
1,1,1,2,2,5,2,2,2,1,1,3,3,3,3,3,3,1,1,1,1,1,1,2,2,1,1,2,5,2,1,1,1,1,3,
|
||||||
1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,
|
1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,1,1,1,1,3,1,4,1,1,1,1,1,1,1,1,1,1,
|
||||||
1,2,2,2,2,2,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,2,2,1,3,1,
|
1,2,2,2,2,2,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,2,2,1,3,1,
|
||||||
1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,2,
|
1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,2,
|
||||||
2,2,2,2,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,3,3,3,3,1,1,
|
2,2,2,2,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,3,3,3,3,1,1,
|
||||||
@@ -1720,7 +1853,6 @@
|
|||||||
{ "px": [176,128], "src": [32,0], "f": 0, "t": 2, "d": [38,195], "a": 1 },
|
{ "px": [176,128], "src": [32,0], "f": 0, "t": 2, "d": [38,195], "a": 1 },
|
||||||
{ "px": [192,128], "src": [32,0], "f": 0, "t": 2, "d": [38,196], "a": 1 },
|
{ "px": [192,128], "src": [32,0], "f": 0, "t": 2, "d": [38,196], "a": 1 },
|
||||||
{ "px": [224,128], "src": [0,0], "f": 0, "t": 0, "d": [38,198], "a": 1 },
|
{ "px": [224,128], "src": [0,0], "f": 0, "t": 0, "d": [38,198], "a": 1 },
|
||||||
{ "px": [240,128], "src": [32,0], "f": 0, "t": 2, "d": [38,199], "a": 1 },
|
|
||||||
{ "px": [256,128], "src": [16,0], "f": 0, "t": 1, "d": [38,200], "a": 1 },
|
{ "px": [256,128], "src": [16,0], "f": 0, "t": 1, "d": [38,200], "a": 1 },
|
||||||
{ "px": [272,128], "src": [16,0], "f": 0, "t": 1, "d": [38,201], "a": 1 },
|
{ "px": [272,128], "src": [16,0], "f": 0, "t": 1, "d": [38,201], "a": 1 },
|
||||||
{ "px": [288,128], "src": [16,0], "f": 0, "t": 1, "d": [38,202], "a": 1 },
|
{ "px": [288,128], "src": [16,0], "f": 0, "t": 1, "d": [38,202], "a": 1 },
|
||||||
@@ -1918,6 +2050,7 @@
|
|||||||
{ "px": [0,48], "src": [0,0], "f": 0, "t": 0, "d": [56,69], "a": 1 },
|
{ "px": [0,48], "src": [0,0], "f": 0, "t": 0, "d": [56,69], "a": 1 },
|
||||||
{ "px": [0,64], "src": [0,0], "f": 0, "t": 0, "d": [56,92], "a": 1 },
|
{ "px": [0,64], "src": [0,0], "f": 0, "t": 0, "d": [56,92], "a": 1 },
|
||||||
{ "px": [0,80], "src": [16,0], "f": 0, "t": 1, "d": [56,115], "a": 1 },
|
{ "px": [0,80], "src": [16,0], "f": 0, "t": 1, "d": [56,115], "a": 1 },
|
||||||
|
{ "px": [240,128], "src": [16,0], "f": 0, "t": 1, "d": [56,199], "a": 1 },
|
||||||
{ "px": [288,0], "src": [112,48], "f": 0, "t": 43, "d": [73,18], "a": 1 },
|
{ "px": [288,0], "src": [112,48], "f": 0, "t": 43, "d": [73,18], "a": 1 },
|
||||||
{ "px": [288,16], "src": [112,48], "f": 0, "t": 43, "d": [73,41], "a": 1 },
|
{ "px": [288,16], "src": [112,48], "f": 0, "t": 43, "d": [73,41], "a": 1 },
|
||||||
{ "px": [288,32], "src": [112,48], "f": 0, "t": 43, "d": [73,64], "a": 1 },
|
{ "px": [288,32], "src": [112,48], "f": 0, "t": 43, "d": [73,64], "a": 1 },
|
||||||
|
|||||||
44
src/main.rs
44
src/main.rs
@@ -127,7 +127,12 @@ fn levelload(
|
|||||||
let mut lyr_dep = 50f32;
|
let mut lyr_dep = 50f32;
|
||||||
lvl.layer_instances.iter().for_each(|li| {
|
lvl.layer_instances.iter().for_each(|li| {
|
||||||
li.al_tiles.iter().for_each(|t| {
|
li.al_tiles.iter().for_each(|t| {
|
||||||
commands.spawn((
|
let pos = I64Vec2 {
|
||||||
|
x: t.px_coords.x as i64,
|
||||||
|
y: 256 - t.px_coords.y as i64,
|
||||||
|
};
|
||||||
|
let mut tile = commands.spawn((
|
||||||
|
Transform::from_xyz(pos.x as f32, pos.y as f32, lyr_dep),
|
||||||
Sprite::from_atlas_image(
|
Sprite::from_atlas_image(
|
||||||
tmap_sprite.clone(),
|
tmap_sprite.clone(),
|
||||||
TextureAtlas {
|
TextureAtlas {
|
||||||
@@ -135,10 +140,33 @@ fn levelload(
|
|||||||
index: t.ty as usize,
|
index: t.ty as usize,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
Transform::from_xyz(t.px_coords.x as f32, 256. - t.px_coords.y as f32, lyr_dep),
|
|
||||||
));
|
));
|
||||||
});
|
|
||||||
|
match t.ty {
|
||||||
|
19 | 22 => {
|
||||||
|
info!("Trees!");
|
||||||
|
tile.insert((
|
||||||
|
Name::from("Trees"),
|
||||||
|
Transform::from_xyz(pos.x as f32, pos.y as f32, 200.),
|
||||||
|
PhysicsBody2D {
|
||||||
|
pos: pos * UNITS_TO_PX_SCALE,
|
||||||
|
immovable: true,
|
||||||
|
..default()
|
||||||
|
},
|
||||||
|
AABBCollider::new(
|
||||||
|
16 * UNITS_TO_PX_SCALE as u32,
|
||||||
|
16 * UNITS_TO_PX_SCALE as u32,
|
||||||
|
),
|
||||||
|
// Sprite::from_color(Color::WHITE, vec2(16., 16.)),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
6..=11 | 18..=23 | 30..=35 => {
|
||||||
|
tile.insert(Transform::from_xyz(pos.x as f32, pos.y as f32, 200.));
|
||||||
|
}
|
||||||
|
_ => (),
|
||||||
|
};
|
||||||
lyr_dep -= 0.1;
|
lyr_dep -= 0.1;
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
println!("Total layer depth: {lyr_dep}");
|
println!("Total layer depth: {lyr_dep}");
|
||||||
@@ -229,12 +257,12 @@ fn gameloop(
|
|||||||
} else {
|
} else {
|
||||||
play_phys.apply_force(dir * UNITS_TO_PX_SCALE, Some(UNITS_TO_PX_SCALE * 10 / 100));
|
play_phys.apply_force(dir * UNITS_TO_PX_SCALE, Some(UNITS_TO_PX_SCALE * 10 / 100));
|
||||||
}
|
}
|
||||||
|
let pos = play_phys.pos.clone();
|
||||||
|
|
||||||
*player_sing.1 = Transform::from_xyz(
|
let t = player_sing.1.as_mut();
|
||||||
(play_phys.pos.x / UNITS_TO_PX_SCALE) as f32,
|
t.translation.x = (pos.x / UNITS_TO_PX_SCALE) as f32;
|
||||||
(play_phys.pos.y / UNITS_TO_PX_SCALE) as f32,
|
t.translation.y = (pos.y / UNITS_TO_PX_SCALE) as f32;
|
||||||
100.,
|
// *player_sing.1 = t;x
|
||||||
);
|
|
||||||
|
|
||||||
let plyr = player_sing.2.as_mut();
|
let plyr = player_sing.2.as_mut();
|
||||||
|
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ fn resolve_aabb_collisions(mut query: Query<(&mut PhysicsBody2D, &AABBCollider)>
|
|||||||
|
|
||||||
let len = bcs.len();
|
let len = bcs.len();
|
||||||
|
|
||||||
let mut updated_bcs: Vec<(usize, PhysicsBody2D)> = Vec::new();
|
let mut corrections: Vec<(usize, I64Vec2)> = Vec::new();
|
||||||
|
|
||||||
for i in 0..len {
|
for i in 0..len {
|
||||||
let (b, c) = &bcs[i];
|
let (b, c) = &bcs[i];
|
||||||
@@ -83,71 +83,51 @@ fn resolve_aabb_collisions(mut query: Query<(&mut PhysicsBody2D, &AABBCollider)>
|
|||||||
let dx = b.pos.x - other_b.pos.x;
|
let dx = b.pos.x - other_b.pos.x;
|
||||||
let dy = b.pos.y - other_b.pos.y;
|
let dy = b.pos.y - other_b.pos.y;
|
||||||
|
|
||||||
if other_b.immovable {
|
let mut corr_vec = I64Vec2::ZERO;
|
||||||
// move backwards along dx/dy until we're out
|
|
||||||
|
|
||||||
let (new_x, new_y) = match dx.abs() > dy.abs() {
|
if other_b.immovable {
|
||||||
|
match dx.abs() > dy.abs() {
|
||||||
true => {
|
true => {
|
||||||
let dist = (c.width + other_c.width) as i64 / 2;
|
let dist = (c.width + other_c.width) as i64 / 2;
|
||||||
|
let tgt_x = other_b.pos.x
|
||||||
|
+ match dx > 0 {
|
||||||
|
true => dist,
|
||||||
|
false => -dist,
|
||||||
|
};
|
||||||
|
|
||||||
match dx > 0 {
|
corr_vec.x = tgt_x - b.pos.x;
|
||||||
true => (other_b.pos.x + dist, b.pos.y),
|
|
||||||
false => (other_b.pos.x - dist, b.pos.y),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
false => {
|
false => {
|
||||||
let dist = (c.height + other_c.height) as i64 / 2;
|
let dist = (c.height + other_c.height) as i64 / 2;
|
||||||
|
let tgt_y = other_b.pos.y
|
||||||
|
+ match dy > 0 {
|
||||||
|
true => dist,
|
||||||
|
false => -dist,
|
||||||
|
};
|
||||||
|
|
||||||
match dy > 0 {
|
corr_vec.y = tgt_y - b.pos.y;
|
||||||
true => (b.pos.x, other_b.pos.y + dist),
|
|
||||||
false => (b.pos.x, other_b.pos.y - dist),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// let new_x = match dx {
|
corrections.push((i, corr_vec));
|
||||||
// ..0 => other_b.pos.x - (c.width / 2 + other_c.width / 2) as i64,
|
|
||||||
// 0 => b.pos.x,
|
|
||||||
// 1.. => other_b.pos.x + (c.width / 2 + other_c.width / 2) as i64,
|
|
||||||
// };
|
|
||||||
// let new_y = match dy {
|
|
||||||
// ..0 => other_b.pos.y - (c.height / 2 + other_c.height / 2) as i64,
|
|
||||||
// 0 => b.pos.y,
|
|
||||||
// 1.. => other_b.pos.y + (c.height / 2 + other_c.height / 2) as i64,
|
|
||||||
// };
|
|
||||||
|
|
||||||
let updated_b = PhysicsBody2D {
|
|
||||||
pos: I64Vec2 { x: new_x, y: new_y },
|
|
||||||
vel: b.vel,
|
|
||||||
immovable: false,
|
|
||||||
};
|
|
||||||
updated_bcs.push((i, updated_b));
|
|
||||||
} else {
|
} else {
|
||||||
let updated_b = PhysicsBody2D {
|
todo!("no dynamic handling yet..");
|
||||||
pos: b.pos - I64Vec2::new(dx / 2, dy / 2),
|
|
||||||
vel: b.vel,
|
|
||||||
immovable: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
let other_updated_b = PhysicsBody2D {
|
|
||||||
pos: other_b.pos + I64Vec2::new(dx / 2, dy / 2),
|
|
||||||
vel: other_b.vel,
|
|
||||||
immovable: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
updated_bcs.push((i, updated_b));
|
|
||||||
|
|
||||||
updated_bcs.push((i, other_updated_b));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i, (mut b, c)) in query.iter_mut().enumerate() {
|
for (i, (mut b, c)) in query.iter_mut().enumerate() {
|
||||||
let Some((_, updateb)) = updated_bcs.iter().find(|(j, _)| i == *j) else {
|
let mut summed_corr = I64Vec2::ZERO;
|
||||||
continue;
|
|
||||||
};
|
|
||||||
|
|
||||||
*b = updateb.clone();
|
for (j, corr) in corrections.iter() {
|
||||||
|
if i != *j {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
summed_corr += corr;
|
||||||
|
}
|
||||||
|
|
||||||
|
b.pos = b.pos + summed_corr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user