mirror of
https://github.com/devZoGok/PlanetFleet.git
synced 2026-08-26 19:43:29 +00:00
removing attack order once the target unit is destroyed
This commit is contained in:
+3
-3
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user