mirror of
https://github.com/ApfelTeeSaft/PlanetFleet.git
synced 2026-08-26 19:33:38 +00:00
Merge pull request #121 from devZoGok/imp-116-extractor-building
Imp 116 extractor building
This commit is contained in:
@@ -131,7 +131,8 @@ units = {
|
||||
{id = UnitId.TRADE_CENTER, buildable = true},
|
||||
{id = UnitId.LAB, buildable = true},
|
||||
{id = UnitId.POINT_DEFENSE, buildable = true},
|
||||
{id = UnitId.FORT, buildable = false},
|
||||
{id = UnitId.FORT, buildable = true},
|
||||
{id = UnitId.EXTRACTOR, buildable = true},
|
||||
},
|
||||
unitClass = UnitClass.ENGINEER,
|
||||
unitType = UnitType.HOVER,
|
||||
|
||||
@@ -46,4 +46,11 @@ gui = {
|
||||
buttonType = ButtonType.BUILD,
|
||||
trigger = 70,
|
||||
},
|
||||
{
|
||||
pos = {x = res.x - 3 * Size.x, y = res.y - 1 * Size.y, z = 0},
|
||||
size = sz,
|
||||
guiType = GuiType.BUTTON,
|
||||
buttonType = ButtonType.BUILD,
|
||||
trigger = 76,
|
||||
},
|
||||
}
|
||||
|
||||
+4
-1
@@ -435,8 +435,11 @@ namespace battleship{
|
||||
}
|
||||
else if(ufCtr->isPlacingFrames() && !selectingDestOrient){
|
||||
castRayToTerrain();
|
||||
|
||||
GameObjectFrame gmObjFr = ufCtr->getGameObjectFrame(0);
|
||||
|
||||
if(gmObjFr.status == GameObjectFrame::NOT_PLACEABLE)
|
||||
return;
|
||||
|
||||
Unit *buildStruct = GameObjectFactory::createUnit(mainPlayer, gmObjFr.getId(), gmObjFr.getPos(), gmObjFr.getRot());
|
||||
mainPlayer->addUnit(buildStruct);
|
||||
targets[0].unit = buildStruct;
|
||||
|
||||
Vendored
+1
-1
Submodule external/vb01 updated: 0460303610...bd5416328a
@@ -23,6 +23,7 @@ namespace battleship{
|
||||
for(ResourceDeposit *dep : deposits)
|
||||
if(dep->getPos().getDistanceFrom(pos) < .001){
|
||||
deposit = dep;
|
||||
deposit->setExtractor(this);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -33,6 +34,9 @@ namespace battleship{
|
||||
}
|
||||
|
||||
Extractor::~Extractor(){
|
||||
if(deposit)
|
||||
deposit->setExtractor(nullptr);
|
||||
|
||||
removeBar(ammountForeground);
|
||||
removeBar(ammountBackground);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#include <solUtil.h>
|
||||
|
||||
#include "gameObjectFrameController.h"
|
||||
#include "resourceDeposit.h"
|
||||
#include "player.h"
|
||||
#include "game.h"
|
||||
#include "unit.h"
|
||||
#include "util.h"
|
||||
#include "map.h"
|
||||
@@ -49,13 +52,34 @@ namespace battleship{
|
||||
}
|
||||
}
|
||||
|
||||
void GameObjectFrameController::snapToObj(GameObjectFrame &s, GameObject::Type type, int unitId, float maxDist){
|
||||
if(s.getType() == GameObject::Type::UNIT && s.getId() == unitId){
|
||||
s.status = GameObjectFrame::NOT_PLACEABLE;
|
||||
vector<Player*> players = Game::getSingleton()->getPlayers();
|
||||
vector<ResourceDeposit*> deposits;
|
||||
|
||||
for(Player *pl : players){
|
||||
vector<ResourceDeposit*> deps = pl->getResourceDeposits();
|
||||
|
||||
for(ResourceDeposit *dep : deps)
|
||||
deposits.push_back(dep);
|
||||
}
|
||||
|
||||
for(ResourceDeposit *dep : deposits){
|
||||
Vector3 depPos = dep->getPos();
|
||||
|
||||
if(!dep->getExtractor() && s.getPos().getDistanceFrom(depPos) < maxDist){
|
||||
s.status = GameObjectFrame::PLACEABLE;
|
||||
s.placeAt(depPos);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//TODO implement terrain evenness check
|
||||
//TODO factor out literal values
|
||||
void GameObjectFrameController::placeGameObjectFrame(int id, Vector3 newPos, float width, float length){
|
||||
GameObjectFrame &s = gameObjectFrames[id];
|
||||
|
||||
if(!rotatingStructure)
|
||||
s.placeAt(newPos);
|
||||
|
||||
Map *map = Map::getSingleton();
|
||||
MeshData meshData = map->getNodeParent()->getChild(0)->getMesh(0)->getMeshBase();
|
||||
MeshData::Vertex *verts = meshData.vertices;
|
||||
@@ -64,9 +88,9 @@ namespace battleship{
|
||||
float maxUnevenness = .5, unevenness = 0;
|
||||
|
||||
for(int i = 0; i < numVerts; i++){
|
||||
float diffX = fabs(s.getPos().x - verts[i].pos.x);
|
||||
float diffY = fabs(s.getPos().y - verts[i].pos.y);
|
||||
float diffZ = fabs(s.getPos().z - verts[i].pos.z);
|
||||
float diffX = fabs(newPos.x - verts[i].pos.x);
|
||||
float diffY = fabs(newPos.y - verts[i].pos.y);
|
||||
float diffZ = fabs(newPos.z - verts[i].pos.z);
|
||||
|
||||
if(diffX < 0.5 * width && diffZ < 0.5 * length && diffY > unevenness){
|
||||
unevenness = diffY;
|
||||
@@ -76,18 +100,16 @@ namespace battleship{
|
||||
}
|
||||
}
|
||||
|
||||
Vector4 color;
|
||||
GameObjectFrame &s = gameObjectFrames[id];
|
||||
|
||||
if(unevenness > maxUnevenness){
|
||||
color = Vector4(1, 0, 0, 1);
|
||||
s.status = GameObjectFrame::NOT_PLACEABLE;
|
||||
}
|
||||
else{
|
||||
color = Vector4(0, 1, 0, 1);
|
||||
s.status = GameObjectFrame::PLACEABLE;
|
||||
}
|
||||
if(!rotatingStructure)
|
||||
s.placeAt(newPos);
|
||||
|
||||
s.status = (unevenness < maxUnevenness ? GameObjectFrame::PLACEABLE : GameObjectFrame::NOT_PLACEABLE);
|
||||
snapToObj(s, GameObject::Type::UNIT, 20, 3);
|
||||
|
||||
Material *mat = s.getModel()->getMaterial();
|
||||
Vector4 color = (s.status == GameObjectFrame::NOT_PLACEABLE ? Vector4(1, 0, 0, 1) : Vector4(0, 1, 0, 1));
|
||||
mat->setVec4Uniform("diffuseColor", color);
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ namespace battleship{
|
||||
GameObjectFrameController(){}
|
||||
void paintSelect(vb01::Vector3, float, float);
|
||||
void placeGameObjectFrame(int, vb01::Vector3, float, float);
|
||||
void snapToObj(GameObjectFrame&, GameObject::Type, int, float);
|
||||
|
||||
std::vector<GameObjectFrame> gameObjectFrames;
|
||||
vb01::Vector3 paintSelectRowStart, rowDir;
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#include "gameObject.h"
|
||||
|
||||
namespace battleship{
|
||||
class Extractor;
|
||||
|
||||
class ResourceDeposit : public GameObject{
|
||||
public:
|
||||
ResourceDeposit(Player*, int, vb01::Vector3, vb01::Quaternion, int);
|
||||
@@ -11,8 +13,11 @@ namespace battleship{
|
||||
inline int getAmmount(){return ammount;}
|
||||
inline int getInitAmmount(){return initAmmount;}
|
||||
inline void decreaseAmmount(int amnt){ammount -= amnt;}
|
||||
inline Extractor* getExtractor(){return extractor;}
|
||||
inline void setExtractor(Extractor *e){this->extractor = e;}
|
||||
private:
|
||||
int ammount, initAmmount;
|
||||
Extractor *extractor = nullptr;
|
||||
|
||||
void reinit();
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user