6#include "core/system.h"
8#include "ecs/scene_observer.h"
9#include "system/physics/physics_events.h"
10#include "system/script/behavior.h"
12namespace Vkm::Engine {
27class BehaviorSystem :
public System,
public ISceneObserver {
30 m_context.pendingDestroy = &m_pendingDestroy;
31 m_context.pendingSceneLoad = &m_pendingSceneLoad;
33 ~BehaviorSystem()
override =
default;
35 BehaviorSystem(
const BehaviorSystem& other) =
delete;
36 BehaviorSystem& operator=(
const BehaviorSystem& other) =
delete;
38 BehaviorSystem(BehaviorSystem && other) =
delete;
39 BehaviorSystem& operator=(BehaviorSystem && other) =
delete;
105 const char* hookName,
120 template<
typename Arg>
121 void dispatchEntityHook(
124 const std::remove_reference_t<Arg>& arg,
125 const char* hookName,
134 void drainPendingDestroy(
Scene& scene);
151 template<
typename Fn>
152 static void guard(
Behavior& behavior,
const char* hookName, Fn&& fn);
161 static void fireDestroy(
Behavior& behavior);
164 std::vector<CollisionEvent> m_collisions;
165 std::vector<TriggerEvent> m_triggers;
168 std::vector<CollisionEvent> m_dispatchCollisions;
169 std::vector<TriggerEvent> m_dispatchTriggers;
172 ListenerId m_collisionListener = 0;
173 ListenerId m_triggerListener = 0;
181 std::vector<EntityId> m_tickList;
183 std::vector<EntityId> m_pendingDestroy;
185 std::vector<EntityId> m_destroying;
186 std::string m_pendingSceneLoad;
void onEntityDestroyed(EntityId entity) override
ISceneObserver: fire onDestroy on entity's behaviors before its ScriptComponent goes.
void shutdown() override
Called once on engine shutdown.
void init(FrameContext &ctx) override
Called once after all systems are registered, before the first update.
void endSession(Scene &scene)
End the session: onDestroy on every started behavior, reset, and discard queued requests.
bool isReplayed() const override
Re-run during a replay: it moves the world from state and command, repeatably.
Definition behavior_system.h:51
void update(FrameContext &ctx) override
Execute this system for the current frame.
void fixedUpdate(FrameContext &ctx) override
Execute this system at the fixed simulation rate.
static void destroyEntityBehaviors(Scene &scene, EntityId entity)
Fire onDestroy on entity's started behaviors, before its ScriptComponent goes.
Base class for native C++ gameplay behaviors.
Definition behavior.h:144
Typed pub/sub event dispatcher.
Definition event_bus.h:22
Open type-erased resource registry with typed handles and generational lifetimes.
Definition resource_manager.h:46
Central registry managing entities and an open set of component types.
Definition scene.h:29
Everything gameplay code may reach, bundled behind one pointer.
Definition behavior.h:42
Names one entity of one Scene, for as long as that slot holds it.
Definition entity.h:23
Per-frame state bundle passed to every system.
Definition system.h:55