blob: 474b15159a275470d9bce1e95caba86a6f667b33 (
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
#include "barrel.h"
#include "barrel_data.h"
#include "utils.h"
#include "assets.h"
#include "physics.h"
#include "constants.h"
#include <raymath.h>
enum Barrel_State {
BARREL_NEUTRAL,
BARREL_DAMAGED
};
void AddBarrel(float xpos, float ypos) {
Entity barrel = {0};
barrel.type = Barrel_Entity;
barrel.position = (Vector2) {xpos, ypos};
barrel.flags |= (ENTITY_PHYSICS_ACTIVE | ENTITY_VISIBLE);
Asset* barrelTexture = GetMatchingAssetExitOnFail("barrel", Texture_Asset);
Sprite barrelSprite = (Sprite) {
.texture = barrelTexture->texture,
.layer = Foreground_Layer,
.alpha = 1.0,
.destRect = destRect,
.srcRect = srcRect
};
AddSpriteToEntity(&barrel, barrelSprite);
barrel.physicsCollider = physicsCollider;
barrel.hurtBoxes[0] = physicsCollider;
barrel.numHurtBoxes = 1;
barrel.state = BARREL_NEUTRAL;
#ifdef BEATEMUP_DEBUG
barrel.physicsColliderColor = RED;
barrel.hurtboxColors[0] = BLUE;
#endif
AddEntity(&barrel);
}
void UpdateBarrel(Entity* barrel, float dt) {
if (barrel->state == BARREL_DAMAGED) {
barrel->velocity.y += GRAVITY * dt * 0.5;
MoveWithoutPhysics(barrel, dt);
barrel->velocity.y += GRAVITY * dt * 0.5;
barrel->sprites[0].alpha =
1.0 - (barrel->timeSinceLastHit / BARREL_REMOVE_TIME);
barrel->timeSinceLastHit += dt;
if (barrel->timeSinceLastHit > BARREL_REMOVE_TIME)
barrel->flags &= ~ENTITY_ALLOCATED;
}
}
void GetDamaged(Entity* barrel) {
barrel->sprites[0].srcRect = srcRectDamaged;
barrel->flags &= ~ENTITY_PHYSICS_ACTIVE;
barrel->state = BARREL_DAMAGED;
barrel->velocity = (Vector2) {100.0f, -400.0f};
barrel->timeSinceLastHit = 0.0f;
}
void BarrelHandleCollision(Entity* barrel) {
GetDamaged(barrel);
}
|