#include "barrel.h" #include "barrel_data.h" #include "utils.h" #include "assets.h" #include "physics.h" #include "constants.h" #include 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); }