diff options
author | quou <quou@disroot.org> | 2023-05-07 12:53:46 +1000 |
---|---|---|
committer | quou <quou@disroot.org> | 2023-05-07 12:54:06 +1000 |
commit | 5f341eacdf0d75a4b334969a2d8a4701d61e4d9e (patch) | |
tree | ee3a4c44b92e975530e1e6fed18c8852a6f70a93 /collision_system.c | |
parent | 5ef6a71e935e2c3d1e5f9828e8cdbd78403a06a0 (diff) |
Add waves and stuff.
Diffstat (limited to 'collision_system.c')
-rw-r--r-- | collision_system.c | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/collision_system.c b/collision_system.c index 2bb8cdb..a5342d2 100644 --- a/collision_system.c +++ b/collision_system.c @@ -175,12 +175,13 @@ static void handle( } void collision_system(World* world) { - int i, j, k, s, s2, p0x, p0y, r, l, t, b; + int i, j, k, s, s2, p0x, p0y, r, l, t, b, dx, dy, d; int ax, ay, aw, ah, bx, by, bw, bh; int overlap[4]; unsigned bits; - const CPosition* pos0, * pos1; + CPosition* pos0, * pos1; const CCollider* col0, * col1; + const CEnemy* e0, * e1; Collision_Side side; for (i = 0; i < world->entity_count; i++) { @@ -254,6 +255,39 @@ void collision_system(World* world) { } } } + + for (i = 0; i < world->entity_count; i++) { + bits = world->bitmask[i]; + if ( + !(bits & ctype_enemy) || + !(bits & ctype_position) + ) { continue; } + + pos0 = &world->positions[i]; + e0 = &world->enemies[i]; + + for (j = i + 1; j < world->entity_count; j++) { + bits = world->bitmask[j]; + if ( + !(bits & ctype_enemy) || + !(bits & ctype_position) + ) { continue; } + + pos1 = &world->positions[j]; + e1 = &world->enemies[j]; + + dx = (pos0->x - pos1->x) >> 4; + dy = (pos0->y - pos1->y) >> 4; + d = ((dx * dx) + (dy * dy)) >> fbits; + + if (d < enemy_min_distance) { + pos0->x += dx; + pos1->x -= dx; + pos0->y += dy; + pos1->y -= dy; + } + } + } } #endif |