mirror of
https://github.com/devZoGok/PlanetFleet.git
synced 2026-08-26 19:43:29 +00:00
factored out majority of ActiveGameState::issueOrder into Player::issueOrder
This commit is contained in:
+2
-60
@@ -266,66 +266,8 @@ namespace battleship{
|
||||
|
||||
//TODO fix ejectable unit selection with multiple transports selected
|
||||
void ActiveGameState::issueOrder(Order::TYPE type, vector<Order::Target> targets, bool addOrder) {
|
||||
Vector3 color;
|
||||
|
||||
switch(type){
|
||||
case Order::TYPE::MOVE:
|
||||
color = Vector3::VEC_J;
|
||||
break;
|
||||
case Order::TYPE::ATTACK:
|
||||
color = Vector3::VEC_I;
|
||||
break;
|
||||
case Order::TYPE::PATROL:
|
||||
case Order::TYPE::GARRISON:
|
||||
case Order::TYPE::EJECT:
|
||||
color = Vector3::VEC_K;
|
||||
break;
|
||||
case Order::TYPE::BUILD:
|
||||
color = Vector3(1, 1, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
if(type == Order::TYPE::EJECT){
|
||||
vector<Unit*> units = mainPlayer->getSelectedUnits();
|
||||
|
||||
for(Unit *u : units){
|
||||
const vector<Unit::GarrisonSlot> &garrisonSlots = u->getGarrisonSlots();
|
||||
|
||||
for(Unit::GarrisonSlot slot : garrisonSlots)
|
||||
if(slot.vehicle)
|
||||
targets.push_back(Order::Target((Unit*)slot.vehicle));
|
||||
}
|
||||
}
|
||||
else if(type != Order::TYPE::PATROL)
|
||||
targets.push_back(Order::Target());
|
||||
|
||||
LineRenderer *lineRenderer = LineRenderer::getSingleton();
|
||||
|
||||
for (int i = 0; i < mainPlayer->getNumSelectedUnits(); ++i) {
|
||||
Unit *u = mainPlayer->getSelectedUnit(i);
|
||||
bool targetingSelf = false;
|
||||
|
||||
for(Order::Target &targ : targets)
|
||||
if(targ.unit && targ.unit == u){
|
||||
targetingSelf = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if(targetingSelf) continue;
|
||||
|
||||
lineRenderer->addLine(u->getPos(), targets[i].pos, color);
|
||||
vector<LineRenderer::Line> lines = lineRenderer->getLines();
|
||||
|
||||
LineRenderer::Line line = lines[lines.size() - 1];
|
||||
Vector3 destDir = (selectingDestOrient ? GameObjectFrameController::getSingleton()->getGameObjectFrame(0).getDirVec() : Vector3::VEC_ZERO);
|
||||
Order order(type, line, targets, destDir);
|
||||
|
||||
if (addOrder)
|
||||
u->addOrder(order);
|
||||
else
|
||||
u->setOrder(order);
|
||||
}
|
||||
|
||||
Vector3 destDir = (selectingDestOrient ? GameObjectFrameController::getSingleton()->getGameObjectFrame(0).getDirVec() : Vector3::VEC_ZERO);
|
||||
mainPlayer->issueOrder(type, destDir, targets, addOrder);
|
||||
this->targets.clear();
|
||||
}
|
||||
|
||||
|
||||
+64
-9
@@ -1,6 +1,8 @@
|
||||
#include <solUtil.h>
|
||||
|
||||
#include "player.h"
|
||||
#include "stateManager.h"
|
||||
#include "activeGameState.h"
|
||||
#include "resourceDeposit.h"
|
||||
|
||||
namespace battleship{
|
||||
@@ -25,19 +27,72 @@ namespace battleship{
|
||||
rd->update();
|
||||
}
|
||||
|
||||
void Player::issueOrder(Order::TYPE type, vector<Order::Target> targets, bool append){
|
||||
Order order;
|
||||
order.type = type;
|
||||
order.targets = targets;
|
||||
int Player::getOrderLineId(Order::TYPE type, Vector3 startPos, Vector3 endPos){
|
||||
Vector3 color;
|
||||
|
||||
switch(type){
|
||||
case Order::TYPE::MOVE:
|
||||
color = Vector3::VEC_J;
|
||||
break;
|
||||
case Order::TYPE::ATTACK:
|
||||
color = Vector3::VEC_I;
|
||||
break;
|
||||
case Order::TYPE::PATROL:
|
||||
case Order::TYPE::GARRISON:
|
||||
case Order::TYPE::EJECT:
|
||||
color = Vector3::VEC_K;
|
||||
break;
|
||||
case Order::TYPE::BUILD:
|
||||
color = Vector3(1, 1, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
LineRenderer *lineRenderer = LineRenderer::getSingleton();
|
||||
lineRenderer->addLine(startPos, endPos, color);
|
||||
vector<LineRenderer::Line> lines = lineRenderer->getLines();
|
||||
|
||||
return lines[lines.size() - 1].id;
|
||||
}
|
||||
|
||||
void Player::issueOrder(Order::TYPE type, Vector3 destDir, vector<Order::Target> targets, bool append){
|
||||
vector<Unit*> selectedUnits = getSelectedUnits();
|
||||
|
||||
for(Unit *u : selectedUnits){
|
||||
if(append)
|
||||
u->addOrder(order);
|
||||
else
|
||||
u->setOrder(order);
|
||||
if(type == Order::TYPE::EJECT){
|
||||
for(Unit *u : selectedUnits){
|
||||
const vector<Unit::GarrisonSlot> &garrisonSlots = u->getGarrisonSlots();
|
||||
|
||||
for(Unit::GarrisonSlot slot : garrisonSlots)
|
||||
if(slot.vehicle)
|
||||
targets.push_back(Order::Target((Unit*)slot.vehicle));
|
||||
}
|
||||
}
|
||||
else if(type != Order::TYPE::PATROL)
|
||||
targets.push_back(Order::Target());
|
||||
|
||||
for (Unit *u : selectedUnits) {
|
||||
bool targetingSelf = false;
|
||||
|
||||
for(Order::Target &targ : targets)
|
||||
if(targ.unit && targ.unit == u){
|
||||
targetingSelf = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if(targetingSelf) continue;
|
||||
|
||||
int lineId = -1;
|
||||
ActiveGameState *activeState = ((ActiveGameState*)GameManager::getSingleton()->getStateManager()->getAppStateByType(AppStateType::ACTIVE_STATE));
|
||||
|
||||
if(activeState && activeState->getPlayer() == this)
|
||||
lineId = getOrderLineId(type, u->getPos(), targets[0].pos);
|
||||
|
||||
Order order(type, targets, destDir, lineId);
|
||||
|
||||
if (append)
|
||||
u->addOrder(order);
|
||||
else
|
||||
u->setOrder(order);
|
||||
}
|
||||
}
|
||||
|
||||
bool Player::isThisPlayersUnit(GameObject *u) {
|
||||
|
||||
@@ -15,7 +15,7 @@ namespace battleship{
|
||||
Player(int, int, int, vb01::Vector3 = vb01::Vector3::VEC_ZERO);
|
||||
~Player();
|
||||
void update();
|
||||
void issueOrder(Order::TYPE, std::vector<Order::Target>, bool);
|
||||
void issueOrder(Order::TYPE, vb01::Vector3, std::vector<Order::Target>, bool);
|
||||
void deselectUnits();
|
||||
void removeUnit(Unit*);
|
||||
void removeUnit(int);
|
||||
@@ -52,6 +52,8 @@ namespace battleship{
|
||||
std::vector<Projectile*> projectiles;
|
||||
std::vector<ResourceDeposit*> resourceDeposits;
|
||||
vb01::Vector3 spawnPoint;
|
||||
|
||||
int getOrderLineId(Order::TYPE, vb01::Vector3, vb01::Vector3);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -136,10 +136,16 @@ namespace battleship{
|
||||
void Unit::update() {
|
||||
GameObject::update();
|
||||
|
||||
if (!orders.empty()){
|
||||
if (!orders.empty() && orders[0].lineId != -1){
|
||||
bool display = (selected && canDisplayOrderLine());
|
||||
LineRenderer *lineRenderer = LineRenderer::getSingleton();
|
||||
lineRenderer->toggleVisibility(orders[0].line.id, selected && canDisplayOrderLine());
|
||||
lineRenderer->changeLineField(orders[0].line.id, pos, LineRenderer::START);
|
||||
lineRenderer->toggleVisibility(orders[0].lineId, display);
|
||||
|
||||
if(display){
|
||||
lineRenderer->changeLineField(orders[0].lineId, pos, LineRenderer::START);
|
||||
Vector3 targPos = (orders[0].targets[0].unit ? orders[0].targets[0].unit->getPos() : orders[0].targets[0].pos);
|
||||
lineRenderer->changeLineField(orders[0].lineId, targPos, LineRenderer::END);
|
||||
}
|
||||
}
|
||||
|
||||
executeOrders();
|
||||
@@ -297,7 +303,9 @@ namespace battleship{
|
||||
}
|
||||
|
||||
void Unit::removeOrder(int id) {
|
||||
LineRenderer::getSingleton()->removeLine(orders[id].line.id);
|
||||
if(orders[id].lineId != -1)
|
||||
LineRenderer::getSingleton()->removeLine(orders[id].lineId);
|
||||
|
||||
orders.erase(orders.begin() + id);
|
||||
}
|
||||
|
||||
|
||||
@@ -38,12 +38,12 @@ namespace battleship{
|
||||
};
|
||||
|
||||
TYPE type;
|
||||
vb01::LineRenderer::Line line;
|
||||
int lineId = -1;
|
||||
vb01::Vector3 direction;
|
||||
std::vector<Target> targets;
|
||||
|
||||
Order(){}
|
||||
Order(TYPE t, vb01::LineRenderer::Line l, std::vector<Target> targ, vb01::Vector3 dir) : type(t), line(l), targets(targ), direction(dir){}
|
||||
Order(TYPE t, std::vector<Target> targ, vb01::Vector3 dir, int lid = -1) : type(t), lineId(lid), targets(targ), direction(dir){}
|
||||
};
|
||||
|
||||
enum class MoveDir {LEFT, UP, FORW};
|
||||
|
||||
Reference in New Issue
Block a user