revamped order execution

This commit is contained in:
devZoGok
2025-06-24 11:28:38 +03:00
parent 41a7e61ab9
commit 7c4d26e08c
4 changed files with 52 additions and 43 deletions
+37 -38
View File
@@ -356,46 +356,44 @@ namespace battleship{
//TODO remove order argument from action methods
void Unit::executeOrders() {
if(condition != Condition::ABLE) return;
if(orders.empty() || condition != Condition::ABLE) return;
if (orders.size() > 0) {
Order order = orders[0];
if(!currOrderStarted) startCurrentOrder();
switch (order.type) {
case Order::TYPE::ATTACK:
attack(order);
break;
case Order::TYPE::BUILD:
build(order);
break;
case Order::TYPE::MOVE:
move(order);
break;
case Order::TYPE::GARRISON:
garrison(order);
break;
case Order::TYPE::EJECT:
eject(order);
break;
case Order::TYPE::PATROL:
patrol(order);
break;
case Order::TYPE::LAUNCH:
launch(order);
break;
break;
case Order::TYPE::LOAD:
case Order::TYPE::SUPPLY:
case Order::TYPE::UNLOAD:
handleResources(order);
break;
case Order::TYPE::HACK:
hack(order);
break;
default:
break;
}
}
switch (orders[0].type) {
case Order::TYPE::ATTACK:
attack(orders[0]);
break;
case Order::TYPE::BUILD:
build(orders[0]);
break;
case Order::TYPE::MOVE:
move(orders[0]);
break;
case Order::TYPE::GARRISON:
garrison(orders[0]);
break;
case Order::TYPE::EJECT:
eject(orders[0]);
break;
case Order::TYPE::PATROL:
patrol(orders[0]);
break;
case Order::TYPE::LAUNCH:
launch(orders[0]);
break;
break;
case Order::TYPE::LOAD:
case Order::TYPE::SUPPLY:
case Order::TYPE::UNLOAD:
handleResources(orders[0]);
break;
case Order::TYPE::HACK:
hack(orders[0]);
break;
default:
break;
}
}
void Unit::eject(Order order){
@@ -547,6 +545,7 @@ namespace battleship{
LineRenderer::getSingleton()->removeLine(orders[id].lineId);
orders.erase(orders.begin() + id);
currOrderStarted = false;
}
void Unit::select() {
+2 -1
View File
@@ -159,7 +159,7 @@ namespace battleship{
sf::SoundBuffer *selectionSfxBuffer;
sf::Sound *selectionSfx = nullptr;
vb01::Node *hpBackgroundNode = nullptr, *hpForegroundNode = nullptr, *losLightNode = nullptr;
bool vehicle;
bool vehicle, currOrderStarted = false;
Condition condition = Condition::ABLE;
protected:
UnitClass unitClass;
@@ -178,6 +178,7 @@ namespace battleship{
void placeAt(vb01::Vector3);
std::vector<Player*> getSelectingPlayers();
void removeOrder(int);
virtual void startCurrentOrder(){currOrderStarted = true;}
virtual bool validateLaunchOrder(){return !getWeaponsByOrder(Order::TYPE::LAUNCH).empty();}
virtual bool validateGarrisonOrder(Order){return false;}
virtual void targetUnitsAutomatically();
+12 -4
View File
@@ -42,6 +42,17 @@ namespace battleship{
pursuingTarget = false;
}
void Vehicle::startCurrentOrder(){
Unit::startCurrentOrder();
if(orders[0].type == Order::TYPE::LAUNCH) return;
removeAllPathpoints();
Vector3 targPos = (orders[0].targets[0].unit ? orders[0].targets[0].unit->getPos() : orders[0].targets[0].pos);
preparePathpoints(orders[0], targPos);
}
bool Vehicle::validateGarrisonOrder(Order order){
Unit *targUnit = order.targets[0].unit;
@@ -157,10 +168,7 @@ namespace battleship{
}
void Vehicle::move(Order order) {
if(pathPoints.empty())
preparePathpoints(order, order.targets[0].pos);
else
navigate(0.5 * Map::getSingleton()->getCellSize().x);
navigate(0.5 * Map::getSingleton()->getCellSize().x);
if(type == UnitType::LAND)
alignToSurface();
+1
View File
@@ -25,6 +25,7 @@ namespace battleship{
vb01::s64 lastBuildTime = 0;
inline int getNextPatrolPointId(int numPoints) {return patrolPointId == numPoints - 1 ? 0 : patrolPointId + 1;}
void startCurrentOrder();
bool validateGarrisonOrder(Order);
void enterGarrisonable();
void halt();