mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-25 23:17:28 +00:00
refactor: removed hardcoded ag laser logic (#1079)
* Removed hardcoded laser logic * Address feedback
This commit is contained in:
parent
2117a18d62
commit
9708ea28dc
@ -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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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;
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user