mirror of
https://github.com/devZoGok/PlanetFleet.git
synced 2026-08-26 19:43:29 +00:00
CPU AI orients fort towards the closest spawnpoint
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
Player.numStartEngis = 3
|
||||
Player.dirToCenter = nil
|
||||
Player.numDefWarMechs = 5
|
||||
Player.baseDir = nil
|
||||
Player.numDefWarMechs = 1
|
||||
Player.numTaskForceWarMechs = 5
|
||||
Player.numTaskForceTanks = 5
|
||||
Player.numTaskForceArtillery = 5
|
||||
Player.numTaskForceTanks = 1
|
||||
Player.numTaskForceArtillery = 1
|
||||
Player.givenOrder = false
|
||||
|
||||
--TODO use enum-like values instead of literals for order types
|
||||
@@ -20,7 +20,24 @@ function Player:buildFort()
|
||||
self:deselectUnits()
|
||||
self:selectUnits({engineer})
|
||||
|
||||
fort = GameObjectFactory.createUnit(self, UnitId.FORT, self:getSpawnPoint(), Quaternion:new(1, 0, 0, 0), 0)
|
||||
map = Map.getSingleton()
|
||||
sp = map:getSpawnPoint(self:getSpawnPointId())
|
||||
minDistId = nil
|
||||
|
||||
for i = 0, map:getNumSpawnPoints() do
|
||||
if i ~= self:getSpawnPointId() then
|
||||
if minDistId == nil then minDistId = i end
|
||||
|
||||
if map:getSpawnPoint(i):getDistanceFrom(sp) < map:getSpawnPoint(minDistId):getDistanceFrom(sp) then
|
||||
minDistId = i
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
self.baseDir = map:getSpawnPoint(minDistId):subtr(sp):norm()
|
||||
right = (self.baseDir:getAngleBetween(Vector3:new(1, 0, 0)) > 1.57)
|
||||
angle = self.baseDir:getAngleBetween(Vector3:new(0, 0, 1)) * (right and -1 or 1)
|
||||
fort = GameObjectFactory.createUnit(self, UnitId.FORT, sp, Quaternion:new(angle, Vector3:new(0, 1, 0)), 0)
|
||||
self:addUnit(fort)
|
||||
self:issueOrder(1, Vector3:new(0, 0, 0), {Target:new(fort, Vector3:new(0, 0, 0))}, false)
|
||||
|
||||
@@ -35,7 +52,7 @@ function Player:trainEngineers()
|
||||
end
|
||||
|
||||
fort = forts[1]:toFactory()
|
||||
dirToCenter = Vector3:new(0, 0, 0):subtr(fort:getPos()):norm()
|
||||
baseDir = Vector3:new(0, 0, 0):subtr(fort:getPos()):norm()
|
||||
|
||||
while #fort:getQueue() + #self:getUnitsByClass(UnitClass.ENGINEER, -1) < self.numStartEngis do
|
||||
fort:appendToQueue(0)
|
||||
@@ -58,7 +75,7 @@ function Player:buildExtractor()
|
||||
if #deposits == 0 then return false end
|
||||
|
||||
depPos = deposits[1]:getPos()
|
||||
spawnPoint = self:getSpawnPoint()
|
||||
spawnPoint = Map.getSingleton():getSpawnPoint(self:getSpawnPointId())
|
||||
|
||||
for i = 1, #deposits do
|
||||
if deposits[i]:getPos():getDistanceFrom(spawnPoint) < depPos:getDistanceFrom(spawnPoint) then
|
||||
@@ -78,8 +95,8 @@ function Player:startBuilding(buildingId, engiId, angle)
|
||||
self:deselectUnits()
|
||||
self:selectUnits({engineer})
|
||||
|
||||
dirVec = Quaternion:new(angle, Vector3:new(0, 1, 0)):multVec(dirToCenter)
|
||||
refPos = self:getSpawnPoint():add(dirVec:mult(20))
|
||||
dirVec = Quaternion:new(angle, Vector3:new(0, 1, 0)):multVec(baseDir)
|
||||
refPos = Map.getSingleton():getSpawnPoint(self:getSpawnPointId()):add(dirVec:mult(20))
|
||||
building = GameObjectFactory.createUnit(self, buildingId, refPos, Quaternion:new(1, 0, 0, 0), 0)
|
||||
self:addUnit(building)
|
||||
self:issueOrder(1, Vector3:new(0, 0, 0), {Target:new(building, Vector3:new(0, 0, 0))}, false)
|
||||
@@ -218,11 +235,12 @@ function Player:sendTaskforce()
|
||||
end
|
||||
|
||||
players = Game.getSingleton():getPlayers()
|
||||
map = Map.getSingleton()
|
||||
enemySpawnPoint = nil
|
||||
|
||||
for i = 1, #players do
|
||||
if players[i] ~= self then
|
||||
enemySpawnPoint = players[i]:getSpawnPoint()
|
||||
enemySpawnPoint = map:getSpawnPoint(players[i]:getSpawnPointId())
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
+11
-2
@@ -8,6 +8,7 @@
|
||||
|
||||
#include "gameManager.h"
|
||||
#include "gameObjectFactory.h"
|
||||
#include "map.h"
|
||||
#include "game.h"
|
||||
#include "guiAppState.h"
|
||||
#include "defConfigs.h"
|
||||
@@ -82,7 +83,7 @@ namespace battleship{
|
||||
);
|
||||
|
||||
SOL_LUA_STATE.new_usertype<Player>(
|
||||
"Player", sol::constructors<Player(int, int, int, Vector3, bool, Vector3, string)>(),
|
||||
"Player", sol::constructors<Player(int, int, int, Vector3, bool, int, string)>(),
|
||||
"getSelectedUnits", &Player::getSelectedUnits,
|
||||
"addUnit", &Player::addUnit,
|
||||
"getUnit", &Player::getUnit,
|
||||
@@ -91,7 +92,7 @@ namespace battleship{
|
||||
"issueOrder", &Player::issueOrder,
|
||||
"selectUnits", &Player::selectUnits,
|
||||
"deselectUnits", &Player::deselectUnits,
|
||||
"getSpawnPoint", &Player::getSpawnPoint,
|
||||
"getSpawnPointId", &Player::getSpawnPointId,
|
||||
"getUnitsById", &Player::getUnitsById,
|
||||
"getUnitsByClass", &Player::getUnitsByClass
|
||||
);
|
||||
@@ -113,6 +114,7 @@ namespace battleship{
|
||||
"y", &Vector3::y,
|
||||
"z", &Vector3::z,
|
||||
"norm", &Vector3::norm,
|
||||
"getAngleBetween", &Vector3::getAngleBetween,
|
||||
"getDistanceFrom", &Vector3::getDistanceFrom,
|
||||
"add", [](Vector3 v1, Vector3 v2){return v1 + v2;},
|
||||
"subtr", [](Vector3 v1, Vector3 v2){return v1 - v2;},
|
||||
@@ -128,6 +130,13 @@ namespace battleship{
|
||||
"z", &Quaternion::z,
|
||||
"multVec", [](Quaternion q, Vector3 v){return q * v;}
|
||||
);
|
||||
|
||||
SOL_LUA_STATE.new_usertype<Map>(
|
||||
"Map",
|
||||
"getSingleton", &Map::getSingleton,
|
||||
"getSpawnPoint", &Map::getSpawnPoint,
|
||||
"getNumSpawnPoints", &Map::getNumSpawnPoints
|
||||
);
|
||||
}
|
||||
|
||||
void GameManager::initLua(string gameDir){
|
||||
|
||||
+10
-2
@@ -12,13 +12,13 @@ namespace battleship{
|
||||
using namespace gameBase;
|
||||
using namespace std;
|
||||
|
||||
Player::Player(int diff, int fac, int t, Vector3 col, bool cpuPl, Vector3 sp, string n) :
|
||||
Player::Player(int diff, int fac, int t, Vector3 col, bool cpuPl, int sp, string n) :
|
||||
difficulty(diff),
|
||||
faction(fac),
|
||||
team(t),
|
||||
color(col),
|
||||
cpuPlayer(cpuPl),
|
||||
spawnPoint(sp),
|
||||
spawnPointId(sp),
|
||||
name("pl"),
|
||||
refineds(30000),
|
||||
trader(new Trader())
|
||||
@@ -212,4 +212,12 @@ namespace battleship{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Player::build(int id, Vector3 pos, Quaternion rot, bool additionalOrder){
|
||||
/*
|
||||
Unit *buildStruct = GameObjectFactory::createUnit(this, id, pos, rot);
|
||||
addUnit(buildStruct);
|
||||
issueOrder(Order::TYPE::BUILD, vector<Order::Target>{Order::Target(buildStruct)}, additionalOrder);
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace battleship{
|
||||
|
||||
class Player {
|
||||
public:
|
||||
Player(int, int, int, vb01::Vector3, bool = true, vb01::Vector3 = vb01::Vector3::VEC_ZERO, std::string = "");
|
||||
Player(int, int, int, vb01::Vector3, bool = true, int = -1, std::string = "");
|
||||
~Player();
|
||||
void update();
|
||||
void issueOrder(Order::TYPE, vb01::Vector3, std::vector<Order::Target>, bool);
|
||||
@@ -32,6 +32,7 @@ namespace battleship{
|
||||
void addTechnology(int);
|
||||
int getResource(ResourceType);
|
||||
void updateResource(ResourceType, int, bool);
|
||||
void build(int, vb01::Vector3, vb01::Quaternion, bool);
|
||||
inline Trader* getTrader(){return trader;}
|
||||
inline void deselectUnits(){selectedUnits.clear();}
|
||||
inline Unit* getSelectedUnit(int id){return selectedUnits[id];}
|
||||
@@ -52,7 +53,7 @@ namespace battleship{
|
||||
inline int getTeam(){return team;}
|
||||
inline int getNumUnits(){return units.size();}
|
||||
inline int getFaction(){return faction;}
|
||||
inline vb01::Vector3 getSpawnPoint(){return spawnPoint;}
|
||||
inline int getSpawnPointId(){return spawnPointId;}
|
||||
inline bool isCpuPlayer(){return cpuPlayer;}
|
||||
inline int getNumVehiclesBuilt(){return vehiclesBuilt;}
|
||||
inline int getNumVehiclesDestroyed(){return vehiclesDestroyed;}
|
||||
@@ -78,12 +79,13 @@ namespace battleship{
|
||||
int faction, difficulty, team;
|
||||
int vehiclesBuilt = 0, vehiclesDestroyed = 0, vehiclesLost = 0;
|
||||
int structuresBuilt = 0, structuresDestroyed = 0, structuresLost = 0;
|
||||
int spawnPointId = -1;
|
||||
Trader *trader = nullptr;
|
||||
std::string name;
|
||||
std::vector<Unit*> units, selectedUnits;
|
||||
std::vector<Projectile*> projectiles;
|
||||
std::vector<ResourceDeposit*> resourceDeposits;
|
||||
vb01::Vector3 spawnPoint, color;
|
||||
vb01::Vector3 color;
|
||||
vb01::Material *colorMaterial = nullptr;
|
||||
|
||||
int getOrderLineId(Order::TYPE, vb01::Vector3, vb01::Vector3);
|
||||
|
||||
Reference in New Issue
Block a user