From 9121bf41c5e7345adf0e5a04f16124750a784674 Mon Sep 17 00:00:00 2001 From: David Markowitz Date: Sun, 25 Jun 2023 21:47:35 -0700 Subject: [PATCH] Entity work - Add in bool cheks - Fix component class files so they compile and link - Fin inheritance --- .../BaseRacingControlComponent.cpp | 2 +- .../dComponents/BaseRacingControlComponent.h | 2 +- dGame/dComponents/CMakeLists.txt | 1 + .../dComponents/GateRushControlComponent.cpp | 2 +- dGame/dComponents/GateRushControlComponent.h | 2 +- dGame/dComponents/ItemComponent.cpp | 6 +- .../dComponents/MinigameControlComponent.cpp | 2 +- .../MutableModelBehaviorComponent.h | 2 +- dGame/dComponents/QuickBuildComponent.cpp | 2 +- dGame/dComponents/RacingControlComponent.cpp | 2 +- dGame/dComponents/RacingControlComponent.h | 2 +- .../RacingSoundTriggerComponent.cpp | 5 + dGame/dComponents/VendorComponent.h | 6 - dGame/dEntity/Entity.cpp | 599 +++++++++--------- 14 files changed, 327 insertions(+), 308 deletions(-) diff --git a/dGame/dComponents/BaseRacingControlComponent.cpp b/dGame/dComponents/BaseRacingControlComponent.cpp index 710ce9f5..f948215a 100644 --- a/dGame/dComponents/BaseRacingControlComponent.cpp +++ b/dGame/dComponents/BaseRacingControlComponent.cpp @@ -1,5 +1,5 @@ #include "BaseRacingControlComponent.h" -BaseRacingControlComponent::BaseRacingControlComponent(Entity* parent) : Component(parent) { +BaseRacingControlComponent::BaseRacingControlComponent(Entity* parent, int32_t componentId) : ScriptedActivityComponent(parent, componentId) { } diff --git a/dGame/dComponents/BaseRacingControlComponent.h b/dGame/dComponents/BaseRacingControlComponent.h index 793ebb7f..935fb0c3 100644 --- a/dGame/dComponents/BaseRacingControlComponent.h +++ b/dGame/dComponents/BaseRacingControlComponent.h @@ -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); }; diff --git a/dGame/dComponents/CMakeLists.txt b/dGame/dComponents/CMakeLists.txt index 8379bd41..09849b7d 100644 --- a/dGame/dComponents/CMakeLists.txt +++ b/dGame/dComponents/CMakeLists.txt @@ -11,6 +11,7 @@ set(DGAME_DCOMPONENTS_SOURCES "AchievementVendorComponent.cpp" "ControllablePhysicsComponent.cpp" "DestroyableComponent.cpp" "DonationVendorComponent.cpp" + "GateRushControlComponent.cpp" "InventoryComponent.cpp" "ItemComponent.cpp" "LevelProgressionComponent.cpp" diff --git a/dGame/dComponents/GateRushControlComponent.cpp b/dGame/dComponents/GateRushControlComponent.cpp index 35caa0c3..1ce71624 100644 --- a/dGame/dComponents/GateRushControlComponent.cpp +++ b/dGame/dComponents/GateRushControlComponent.cpp @@ -1,5 +1,5 @@ #include "GateRushControlComponent.h" -GateRushControlComponent::GateRushControlComponent(Entity* parent) : BaseRacingControlComponent(parent) { +GateRushControlComponent::GateRushControlComponent(Entity* parent, int32_t componentId) : BaseRacingControlComponent(parent, componentId) { } diff --git a/dGame/dComponents/GateRushControlComponent.h b/dGame/dComponents/GateRushControlComponent.h index dc185a9a..73b95619 100644 --- a/dGame/dComponents/GateRushControlComponent.h +++ b/dGame/dComponents/GateRushControlComponent.h @@ -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__ diff --git a/dGame/dComponents/ItemComponent.cpp b/dGame/dComponents/ItemComponent.cpp index fcfb3721..bb201b00 100644 --- a/dGame/dComponents/ItemComponent.cpp +++ b/dGame/dComponents/ItemComponent.cpp @@ -4,12 +4,12 @@ ItemComponent::ItemComponent(Entity* parent) : Component(parent) { - m_Parent = parent; + m_ParentEntity = parent; m_DirtyItemInfo = false; - m_UgId = m_Parent->GetVarAs(u"userModelID"); - if (m_UgId == LWOOBJID_EMPTY) m_UgId = m_Parent->GetObjectID(); + m_UgId = m_ParentEntity->GetVarAs(u"userModelID"); + if (m_UgId == LWOOBJID_EMPTY) m_UgId = m_ParentEntity->GetObjectID(); m_UgModerationStatus = eUgcModerationStatus::NoStatus; diff --git a/dGame/dComponents/MinigameControlComponent.cpp b/dGame/dComponents/MinigameControlComponent.cpp index 158b3377..5694a967 100644 --- a/dGame/dComponents/MinigameControlComponent.cpp +++ b/dGame/dComponents/MinigameControlComponent.cpp @@ -2,6 +2,6 @@ #include "Entity.h" -MinigameControlComponent::MinigameControlComponent(Entity* parent) : Component(parent) { +MinigameControlComponent::MinigameControlComponent(Entity* parent) : ActivityComponent(parent) { } diff --git a/dGame/dComponents/MutableModelBehaviorComponent.h b/dGame/dComponents/MutableModelBehaviorComponent.h index 2256fa31..4aaf5ba0 100644 --- a/dGame/dComponents/MutableModelBehaviorComponent.h +++ b/dGame/dComponents/MutableModelBehaviorComponent.h @@ -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); diff --git a/dGame/dComponents/QuickBuildComponent.cpp b/dGame/dComponents/QuickBuildComponent.cpp index f10c62d1..67e1f4cb 100644 --- a/dGame/dComponents/QuickBuildComponent.cpp +++ b/dGame/dComponents/QuickBuildComponent.cpp @@ -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(u"CheckPrecondition"); diff --git a/dGame/dComponents/RacingControlComponent.cpp b/dGame/dComponents/RacingControlComponent.cpp index d648001f..1f4f2d5a 100644 --- a/dGame/dComponents/RacingControlComponent.cpp +++ b/dGame/dComponents/RacingControlComponent.cpp @@ -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; diff --git a/dGame/dComponents/RacingControlComponent.h b/dGame/dComponents/RacingControlComponent.h index b6e09042..b5dcedd4 100644 --- a/dGame/dComponents/RacingControlComponent.h +++ b/dGame/dComponents/RacingControlComponent.h @@ -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); diff --git a/dGame/dComponents/RacingSoundTriggerComponent.cpp b/dGame/dComponents/RacingSoundTriggerComponent.cpp index e69de29b..ffff8dd3 100644 --- a/dGame/dComponents/RacingSoundTriggerComponent.cpp +++ b/dGame/dComponents/RacingSoundTriggerComponent.cpp @@ -0,0 +1,5 @@ +#include "RacingSoundTriggerComponent.h" + +RacingSoundTriggerComponent::RacingSoundTriggerComponent(Entity* parent) : SoundTriggerComponent(parent) { + +} diff --git a/dGame/dComponents/VendorComponent.h b/dGame/dComponents/VendorComponent.h index 743d5b64..5ef992af 100644 --- a/dGame/dComponents/VendorComponent.h +++ b/dGame/dComponents/VendorComponent.h @@ -53,12 +53,6 @@ public: m_DirtyVendor = true; } - /** - * Gets the list if items the vendor sells. - * @return the list of items. - */ - std::map& GetInventory(); - /** * Refresh the inventory of this vendor. */ diff --git a/dGame/dEntity/Entity.cpp b/dGame/dEntity/Entity.cpp index cd0c0276..725206b6 100644 --- a/dGame/dEntity/Entity.cpp +++ b/dGame/dEntity/Entity.cpp @@ -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(); - hasPhysicsComponent = true; - break; - case eReplicaComponentType::RENDER: - AddComponent(); - break; - case eReplicaComponentType::SIMPLE_PHYSICS: + case eReplicaComponentType::CONTROLLABLE_PHYSICS: + if (hasPhysicsComponent) continue; + AddComponent(); + physicsComponentID = componentId; + hasPhysicsComponent = true; + break; + case eReplicaComponentType::RENDER: + AddComponent(); + break; + case eReplicaComponentType::SIMPLE_PHYSICS: + if (hasPhysicsComponent) continue; + AddComponent(componentId); + physicsComponentID = componentId; + hasPhysicsComponent = true; + break; + case eReplicaComponentType::CHARACTER: + AddComponent(m_Character); + AddComponent(); + AddComponent(); + AddComponent(); + AddComponent(); + break; + case eReplicaComponentType::SCRIPT: { + std::string script; + if (m_TemplateID == LOT_ZONE_CONTROL) { + script = ScriptComponent::GetZoneScriptName(componentId); + } else { + script = ScriptComponent::GetScriptName(this, componentId); + } + AddComponent(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(); + break; + case eReplicaComponentType::DESTROYABLE: + if (hasDestroyableComponent) continue; + AddComponent(componentId); + hasDestroyableComponent = true; + break; + case eReplicaComponentType::SKILL: + AddComponent(); + break; + case eReplicaComponentType::ITEM: + AddComponent(); + break; + case eReplicaComponentType::VENDOR: + AddComponent(); + if (hasProximityMonitorComponent) continue; + AddComponent(); + hasProximityMonitorComponent = true; + break; + case eReplicaComponentType::INVENTORY: + AddComponent(); + break; + case eReplicaComponentType::SHOOTING_GALLERY: + AddComponent(); + break; + case eReplicaComponentType::RIGID_BODY_PHANTOM_PHYSICS: + if (hasPhysicsComponent) continue; + AddComponent(); + physicsComponentID = componentId; + hasPhysicsComponent = true; + break; + case eReplicaComponentType::COLLECTIBLE: + AddComponent(); + if (!hasDestroyableComponent) AddComponent(componentId); + break; + case eReplicaComponentType::MOVING_PLATFORM: + AddComponent(GetVarAsString(u"attached_path")); + m_IsGhostingCandidate = false; + break; + case eReplicaComponentType::PET: + AddComponent(componentId); + AddComponent(); + break; + case eReplicaComponentType::HAVOK_VEHICLE_PHYSICS: { + if (hasPhysicsComponent) continue; + if (GetVar(u"use_simple_physics")) { AddComponent(componentId); - hasPhysicsComponent = true; - break; - case eReplicaComponentType::CHARACTER: - AddComponent(m_Character); - AddComponent(); - AddComponent(); - AddComponent(); - AddComponent(); - 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(); + if (havokVehiclePhysicsComponent) { + havokVehiclePhysicsComponent->SetPosition(m_DefaultPosition); + havokVehiclePhysicsComponent->SetRotation(m_DefaultRotation); } - AddComponent(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(); - break; - case eReplicaComponentType::DESTROYABLE: - if (!HasComponent(eReplicaComponentType::DESTROYABLE)) AddComponent(componentId); - break; - case eReplicaComponentType::SKILL: - AddComponent(); - break; - case eReplicaComponentType::ITEM: - AddComponent(); - break; - case eReplicaComponentType::VENDOR: - AddComponent(); - if (!hasProximityMonitorComponent) AddComponent(); - break; - case eReplicaComponentType::INVENTORY: - AddComponent(); - break; - case eReplicaComponentType::SHOOTING_GALLERY: - AddComponent(); - break; - case eReplicaComponentType::RIGID_BODY_PHANTOM_PHYSICS: - AddComponent(); - hasPhysicsComponent = true; - break; - case eReplicaComponentType::COLLECTIBLE: - AddComponent(); - if (!hasDestroyableComponent) AddComponent(componentId); - break; - case eReplicaComponentType::MOVING_PLATFORM: - AddComponent(GetVarAsString(u"attached_path")); - m_IsGhostingCandidate = false; - break; - case eReplicaComponentType::PET: - AddComponent(componentId); - AddComponent(); - break; - case eReplicaComponentType::HAVOK_VEHICLE_PHYSICS: { - if (GetVar(u"use_simple_physics")) { - AddComponent(componentId); + physicsComponentID = componentId; + m_IsGhostingCandidate = false; + hasPhysicsComponent = true; + break; + } + case eReplicaComponentType::MOVEMENT_AI: + AddComponent(); + break; + case eReplicaComponentType::PROPERTY: + AddComponent(); + m_IsGhostingCandidate = false; + break; + case eReplicaComponentType::SCRIPTED_ACTIVITY: + AddComponent(componentId); + m_IsGhostingCandidate = false; + break; + case eReplicaComponentType::PHANTOM_PHYSICS: { + if (hasPhysicsComponent) continue; + auto* phantomPhysicsComponent = AddComponent(); + if (phantomPhysicsComponent) phantomPhysicsComponent->SetPhysicsEffectActive(false); + physicsComponentID = componentId; + hasPhysicsComponent = true; + m_IsGhostingCandidate = false; + break; + } + case eReplicaComponentType::MODEL_BEHAVIOR: { + AddComponent(); + // Get Model Type form ldf + if (!hasPhysicsComponent) { + uint32_t modelType = -1; + if (modelType == 0) { + if (physicsComponentID == -1) physicsComponentID = 4246U; + AddComponent(); + hasPhysicsComponent = true; } else { - auto* havokVehiclePhysicsComponent = AddComponent(componentId); - if (havokVehiclePhysicsComponent) { - havokVehiclePhysicsComponent->SetPosition(m_DefaultPosition); - havokVehiclePhysicsComponent->SetRotation(m_DefaultRotation); - } - } - m_IsGhostingCandidate = false; - hasPhysicsComponent = true; - break; - } - case eReplicaComponentType::MOVEMENT_AI: - AddComponent(); - break; - case eReplicaComponentType::PROPERTY: - AddComponent(); - m_IsGhostingCandidate = false; - break; - case eReplicaComponentType::SCRIPTED_ACTIVITY: - AddComponent(componentId); - m_IsGhostingCandidate = false; - break; - case eReplicaComponentType::PHANTOM_PHYSICS: { - auto* phantomPhysicsComponent = AddComponent(); - 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(physicsComponentID); hasPhysicsComponent = true; - } else if (!hasPhysicsComponent) { - if (modelType == 0){ - if(physicsComponentID == -1) physicsComponentID = 4246U; - AddComponent(physicsComponentID); - hasPhysicsComponent = true; - } else { - if(physicsComponentID == -1) physicsComponentID = 4247U; - AddComponent(physicsComponentID); - hasPhysicsComponent = true; - } } - AddComponent(); - if (!HasComponent(eReplicaComponentType::DESTROYABLE)) { - auto* destroyableComponent = AddComponent(componentId); - if (destroyableComponent) { - destroyableComponent->SetHealth(1); - destroyableComponent->SetMaxHealth(1.0f); - destroyableComponent->SetFaction(-1, true); - destroyableComponent->SetIsSmashable(true); - } - } - break; } - case eReplicaComponentType::PROPERTY_ENTRANCE: - AddComponent(componentId); - break; - case eReplicaComponentType::PROPERTY_MANAGEMENT: - AddComponent(); - break; - case eReplicaComponentType::QUICK_BUILD: - AddComponent(componentId); - if (!HasComponent(eReplicaComponentType::DESTROYABLE)) AddComponent(componentId); - break; - case eReplicaComponentType::SWITCH: - AddComponent(); - break; - case eReplicaComponentType::MINIGAME_CONTROL: - AddComponent(); - break; - case eReplicaComponentType::BASE_COMBAT_AI: { - auto* baseCombatAiComponent = AddComponent(componentId); - if (baseCombatAiComponent && baseCombatAiComponent->GetTetherSpeed() > 0.0f) { - auto* movementAiComponent = AddComponent(); - 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(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(componentId); + break; + case eReplicaComponentType::PROPERTY_MANAGEMENT: + AddComponent(); + break; + case eReplicaComponentType::QUICK_BUILD: + AddComponent(componentId); + if (hasDestroyableComponent) continue; + AddComponent(componentId); + hasDestroyableComponent = true; + break; + case eReplicaComponentType::SWITCH: + AddComponent(); + break; + case eReplicaComponentType::MINIGAME_CONTROL: + AddComponent(); + break; + case eReplicaComponentType::BASE_COMBAT_AI: { + auto* baseCombatAiComponent = AddComponent(componentId); + if (baseCombatAiComponent && baseCombatAiComponent->GetTetherSpeed() > 0.0f) { + auto* movementAiComponent = AddComponent(); + 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(); - break; - case eReplicaComponentType::PROPERTY_VENDOR: - AddComponent(); - break; - case eReplicaComponentType::ROCKET_LAUNCHPAD_CONTROL: - AddComponent(componentId); - break; - case eReplicaComponentType::RACING_CONTROL: - AddComponent(); - m_IsGhostingCandidate = false; - break; - case eReplicaComponentType::MISSION_OFFER: - AddComponent(GetLOT()); - break; - case eReplicaComponentType::RACING_STATS: - AddComponent(); - break; - case eReplicaComponentType::LUP_EXHIBIT: - AddComponent(); - break; - case eReplicaComponentType::SOUND_TRIGGER: - AddComponent(); - break; - case eReplicaComponentType::PROXIMITY_MONITOR: - AddComponent(); - break; - case eReplicaComponentType::MULTI_ZONE_ENTRANCE: - AddComponent(); - break; - case eReplicaComponentType::BUFF: - AddComponent(); - break; - case eReplicaComponentType::RAIL_ACTIVATOR: - AddComponent(componentId); - break; - case eReplicaComponentType::POSSESSABLE: - AddComponent(componentId); - break; - case eReplicaComponentType::BUILD_BORDER: - AddComponent(); - break; - case eReplicaComponentType::DONATION_VENDOR: - AddComponent(); - if (!hasProximityMonitorComponent) AddComponent(); - break; - case eReplicaComponentType::GATE_RUSH_CONTROL: - AddComponent(); - break; - case eReplicaComponentType::RACING_SOUND_TRIGGER: - AddComponent(); - break; - case eReplicaComponentType::ACHIEVEMENT_VENDOR: - AddComponent(); - break; - case eReplicaComponentType::PROJECTILE_PHYSICS: - // AddComponent(); - hasPhysicsComponent = true; - break; - case eReplicaComponentType::VEHICLE_PHYSICS: - // AddComponent(); - hasPhysicsComponent = true; - break; - case eReplicaComponentType::PHYSICS_SYSTEM: - // AddComponent(); - 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(); + break; + case eReplicaComponentType::PROPERTY_VENDOR: + AddComponent(); + break; + case eReplicaComponentType::ROCKET_LAUNCHPAD_CONTROL: + AddComponent(componentId); + break; + case eReplicaComponentType::RACING_CONTROL: + AddComponent(componentId); + m_IsGhostingCandidate = false; + break; + case eReplicaComponentType::MISSION_OFFER: + AddComponent(GetLOT()); + break; + case eReplicaComponentType::RACING_STATS: + AddComponent(); + break; + case eReplicaComponentType::LUP_EXHIBIT: + AddComponent(); + break; + case eReplicaComponentType::SOUND_TRIGGER: + AddComponent(); + break; + case eReplicaComponentType::PROXIMITY_MONITOR: + AddComponent(); + break; + case eReplicaComponentType::MULTI_ZONE_ENTRANCE: + AddComponent(); + break; + case eReplicaComponentType::BUFF: + AddComponent(); + break; + case eReplicaComponentType::RAIL_ACTIVATOR: + AddComponent(componentId); + break; + case eReplicaComponentType::POSSESSABLE: + AddComponent(componentId); + break; + case eReplicaComponentType::BUILD_BORDER: + AddComponent(); + break; + case eReplicaComponentType::DONATION_VENDOR: + AddComponent(); + if (hasProximityMonitorComponent) continue; + AddComponent(); + hasProximityMonitorComponent = true; + break; + case eReplicaComponentType::GATE_RUSH_CONTROL: + AddComponent(componentId); + break; + case eReplicaComponentType::RACING_SOUND_TRIGGER: + AddComponent(); + break; + case eReplicaComponentType::ACHIEVEMENT_VENDOR: + AddComponent(); + break; + case eReplicaComponentType::PROJECTILE_PHYSICS: + if (hasPhysicsComponent) continue; + // AddComponent(); + physicsComponentID = componentId; + hasPhysicsComponent = true; + break; + case eReplicaComponentType::VEHICLE_PHYSICS: + if (hasPhysicsComponent) continue; + // AddComponent(); + physicsComponentID = componentId; + hasPhysicsComponent = true; + break; + case eReplicaComponentType::PHYSICS_SYSTEM: + // AddComponent(); + 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); } }