mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-26 15:37:20 +00:00
Collectible, Item, further re-implement initialize
This commit is contained in:
parent
cebe3c732a
commit
b91f84d884
283
dGame/Entity.cpp
283
dGame/Entity.cpp
@ -53,6 +53,7 @@
|
|||||||
#include "VendorComponent.h"
|
#include "VendorComponent.h"
|
||||||
#include "RocketLaunchpadControlComponent.h"
|
#include "RocketLaunchpadControlComponent.h"
|
||||||
#include "PropertyComponent.h"
|
#include "PropertyComponent.h"
|
||||||
|
#include "CollectibleComponent.h"
|
||||||
#include "BaseCombatAIComponent.h"
|
#include "BaseCombatAIComponent.h"
|
||||||
#include "PropertyManagementComponent.h"
|
#include "PropertyManagementComponent.h"
|
||||||
#include "PropertyVendorComponent.h"
|
#include "PropertyVendorComponent.h"
|
||||||
@ -76,6 +77,7 @@
|
|||||||
#include "eReplicaPacketType.h"
|
#include "eReplicaPacketType.h"
|
||||||
#include "RacingStatsComponent.h"
|
#include "RacingStatsComponent.h"
|
||||||
#include "MinigameControlComponent.h"
|
#include "MinigameControlComponent.h"
|
||||||
|
#include "ItemComponent.h"
|
||||||
|
|
||||||
// Table includes
|
// Table includes
|
||||||
#include "CDComponentsRegistryTable.h"
|
#include "CDComponentsRegistryTable.h"
|
||||||
@ -130,7 +132,6 @@ Entity::Entity(const LWOOBJID& objectID, EntityInfo info, Entity* parentEntity)
|
|||||||
m_ParentEntity = parentEntity;
|
m_ParentEntity = parentEntity;
|
||||||
m_Character = nullptr;
|
m_Character = nullptr;
|
||||||
m_GMLevel = eGameMasterLevel::CIVILIAN;
|
m_GMLevel = eGameMasterLevel::CIVILIAN;
|
||||||
m_CollectibleID = 0;
|
|
||||||
m_NetworkID = 0;
|
m_NetworkID = 0;
|
||||||
m_Observers = 0;
|
m_Observers = 0;
|
||||||
m_OwnerOverride = LWOOBJID_EMPTY;
|
m_OwnerOverride = LWOOBJID_EMPTY;
|
||||||
@ -170,17 +171,40 @@ Entity::~Entity() {
|
|||||||
if (m_ParentEntity) m_ParentEntity->RemoveChild(this);
|
if (m_ParentEntity) m_ParentEntity->RemoveChild(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Entity::ApplyComponentWhitelist(TemplateComponents& components) {
|
void Entity::ApplyComponentWhitelist(TemplateComponents& components) const {
|
||||||
const auto whitelistIndex = GetVar<int32_t>(u"componentWhitelist");
|
const auto whitelistIndex = GetVar<int32_t>(u"componentWhitelist");
|
||||||
if (whitelistIndex < 0 || whitelistIndex >= m_ComponentWhitelists.size()) return;
|
if (whitelistIndex < 0 || whitelistIndex >= m_ComponentWhitelists.size()) return;
|
||||||
|
|
||||||
const auto& whitelist = m_ComponentWhitelists.at(whitelistIndex);
|
const auto& whitelist = m_ComponentWhitelists.at(whitelistIndex);
|
||||||
const auto endRange = std::remove_if(components.begin(), components.end(), [&whitelist](const auto& componentCandidate) {
|
const auto endRange = std::remove_if(components.begin(), components.end(), [&whitelist](const auto& componentCandidate) {
|
||||||
return std::find(whitelist.begin(), whitelist.end(), componentCandidate.first) == whitelist.end();
|
return std::find(whitelist.begin(), whitelist.end(), componentCandidate.first) == whitelist.end();
|
||||||
});
|
});
|
||||||
components.erase(endRange, components.end());
|
components.erase(endRange, components.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Entity::ApplyComponentBlacklist(TemplateComponents& components) const {
|
||||||
|
bool hasPetComponent = std::find_if(components.begin(), components.end(), [](const auto& componentCandidate) {
|
||||||
|
return componentCandidate.first == eReplicaComponentType::PET;
|
||||||
|
}) != components.end();
|
||||||
|
if (hasPetComponent) {
|
||||||
|
auto toRemove = std::remove_if(components.begin(), components.end(), [](const auto& componentCandidate) {
|
||||||
|
return componentCandidate.first == eReplicaComponentType::MODEL_BEHAVIOR || componentCandidate.first == eReplicaComponentType::ITEM;
|
||||||
|
});
|
||||||
|
components.erase(toRemove, components.end());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Entity::ApplyComponentConfig(TemplateComponents& components) const {
|
||||||
|
if (GetVar<bool>(u"markedAsPhantom")) {
|
||||||
|
auto toRemove = std::remove_if(components.begin(), components.end(), [](const auto& componentCandidate) {
|
||||||
|
return componentCandidate.first == eReplicaComponentType::SIMPLE_PHYSICS ||
|
||||||
|
componentCandidate.first == eReplicaComponentType::PHANTOM_PHYSICS; // Just make sure we dont have phantom physics already
|
||||||
|
});
|
||||||
|
components.erase(toRemove, components.end());
|
||||||
|
components.emplace_back(eReplicaComponentType::PHANTOM_PHYSICS, 0U);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Entity::Initialize() {
|
void Entity::Initialize() {
|
||||||
// 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");
|
||||||
@ -206,6 +230,8 @@ void Entity::Initialize() {
|
|||||||
auto* componentsRegistry = CDClientManager::Instance().GetTable<CDComponentsRegistryTable>();
|
auto* componentsRegistry = CDClientManager::Instance().GetTable<CDComponentsRegistryTable>();
|
||||||
TemplateComponents components = componentsRegistry->GetTemplateComponents(m_TemplateID);
|
TemplateComponents components = componentsRegistry->GetTemplateComponents(m_TemplateID);
|
||||||
ApplyComponentWhitelist(components);
|
ApplyComponentWhitelist(components);
|
||||||
|
ApplyComponentBlacklist(components);
|
||||||
|
ApplyComponentConfig(components);
|
||||||
for (const auto& [componentTemplate, componentId] : components) {
|
for (const auto& [componentTemplate, componentId] : components) {
|
||||||
switch (componentTemplate) {
|
switch (componentTemplate) {
|
||||||
case eReplicaComponentType::CONTROLLABLE_PHYSICS:
|
case eReplicaComponentType::CONTROLLABLE_PHYSICS:
|
||||||
@ -215,162 +241,87 @@ void Entity::Initialize() {
|
|||||||
AddComponent<RenderComponent>();
|
AddComponent<RenderComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::SIMPLE_PHYSICS:
|
case eReplicaComponentType::SIMPLE_PHYSICS:
|
||||||
|
AddComponent<SimplePhysicsComponent>(componentId);
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::CHARACTER:
|
case eReplicaComponentType::CHARACTER:
|
||||||
AddComponent<CharacterComponent>(m_Character);
|
AddComponent<CharacterComponent>(m_Character);
|
||||||
AddComponent<MissionComponent>();
|
AddComponent<MissionComponent>();
|
||||||
break;
|
AddComponent<PossessorComponent>();
|
||||||
case eReplicaComponentType::SCRIPT:
|
AddComponent<LevelProgressionComponent>();
|
||||||
|
AddComponent<PlayerForcedMovementComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::BOUNCER:
|
case eReplicaComponentType::BOUNCER:
|
||||||
AddComponent<BouncerComponent>();
|
AddComponent<BouncerComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::DESTROYABLE:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::GHOST:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::SKILL:
|
case eReplicaComponentType::SKILL:
|
||||||
AddComponent<SkillComponent>();
|
AddComponent<SkillComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::SPAWN:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::ITEM:
|
case eReplicaComponentType::ITEM:
|
||||||
break;
|
AddComponent<ItemComponent>();
|
||||||
case eReplicaComponentType::MODULAR_BUILD:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::BUILD_CONTROLLER:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::BUILD_ACTIVATOR:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::ICON_ONLY:
|
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::VENDOR:
|
case eReplicaComponentType::VENDOR:
|
||||||
AddComponent<VendorComponent>();
|
AddComponent<VendorComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::INVENTORY:
|
case eReplicaComponentType::INVENTORY:
|
||||||
break;
|
AddComponent<InventoryComponent>();
|
||||||
case eReplicaComponentType::PROJECTILE_PHYSICS:
|
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::SHOOTING_GALLERY:
|
case eReplicaComponentType::SHOOTING_GALLERY:
|
||||||
AddComponent<ShootingGalleryComponent>();
|
AddComponent<ShootingGalleryComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::RIGID_BODY_PHANTOM_PHYSICS:
|
case eReplicaComponentType::RIGID_BODY_PHANTOM_PHYSICS:
|
||||||
break;
|
AddComponent<RigidbodyPhantomPhysicsComponent>();
|
||||||
case eReplicaComponentType::DROP_EFFECT:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::CHEST:
|
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::COLLECTIBLE:
|
case eReplicaComponentType::COLLECTIBLE:
|
||||||
break;
|
AddComponent<CollectibleComponent>();
|
||||||
case eReplicaComponentType::BLUEPRINT:
|
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::MOVING_PLATFORM:
|
case eReplicaComponentType::MOVING_PLATFORM:
|
||||||
|
AddComponent<MovingPlatformComponent>(GetVarAsString(u"attached_path"));
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::PET:
|
case eReplicaComponentType::PET:
|
||||||
AddComponent<PetComponent>(componentId);
|
AddComponent<PetComponent>(componentId);
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::PLATFORM_BOUNDARY:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::MODULE:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::JETPACKPAD:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::HAVOK_VEHICLE_PHYSICS:
|
case eReplicaComponentType::HAVOK_VEHICLE_PHYSICS:
|
||||||
break;
|
AddComponent<HavokVehiclePhysicsComponent>();
|
||||||
case eReplicaComponentType::MOVEMENT_AI:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::EXHIBIT:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::OVERHEAD_ICON:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::PET_CONTROL:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::MINIFIG:
|
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::PROPERTY:
|
case eReplicaComponentType::PROPERTY:
|
||||||
AddComponent<PropertyComponent>();
|
AddComponent<PropertyComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::PET_CREATOR:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::MODEL_BUILDER:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::SCRIPTED_ACTIVITY:
|
case eReplicaComponentType::SCRIPTED_ACTIVITY:
|
||||||
AddComponent<ScriptedActivityComponent>(componentId);
|
AddComponent<ScriptedActivityComponent>(componentId);
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::PHANTOM_PHYSICS:
|
case eReplicaComponentType::PHANTOM_PHYSICS:
|
||||||
break;
|
AddComponent<PhantomPhysicsComponent>();
|
||||||
case eReplicaComponentType::SPRINGPAD:
|
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::MODEL_BEHAVIOR:
|
case eReplicaComponentType::MODEL_BEHAVIOR:
|
||||||
|
AddComponent<ModelBehaviorComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::PROPERTY_ENTRANCE:
|
case eReplicaComponentType::PROPERTY_ENTRANCE:
|
||||||
AddComponent<PropertyEntranceComponent>(componentId);
|
AddComponent<PropertyEntranceComponent>(componentId);
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::FX:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::PROPERTY_MANAGEMENT:
|
case eReplicaComponentType::PROPERTY_MANAGEMENT:
|
||||||
AddComponent<PropertyManagementComponent>();
|
AddComponent<PropertyManagementComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::VEHICLE_PHYSICS:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::PHYSICS_SYSTEM:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::QUICK_BUILD:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::SWITCH:
|
case eReplicaComponentType::SWITCH:
|
||||||
AddComponent<SwitchComponent>();
|
AddComponent<SwitchComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::MINIGAME_CONTROL:
|
case eReplicaComponentType::MINIGAME_CONTROL:
|
||||||
AddComponent<MinigameControlComponent>();
|
AddComponent<MinigameControlComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::CHANGLING_BUILD:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::CHOICE_BUILD:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::PACKAGE:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::SOUND_REPEATER:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::SOUND_AMBIENT_2D:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::SOUND_AMBIENT_3D:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::PRECONDITION:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::FLAG:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::CUSTOM_BUILD_ASSEMBLY:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::BASE_COMBAT_AI:
|
case eReplicaComponentType::BASE_COMBAT_AI:
|
||||||
AddComponent<BaseCombatAIComponent>(componentId);
|
AddComponent<BaseCombatAIComponent>(componentId);
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::MODULE_ASSEMBLY:
|
case eReplicaComponentType::MODULE_ASSEMBLY:
|
||||||
AddComponent<ModuleAssemblyComponent>();
|
AddComponent<ModuleAssemblyComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::SHOWCASE_MODEL_HANDLER:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::RACING_MODULE:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::GENERIC_ACTIVATOR:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::PROPERTY_VENDOR:
|
case eReplicaComponentType::PROPERTY_VENDOR:
|
||||||
AddComponent<PropertyVendorComponent>();
|
AddComponent<PropertyVendorComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::HF_LIGHT_DIRECTION_GADGET:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::ROCKET_LAUNCHPAD_CONTROL:
|
case eReplicaComponentType::ROCKET_LAUNCHPAD_CONTROL:
|
||||||
break;
|
AddComponent<RocketLaunchpadControlComponent>(componentId);
|
||||||
case eReplicaComponentType::ROCKET_ANIMATION_CONTROL:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::TRIGGER:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::DROPPED_LOOT:
|
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::RACING_CONTROL:
|
case eReplicaComponentType::RACING_CONTROL:
|
||||||
AddComponent<RacingControlComponent>();
|
AddComponent<RacingControlComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::FACTION_TRIGGER:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::MISSION_OFFER:
|
case eReplicaComponentType::MISSION_OFFER:
|
||||||
AddComponent<MissionOfferComponent>(GetLOT());
|
AddComponent<MissionOfferComponent>(GetLOT());
|
||||||
break;
|
break;
|
||||||
@ -380,92 +331,104 @@ void Entity::Initialize() {
|
|||||||
case eReplicaComponentType::LUP_EXHIBIT:
|
case eReplicaComponentType::LUP_EXHIBIT:
|
||||||
AddComponent<LUPExhibitComponent>();
|
AddComponent<LUPExhibitComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::BBB:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::SOUND_TRIGGER:
|
case eReplicaComponentType::SOUND_TRIGGER:
|
||||||
break;
|
AddComponent<SoundTriggerComponent>();
|
||||||
case eReplicaComponentType::PROXIMITY_MONITOR:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::RACING_SOUND_TRIGGER:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::CHAT_BUBBLE:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::FRIENDS_LIST:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::GUILD:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::LOCAL_SYSTEM:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::MISSION:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::MUTABLE_MODEL_BEHAVIORS:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::PATHFINDING:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::PET_TAMING_CONTROL:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::PROPERTY_EDITOR:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::SKINNED_RENDER:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::SLASH_COMMAND:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::STATUS_EFFECT:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::TEAMS:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::TEXT_EFFECT:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::TRADE:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::USER_CONTROL:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::IGNORE_LIST:
|
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::MULTI_ZONE_ENTRANCE:
|
case eReplicaComponentType::MULTI_ZONE_ENTRANCE:
|
||||||
|
AddComponent<MultiZoneEntranceComponent>();
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::BUFF:
|
case eReplicaComponentType::BUFF:
|
||||||
break;
|
AddComponent<BuffComponent>();
|
||||||
case eReplicaComponentType::INTERACTION_MANAGER:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::DONATION_VENDOR:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::COMBAT_MEDIATOR:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::ACHIEVEMENT_VENDOR:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::GATE_RUSH_CONTROL:
|
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::RAIL_ACTIVATOR:
|
case eReplicaComponentType::RAIL_ACTIVATOR:
|
||||||
break;
|
AddComponent<RailActivatorComponent>(componentId);
|
||||||
case eReplicaComponentType::ROLLER:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::PLAYER_FORCED_MOVEMENT:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::CRAFTING:
|
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::POSSESSABLE:
|
case eReplicaComponentType::POSSESSABLE:
|
||||||
AddComponent<PossessableComponent>(componentId);
|
AddComponent<PossessableComponent>(componentId);
|
||||||
break;
|
break;
|
||||||
case eReplicaComponentType::LEVEL_PROGRESSION:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::POSSESSOR:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::MOUNT_CONTROL:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::UNKNOWN_112:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::PROPERTY_PLAQUE:
|
|
||||||
break;
|
|
||||||
case eReplicaComponentType::BUILD_BORDER:
|
case eReplicaComponentType::BUILD_BORDER:
|
||||||
AddComponent<BuildBorderComponent>();
|
AddComponent<BuildBorderComponent>();
|
||||||
break;
|
break;
|
||||||
|
case eReplicaComponentType::SCRIPT:
|
||||||
|
case eReplicaComponentType::DESTROYABLE:
|
||||||
|
case eReplicaComponentType::GHOST:
|
||||||
|
case eReplicaComponentType::SPAWN:
|
||||||
|
case eReplicaComponentType::MODULAR_BUILD:
|
||||||
|
case eReplicaComponentType::BUILD_CONTROLLER:
|
||||||
|
case eReplicaComponentType::BUILD_ACTIVATOR:
|
||||||
|
case eReplicaComponentType::ICON_ONLY:
|
||||||
|
case eReplicaComponentType::PROJECTILE_PHYSICS:
|
||||||
|
case eReplicaComponentType::DROP_EFFECT:
|
||||||
|
case eReplicaComponentType::CHEST:
|
||||||
|
case eReplicaComponentType::BLUEPRINT:
|
||||||
|
case eReplicaComponentType::PLATFORM_BOUNDARY:
|
||||||
|
case eReplicaComponentType::MODULE:
|
||||||
|
case eReplicaComponentType::JETPACKPAD:
|
||||||
|
case eReplicaComponentType::MOVEMENT_AI:
|
||||||
|
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::VEHICLE_PHYSICS:
|
||||||
|
case eReplicaComponentType::PHYSICS_SYSTEM:
|
||||||
|
case eReplicaComponentType::QUICK_BUILD:
|
||||||
|
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::PROXIMITY_MONITOR:
|
||||||
|
case eReplicaComponentType::RACING_SOUND_TRIGGER:
|
||||||
|
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::DONATION_VENDOR:
|
||||||
|
case eReplicaComponentType::COMBAT_MEDIATOR:
|
||||||
|
case eReplicaComponentType::ACHIEVEMENT_VENDOR:
|
||||||
|
case eReplicaComponentType::GATE_RUSH_CONTROL:
|
||||||
|
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::UNKNOWN_115:
|
||||||
break;
|
|
||||||
case eReplicaComponentType::CULLING_PLANE:
|
case eReplicaComponentType::CULLING_PLANE:
|
||||||
break;
|
|
||||||
case eReplicaComponentType::NUMBER_OF_COMPONENTS:
|
case eReplicaComponentType::NUMBER_OF_COMPONENTS:
|
||||||
break;
|
|
||||||
case eReplicaComponentType::INVALID:
|
case eReplicaComponentType::INVALID:
|
||||||
default:
|
default:
|
||||||
Game::logger->Log("Entity", "blah %i %i", componentId, m_TemplateID);
|
Game::logger->Log("Entity", "blah %i %i", componentId, m_TemplateID);
|
||||||
|
@ -57,8 +57,15 @@ public:
|
|||||||
explicit Entity(const LWOOBJID& objectID, EntityInfo info, Entity* parentEntity = nullptr);
|
explicit Entity(const LWOOBJID& objectID, EntityInfo info, Entity* parentEntity = nullptr);
|
||||||
virtual ~Entity();
|
virtual ~Entity();
|
||||||
|
|
||||||
void ApplyComponentWhitelist(TemplateComponents& components);
|
void ApplyComponentWhitelist(TemplateComponents& components) const;
|
||||||
static const std::vector<ComponentWhitelist>& GetComponentWhitelists() { return m_ComponentWhitelists; }
|
static const std::vector<ComponentWhitelist>& GetComponentWhitelists() { return m_ComponentWhitelists; }
|
||||||
|
|
||||||
|
// There are some very very edge cases we need to take care of with what components
|
||||||
|
// are kept and removed. Here is where we take care of those cases.
|
||||||
|
void ApplyComponentBlacklist(TemplateComponents& components) const;
|
||||||
|
|
||||||
|
// For adding and removing components based on LDF keys
|
||||||
|
void ApplyComponentConfig(TemplateComponents& components) const;
|
||||||
virtual void Initialize();
|
virtual void Initialize();
|
||||||
|
|
||||||
bool operator==(const Entity& other) const;
|
bool operator==(const Entity& other) const;
|
||||||
@ -77,8 +84,6 @@ public:
|
|||||||
eGameMasterLevel GetGMLevel() const { return m_GMLevel; }
|
eGameMasterLevel GetGMLevel() const { return m_GMLevel; }
|
||||||
void SetGMLevel(const eGameMasterLevel value);
|
void SetGMLevel(const eGameMasterLevel value);
|
||||||
|
|
||||||
const uint32_t GetCollectibleID() const { return m_CollectibleID; }
|
|
||||||
|
|
||||||
Entity* GetParentEntity() const { return m_ParentEntity; }
|
Entity* GetParentEntity() const { return m_ParentEntity; }
|
||||||
|
|
||||||
const std::vector<std::string>& GetGroups() { return m_Groups; };
|
const std::vector<std::string>& GetGroups() { return m_Groups; };
|
||||||
@ -317,7 +322,6 @@ protected:
|
|||||||
Entity* m_ParentEntity; //For spawners and the like
|
Entity* m_ParentEntity; //For spawners and the like
|
||||||
std::vector<Entity*> m_ChildEntities;
|
std::vector<Entity*> m_ChildEntities;
|
||||||
eGameMasterLevel m_GMLevel;
|
eGameMasterLevel m_GMLevel;
|
||||||
uint32_t m_CollectibleID;
|
|
||||||
std::vector<std::string> m_Groups;
|
std::vector<std::string> m_Groups;
|
||||||
uint16_t m_NetworkID;
|
uint16_t m_NetworkID;
|
||||||
std::vector<std::function<void()>> m_DieCallbacks;
|
std::vector<std::function<void()>> m_DieCallbacks;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
Entity::Initialize() {
|
// Entity::Initialize() {
|
||||||
/**
|
/**
|
||||||
* Setup trigger
|
* Setup trigger
|
||||||
*/
|
*/
|
||||||
@ -33,7 +33,7 @@ Entity::Initialize() {
|
|||||||
* Special case for BBB models. They have components not corresponding to the registry.
|
* Special case for BBB models. They have components not corresponding to the registry.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (m_TemplateID == 14) {
|
// if (m_TemplateID == 14) {
|
||||||
// const auto simplePhysicsComponentID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::SIMPLE_PHYSICS);
|
// const auto simplePhysicsComponentID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::SIMPLE_PHYSICS);
|
||||||
|
|
||||||
// SimplePhysicsComponent* comp = new SimplePhysicsComponent(simplePhysicsComponentID, this);
|
// SimplePhysicsComponent* comp = new SimplePhysicsComponent(simplePhysicsComponentID, this);
|
||||||
@ -52,8 +52,8 @@ Entity::Initialize() {
|
|||||||
destroyableComponent->SetIsSmashable(true);
|
destroyableComponent->SetIsSmashable(true);
|
||||||
// m_Components.insert(std::make_pair(eReplicaComponentType::DESTROYABLE, destroyableComponent));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::DESTROYABLE, destroyableComponent));
|
||||||
// We have all our components.
|
// We have all our components.
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Go through all the components and check if this entity has them.
|
* Go through all the components and check if this entity has them.
|
||||||
@ -142,50 +142,50 @@ Entity::Initialize() {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
// If an entity is marked a phantom, simple physics is made into phantom phyics.
|
// If an entity is marked a phantom, simple physics is made into phantom phyics.
|
||||||
bool markedAsPhantom = GetVar<bool>(u"markedAsPhantom");
|
// bool markedAsPhantom = GetVar<bool>(u"markedAsPhantom");
|
||||||
|
|
||||||
const auto simplePhysicsComponentID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::SIMPLE_PHYSICS);
|
// const auto simplePhysicsComponentID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::SIMPLE_PHYSICS);
|
||||||
if (!markedAsPhantom && simplePhysicsComponentID > 0) {
|
// if (!markedAsPhantom && simplePhysicsComponentID > 0) {
|
||||||
SimplePhysicsComponent* comp = new SimplePhysicsComponent(simplePhysicsComponentID, this);
|
// SimplePhysicsComponent* comp = new SimplePhysicsComponent(simplePhysicsComponentID, this);
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::SIMPLE_PHYSICS, comp));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::SIMPLE_PHYSICS, comp));
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::RIGID_BODY_PHANTOM_PHYSICS) > 0) {
|
// if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::RIGID_BODY_PHANTOM_PHYSICS) > 0) {
|
||||||
RigidbodyPhantomPhysicsComponent* comp = new RigidbodyPhantomPhysicsComponent(this);
|
// RigidbodyPhantomPhysicsComponent* comp = new RigidbodyPhantomPhysicsComponent(this);
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::RIGID_BODY_PHANTOM_PHYSICS, comp));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::RIGID_BODY_PHANTOM_PHYSICS, comp));
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (markedAsPhantom || compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::PHANTOM_PHYSICS) > 0) {
|
// if (markedAsPhantom || compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::PHANTOM_PHYSICS) > 0) {
|
||||||
PhantomPhysicsComponent* phantomPhysics = new PhantomPhysicsComponent(this);
|
// PhantomPhysicsComponent* phantomPhysics = new PhantomPhysicsComponent(this);
|
||||||
phantomPhysics->SetPhysicsEffectActive(false);
|
phantomPhysics->SetPhysicsEffectActive(false);
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::PHANTOM_PHYSICS, phantomPhysics));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::PHANTOM_PHYSICS, phantomPhysics));
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::VEHICLE_PHYSICS) > 0) {
|
// if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::VEHICLE_PHYSICS) > 0) {
|
||||||
VehiclePhysicsComponent* vehiclePhysicsComponent = new VehiclePhysicsComponent(this);
|
// VehiclePhysicsComponent* vehiclePhysicsComponent = new VehiclePhysicsComponent(this);
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::VEHICLE_PHYSICS, vehiclePhysicsComponent));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::VEHICLE_PHYSICS, vehiclePhysicsComponent));
|
||||||
vehiclePhysicsComponent->SetPosition(m_DefaultPosition);
|
vehiclePhysicsComponent->SetPosition(m_DefaultPosition);
|
||||||
vehiclePhysicsComponent->SetRotation(m_DefaultRotation);
|
vehiclePhysicsComponent->SetRotation(m_DefaultRotation);
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::SOUND_TRIGGER, -1) != -1) {
|
// if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::SOUND_TRIGGER, -1) != -1) {
|
||||||
auto* comp = new SoundTriggerComponent(this);
|
// auto* comp = new SoundTriggerComponent(this);
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::SOUND_TRIGGER, comp));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::SOUND_TRIGGER, comp));
|
||||||
}
|
// }
|
||||||
|
|
||||||
//Also check for the collectible id:
|
//Also check for the collectible id:
|
||||||
m_CollectibleID = GetVarAs<int32_t>(u"collectible_id");
|
// m_CollectibleID = GetVarAs<int32_t>(u"collectible_id");
|
||||||
|
|
||||||
if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::BUFF) > 0) {
|
// if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::BUFF) > 0) {
|
||||||
BuffComponent* comp = new BuffComponent(this);
|
// BuffComponent* comp = new BuffComponent(this);
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::BUFF, comp));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::BUFF, comp));
|
||||||
}
|
// }
|
||||||
|
|
||||||
int collectibleComponentID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::COLLECTIBLE);
|
// int collectibleComponentID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::COLLECTIBLE);
|
||||||
|
|
||||||
if (collectibleComponentID > 0) {
|
// if (collectibleComponentID > 0) {
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::COLLECTIBLE, nullptr));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::COLLECTIBLE, nullptr));
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Multiple components require the destructible component.
|
* Multiple components require the destructible component.
|
||||||
@ -277,33 +277,33 @@ Entity::Initialize() {
|
|||||||
m_Components.insert(std::make_pair(eReplicaComponentType::DESTROYABLE, comp));
|
m_Components.insert(std::make_pair(eReplicaComponentType::DESTROYABLE, comp));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::CHARACTER) > 0 || m_Character) {
|
// if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::CHARACTER) > 0 || m_Character) {
|
||||||
// Character Component always has a possessor, level, and forced movement components
|
// Character Component always has a possessor, level, and forced movement components
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::POSSESSOR, new PossessorComponent(this)));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::POSSESSOR, new PossessorComponent(this)));
|
||||||
|
|
||||||
// load in the xml for the level
|
// load in the xml for the level
|
||||||
auto* levelComp = new LevelProgressionComponent(this);
|
// auto* levelComp = new LevelProgressionComponent(this);
|
||||||
levelComp->LoadFromXml(m_Character->GetXMLDoc());
|
// levelComp->LoadFromXml(m_Character->GetXMLDoc());
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::LEVEL_PROGRESSION, levelComp));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::LEVEL_PROGRESSION, levelComp));
|
||||||
|
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::PLAYER_FORCED_MOVEMENT, new PlayerForcedMovementComponent(this)));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::PLAYER_FORCED_MOVEMENT, new PlayerForcedMovementComponent(this)));
|
||||||
|
|
||||||
CharacterComponent* charComp = new CharacterComponent(this, m_Character);
|
// CharacterComponent* charComp = new CharacterComponent(this, m_Character);
|
||||||
charComp->LoadFromXml(m_Character->GetXMLDoc());
|
// charComp->LoadFromXml(m_Character->GetXMLDoc());
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::CHARACTER, charComp));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::CHARACTER, charComp));
|
||||||
}
|
// }
|
||||||
|
|
||||||
if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::INVENTORY) > 0 || m_Character) {
|
// if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::INVENTORY) > 0 || m_Character) {
|
||||||
InventoryComponent* comp = nullptr;
|
// InventoryComponent* comp = nullptr;
|
||||||
if (m_Character) comp = new InventoryComponent(this, m_Character->GetXMLDoc());
|
// if (m_Character) comp = new InventoryComponent(this, m_Character->GetXMLDoc());
|
||||||
else comp = new InventoryComponent(this);
|
// else comp = new InventoryComponent(this);
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::INVENTORY, comp));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::INVENTORY, comp));
|
||||||
}
|
// }
|
||||||
// if this component exists, then we initialize it. it's value is always 0
|
// if this component exists, then we initialize it. it's value is always 0
|
||||||
if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::ROCKET_LAUNCH_LUP, -1) != -1) {
|
// if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::ROCKET_LAUNCH_LUP, -1) != -1) {
|
||||||
auto comp = new RocketLaunchLupComponent(this);
|
// auto comp = new RocketLaunchLupComponent(this);
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::ROCKET_LAUNCH_LUP, comp));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::ROCKET_LAUNCH_LUP, comp));
|
||||||
}
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a bit of a mess
|
* This is a bit of a mess
|
||||||
@ -469,8 +469,8 @@ Entity::Initialize() {
|
|||||||
// m_Components.insert(std::make_pair(eReplicaComponentType::SCRIPTED_ACTIVITY, new ScriptedActivityComponent(this, scriptedActivityID)));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::SCRIPTED_ACTIVITY, new ScriptedActivityComponent(this, scriptedActivityID)));
|
||||||
// }
|
// }
|
||||||
|
|
||||||
if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::MODEL, -1) != -1 && !GetComponent<PetComponent>()) {
|
// if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::MODEL, -1) != -1 && !GetComponent<PetComponent>()) {
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::MODEL, new ModelComponent(this)));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::MODEL, new ModelComponent(this)));
|
||||||
if (m_Components.find(eReplicaComponentType::DESTROYABLE) == m_Components.end()) {
|
if (m_Components.find(eReplicaComponentType::DESTROYABLE) == m_Components.end()) {
|
||||||
auto destroyableComponent = new DestroyableComponent(this);
|
auto destroyableComponent = new DestroyableComponent(this);
|
||||||
destroyableComponent->SetHealth(1);
|
destroyableComponent->SetHealth(1);
|
||||||
@ -479,31 +479,31 @@ Entity::Initialize() {
|
|||||||
destroyableComponent->SetIsSmashable(true);
|
destroyableComponent->SetIsSmashable(true);
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::DESTROYABLE, destroyableComponent));
|
m_Components.insert(std::make_pair(eReplicaComponentType::DESTROYABLE, destroyableComponent));
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
|
||||||
PetComponent* petComponent;
|
// PetComponent* petComponent;
|
||||||
if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::ITEM) > 0 && !TryGetComponent(eReplicaComponentType::PET, petComponent) && !HasComponent(eReplicaComponentType::MODEL)) {
|
// if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::ITEM) > 0 && !TryGetComponent(eReplicaComponentType::PET, petComponent) && !HasComponent(eReplicaComponentType::MODEL)) {
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::ITEM, nullptr));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::ITEM, nullptr));
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Shooting gallery component
|
// Shooting gallery component
|
||||||
// if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::SHOOTING_GALLERY) > 0) {
|
// if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::SHOOTING_GALLERY) > 0) {
|
||||||
// m_Components.insert(std::make_pair(eReplicaComponentType::SHOOTING_GALLERY, new ShootingGalleryComponent(this)));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::SHOOTING_GALLERY, new ShootingGalleryComponent(this)));
|
||||||
// }
|
// }
|
||||||
|
|
||||||
if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::PROPERTY, -1) != -1) {
|
// if (compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::PROPERTY, -1) != -1) {
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::PROPERTY, new PropertyComponent(this)));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::PROPERTY, new PropertyComponent(this)));
|
||||||
}
|
// }
|
||||||
|
|
||||||
const int rocketId = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::ROCKET_LAUNCH);
|
// const int rocketId = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::ROCKET_LAUNCH);
|
||||||
if ((rocketId > 0)) {
|
// if ((rocketId > 0)) {
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::ROCKET_LAUNCH, new RocketLaunchpadControlComponent(this, rocketId)));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::ROCKET_LAUNCH, new RocketLaunchpadControlComponent(this, rocketId)));
|
||||||
}
|
// }
|
||||||
|
|
||||||
const int32_t railComponentID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::RAIL_ACTIVATOR);
|
// const int32_t railComponentID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::RAIL_ACTIVATOR);
|
||||||
if (railComponentID > 0) {
|
// if (railComponentID > 0) {
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::RAIL_ACTIVATOR, new RailActivatorComponent(this, railComponentID)));
|
// m_Components.insert(std::make_pair(eReplicaComponentType::RAIL_ACTIVATOR, new RailActivatorComponent(this, railComponentID)));
|
||||||
}
|
// }
|
||||||
|
|
||||||
int movementAIID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::MOVEMENT_AI);
|
int movementAIID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::MOVEMENT_AI);
|
||||||
if (movementAIID > 0) {
|
if (movementAIID > 0) {
|
||||||
@ -562,14 +562,15 @@ Entity::Initialize() {
|
|||||||
// TODO: create movementAIcomp and set path
|
// TODO: create movementAIcomp and set path
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
} else {
|
|
||||||
// else we still need to setup moving platform if it has a moving platform comp but no path
|
|
||||||
int32_t movingPlatformComponentId = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::MOVING_PLATFORM, -1);
|
|
||||||
if (movingPlatformComponentId >= 0) {
|
|
||||||
MovingPlatformComponent* plat = new MovingPlatformComponent(this, pathName);
|
|
||||||
m_Components.insert(std::make_pair(eReplicaComponentType::MOVING_PLATFORM, plat));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// else {
|
||||||
|
// else we still need to setup moving platform if it has a moving platform comp but no path
|
||||||
|
// int32_t movingPlatformComponentId = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::MOVING_PLATFORM, -1);
|
||||||
|
// if (movingPlatformComponentId >= 0) {
|
||||||
|
// MovingPlatformComponent* plat = new MovingPlatformComponent(this, pathName);
|
||||||
|
// m_Components.insert(std::make_pair(eReplicaComponentType::MOVING_PLATFORM, plat));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
int proximityMonitorID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::PROXIMITY_MONITOR);
|
int proximityMonitorID = compRegistryTable->GetByIDAndType(m_TemplateID, eReplicaComponentType::PROXIMITY_MONITOR);
|
||||||
if (proximityMonitorID > 0) {
|
if (proximityMonitorID > 0) {
|
||||||
@ -637,4 +638,4 @@ no_ghosting:
|
|||||||
controllablePhysicsComponent->SetSpeedMultiplier(levelComponent->GetSpeedBase() / 500.0f);
|
controllablePhysicsComponent->SetSpeedMultiplier(levelComponent->GetSpeedBase() / 500.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
// }
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "eGameMasterLevel.h"
|
#include "eGameMasterLevel.h"
|
||||||
#include "eReplicaComponentType.h"
|
#include "eReplicaComponentType.h"
|
||||||
#include "eReplicaPacketType.h"
|
#include "eReplicaPacketType.h"
|
||||||
|
#include "CollectibleComponent.h"
|
||||||
|
|
||||||
EntityManager* EntityManager::m_Address = nullptr;
|
EntityManager* EntityManager::m_Address = nullptr;
|
||||||
|
|
||||||
@ -518,16 +519,18 @@ void EntityManager::UpdateGhosting(Player* player) {
|
|||||||
entity->SetObservers(entity->GetObservers() - 1);
|
entity->SetObservers(entity->GetObservers() - 1);
|
||||||
} else if (!observed && ghostingDistanceMin > distance) {
|
} else if (!observed && ghostingDistanceMin > distance) {
|
||||||
// Check collectables, don't construct if it has been collected
|
// Check collectables, don't construct if it has been collected
|
||||||
uint32_t collectionId = entity->GetCollectibleID();
|
auto* collectibleComponent = entity->GetComponent<CollectibleComponent>();
|
||||||
|
if (collectibleComponent) {
|
||||||
|
uint32_t collectionId = collectibleComponent->GetCollectibleId();
|
||||||
|
|
||||||
if (collectionId != 0) {
|
if (collectionId != 0) {
|
||||||
collectionId = static_cast<uint32_t>(collectionId) + static_cast<uint32_t>(Game::server->GetZoneID() << 8);
|
collectionId = static_cast<uint32_t>(collectionId) + static_cast<uint32_t>(Game::server->GetZoneID() << 8);
|
||||||
|
|
||||||
if (missionComponent->HasCollectible(collectionId)) {
|
if (missionComponent->HasCollectible(collectionId)) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
player->ObserveEntity(id);
|
player->ObserveEntity(id);
|
||||||
|
|
||||||
ConstructEntity(entity, player->GetSystemAddress());
|
ConstructEntity(entity, player->GetSystemAddress());
|
||||||
|
@ -3,10 +3,12 @@ set(DGAME_DCOMPONENTS_SOURCES "BaseCombatAIComponent.cpp"
|
|||||||
"BuffComponent.cpp"
|
"BuffComponent.cpp"
|
||||||
"BuildBorderComponent.cpp"
|
"BuildBorderComponent.cpp"
|
||||||
"CharacterComponent.cpp"
|
"CharacterComponent.cpp"
|
||||||
|
"CollectibleComponent.cpp"
|
||||||
"Component.cpp"
|
"Component.cpp"
|
||||||
"ControllablePhysicsComponent.cpp"
|
"ControllablePhysicsComponent.cpp"
|
||||||
"DestroyableComponent.cpp"
|
"DestroyableComponent.cpp"
|
||||||
"InventoryComponent.cpp"
|
"InventoryComponent.cpp"
|
||||||
|
"ItemComponent.cpp"
|
||||||
"LevelProgressionComponent.cpp"
|
"LevelProgressionComponent.cpp"
|
||||||
"LUPExhibitComponent.cpp"
|
"LUPExhibitComponent.cpp"
|
||||||
"MinigameControlComponent.cpp"
|
"MinigameControlComponent.cpp"
|
||||||
|
11
dGame/dComponents/CollectibleComponent.cpp
Normal file
11
dGame/dComponents/CollectibleComponent.cpp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#include "CollectibleComponent.h"
|
||||||
|
|
||||||
|
#include "Entity.h"
|
||||||
|
|
||||||
|
CollectibleComponent::CollectibleComponent(Entity* parent) : Component(parent) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CollectibleComponent::Startup() {
|
||||||
|
m_CollectibleId = GetParentEntity()->GetVarAs<int32_t>(u"collectible_id");
|
||||||
|
}
|
22
dGame/dComponents/CollectibleComponent.h
Normal file
22
dGame/dComponents/CollectibleComponent.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#ifndef __COLLECTIBLECOMPONENT__H__
|
||||||
|
#define __COLLECTIBLECOMPONENT__H__
|
||||||
|
|
||||||
|
#include "Component.h"
|
||||||
|
#include "eReplicaComponentType.h"
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
class CollectibleComponent : public Component {
|
||||||
|
public:
|
||||||
|
inline static const eReplicaComponentType ComponentType = eReplicaComponentType::COLLECTIBLE;
|
||||||
|
CollectibleComponent(Entity* parent);
|
||||||
|
|
||||||
|
void Startup() override;
|
||||||
|
|
||||||
|
uint32_t GetCollectibleId() const { return m_CollectibleId; }
|
||||||
|
private:
|
||||||
|
uint32_t m_CollectibleId;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif //!__COLLECTIBLECOMPONENT__H__
|
5
dGame/dComponents/ItemComponent.cpp
Normal file
5
dGame/dComponents/ItemComponent.cpp
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
#include "ItemComponent.h"
|
||||||
|
|
||||||
|
ItemComponent::ItemComponent(Entity* parent) : Component(parent) {
|
||||||
|
|
||||||
|
}
|
15
dGame/dComponents/ItemComponent.h
Normal file
15
dGame/dComponents/ItemComponent.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
#ifndef __ITEMCOMPONENT__H__
|
||||||
|
#define __ITEMCOMPONENT__H__
|
||||||
|
|
||||||
|
#include "Component.h"
|
||||||
|
#include "eReplicaComponentType.h"
|
||||||
|
|
||||||
|
class Entity;
|
||||||
|
|
||||||
|
class ItemComponent : public Component {
|
||||||
|
public:
|
||||||
|
inline static const eReplicaComponentType ComponentType = eReplicaComponentType::ITEM;
|
||||||
|
ItemComponent(Entity* parent);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //!__ITEMCOMPONENT__H__
|
@ -66,6 +66,7 @@
|
|||||||
#include "InventoryComponent.h"
|
#include "InventoryComponent.h"
|
||||||
#include "RocketLaunchpadControlComponent.h"
|
#include "RocketLaunchpadControlComponent.h"
|
||||||
#include "PropertyEntranceComponent.h"
|
#include "PropertyEntranceComponent.h"
|
||||||
|
#include "CollectibleComponent.h"
|
||||||
#include "MovingPlatformComponent.h"
|
#include "MovingPlatformComponent.h"
|
||||||
#include "PetComponent.h"
|
#include "PetComponent.h"
|
||||||
#include "ModuleAssemblyComponent.h"
|
#include "ModuleAssemblyComponent.h"
|
||||||
@ -5264,7 +5265,9 @@ void GameMessages::HandleHasBeenCollected(RakNet::BitStream* inStream, Entity* e
|
|||||||
inStream->Read(playerID);
|
inStream->Read(playerID);
|
||||||
|
|
||||||
Entity* player = EntityManager::Instance()->GetEntity(playerID);
|
Entity* player = EntityManager::Instance()->GetEntity(playerID);
|
||||||
if (!player || !entity || entity->GetCollectibleID() == 0) return;
|
if (!player || !entity) return;
|
||||||
|
auto* collectibleComponent = entity->GetComponent<CollectibleComponent>();
|
||||||
|
if (!collectibleComponent || collectibleComponent->GetCollectibleId() == 0) return;
|
||||||
|
|
||||||
auto* missionComponent = player->GetComponent<MissionComponent>();
|
auto* missionComponent = player->GetComponent<MissionComponent>();
|
||||||
if (missionComponent) {
|
if (missionComponent) {
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "MissionComponent.h"
|
#include "MissionComponent.h"
|
||||||
#include "eMissionTaskType.h"
|
#include "eMissionTaskType.h"
|
||||||
#include "eReplicaComponentType.h"
|
#include "eReplicaComponentType.h"
|
||||||
|
#include "CollectibleComponent.h"
|
||||||
|
|
||||||
MissionTask::MissionTask(Mission* mission, CDMissionTasks* info, uint32_t mask) {
|
MissionTask::MissionTask(Mission* mission, CDMissionTasks* info, uint32_t mask) {
|
||||||
this->info = info;
|
this->info = info;
|
||||||
@ -353,8 +354,9 @@ void MissionTask::Progress(int32_t value, LWOOBJID associate, const std::string&
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
auto* collectibleComponent = entity->GetComponent<CollectibleComponent>();
|
||||||
collectionId = entity->GetCollectibleID();
|
if (!collectibleComponent) break;
|
||||||
|
collectionId = collectibleComponent->GetCollectibleId();
|
||||||
|
|
||||||
collectionId = static_cast<uint32_t>(collectionId) + static_cast<uint32_t>(Game::server->GetZoneID() << 8);
|
collectionId = static_cast<uint32_t>(collectionId) + static_cast<uint32_t>(Game::server->GetZoneID() << 8);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user