44 lines
1.7 KiB
C++
44 lines
1.7 KiB
C++
#ifndef STATUS_EFFECT_CLASS
|
|
#define STATUS_EFFECT_CLASS
|
|
|
|
#include <string>
|
|
|
|
// Something lasting put on a character, changing how it moves or what it can do while it's on
|
|
struct StatusEffect {
|
|
enum class Type {
|
|
HeavyGravity, // pulled down harder: slower, can't jump, and falls faster
|
|
Knockdown, // on the floor: can't do anything, and only attacks that hit the knocked down can hit it
|
|
Executed // playing out how it was killed: can't do anything or be hit until it's over
|
|
};
|
|
|
|
Type type = Type::HeavyGravity;
|
|
float timeLeft = -1.0f; // real seconds, below 0 lasts forever
|
|
};
|
|
|
|
// How much each one changes, and what the HUD calls it
|
|
struct StatusEffectInfo {
|
|
std::string name;
|
|
float speedMultiplier = 1.0f; // times its walking speed
|
|
float gravityMultiplier = 1.0f; // times the world's gravity while it's in the air
|
|
bool preventsJumping = false;
|
|
bool preventsActing = false; // can't move, turn, attack or anything else, like a stun
|
|
bool dodgesHits = false; // only hitboxes that hit the knocked down can touch it
|
|
};
|
|
|
|
inline const StatusEffectInfo& GetStatusEffectInfo(StatusEffect::Type type) {
|
|
static const StatusEffectInfo heavyGravity = { "HEAVY", 0.5f, 3.0f, true };
|
|
static const StatusEffectInfo knockdown = { "KNOCKED DOWN", 0.0f, 1.0f, true, true, true };
|
|
static const StatusEffectInfo executed = { "", 0.0f, 1.0f, true, true, true };
|
|
switch (type) {
|
|
case StatusEffect::Type::Executed:
|
|
return executed;
|
|
case StatusEffect::Type::Knockdown:
|
|
return knockdown;
|
|
case StatusEffect::Type::HeavyGravity:
|
|
default:
|
|
return heavyGravity;
|
|
}
|
|
}
|
|
|
|
#endif
|