mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-05-23 07:12:24 +00:00
RailActivatorComponent pass
This commit is contained in:
parent
49f3d757e5
commit
949a6db4bc
@ -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));
|
||||||
@ -107,7 +105,6 @@ void RailActivatorComponent::OnRailMovementReady(Entity* originator) const {
|
|||||||
GameMessages::SendSetRailMovement(originator->GetObjectID(), m_PathDirection, m_Path, m_PathStart,
|
GameMessages::SendSetRailMovement(originator->GetObjectID(), m_PathDirection, m_Path, m_PathStart,
|
||||||
originator->GetSystemAddress(), m_ComponentID,
|
originator->GetSystemAddress(), m_ComponentID,
|
||||||
m_ParentEntity->GetObjectID());
|
m_ParentEntity->GetObjectID());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RailActivatorComponent::OnCancelRailMovement(Entity* originator) {
|
void RailActivatorComponent::OnCancelRailMovement(Entity* 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));
|
||||||
@ -142,5 +139,4 @@ void RailActivatorComponent::OnCancelRailMovement(Entity* originator) {
|
|||||||
// Remove the player after they've signalled they're done railing
|
// Remove the player after they've signalled they're done railing
|
||||||
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());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user