using initial weapon dirs

This commit is contained in:
devZoGok
2026-01-02 17:24:28 +02:00
parent 86b5bf9731
commit c2f4feaa7d
2 changed files with 16 additions and 3 deletions
+14 -2
View File
@@ -66,6 +66,12 @@ namespace battleship{
components.push_back(Component(node, rotSpeed, angleConstr, vertical));
}
//using the last node to determine a weapon's init direction
Node *node = components[components.size() - 1].node;
Vector3 p0 = unit->getModel()->globalToLocalPosition(node->localToGlobalPosition(Vector3::VEC_ZERO));
Vector3 p1 = unit->getModel()->globalToLocalPosition(node->localToGlobalPosition(Vector3::VEC_K));
initUnitSpaceDir = (p1 - p0).norm();
}
void Weapon::initProjectileData(sol::table weaponTable){
@@ -131,8 +137,14 @@ namespace battleship{
if((Order::TYPE)ordTp == Order::TYPE::ATTACK && withinRange && withinAngle)
fire(unit->getOrder(0));
}
else
trackTarget(unit->getPos() + unit->getDirVec());
else{
Vector3 dir = (
initUnitSpaceDir.x * unit->getLeftVec() +
initUnitSpaceDir.y * unit->getUpVec() +
initUnitSpaceDir.z * unit->getDirVec()
).norm();
trackTarget(unit->getPos() + dir);
}
}
void Weapon::useFx(FxManager::Fx *fx, Vector3 targPos, bool fire){
+2 -1
View File
@@ -23,6 +23,7 @@ namespace battleship{
struct Component{
vb01::Node *node = nullptr;
vb01::Vector3 initUnitSpaceDir;
float rotSpeed, angleConstr;
bool vertical;
@@ -53,7 +54,7 @@ namespace battleship{
vb01::s64 lastFireTime = 0;
FxManager::Fx *fireFx = nullptr;
vb01::Quaternion projRot;
vb01::Vector3 projPos;
vb01::Vector3 projPos, initUnitSpaceDir;
vb01::Node *projPar = nullptr;
static std::string LASER_FLAG;