removing attack order once the target unit is destroyed

This commit is contained in:
devZoGok
2023-11-05 17:08:29 +02:00
parent 464abc1c00
commit d996ffff3d
5 changed files with 34 additions and 14 deletions
+3 -3
View File
@@ -391,9 +391,9 @@ namespace battleship{
else{
bool canSelect = canSelectHoveredOnGameObj();
if(gameObjHoveredOn && gameObjHoveredOn->getPlayer()->getSide() != mainPlayer->getSide())
issueOrder(Order::TYPE::ATTACK, vector<Order::Target>{Order::Target((Unit*)gameObjHoveredOn, Vector3())}, shiftPressed);
else if(controlPressed){
if(gameObjHoveredOn && (controlPressed || (gameObjHoveredOn->getPlayer()->getSide() != mainPlayer->getSide())))
issueOrder(Order::TYPE::ATTACK, vector<Order::Target>{Order::Target((Unit*)gameObjHoveredOn, gameObjHoveredOn->getPos())}, shiftPressed);
else if(controlPressed && !gameObjHoveredOn){
castRayToTerrain();
issueOrder(Order::TYPE::ATTACK, targets, shiftPressed);
}
+18
View File
@@ -248,6 +248,24 @@ namespace battleship{
}
}
void Unit::attack(Order order){
if(orders[0].targets[0].unit){
bool unitFound = false;
for(Player *pl : Game::getSingleton()->getPlayers()){
vector<Unit*> units = pl->getUnits();
if(find(units.begin(), units.end(), orders[0].targets[0].unit) != units.end()){
unitFound = true;
break;
}
}
if(!unitFound)
removeOrder(0);
}
}
void Unit::setOrder(Order order) {
while (!orders.empty())
removeOrder(0);
+1 -1
View File
@@ -107,7 +107,7 @@ namespace battleship{
virtual void initUnitStats();
virtual void executeOrders();
virtual void eject(Order);
virtual void attack(Order){}
virtual void attack(Order);
virtual void garrison(Order){}
virtual void build(Order){}
virtual void move(Order){}
+11 -9
View File
@@ -189,9 +189,10 @@ namespace battleship{
pursuingTarget = false;
}
void Vehicle::navigateToMovingTarget(float minDist){
void Vehicle::navigateToTarget(float minDist){
if(!pursuingTarget){
preparePathpoints(orders[0].targets[0].unit->getPos());
Vector3 targPos = (orders[0].targets[0].unit ? orders[0].targets[0].unit->getPos() : orders[0].targets[0].pos);
preparePathpoints(targPos);
pursuingTarget = true;
}
@@ -204,7 +205,7 @@ namespace battleship{
float distToGarrisonable = pos.getDistanceFrom(targUnit->getPos());
if(distToGarrisonable > garrisonDist)
navigateToMovingTarget(garrisonDist);
navigateToTarget(garrisonDist);
else
enterGarrisonable();
}
@@ -272,20 +273,21 @@ namespace battleship{
}
void Vehicle::attack(Order order){
Unit::attack(order);
Order::Target target = order.targets[0];
float distToTarg = pos.getDistanceFrom(target.unit ? target.unit->getPos() : target.pos);
float minDist = range;
if(distToTarg > minDist)
navigateToMovingTarget(.5 * Map::getSingleton()->getCellSize().x);
else{
navigateToTarget(.5 * Map::getSingleton()->getCellSize().x);
else
pursuingTarget = false;
if(getTime() - lastFireTime > rateOfFire){
fire();
if(distToTarg <= range && getTime() - lastFireTime > rateOfFire){
fire();
lastFireTime = getTime();
}
lastFireTime = getTime();
}
}
+1 -1
View File
@@ -29,7 +29,7 @@ namespace battleship{
inline int getNextPatrolPointId(int numPoints) {return patrolPointId == numPoints - 1 ? 0 : patrolPointId + 1;}
void enterGarrisonable();
float calculateRotation(vb01::Vector3, float);
void navigateToMovingTarget(float);
void navigateToTarget(float);
void halt();
void turn(float);
void addOrder(Order);