mirror of
https://github.com/devZoGok/PlanetFleet.git
synced 2026-08-26 19:43:29 +00:00
units without horizontally rotatable weapons also consider the angle to the target
only selecting cells blocked by other units bugfix for issuing orders to (in)complete buildings
This commit is contained in:
+1
-1
@@ -123,7 +123,7 @@ namespace battleship{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(!u->isVehicle() && ((Structure*)u)->isComplete()){
|
if(!u->isVehicle() && ((Structure*)u)->isComplete()){
|
||||||
structBuilt = false;
|
structBuilt = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-3
@@ -276,7 +276,7 @@ namespace battleship{
|
|||||||
void Vehicle::navigateToTarget(float minDist){
|
void Vehicle::navigateToTarget(float minDist){
|
||||||
if(!pursuingTarget){
|
if(!pursuingTarget){
|
||||||
Vector3 targPos = (orders[0].targets[0].unit ? orders[0].targets[0].unit->getPos() : orders[0].targets[0].pos);
|
Vector3 targPos = (orders[0].targets[0].unit ? orders[0].targets[0].unit->getPos() : orders[0].targets[0].pos);
|
||||||
preparePathpoints(orders[0], targPos);
|
preparePathpoints(orders[0], targPos, true);
|
||||||
pursuingTarget = true;
|
pursuingTarget = true;
|
||||||
|
|
||||||
if(orders[0].type == Order::TYPE::GARRISON) addPathpoint(targPos);
|
if(orders[0].type == Order::TYPE::GARRISON) addPathpoint(targPos);
|
||||||
@@ -340,7 +340,7 @@ namespace battleship{
|
|||||||
if(type != UnitType::HOVER)
|
if(type != UnitType::HOVER)
|
||||||
dest = pf->clampDestToSourceRegion(source, dest);
|
dest = pf->clampDestToSourceRegion(source, dest);
|
||||||
|
|
||||||
if(cells[dest].blockedBy){
|
if(cells[dest].blockedBy && cells[dest].blockedBy != this){
|
||||||
vector<int> surrCellIds = map->getSurroundingCells(cells[dest].pos, 1);
|
vector<int> surrCellIds = map->getSurroundingCells(cells[dest].pos, 1);
|
||||||
int altDest = -1;
|
int altDest = -1;
|
||||||
|
|
||||||
@@ -461,6 +461,7 @@ namespace battleship{
|
|||||||
Order::Target target = order.targets[0];
|
Order::Target target = order.targets[0];
|
||||||
Vector3 targVec = (target.unit ? target.unit->getPos() : target.pos) - pos;
|
Vector3 targVec = (target.unit ? target.unit->getPos() : target.pos) - pos;
|
||||||
float distToTarg = targVec.getLength();
|
float distToTarg = targVec.getLength();
|
||||||
|
float angleToTarg = dirVec.getAngleBetween(targVec.norm());
|
||||||
|
|
||||||
vector<Weapon*> attackWeapons = getWeaponsByOrder(Order::TYPE::ATTACK);
|
vector<Weapon*> attackWeapons = getWeaponsByOrder(Order::TYPE::ATTACK);
|
||||||
Weapon *weapon = attackWeapons[0];
|
Weapon *weapon = attackWeapons[0];
|
||||||
@@ -470,9 +471,18 @@ namespace battleship{
|
|||||||
weapon = w;
|
weapon = w;
|
||||||
|
|
||||||
float minDist = weapon->getMaxRange();
|
float minDist = weapon->getMaxRange();
|
||||||
|
float minAngle = weapon->getMaxFireAngle();
|
||||||
|
|
||||||
if(order.playerAssigned || (!order.playerAssigned && state == Unit::State::CHASE)){
|
if(order.playerAssigned || (!order.playerAssigned && state == Unit::State::CHASE)){
|
||||||
if(distToTarg > minDist)
|
bool horizontal = false;
|
||||||
|
|
||||||
|
for(const Weapon::Component &comp : weapon->getComponents())
|
||||||
|
if(!comp.vertical){
|
||||||
|
horizontal = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(distToTarg > minDist || (!horizontal && angleToTarg > minAngle))
|
||||||
navigateToTarget(.5 * Map::getSingleton()->getCellSize().x);
|
navigateToTarget(.5 * Map::getSingleton()->getCellSize().x);
|
||||||
else
|
else
|
||||||
pursuingTarget = false;
|
pursuingTarget = false;
|
||||||
|
|||||||
@@ -41,11 +41,13 @@ namespace battleship{
|
|||||||
virtual void fire(Order);
|
virtual void fire(Order);
|
||||||
void trackTarget(vb01::Vector3);
|
void trackTarget(vb01::Vector3);
|
||||||
bool canAttackTarget(int, int);
|
bool canAttackTarget(int, int);
|
||||||
|
inline const std::vector<Component>& getComponents(){return components;}
|
||||||
inline int getProjectileId(){return projId;}
|
inline int getProjectileId(){return projId;}
|
||||||
inline int getRateOfFire(){return rateOfFire;}
|
inline int getRateOfFire(){return rateOfFire;}
|
||||||
inline int getDamage(){return damage;}
|
inline int getDamage(){return damage;}
|
||||||
inline int getMinRange(){return minRange;}
|
inline int getMinRange(){return minRange;}
|
||||||
inline int getMaxRange(){return maxRange;}
|
inline int getMaxRange(){return maxRange;}
|
||||||
|
inline float getMaxFireAngle(){return maxFireAngle;}
|
||||||
inline Unit* getUnit(){return unit;}
|
inline Unit* getUnit(){return unit;}
|
||||||
inline Type getType(){return type;}
|
inline Type getType(){return type;}
|
||||||
inline Order::TYPE getOrderType(){return orderType;}
|
inline Order::TYPE getOrderType(){return orderType;}
|
||||||
|
|||||||
Reference in New Issue
Block a user