mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2026-11-14 15:57:13 +00:00
DoObjectComponentLoad walks the client's load order and calls the type's allocator from a table, like ObjectLoader2, instead of one 76-case switch. Components with rules of their own have a static Allocator (the client's LWOxComponent::Allocator); the rest share a registry allocator. The load state moves to ObjectLoadState.h so the allocators can take it. Construction bytes are identical for all 15,962 LOTs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
41 lines
1.7 KiB
C++
41 lines
1.7 KiB
C++
#ifndef OBJECTLOADSTATE_H
|
|
#define OBJECTLOADSTATE_H
|
|
|
|
#include <cstdint>
|
|
#include <initializer_list>
|
|
|
|
#include "dCommonVars.h"
|
|
#include "eReplicaComponentType.h"
|
|
|
|
class Entity;
|
|
|
|
/**
|
|
* The client's ObjectLoadState (ObjectLoader2): the object's components as its registry gives them, after the
|
|
* pre-load rules and the component whitelist, and what the component walk has found so far. Each component type's
|
|
* Allocator reads it.
|
|
*/
|
|
struct ObjectLoadState {
|
|
LOT lot{};
|
|
// The config's componentWhitelist (ApplyComponentWhitelist): only these registry components, when set
|
|
const std::initializer_list<eReplicaComponentType>* whitelist = nullptr;
|
|
bool hasModelBehaviors = false;
|
|
bool markedAsPhantom = false;
|
|
// ApplyMovementAiIfNeeded: movement AI for a scripted object or one with an attached path
|
|
bool addsMovementAI = false;
|
|
// A model with behaviors' physics id, which the physics cases leave to the model case
|
|
int32_t modelPhysicsComponentID = -1;
|
|
|
|
// The registry's id for type, defaultValue when it has none or the whitelist drops it
|
|
int32_t GetComponentID(eReplicaComponentType type, int32_t defaultValue = 0) const;
|
|
|
|
// LWOScriptComponent::Allocator (0x0104d710) and LWOBaseCombatAiComponent::Allocator (0x0104c7b0): a proximity
|
|
// monitor when there is none, and pathfinding control when the object has movement physics (controllable,
|
|
// projectile, vehicle or havok vehicle) and none yet
|
|
static void AddProximityAndPathfinding(Entity& entity);
|
|
};
|
|
|
|
// An allocator for a component type: makes the object's component(s) of that type (the client's LWOxComponent::Allocator)
|
|
using ComponentAllocator = void (*)(Entity& entity, ObjectLoadState& state);
|
|
|
|
#endif //!OBJECTLOADSTATE_H
|