blob: 6781c41ae8b12db83065bfab2c894c4e49c29c3a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
#include "physics.h"
#include "game.h"
#include "utils.h"
extern Game game;
void MoveAndStop(Entity* e, float deltaTime) {
Vector2 velocity = e->velocity;
Rectangle physicsCollider = GetPhysicsColliderGlobal(e);
Rectangle pastCollider = physicsCollider;
physicsCollider.x += e->velocity.x * deltaTime;
for (int i = 0; i < MAX_ENTITY_COUNT; i++) {
Entity* other = &game.entities[i];
if(!PhysicsEnabled(other) || SameEntity(other, e)) continue;
Rectangle otherCollider = GetPhysicsColliderGlobal(other);
if(CheckCollisionRecs(physicsCollider, otherCollider)) {
if (velocity.x > 0) {
physicsCollider.x = otherCollider.x - physicsCollider.width;
} else {
physicsCollider.x = otherCollider.x + otherCollider.width;
}
}
}
physicsCollider.y += e->velocity.y * deltaTime;
for (int i = 0; i < MAX_ENTITY_COUNT; i++) {
Entity* other = &game.entities[i];
if(!PhysicsEnabled(other) || SameEntity(other, e)) continue;
Rectangle otherCollider = GetPhysicsColliderGlobal(other);
if(CheckCollisionRecs(physicsCollider, otherCollider)) {
if (velocity.y > 0) {
physicsCollider.y = otherCollider.y - physicsCollider.height;
} else {
physicsCollider.y = otherCollider.y + otherCollider.height;
}
}
}
e->position.x += (physicsCollider.x - pastCollider.x);
e->position.y += (physicsCollider.y - pastCollider.y);
}
#ifdef BEATEMUP_DEBUG
void DebugHighlights(const Entity* e) {
if (!PhysicsEnabled(e))
return;
Rectangle dstRect = GetPhysicsColliderGlobal(e);
Color colliderDrawColor = e->physicsColliderColor;
colliderDrawColor.a = 170;
DrawRectangle(dstRect.x, dstRect.y, dstRect.width, dstRect.height, colliderDrawColor);
}
#endif
|