feat(core): add base entity transform and physics integration
This commit is contained in:
1 parent
a2415d60ef
commit
b2559daa94
2 files changed
+164
No files matched your search
@@ -0,0 +1,48 @@
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include "World.h"
|
||||
#include "Math.h"
|
||||
#include "Physics.h"
|
||||
#include "Pathfind.h"
|
||||
|
||||
namespace vf {
|
||||
|
||||
enum class MobState : uint8_t {
|
||||
Wander = 0,
|
||||
Chase = 1,
|
||||
};
|
||||
|
||||
struct Mob {
|
||||
Vec3 position; // feet centre (bottom of the collision box)
|
||||
Vec3 velocity;
|
||||
float width = 0.6f;
|
||||
float height = 1.8f;
|
||||
bool onGround = false;
|
||||
MobState state = MobState::Wander;
|
||||
uint32_t rng = 0x2545f491u; // deterministic wander stream
|
||||
Vec3 wanderDir;
|
||||
};
|
||||
|
||||
struct MobConfig {
|
||||
float moveSpeed = 3.2f;
|
||||
float gravity = 26.0f;
|
||||
float maxFallSpeed = 55.0f;
|
||||
float chaseRadius = 12.0f; // start chasing inside this range
|
||||
float loseRadius = 16.0f; // give up chasing beyond this (hysteresis)
|
||||
PathConfig path;
|
||||
};
|
||||
|
||||
Aabb mobBox(const Mob& mob);
|
||||
Vec3i mobFeetCell(const Mob& mob);
|
||||
|
||||
// One physics tick: applies the horizontal wish direction and gravity, then
|
||||
// resolves AABB collisions against solid voxels axis by axis (move and slide).
|
||||
void stepMob(const World& world, Mob& mob, const Vec3& wishDir, const MobConfig& config, float dt);
|
||||
|
||||
// State machine driving the mob. Chases when the target is within range and a
|
||||
// path exists, otherwise wanders. Updates mob.state and returns the horizontal
|
||||
// wish direction to hand to stepMob.
|
||||
Vec3 updateMobBrain(const World& world, Mob& mob, const Vec3& targetPos, const MobConfig& config);
|
||||
|
||||
} // namespace vf
|
||||
Reference in new issue
Block a user