refactor: removed hardcoded ag laser logic (#1079)

* Removed hardcoded laser logic

* Address feedback
This commit is contained in:
Aaron Kimbrell 2023-05-13 18:21:17 -05:00 committed by GitHub
parent 2117a18d62
commit 9708ea28dc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 65 deletions

View File

@ -2,56 +2,27 @@
#include "PhantomPhysicsComponent.h" #include "PhantomPhysicsComponent.h"
#include "SkillComponent.h" #include "SkillComponent.h"
#include "EntityManager.h"
#include "AgMonumentLaserServer.h"
#include "EntityManager.h"
#include "ePhysicsEffectType.h" #include "ePhysicsEffectType.h"
#include "eReplicaComponentType.h"
void AgLaserSensorServer::OnStartup(Entity* self) { void AgLaserSensorServer::OnStartup(Entity* self) {
self->SetBoolean(u"active", true);
PhantomPhysicsComponent* physComp = static_cast<PhantomPhysicsComponent*>(self->GetComponent(eReplicaComponentType::PHANTOM_PHYSICS)); auto repelForce = self->GetVarAs<float>(u"repelForce");
physComp->SetPhysicsEffectActive(true); if (!repelForce) repelForce = m_RepelForce;
physComp->SetEffectType(ePhysicsEffectType::REPULSE); auto* phantomPhysicsComponent = self->GetComponent<PhantomPhysicsComponent>();
physComp->SetDirectionalMultiplier(static_cast<float>(m_RepelForce)); if (!phantomPhysicsComponent) return;
physComp->SetDirection(NiPoint3::UNIT_Y); phantomPhysicsComponent->SetPhysicsEffectActive(true);
phantomPhysicsComponent->SetEffectType(ePhysicsEffectType::REPULSE);
m_Skill = self->GetComponent<SkillComponent>(); phantomPhysicsComponent->SetDirectionalMultiplier(repelForce);
phantomPhysicsComponent->SetDirection(NiPoint3::UNIT_Y);
} }
void AgLaserSensorServer::OnCollisionPhantom(Entity* self, Entity* target) { void AgLaserSensorServer::OnCollisionPhantom(Entity* self, Entity* target) {
auto active = self->GetVar<bool>(u"active");
if (!m_Skill) return; if (!active) return;
auto skillCastID = self->GetVarAs<float>(u"skillCastID");
if (skillCastID == 0) skillCastID = m_SkillCastID;
Entity* laser = nullptr; auto* skillComponent = self->GetComponent<SkillComponent>();
if (!skillComponent) return;
for (auto script : EntityManager::Instance()->GetEntitiesByComponent(eReplicaComponentType::SCRIPT)) { skillComponent->CastSkill(m_SkillCastID, target->GetObjectID());
AgMonumentLaserServer* hasLaser = (AgMonumentLaserServer*)script;
if (hasLaser) {
const auto source = script->GetPosition();
const auto obj = self->GetObjectID();
if (obj == 76690936093053 && Vector3::DistanceSquared(source, NiPoint3(149.007f, 417.083f, 218.346f)) <= 1.0f) {
laser = script;
break;
} else if (obj == 75866302318824 && Vector3::DistanceSquared(source, NiPoint3(48.6403f, 403.803f, 196.711f)) <= 1.0f) {
laser = script;
break;
} else if (obj == 75866302318822 && Vector3::DistanceSquared(source, NiPoint3(19.2155f, 420.083f, 249.226f)) <= 1.0f) {
laser = script;
break;
} else if (obj == 75866302318823 && Vector3::DistanceSquared(source, NiPoint3(-6.61596f, 404.633f, 274.323f)) <= 1.0f) {
laser = script;
break;
}
}
}
if (laser != nullptr) {
m_Skill->CalculateBehavior(m_SkillCastID, 15714, target->GetObjectID());
}
} }

View File

@ -8,8 +8,7 @@ public:
void OnStartup(Entity* self); void OnStartup(Entity* self);
void OnCollisionPhantom(Entity* self, Entity* target); void OnCollisionPhantom(Entity* self, Entity* target);
private: private:
SkillComponent* m_Skill; float m_RepelForce = -25.0f;
int m_RepelForce = -25;
int m_SkillCastID = 163; int m_SkillCastID = 163;
}; };

View File

@ -1,20 +1,17 @@
#include "AgMonumentLaserServer.h" #include "AgMonumentLaserServer.h"
#include "EntityManager.h"
void AgMonumentLaserServer::OnStartup(Entity* self) { void AgMonumentLaserServer::OnStartup(Entity* self) {
/* auto lasers = EntityManager::Instance()->GetEntitiesInGroup(self->GetVarAsString(u"volGroup"));
self->SetProximityRadius(m_Radius, "MonumentLaser"); for (auto laser : lasers) {
if (laser) laser->SetBoolean(u"active", true);
std::cout << "Monument Laser " << self->GetObjectID() << " is at " << self->GetPosition().GetX() }
<< ","<< self->GetPosition().GetY() << "," << self->GetPosition().GetZ() << std::endl; }
*/
} void AgMonumentLaserServer::OnDie(Entity* self, Entity* killer) {
auto lasers = EntityManager::Instance()->GetEntitiesInGroup(self->GetVarAsString(u"volGroup"));
void AgMonumentLaserServer::OnProximityUpdate(Entity* self, Entity* entering, std::string name, std::string status) { for (auto laser : lasers) {
/* if (laser) laser->SetBoolean(u"active", false);
if (status == "ENTER") {
std::cout << "Monument laser ID: " << self->GetObjectID() << std::endl;
} }
*/
} }

View File

@ -3,8 +3,6 @@
class AgMonumentLaserServer : public CppScripts::Script { class AgMonumentLaserServer : public CppScripts::Script {
public: public:
void OnStartup(Entity* self); void OnStartup(Entity* self) override;
void OnProximityUpdate(Entity* self, Entity* entering, std::string name, std::string status); void OnDie(Entity* self, Entity* killer) override;
private:
float m_Radius = 25.0f;
}; };