feat(ai): add wander AI system with move boost

Add AIBase and WanderAITag components, a WanderAISystem, and a MoveBoost component to control wandering behavior. Replace the old MoveState with MoveBoost and include a horizontal random direction helper.
This commit is contained in:
2026-07-31 19:59:33 +08:00
parent 8451921161
commit 412f88565a
7 changed files with 87 additions and 3 deletions

View File

@@ -0,0 +1,17 @@
#pragma once
#include "Cubed/gameplay/game_time.hpp"
namespace Cubed {
struct AIBase {
TickType interval = 1;
TickType count = 0;
};
struct WanderAITag {};
struct MoveBoost {
TickType duration = 0;
TickType count = 0;
};
} // namespace Cubed

View File

@@ -1,7 +1,6 @@
#pragma once
#include "Cubed/gameplay/ecs/health.hpp"
#include "Cubed/gameplay/ecs/movement.hpp"
#include "Cubed/gameplay/ecs/state.hpp"
#include "Cubed/gameplay/ecs/transform.hpp"
#include "Cubed/gameplay/hitbox.hpp"
namespace Cubed {
@@ -13,8 +12,6 @@ struct BaseServerCreature {
Movement movement{};
MoveState move_state{};
Direction direction{};
Gravity gravity{};

View File

@@ -0,0 +1,14 @@
#pragma once
#include "Cubed/gameplay/ecs/ai_struct.hpp"
#include "Cubed/gameplay/ecs/server_entity.hpp"
#include <entt/entt.hpp>
namespace Cubed {
class WanderAISystem {
public:
static void update(entt::registry& registry);
private:
static void do_ai(BaseServerCreature& creature, MoveBoost& move_boost);
};
} // namespace Cubed

View File

@@ -1,4 +1,6 @@
#pragma once
#include "glm/ext/vector_float3.hpp"
#include <random>
namespace Cubed {
@@ -14,6 +16,8 @@ public:
int random_int(int min, int max);
float random_float(float min, float max);
glm::vec3 random_direction_horizontal();
private:
unsigned int m_seed = 0;
std::mt19937 m_engine;