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