RailActivatorComponent pass

This commit is contained in:
David Markowitz 2023-07-11 00:23:27 -07:00
parent 49f3d757e5
commit 949a6db4bc
2 changed files with 61 additions and 63 deletions

View File

@ -13,12 +13,21 @@
RailActivatorComponent::RailActivatorComponent(Entity* parent, int32_t componentID) : Component(parent) { RailActivatorComponent::RailActivatorComponent(Entity* parent, int32_t componentID) : Component(parent) {
m_ComponentID = componentID; m_ComponentID = componentID;
const auto tableData = CDClientManager::Instance().GetTable<CDRailActivatorComponentTable>()->GetEntryByID(componentID);; }
m_Path = parent->GetVar<std::u16string>(u"rail_path"); void RailActivatorComponent::LoadConfigData() {
m_PathDirection = parent->GetVar<bool>(u"rail_path_direction"); m_Path = m_ParentEntity->GetVar<std::u16string>(u"rail_path");
m_PathStart = parent->GetVar<uint32_t>(u"rail_path_start"); m_PathDirection = m_ParentEntity->GetVar<bool>(u"rail_path_direction");
m_PathStart = m_ParentEntity->GetVar<uint32_t>(u"rail_path_start");
m_DamageImmune = m_ParentEntity->GetVar<bool>(u"rail_activator_damage_immune");
m_NoAggro = m_ParentEntity->GetVar<bool>(u"rail_no_aggro");
m_NotifyArrived = m_ParentEntity->GetVar<bool>(u"rail_notify_activator_arrived");
m_ShowNameBillboard = m_ParentEntity->GetVar<bool>(u"rail_show_name_billboard");
m_UseDB = m_ParentEntity->GetVar<bool>(u"rail_use_db");
}
void RailActivatorComponent::LoadTemplateData() {
const auto tableData = CDClientManager::Instance().GetTable<CDRailActivatorComponentTable>()->GetEntryByID(m_ComponentID);
m_StartSound = tableData.startSound; m_StartSound = tableData.startSound;
m_loopSound = tableData.loopSound; m_loopSound = tableData.loopSound;
m_StopSound = tableData.stopSound; m_StopSound = tableData.stopSound;
@ -30,25 +39,16 @@ RailActivatorComponent::RailActivatorComponent(Entity* parent, int32_t component
m_StartEffect = tableData.startEffectID; m_StartEffect = tableData.startEffectID;
m_LoopEffect = tableData.loopEffectID; m_LoopEffect = tableData.loopEffectID;
m_StopEffect = tableData.stopEffectID; m_StopEffect = tableData.stopEffectID;
m_DamageImmune = parent->GetVar<bool>(u"rail_activator_damage_immune");
m_NoAggro = parent->GetVar<bool>(u"rail_no_aggro");
m_NotifyArrived = parent->GetVar<bool>(u"rail_notify_activator_arrived");
m_ShowNameBillboard = parent->GetVar<bool>(u"rail_show_name_billboard");
m_UseDB = parent->GetVar<bool>(u"rail_use_db");
m_CameraLocked = tableData.cameraLocked; m_CameraLocked = tableData.cameraLocked;
m_CollisionEnabled = tableData.playerCollision; m_CollisionEnabled = tableData.playerCollision;
} }
RailActivatorComponent::~RailActivatorComponent() = default;
void RailActivatorComponent::OnUse(Entity* originator) { void RailActivatorComponent::OnUse(Entity* originator) {
auto* quickBuildComponent = m_ParentEntity->GetComponent<QuickBuildComponent>(); auto* quickBuildComponent = m_ParentEntity->GetComponent<QuickBuildComponent>();
if (quickBuildComponent != nullptr && quickBuildComponent->GetState() != eRebuildState::COMPLETED) if (quickBuildComponent && quickBuildComponent->GetState() != eRebuildState::COMPLETED) return;
return;
if (quickBuildComponent != nullptr) {
// Don't want it to be destroyed while a player is using it // Don't want it to be destroyed while a player is using it
if (quickBuildComponent) {
quickBuildComponent->SetResetTime(quickBuildComponent->GetResetTime() + 10.0f); quickBuildComponent->SetResetTime(quickBuildComponent->GetResetTime() + 10.0f);
} }
@ -56,8 +56,7 @@ void RailActivatorComponent::OnUse(Entity* originator) {
// Start the initial effects // Start the initial effects
if (!m_StartEffect.second.empty()) { if (!m_StartEffect.second.empty()) {
GameMessages::SendPlayFXEffect(originator->GetObjectID(), m_StartEffect.first, m_StartEffect.second, GameMessages::SendPlayFXEffect(originator->GetObjectID(), m_StartEffect.first, m_StartEffect.second, std::to_string(m_StartEffect.first));
std::to_string(m_StartEffect.first));
} }
float animationLength = 0.5f; float animationLength = 0.5f;
@ -70,9 +69,7 @@ void RailActivatorComponent::OnUse(Entity* originator) {
m_ParentEntity->AddCallbackTimer(animationLength, [originatorID, this]() { m_ParentEntity->AddCallbackTimer(animationLength, [originatorID, this]() {
auto* originator = EntityManager::Instance()->GetEntity(originatorID); auto* originator = EntityManager::Instance()->GetEntity(originatorID);
if (originator == nullptr) { if (!originator) return;
return;
}
GameMessages::SendStartRailMovement(originator->GetObjectID(), m_Path, m_StartSound, GameMessages::SendStartRailMovement(originator->GetObjectID(), m_Path, m_StartSound,
m_loopSound, m_StopSound, originator->GetSystemAddress(), m_loopSound, m_StopSound, originator->GetSystemAddress(),
@ -88,7 +85,8 @@ void RailActivatorComponent::OnRailMovementReady(Entity* originator) const {
true, true, true, true, true, true, true true, true, true, true, true, true, true
); );
if (std::find(m_EntitiesOnRail.begin(), m_EntitiesOnRail.end(), originator->GetObjectID()) != m_EntitiesOnRail.end()) { if (std::find(m_EntitiesOnRail.begin(), m_EntitiesOnRail.end(), originator->GetObjectID()) == m_EntitiesOnRail.end()) return;
// Stop the initial effects // Stop the initial effects
if (!m_StartEffect.second.empty()) { if (!m_StartEffect.second.empty()) {
GameMessages::SendStopFXEffect(originator, false, std::to_string(m_StartEffect.first)); GameMessages::SendStopFXEffect(originator, false, std::to_string(m_StartEffect.first));
@ -108,7 +106,6 @@ void RailActivatorComponent::OnRailMovementReady(Entity* originator) const {
originator->GetSystemAddress(), m_ComponentID, originator->GetSystemAddress(), m_ComponentID,
m_ParentEntity->GetObjectID()); m_ParentEntity->GetObjectID());
} }
}
void RailActivatorComponent::OnCancelRailMovement(Entity* originator) { void RailActivatorComponent::OnCancelRailMovement(Entity* originator) {
// Remove the stun from the originator // Remove the stun from the originator
@ -118,12 +115,12 @@ void RailActivatorComponent::OnCancelRailMovement(Entity* originator) {
auto* quickBuildComponent = m_ParentEntity->GetComponent<QuickBuildComponent>(); auto* quickBuildComponent = m_ParentEntity->GetComponent<QuickBuildComponent>();
if (quickBuildComponent != nullptr) {
// Set back reset time // Set back reset time
if (quickBuildComponent) {
quickBuildComponent->SetResetTime(quickBuildComponent->GetResetTime() - 10.0f); quickBuildComponent->SetResetTime(quickBuildComponent->GetResetTime() - 10.0f);
} }
if (std::find(m_EntitiesOnRail.begin(), m_EntitiesOnRail.end(), originator->GetObjectID()) != m_EntitiesOnRail.end()) { if (std::find(m_EntitiesOnRail.begin(), m_EntitiesOnRail.end(), originator->GetObjectID()) == m_EntitiesOnRail.end()) return;
// Stop the looping effects // Stop the looping effects
if (!m_LoopEffect.second.empty()) { if (!m_LoopEffect.second.empty()) {
GameMessages::SendStopFXEffect(originator, false, std::to_string(m_LoopEffect.first)); GameMessages::SendStopFXEffect(originator, false, std::to_string(m_LoopEffect.first));
@ -143,4 +140,3 @@ void RailActivatorComponent::OnCancelRailMovement(Entity* originator) {
m_EntitiesOnRail.erase(std::remove(m_EntitiesOnRail.begin(), m_EntitiesOnRail.end(), m_EntitiesOnRail.erase(std::remove(m_EntitiesOnRail.begin(), m_EntitiesOnRail.end(),
originator->GetObjectID()), m_EntitiesOnRail.end()); originator->GetObjectID()), m_EntitiesOnRail.end());
} }
}

View File

@ -12,11 +12,13 @@
*/ */
class RailActivatorComponent final : public Component { class RailActivatorComponent final : public Component {
public: public:
explicit RailActivatorComponent(Entity* parent, int32_t componentID);
~RailActivatorComponent() override;
inline static const eReplicaComponentType ComponentType = eReplicaComponentType::RAIL_ACTIVATOR; inline static const eReplicaComponentType ComponentType = eReplicaComponentType::RAIL_ACTIVATOR;
explicit RailActivatorComponent(Entity* parent, int32_t componentID);
void LoadConfigData() override;
void LoadTemplateData() override;
/** /**
* Handles the OnUse event from some entity, initiates the rail movement * Handles the OnUse event from some entity, initiates the rail movement
* @param originator the entity that triggered the event * @param originator the entity that triggered the event