mirror of
https://github.com/ApfelTeeSaft/PlanetFleet.git
synced 2026-08-26 19:33:38 +00:00
adjusted building implementation for freezers
This commit is contained in:
+13
-2
@@ -719,7 +719,18 @@ namespace battleship{
|
|||||||
else if(cursorState == CursorState::HACK){
|
else if(cursorState == CursorState::HACK){
|
||||||
if(orderPossible) issueOrder(Order::TYPE::HACK, vector<Order::Target>{Order::Target((Unit*)gameObjHoveredOn)}, shiftPressed);
|
if(orderPossible) issueOrder(Order::TYPE::HACK, vector<Order::Target>{Order::Target((Unit*)gameObjHoveredOn)}, shiftPressed);
|
||||||
}
|
}
|
||||||
else if((selectedUnits[0]->getUnitClass() == UnitClass::ENGINEER || selectedUnits[0]->getUnitClass() == UnitClass::FREEZER) && ufCtr->isPlacingOnSurface()){
|
else if(ufCtr->isPlacingOnSurface()){
|
||||||
|
Order::TYPE type;
|
||||||
|
|
||||||
|
switch(selectedUnits[0]->getUnitClass()){
|
||||||
|
case UnitClass::ENGINEER:
|
||||||
|
case UnitClass::FREEZER:
|
||||||
|
type = Order::TYPE::BUILD;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
targets.clear();
|
targets.clear();
|
||||||
|
|
||||||
for(int i = 0; i < ufCtr->getNumGameObjectFrames(); i++){
|
for(int i = 0; i < ufCtr->getNumGameObjectFrames(); i++){
|
||||||
@@ -728,7 +739,7 @@ namespace battleship{
|
|||||||
if(gmObjFr.status == GameObjectFrame::NOT_PLACEABLE) continue;
|
if(gmObjFr.status == GameObjectFrame::NOT_PLACEABLE) continue;
|
||||||
|
|
||||||
Unit *buildStruct = GameObjectFactory::createUnit(mainPlayer, gmObjFr.getId(), gmObjFr.getPos(), gmObjFr.getRot());
|
Unit *buildStruct = GameObjectFactory::createUnit(mainPlayer, gmObjFr.getId(), gmObjFr.getPos(), gmObjFr.getRot());
|
||||||
issueOrder(Order::TYPE::BUILD, vector<Order::Target>{Order::Target(buildStruct, gmObjFr.getPos())}, shiftPressed);
|
issueOrder(type, vector<Order::Target>{Order::Target(buildStruct, gmObjFr.getPos())}, shiftPressed);
|
||||||
mainPlayer->addUnit(buildStruct);
|
mainPlayer->addUnit(buildStruct);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+22
-1
@@ -1,8 +1,13 @@
|
|||||||
#include "freezer.h"
|
#include "freezer.h"
|
||||||
|
#include "weapon.h"
|
||||||
|
#include "structure.h"
|
||||||
#include "destructable.h"
|
#include "destructable.h"
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
namespace battleship{
|
namespace battleship{
|
||||||
using namespace vb01;
|
using namespace vb01;
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
//TODO rename the class to a more generic name
|
//TODO rename the class to a more generic name
|
||||||
Freezer::Freezer(Player *player, int id, Vector3 pos, Quaternion rot, Unit::State state) : Vehicle(player, id, pos, rot, state){}
|
Freezer::Freezer(Player *player, int id, Vector3 pos, Quaternion rot, Unit::State state) : Vehicle(player, id, pos, rot, state){}
|
||||||
@@ -12,7 +17,23 @@ namespace battleship{
|
|||||||
|
|
||||||
Destructable *target = order.targets[0].unit->getDestructable();
|
Destructable *target = order.targets[0].unit->getDestructable();
|
||||||
|
|
||||||
if(target && target->getFreezeStatus() == 100)
|
if(target && target->getFreezeStatus() >= 100)
|
||||||
|
removeOrder(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Freezer::build(Order order){
|
||||||
|
vector<Weapon*> weapons = getWeaponsByType((int)Weapon::Type::FREEZER);
|
||||||
|
|
||||||
|
if(weapons.empty()) return;
|
||||||
|
|
||||||
|
Unit *targ = (Unit*)order.targets[0].unit;
|
||||||
|
|
||||||
|
for(Weapon *w : weapons)
|
||||||
|
w->trackTarget(targ->getPos());
|
||||||
|
|
||||||
|
Vehicle::build(order);
|
||||||
|
|
||||||
|
if(targ->getUnitClass() == UnitClass::ICE_SHEET && ((Structure*)targ)->getBuildStatus() >= 100)
|
||||||
removeOrder(0);
|
removeOrder(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ namespace battleship{
|
|||||||
Freezer(Player*, int, vb01::Vector3, vb01::Quaternion, Unit::State);
|
Freezer(Player*, int, vb01::Vector3, vb01::Quaternion, Unit::State);
|
||||||
private:
|
private:
|
||||||
void attack(Order);
|
void attack(Order);
|
||||||
|
void build(Order);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -420,6 +420,16 @@ namespace battleship{
|
|||||||
return weaps;
|
return weaps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vector<Weapon*> Unit::getWeaponsByType(int type){
|
||||||
|
vector<Weapon*> weaps;
|
||||||
|
|
||||||
|
for(Weapon *w : weapons)
|
||||||
|
if(w->getType() == (Weapon::Type)type)
|
||||||
|
weaps.push_back(w);
|
||||||
|
|
||||||
|
return weaps;
|
||||||
|
}
|
||||||
|
|
||||||
void Unit::receiveOrder(Order order, bool add) {
|
void Unit::receiveOrder(Order order, bool add) {
|
||||||
if(!validateOrder(order)) return;
|
if(!validateOrder(order)) return;
|
||||||
|
|
||||||
|
|||||||
@@ -196,6 +196,7 @@ namespace battleship{
|
|||||||
virtual void freeze(Order){}
|
virtual void freeze(Order){}
|
||||||
float calculateRotation(vb01::Vector3, float, float);
|
float calculateRotation(vb01::Vector3, float, float);
|
||||||
std::vector<Weapon*> getWeaponsByOrder(Order::TYPE);
|
std::vector<Weapon*> getWeaponsByOrder(Order::TYPE);
|
||||||
|
std::vector<Weapon*> getWeaponsByType(int);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ namespace battleship{
|
|||||||
void addPathpoint(vb01::Vector3);
|
void addPathpoint(vb01::Vector3);
|
||||||
void removePathpoint(int = 0);
|
void removePathpoint(int = 0);
|
||||||
void removeAllPathpoints();
|
void removeAllPathpoints();
|
||||||
void build(Order);
|
|
||||||
void select();
|
void select();
|
||||||
void reinit();
|
void reinit();
|
||||||
protected:
|
protected:
|
||||||
@@ -48,6 +47,7 @@ namespace battleship{
|
|||||||
void navigateToTarget(float);
|
void navigateToTarget(float);
|
||||||
void preparePathpoints(Order&, vb01::Vector3, bool = false);
|
void preparePathpoints(Order&, vb01::Vector3, bool = false);
|
||||||
virtual void attack(Order);
|
virtual void attack(Order);
|
||||||
|
virtual void build(Order);
|
||||||
void garrison(Order);
|
void garrison(Order);
|
||||||
void patrol(Order);
|
void patrol(Order);
|
||||||
virtual void initProperties();
|
virtual void initProperties();
|
||||||
|
|||||||
+6
-1
@@ -9,6 +9,7 @@
|
|||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "fxManager.h"
|
#include "fxManager.h"
|
||||||
#include "destructable.h"
|
#include "destructable.h"
|
||||||
|
#include "structure.h"
|
||||||
#include "gameObjectFactory.h"
|
#include "gameObjectFactory.h"
|
||||||
#include "projectile.h"
|
#include "projectile.h"
|
||||||
|
|
||||||
@@ -212,7 +213,11 @@ namespace battleship{
|
|||||||
|
|
||||||
switch(type){
|
switch(type){
|
||||||
case Type::FREEZER:
|
case Type::FREEZER:
|
||||||
destr->setFreezeStatus(destr->getFreezeStatus() + 1);
|
if(target->getType() == GameObject::Type::UNIT && ((Unit*)target)->getUnitClass() == UnitClass::ICE_SHEET)
|
||||||
|
((Structure*)target)->incrementBuildStatus();
|
||||||
|
else
|
||||||
|
destr->setFreezeStatus(destr->getFreezeStatus() + 1);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
destr->takeDamage(damage);
|
destr->takeDamage(damage);
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ namespace battleship{
|
|||||||
inline int getMinRange(){return minRange;}
|
inline int getMinRange(){return minRange;}
|
||||||
inline int getMaxRange(){return maxRange;}
|
inline int getMaxRange(){return maxRange;}
|
||||||
inline Unit* getUnit(){return unit;}
|
inline Unit* getUnit(){return unit;}
|
||||||
|
inline Type getType(){return type;}
|
||||||
inline Order::TYPE getOrderType(){return orderType;}
|
inline Order::TYPE getOrderType(){return orderType;}
|
||||||
private:
|
private:
|
||||||
Unit *unit = nullptr;
|
Unit *unit = nullptr;
|
||||||
|
|||||||
Reference in New Issue
Block a user