Entity work

- Add in bool cheks
- Fix component class files so they compile and link
- Fin inheritance
This commit is contained in:
David Markowitz 2023-06-25 21:47:35 -07:00
parent fee1025982
commit 9121bf41c5
14 changed files with 327 additions and 308 deletions

View File

@ -1,5 +1,5 @@
#include "BaseRacingControlComponent.h"
BaseRacingControlComponent::BaseRacingControlComponent(Entity* parent) : Component(parent) {
BaseRacingControlComponent::BaseRacingControlComponent(Entity* parent, int32_t componentId) : ScriptedActivityComponent(parent, componentId) {
}

View File

@ -9,7 +9,7 @@ class Entity;
class BaseRacingControlComponent : public ScriptedActivityComponent {
public:
inline static const eReplicaComponentType ComponentType = eReplicaComponentType::RACING_CONTROL;
BaseRacingControlComponent(Entity* parent);
BaseRacingControlComponent(Entity* parent, int32_t componentId);
};

View File

@ -11,6 +11,7 @@ set(DGAME_DCOMPONENTS_SOURCES "AchievementVendorComponent.cpp"
"ControllablePhysicsComponent.cpp"
"DestroyableComponent.cpp"
"DonationVendorComponent.cpp"
"GateRushControlComponent.cpp"
"InventoryComponent.cpp"
"ItemComponent.cpp"
"LevelProgressionComponent.cpp"

View File

@ -1,5 +1,5 @@
#include "GateRushControlComponent.h"
GateRushControlComponent::GateRushControlComponent(Entity* parent) : BaseRacingControlComponent(parent) {
GateRushControlComponent::GateRushControlComponent(Entity* parent, int32_t componentId) : BaseRacingControlComponent(parent, componentId) {
}

View File

@ -9,7 +9,7 @@ class Entity;
class GateRushControlComponent : public BaseRacingControlComponent {
public:
inline static const eReplicaComponentType ComponentType = eReplicaComponentType::GATE_RUSH_CONTROL;
GateRushControlComponent(Entity* parent);
GateRushControlComponent(Entity* parent, int32_t componentId);
};
#endif //!__GATERUSHCONTROLCOMPONENT__H__

View File

@ -4,12 +4,12 @@
ItemComponent::ItemComponent(Entity* parent) : Component(parent) {
m_Parent = parent;
m_ParentEntity = parent;
m_DirtyItemInfo = false;
m_UgId = m_Parent->GetVarAs<LWOOBJID>(u"userModelID");
if (m_UgId == LWOOBJID_EMPTY) m_UgId = m_Parent->GetObjectID();
m_UgId = m_ParentEntity->GetVarAs<LWOOBJID>(u"userModelID");
if (m_UgId == LWOOBJID_EMPTY) m_UgId = m_ParentEntity->GetObjectID();
m_UgModerationStatus = eUgcModerationStatus::NoStatus;

View File

@ -2,6 +2,6 @@
#include "Entity.h"
MinigameControlComponent::MinigameControlComponent(Entity* parent) : Component(parent) {
MinigameControlComponent::MinigameControlComponent(Entity* parent) : ActivityComponent(parent) {
}

View File

@ -13,7 +13,7 @@ class Entity;
*/
class MutableModelBehaviorComponent : public Component {
public:
static const eReplicaComponentType ComponentType = eReplicaComponentType::MODEL;
static const eReplicaComponentType ComponentType = eReplicaComponentType::MODEL_BEHAVIOR;
MutableModelBehaviorComponent(Entity* parent);

View File

@ -25,7 +25,7 @@
#include "CppScripts.h"
QuickBuildComponent::QuickBuildComponent(Entity* entity, uint32_t componentId) : Component(entity) {
QuickBuildComponent::QuickBuildComponent(Entity* entity, uint32_t componentId) : ActivityComponent(entity) {
m_ComponentId = componentId;
std::u16string checkPreconditions = entity->GetVar<std::u16string>(u"CheckPrecondition");

View File

@ -29,7 +29,7 @@
#define M_PI 3.14159265358979323846264338327950288
#endif
RacingControlComponent::RacingControlComponent(Entity* parent) : BaseRacingControlComponent(parent) {
RacingControlComponent::RacingControlComponent(Entity* parent, int32_t componentId) : BaseRacingControlComponent(parent, componentId) {
m_PathName = u"MainPath";
m_RemainingLaps = 3;
m_LeadingPlayer = LWOOBJID_EMPTY;

View File

@ -107,7 +107,7 @@ class RacingControlComponent : public BaseRacingControlComponent {
public:
inline static const eReplicaComponentType ComponentType = eReplicaComponentType::RACING_CONTROL;
RacingControlComponent(Entity* parentEntity);
RacingControlComponent(Entity* parentEntity, int32_t componentId);
~RacingControlComponent();
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate, unsigned int& flags);

View File

@ -0,0 +1,5 @@
#include "RacingSoundTriggerComponent.h"
RacingSoundTriggerComponent::RacingSoundTriggerComponent(Entity* parent) : SoundTriggerComponent(parent) {
}

View File

@ -53,12 +53,6 @@ public:
m_DirtyVendor = true;
}
/**
* Gets the list if items the vendor sells.
* @return the list of items.
*/
std::map<LOT, int>& GetInventory();
/**
* Refresh the inventory of this vendor.
*/

View File

@ -226,9 +226,7 @@ void Entity::Initialize() {
bool hasProximityMonitorComponent = false;
bool hasScriptComponent = false;
bool hasDroppedLootComponent = false;
bool hasModelBehaviors = false;
uint32_t physicsComponentID = -1;
uint32_t modelType = -1;
// A few edge cases to tackle first
const auto triggerInfo = GetVarAsString(u"trigger_id");
@ -250,303 +248,324 @@ void Entity::Initialize() {
for (const auto& [componentTemplate, componentId] : components) {
switch (componentTemplate) {
case eReplicaComponentType::CONTROLLABLE_PHYSICS:
AddComponent<ControllablePhysicsComponent>();
hasPhysicsComponent = true;
break;
case eReplicaComponentType::RENDER:
AddComponent<RenderComponent>();
break;
case eReplicaComponentType::SIMPLE_PHYSICS:
case eReplicaComponentType::CONTROLLABLE_PHYSICS:
if (hasPhysicsComponent) continue;
AddComponent<ControllablePhysicsComponent>();
physicsComponentID = componentId;
hasPhysicsComponent = true;
break;
case eReplicaComponentType::RENDER:
AddComponent<RenderComponent>();
break;
case eReplicaComponentType::SIMPLE_PHYSICS:
if (hasPhysicsComponent) continue;
AddComponent<SimplePhysicsComponent>(componentId);
physicsComponentID = componentId;
hasPhysicsComponent = true;
break;
case eReplicaComponentType::CHARACTER:
AddComponent<CharacterComponent>(m_Character);
AddComponent<MissionComponent>();
AddComponent<PossessorComponent>();
AddComponent<LevelProgressionComponent>();
AddComponent<PlayerForcedMovementComponent>();
break;
case eReplicaComponentType::SCRIPT: {
std::string script;
if (m_TemplateID == LOT_ZONE_CONTROL) {
script = ScriptComponent::GetZoneScriptName(componentId);
} else {
script = ScriptComponent::GetScriptName(this, componentId);
}
AddComponent<ScriptComponent>(script); // Technically this should check for if the script name is empty and not create a component if it is.
hasScriptComponent = true;
break;
}
case eReplicaComponentType::BOUNCER:
AddComponent<BouncerComponent>();
break;
case eReplicaComponentType::DESTROYABLE:
if (hasDestroyableComponent) continue;
AddComponent<DestroyableComponent>(componentId);
hasDestroyableComponent = true;
break;
case eReplicaComponentType::SKILL:
AddComponent<SkillComponent>();
break;
case eReplicaComponentType::ITEM:
AddComponent<ItemComponent>();
break;
case eReplicaComponentType::VENDOR:
AddComponent<VendorComponent>();
if (hasProximityMonitorComponent) continue;
AddComponent<ProximityMonitorComponent>();
hasProximityMonitorComponent = true;
break;
case eReplicaComponentType::INVENTORY:
AddComponent<InventoryComponent>();
break;
case eReplicaComponentType::SHOOTING_GALLERY:
AddComponent<ShootingGalleryComponent>();
break;
case eReplicaComponentType::RIGID_BODY_PHANTOM_PHYSICS:
if (hasPhysicsComponent) continue;
AddComponent<RigidbodyPhantomPhysicsComponent>();
physicsComponentID = componentId;
hasPhysicsComponent = true;
break;
case eReplicaComponentType::COLLECTIBLE:
AddComponent<CollectibleComponent>();
if (!hasDestroyableComponent) AddComponent<DestroyableComponent>(componentId);
break;
case eReplicaComponentType::MOVING_PLATFORM:
AddComponent<MovingPlatformComponent>(GetVarAsString(u"attached_path"));
m_IsGhostingCandidate = false;
break;
case eReplicaComponentType::PET:
AddComponent<PetComponent>(componentId);
AddComponent<MovementAIComponent>();
break;
case eReplicaComponentType::HAVOK_VEHICLE_PHYSICS: {
if (hasPhysicsComponent) continue;
if (GetVar<bool>(u"use_simple_physics")) {
AddComponent<SimplePhysicsComponent>(componentId);
hasPhysicsComponent = true;
break;
case eReplicaComponentType::CHARACTER:
AddComponent<CharacterComponent>(m_Character);
AddComponent<MissionComponent>();
AddComponent<PossessorComponent>();
AddComponent<LevelProgressionComponent>();
AddComponent<PlayerForcedMovementComponent>();
break;
case eReplicaComponentType::SCRIPT: {
std::string script;
if (m_TemplateID == LOT_ZONE_CONTROL) {
script = ScriptComponent::GetZoneScriptName(componentId);
} else {
script = ScriptComponent::GetScriptName(this, componentId);
} else {
auto* havokVehiclePhysicsComponent = AddComponent<HavokVehiclePhysicsComponent>();
if (havokVehiclePhysicsComponent) {
havokVehiclePhysicsComponent->SetPosition(m_DefaultPosition);
havokVehiclePhysicsComponent->SetRotation(m_DefaultRotation);
}
AddComponent<ScriptComponent>(script); // Technically this should check for if the script name is empty and not create a component if it is.
break;
}
case eReplicaComponentType::BOUNCER:
AddComponent<BouncerComponent>();
break;
case eReplicaComponentType::DESTROYABLE:
if (!HasComponent(eReplicaComponentType::DESTROYABLE)) AddComponent<DestroyableComponent>(componentId);
break;
case eReplicaComponentType::SKILL:
AddComponent<SkillComponent>();
break;
case eReplicaComponentType::ITEM:
AddComponent<ItemComponent>();
break;
case eReplicaComponentType::VENDOR:
AddComponent<VendorComponent>();
if (!hasProximityMonitorComponent) AddComponent<ProximityMonitorComponent>();
break;
case eReplicaComponentType::INVENTORY:
AddComponent<InventoryComponent>();
break;
case eReplicaComponentType::SHOOTING_GALLERY:
AddComponent<ShootingGalleryComponent>();
break;
case eReplicaComponentType::RIGID_BODY_PHANTOM_PHYSICS:
AddComponent<RigidbodyPhantomPhysicsComponent>();
hasPhysicsComponent = true;
break;
case eReplicaComponentType::COLLECTIBLE:
AddComponent<CollectibleComponent>();
if (!hasDestroyableComponent) AddComponent<DestroyableComponent>(componentId);
break;
case eReplicaComponentType::MOVING_PLATFORM:
AddComponent<MovingPlatformComponent>(GetVarAsString(u"attached_path"));
m_IsGhostingCandidate = false;
break;
case eReplicaComponentType::PET:
AddComponent<PetComponent>(componentId);
AddComponent<MovementAIComponent>();
break;
case eReplicaComponentType::HAVOK_VEHICLE_PHYSICS: {
if (GetVar<bool>(u"use_simple_physics")) {
AddComponent<SimplePhysicsComponent>(componentId);
physicsComponentID = componentId;
m_IsGhostingCandidate = false;
hasPhysicsComponent = true;
break;
}
case eReplicaComponentType::MOVEMENT_AI:
AddComponent<MovementAIComponent>();
break;
case eReplicaComponentType::PROPERTY:
AddComponent<PropertyComponent>();
m_IsGhostingCandidate = false;
break;
case eReplicaComponentType::SCRIPTED_ACTIVITY:
AddComponent<ScriptedActivityComponent>(componentId);
m_IsGhostingCandidate = false;
break;
case eReplicaComponentType::PHANTOM_PHYSICS: {
if (hasPhysicsComponent) continue;
auto* phantomPhysicsComponent = AddComponent<PhantomPhysicsComponent>();
if (phantomPhysicsComponent) phantomPhysicsComponent->SetPhysicsEffectActive(false);
physicsComponentID = componentId;
hasPhysicsComponent = true;
m_IsGhostingCandidate = false;
break;
}
case eReplicaComponentType::MODEL_BEHAVIOR: {
AddComponent<ModelBehaviorComponent>();
// Get Model Type form ldf
if (!hasPhysicsComponent) {
uint32_t modelType = -1;
if (modelType == 0) {
if (physicsComponentID == -1) physicsComponentID = 4246U;
AddComponent<ControllablePhysicsComponent>();
hasPhysicsComponent = true;
} else {
auto* havokVehiclePhysicsComponent = AddComponent<HavokVehiclePhysicsComponent>(componentId);
if (havokVehiclePhysicsComponent) {
havokVehiclePhysicsComponent->SetPosition(m_DefaultPosition);
havokVehiclePhysicsComponent->SetRotation(m_DefaultRotation);
}
}
m_IsGhostingCandidate = false;
hasPhysicsComponent = true;
break;
}
case eReplicaComponentType::MOVEMENT_AI:
AddComponent<MovementAIComponent>();
break;
case eReplicaComponentType::PROPERTY:
AddComponent<PropertyComponent>();
m_IsGhostingCandidate = false;
break;
case eReplicaComponentType::SCRIPTED_ACTIVITY:
AddComponent<ScriptedActivityComponent>(componentId);
m_IsGhostingCandidate = false;
break;
case eReplicaComponentType::PHANTOM_PHYSICS: {
auto* phantomPhysicsComponent = AddComponent<PhantomPhysicsComponent>();
if (phantomPhysicsComponent) phantomPhysicsComponent->SetPhysicsEffectActive(false);
hasPhysicsComponent = true;
m_IsGhostingCandidate = false;
break;
}
case eReplicaComponentType::MODEL_BEHAVIOR: {
// Get Model Type form ldf/DB
if (!hasModelBehaviors && !hasPhysicsComponent){
if (physicsComponentID == -1) physicsComponentID = 4247U;
AddComponent<SimplePhysicsComponent>(physicsComponentID);
hasPhysicsComponent = true;
} else if (!hasPhysicsComponent) {
if (modelType == 0){
if(physicsComponentID == -1) physicsComponentID = 4246U;
AddComponent<ControllablePhysicsComponent>(physicsComponentID);
hasPhysicsComponent = true;
} else {
if(physicsComponentID == -1) physicsComponentID = 4247U;
AddComponent<SimplePhysicsComponent>(physicsComponentID);
hasPhysicsComponent = true;
}
}
AddComponent<ModelBehaviorComponent>();
if (!HasComponent(eReplicaComponentType::DESTROYABLE)) {
auto* destroyableComponent = AddComponent<DestroyableComponent>(componentId);
if (destroyableComponent) {
destroyableComponent->SetHealth(1);
destroyableComponent->SetMaxHealth(1.0f);
destroyableComponent->SetFaction(-1, true);
destroyableComponent->SetIsSmashable(true);
}
}
break;
}
case eReplicaComponentType::PROPERTY_ENTRANCE:
AddComponent<PropertyEntranceComponent>(componentId);
break;
case eReplicaComponentType::PROPERTY_MANAGEMENT:
AddComponent<PropertyManagementComponent>();
break;
case eReplicaComponentType::QUICK_BUILD:
AddComponent<QuickBuildComponent>(componentId);
if (!HasComponent(eReplicaComponentType::DESTROYABLE)) AddComponent<DestroyableComponent>(componentId);
break;
case eReplicaComponentType::SWITCH:
AddComponent<SwitchComponent>();
break;
case eReplicaComponentType::MINIGAME_CONTROL:
AddComponent<MinigameControlComponent>();
break;
case eReplicaComponentType::BASE_COMBAT_AI: {
auto* baseCombatAiComponent = AddComponent<BaseCombatAIComponent>(componentId);
if (baseCombatAiComponent && baseCombatAiComponent->GetTetherSpeed() > 0.0f) {
auto* movementAiComponent = AddComponent<MovementAIComponent>();
if (!movementAiComponent) break;
MovementAIInfo movementAiInfo{};
movementAiInfo.movementType = "";
movementAiInfo.wanderChance = 0;
movementAiInfo.wanderRadius = 16;
movementAiInfo.wanderSpeed = 2.5f;
movementAiInfo.wanderDelayMax = 5;
movementAiInfo.wanderDelayMin = 2;
movementAiComponent->SetMoveInfo(movementAiInfo);
}
break;
if (hasDestroyableComponent) continue;
auto* destroyableComponent = AddComponent<DestroyableComponent>(componentId);
if (!destroyableComponent) continue;
destroyableComponent->SetHealth(1);
destroyableComponent->SetMaxHealth(1.0f);
destroyableComponent->SetFaction(-1, true);
destroyableComponent->SetIsSmashable(true);
hasDestroyableComponent = true;
break;
}
case eReplicaComponentType::PROPERTY_ENTRANCE:
AddComponent<PropertyEntranceComponent>(componentId);
break;
case eReplicaComponentType::PROPERTY_MANAGEMENT:
AddComponent<PropertyManagementComponent>();
break;
case eReplicaComponentType::QUICK_BUILD:
AddComponent<QuickBuildComponent>(componentId);
if (hasDestroyableComponent) continue;
AddComponent<DestroyableComponent>(componentId);
hasDestroyableComponent = true;
break;
case eReplicaComponentType::SWITCH:
AddComponent<SwitchComponent>();
break;
case eReplicaComponentType::MINIGAME_CONTROL:
AddComponent<MinigameControlComponent>();
break;
case eReplicaComponentType::BASE_COMBAT_AI: {
auto* baseCombatAiComponent = AddComponent<BaseCombatAIComponent>(componentId);
if (baseCombatAiComponent && baseCombatAiComponent->GetTetherSpeed() > 0.0f) {
auto* movementAiComponent = AddComponent<MovementAIComponent>();
if (!movementAiComponent) break;
MovementAIInfo movementAiInfo{};
movementAiInfo.movementType = "";
movementAiInfo.wanderChance = 0;
movementAiInfo.wanderRadius = 16;
movementAiInfo.wanderSpeed = 2.5f;
movementAiInfo.wanderDelayMax = 5;
movementAiInfo.wanderDelayMin = 2;
movementAiComponent->SetMoveInfo(movementAiInfo);
}
case eReplicaComponentType::MODULE_ASSEMBLY:
AddComponent<ModuleAssemblyComponent>();
break;
case eReplicaComponentType::PROPERTY_VENDOR:
AddComponent<PropertyVendorComponent>();
break;
case eReplicaComponentType::ROCKET_LAUNCHPAD_CONTROL:
AddComponent<RocketLaunchpadControlComponent>(componentId);
break;
case eReplicaComponentType::RACING_CONTROL:
AddComponent<RacingControlComponent>();
m_IsGhostingCandidate = false;
break;
case eReplicaComponentType::MISSION_OFFER:
AddComponent<MissionOfferComponent>(GetLOT());
break;
case eReplicaComponentType::RACING_STATS:
AddComponent<RacingStatsComponent>();
break;
case eReplicaComponentType::LUP_EXHIBIT:
AddComponent<LUPExhibitComponent>();
break;
case eReplicaComponentType::SOUND_TRIGGER:
AddComponent<SoundTriggerComponent>();
break;
case eReplicaComponentType::PROXIMITY_MONITOR:
AddComponent<ProximityMonitorComponent>();
break;
case eReplicaComponentType::MULTI_ZONE_ENTRANCE:
AddComponent<MultiZoneEntranceComponent>();
break;
case eReplicaComponentType::BUFF:
AddComponent<BuffComponent>();
break;
case eReplicaComponentType::RAIL_ACTIVATOR:
AddComponent<RailActivatorComponent>(componentId);
break;
case eReplicaComponentType::POSSESSABLE:
AddComponent<PossessableComponent>(componentId);
break;
case eReplicaComponentType::BUILD_BORDER:
AddComponent<BuildBorderComponent>();
break;
case eReplicaComponentType::DONATION_VENDOR:
AddComponent<DonationVendorComponent>();
if (!hasProximityMonitorComponent) AddComponent<ProximityMonitorComponent>();
break;
case eReplicaComponentType::GATE_RUSH_CONTROL:
AddComponent<GateRushControlComponent>();
break;
case eReplicaComponentType::RACING_SOUND_TRIGGER:
AddComponent<RacingSoundTriggerComponent>();
break;
case eReplicaComponentType::ACHIEVEMENT_VENDOR:
AddComponent<AchievementVendorComponent>();
break;
case eReplicaComponentType::PROJECTILE_PHYSICS:
// AddComponent<ProjectilePhysicsComponent>();
hasPhysicsComponent = true;
break;
case eReplicaComponentType::VEHICLE_PHYSICS:
// AddComponent<VehiclePhysicsComponent>();
hasPhysicsComponent = true;
break;
case eReplicaComponentType::PHYSICS_SYSTEM:
// AddComponent<PhysicsSystemComponent>();
hasPhysicsComponent = true;
break;
case eReplicaComponentType::GHOST:
case eReplicaComponentType::SPAWN:
case eReplicaComponentType::MODULAR_BUILD:
case eReplicaComponentType::BUILD_CONTROLLER:
case eReplicaComponentType::BUILD_ACTIVATOR:
case eReplicaComponentType::ICON_ONLY:
case eReplicaComponentType::DROP_EFFECT:
case eReplicaComponentType::CHEST:
case eReplicaComponentType::BLUEPRINT:
case eReplicaComponentType::PLATFORM_BOUNDARY:
case eReplicaComponentType::MODULE:
case eReplicaComponentType::JETPACKPAD:
case eReplicaComponentType::EXHIBIT:
case eReplicaComponentType::OVERHEAD_ICON:
case eReplicaComponentType::PET_CONTROL:
case eReplicaComponentType::MINIFIG:
case eReplicaComponentType::PET_CREATOR:
case eReplicaComponentType::MODEL_BUILDER:
case eReplicaComponentType::SPRINGPAD:
case eReplicaComponentType::FX:
case eReplicaComponentType::CHANGLING_BUILD:
case eReplicaComponentType::CHOICE_BUILD:
case eReplicaComponentType::PACKAGE:
case eReplicaComponentType::SOUND_REPEATER:
case eReplicaComponentType::SOUND_AMBIENT_2D:
case eReplicaComponentType::SOUND_AMBIENT_3D:
case eReplicaComponentType::PRECONDITION:
case eReplicaComponentType::FLAG:
case eReplicaComponentType::CUSTOM_BUILD_ASSEMBLY:
case eReplicaComponentType::SHOWCASE_MODEL_HANDLER:
case eReplicaComponentType::RACING_MODULE:
case eReplicaComponentType::GENERIC_ACTIVATOR:
case eReplicaComponentType::HF_LIGHT_DIRECTION_GADGET:
case eReplicaComponentType::ROCKET_ANIMATION_CONTROL:
case eReplicaComponentType::TRIGGER:
case eReplicaComponentType::DROPPED_LOOT:
case eReplicaComponentType::FACTION_TRIGGER:
case eReplicaComponentType::BBB:
case eReplicaComponentType::CHAT_BUBBLE:
case eReplicaComponentType::FRIENDS_LIST:
case eReplicaComponentType::GUILD:
case eReplicaComponentType::LOCAL_SYSTEM:
case eReplicaComponentType::MISSION:
case eReplicaComponentType::MUTABLE_MODEL_BEHAVIORS:
case eReplicaComponentType::PATHFINDING:
case eReplicaComponentType::PET_TAMING_CONTROL:
case eReplicaComponentType::PROPERTY_EDITOR:
case eReplicaComponentType::SKINNED_RENDER:
case eReplicaComponentType::SLASH_COMMAND:
case eReplicaComponentType::STATUS_EFFECT:
case eReplicaComponentType::TEAMS:
case eReplicaComponentType::TEXT_EFFECT:
case eReplicaComponentType::TRADE:
case eReplicaComponentType::USER_CONTROL:
case eReplicaComponentType::IGNORE_LIST:
case eReplicaComponentType::INTERACTION_MANAGER:
case eReplicaComponentType::COMBAT_MEDIATOR:
case eReplicaComponentType::ROLLER:
case eReplicaComponentType::PLAYER_FORCED_MOVEMENT:
case eReplicaComponentType::CRAFTING:
case eReplicaComponentType::LEVEL_PROGRESSION:
case eReplicaComponentType::POSSESSOR:
case eReplicaComponentType::MOUNT_CONTROL:
case eReplicaComponentType::UNKNOWN_112:
case eReplicaComponentType::PROPERTY_PLAQUE:
case eReplicaComponentType::UNKNOWN_115:
case eReplicaComponentType::CULLING_PLANE:
case eReplicaComponentType::NUMBER_OF_COMPONENTS:
case eReplicaComponentType::INVALID:
default:
Game::logger->Log("Entity", "Attempted to create component %i for lot %i but no creator exists. Component will not be created.", componentId, m_TemplateID);
break;
}
case eReplicaComponentType::MODULE_ASSEMBLY:
AddComponent<ModuleAssemblyComponent>();
break;
case eReplicaComponentType::PROPERTY_VENDOR:
AddComponent<PropertyVendorComponent>();
break;
case eReplicaComponentType::ROCKET_LAUNCHPAD_CONTROL:
AddComponent<RocketLaunchpadControlComponent>(componentId);
break;
case eReplicaComponentType::RACING_CONTROL:
AddComponent<RacingControlComponent>(componentId);
m_IsGhostingCandidate = false;
break;
case eReplicaComponentType::MISSION_OFFER:
AddComponent<MissionOfferComponent>(GetLOT());
break;
case eReplicaComponentType::RACING_STATS:
AddComponent<RacingStatsComponent>();
break;
case eReplicaComponentType::LUP_EXHIBIT:
AddComponent<LUPExhibitComponent>();
break;
case eReplicaComponentType::SOUND_TRIGGER:
AddComponent<SoundTriggerComponent>();
break;
case eReplicaComponentType::PROXIMITY_MONITOR:
AddComponent<ProximityMonitorComponent>();
break;
case eReplicaComponentType::MULTI_ZONE_ENTRANCE:
AddComponent<MultiZoneEntranceComponent>();
break;
case eReplicaComponentType::BUFF:
AddComponent<BuffComponent>();
break;
case eReplicaComponentType::RAIL_ACTIVATOR:
AddComponent<RailActivatorComponent>(componentId);
break;
case eReplicaComponentType::POSSESSABLE:
AddComponent<PossessableComponent>(componentId);
break;
case eReplicaComponentType::BUILD_BORDER:
AddComponent<BuildBorderComponent>();
break;
case eReplicaComponentType::DONATION_VENDOR:
AddComponent<DonationVendorComponent>();
if (hasProximityMonitorComponent) continue;
AddComponent<ProximityMonitorComponent>();
hasProximityMonitorComponent = true;
break;
case eReplicaComponentType::GATE_RUSH_CONTROL:
AddComponent<GateRushControlComponent>(componentId);
break;
case eReplicaComponentType::RACING_SOUND_TRIGGER:
AddComponent<RacingSoundTriggerComponent>();
break;
case eReplicaComponentType::ACHIEVEMENT_VENDOR:
AddComponent<AchievementVendorComponent>();
break;
case eReplicaComponentType::PROJECTILE_PHYSICS:
if (hasPhysicsComponent) continue;
// AddComponent<ProjectilePhysicsComponent>();
physicsComponentID = componentId;
hasPhysicsComponent = true;
break;
case eReplicaComponentType::VEHICLE_PHYSICS:
if (hasPhysicsComponent) continue;
// AddComponent<VehiclePhysicsComponent>();
physicsComponentID = componentId;
hasPhysicsComponent = true;
break;
case eReplicaComponentType::PHYSICS_SYSTEM:
// AddComponent<PhysicsSystemComponent>();
physicsComponentID = componentId;
hasPhysicsComponent = true;
break;
case eReplicaComponentType::GHOST:
case eReplicaComponentType::SPAWN:
case eReplicaComponentType::MODULAR_BUILD:
case eReplicaComponentType::BUILD_CONTROLLER:
case eReplicaComponentType::BUILD_ACTIVATOR:
case eReplicaComponentType::ICON_ONLY:
case eReplicaComponentType::DROP_EFFECT:
case eReplicaComponentType::CHEST:
case eReplicaComponentType::BLUEPRINT:
case eReplicaComponentType::PLATFORM_BOUNDARY:
case eReplicaComponentType::MODULE:
case eReplicaComponentType::JETPACKPAD:
case eReplicaComponentType::EXHIBIT:
case eReplicaComponentType::OVERHEAD_ICON:
case eReplicaComponentType::PET_CONTROL:
case eReplicaComponentType::MINIFIG:
case eReplicaComponentType::PET_CREATOR:
case eReplicaComponentType::MODEL_BUILDER:
case eReplicaComponentType::SPRINGPAD:
case eReplicaComponentType::FX:
case eReplicaComponentType::CHANGLING_BUILD:
case eReplicaComponentType::CHOICE_BUILD:
case eReplicaComponentType::PACKAGE:
case eReplicaComponentType::SOUND_REPEATER:
case eReplicaComponentType::SOUND_AMBIENT_2D:
case eReplicaComponentType::SOUND_AMBIENT_3D:
case eReplicaComponentType::PRECONDITION:
case eReplicaComponentType::FLAG:
case eReplicaComponentType::CUSTOM_BUILD_ASSEMBLY:
case eReplicaComponentType::SHOWCASE_MODEL_HANDLER:
case eReplicaComponentType::RACING_MODULE:
case eReplicaComponentType::GENERIC_ACTIVATOR:
case eReplicaComponentType::HF_LIGHT_DIRECTION_GADGET:
case eReplicaComponentType::ROCKET_ANIMATION_CONTROL:
case eReplicaComponentType::TRIGGER:
case eReplicaComponentType::DROPPED_LOOT:
case eReplicaComponentType::FACTION_TRIGGER:
case eReplicaComponentType::BBB:
case eReplicaComponentType::CHAT_BUBBLE:
case eReplicaComponentType::FRIENDS_LIST:
case eReplicaComponentType::GUILD:
case eReplicaComponentType::LOCAL_SYSTEM:
case eReplicaComponentType::MISSION:
case eReplicaComponentType::MUTABLE_MODEL_BEHAVIORS:
case eReplicaComponentType::PATHFINDING:
case eReplicaComponentType::PET_TAMING_CONTROL:
case eReplicaComponentType::PROPERTY_EDITOR:
case eReplicaComponentType::SKINNED_RENDER:
case eReplicaComponentType::SLASH_COMMAND:
case eReplicaComponentType::STATUS_EFFECT:
case eReplicaComponentType::TEAMS:
case eReplicaComponentType::TEXT_EFFECT:
case eReplicaComponentType::TRADE:
case eReplicaComponentType::USER_CONTROL:
case eReplicaComponentType::IGNORE_LIST:
case eReplicaComponentType::INTERACTION_MANAGER:
case eReplicaComponentType::COMBAT_MEDIATOR:
case eReplicaComponentType::ROLLER:
case eReplicaComponentType::PLAYER_FORCED_MOVEMENT:
case eReplicaComponentType::CRAFTING:
case eReplicaComponentType::LEVEL_PROGRESSION:
case eReplicaComponentType::POSSESSOR:
case eReplicaComponentType::MOUNT_CONTROL:
case eReplicaComponentType::UNKNOWN_112:
case eReplicaComponentType::PROPERTY_PLAQUE:
case eReplicaComponentType::UNKNOWN_115:
case eReplicaComponentType::CULLING_PLANE:
case eReplicaComponentType::NUMBER_OF_COMPONENTS:
case eReplicaComponentType::INVALID:
default:
Game::logger->Log("Entity", "Attempted to create component %i for lot %i but no creator exists. Component will not be created.", componentId, m_TemplateID);
}
}