CPU player AI to build and send a tank task force to the middle of the map

This commit is contained in:
devZoGok
2023-12-21 18:46:42 +02:00
parent 4e59cdcd75
commit 94cb94aa57
8 changed files with 136 additions and 88 deletions
+62 -52
View File
@@ -11,6 +11,10 @@
#include "guiAppState.h"
#include "defConfigs.h"
#include "player.h"
#include "factory.h"
#include "transport.h"
#include "engineer.h"
#include "pointDefense.h"
#include "resourceDeposit.h"
using namespace std;
@@ -27,59 +31,70 @@ namespace battleship{
return gameManager;
}
void GameManager::registerOrderMembers(){
void GameManager::registerMembers(){
sol::state_view SOL_LUA_STATE = generateView();
sol::usertype<Order> orderType = SOL_LUA_STATE.new_usertype<Order>("Order", sol::constructors<Order(), Order(Order::TYPE, vector<Order::Target>, Vector3, int)>());
orderType["type"] = &Order::type;
orderType["direction"] = &Order::direction;
orderType["targets"] = &Order::targets;
sol::usertype<Order::Target> targetType = SOL_LUA_STATE.new_usertype<Order::Target>("Target", sol::constructors<Order::Target(), Order::Target(Unit*, Vector3)>());
targetType["unit"] = &Order::Target::unit;
targetType["pos"] = &Order::Target::pos;
}
SOL_LUA_STATE.new_usertype<Order>(
"Order", sol::constructors<Order(), Order(Order::TYPE, vector<Order::Target>, Vector3, int)>(),
"type", &Order::type,
"direction", &Order::direction,
"targets", &Order::targets
);
void GameManager::registerGameObjectFactoryMembers(){
sol::state_view SOL_LUA_STATE = generateView();
sol::usertype<GameObjectFactory> gmObjFacType = SOL_LUA_STATE.new_usertype<GameObjectFactory>("GameObjectFactory");
gmObjFacType["createUnit"] = &GameObjectFactory::createUnit;
gmObjFacType["createResourceDeposit"] = &GameObjectFactory::createResourceDeposit;
}
SOL_LUA_STATE.new_usertype<Order::Target>(
"Target", sol::constructors<Order::Target(), Order::Target(Unit*, Vector3)>(),
"unit", &Order::Target::unit,
"pos", &Order::Target::pos
);
void GameManager::registerUnitMembers(){
sol::state_view SOL_LUA_STATE = generateView();
sol::usertype<Unit> unitType = SOL_LUA_STATE.new_usertype<Unit>("Unit", sol::constructors<Unit(Player*, int, Vector3, Quaternion)>());
unitType["getUnitClass"] = &Unit::getUnitClass;
}
SOL_LUA_STATE.new_usertype<GameObjectFactory>(
"GameObjectFactory",
"createUnit", &GameObjectFactory::createUnit,
"createResourceDeposit", &GameObjectFactory::createResourceDeposit
);
void GameManager::registerPlayerMembers(){
sol::state_view SOL_LUA_STATE = generateView();
sol::usertype<Player> playerType = SOL_LUA_STATE.new_usertype<Player>("Player", sol::constructors<Player(int, int, int, bool, Vector3)>());
playerType["addUnit"] = &Player::addUnit;
playerType["getUnit"] = &Player::getUnit;
playerType["getNumUnits"] = &Player::getNumberOfUnits;
playerType["issueOrder"] = &Player::issueOrder;
playerType["selectUnits"] = &Player::selectUnits;
playerType["deselectUnits"] = &Player::deselectUnits;
playerType["getSpawnPoint"] = &Player::getSpawnPoint;
playerType["getSelectedUnitsByClass"] = &Player::getSelectedUnitsByClass;
}
SOL_LUA_STATE.new_usertype<Unit>(
"Unit", sol::constructors<Unit(Player*, int, Vector3, Quaternion)>(),
"toggleSelection", &Unit::toggleSelection,
"getUnitClass", &Unit::getUnitClass,
"toEngineer", &Unit::toEngineer,
"toPointDefense", &Unit::toPointDefense,
"toTransport", &Unit::toTransport,
"toFactory", &Unit::toFactory
);
void GameManager::registerVectorMembers(){
sol::state_view SOL_LUA_STATE = generateView();
sol::usertype<Vector3> vec3Type = SOL_LUA_STATE.new_usertype<Vector3>("Vector3", sol::constructors<Vector3(), Vector3(float, float, float)>());
vec3Type["x"] = &Vector3::x;
vec3Type["y"] = &Vector3::y;
vec3Type["z"] = &Vector3::z;
}
SOL_LUA_STATE.new_usertype<Factory>(
"Factory", sol::constructors<Factory(Player*, int, Vector3, Quaternion, int)>(),
"appendToQueue", &Factory::appendToQueue,
"getQueue", &Factory::getQueue
);
void GameManager::registerQuaternionMembers(){
sol::state_view SOL_LUA_STATE = generateView();
sol::usertype<Quaternion> quatType = SOL_LUA_STATE.new_usertype<Quaternion>("Quaternion", sol::constructors<Quaternion(), Quaternion(float, float, float, float)>());
quatType["w"] = &Quaternion::w;
quatType["x"] = &Quaternion::x;
quatType["y"] = &Quaternion::y;
quatType["z"] = &Quaternion::z;
SOL_LUA_STATE.new_usertype<Player>(
"Player", sol::constructors<Player(int, int, int, bool, Vector3)>(),
"addUnit", &Player::addUnit,
"getUnit", &Player::getUnit,
"getNumUnits", &Player::getNumberOfUnits,
"issueOrder", &Player::issueOrder,
"selectUnits", &Player::selectUnits,
"deselectUnits", &Player::deselectUnits,
"getSpawnPoint", &Player::getSpawnPoint,
"getSelectedUnitsByClass", &Player::getSelectedUnitsByClass
);
SOL_LUA_STATE.new_usertype<Vector3>(
"Vector3", sol::constructors<Vector3(), Vector3(float, float, float)>(),
"x", &Vector3::x,
"y", &Vector3::y,
"z", &Vector3::z
);
SOL_LUA_STATE.new_usertype<Quaternion>(
"Quaternion", sol::constructors<Quaternion(), Quaternion(float, float, float, float)>(),
"w", &Quaternion::w,
"x", &Quaternion::x,
"y", &Quaternion::y,
"z", &Quaternion::z
);
}
void GameManager::initLua(string gameDir){
@@ -97,12 +112,7 @@ namespace battleship{
}
void GameManager::start(string gameDir) {
registerVectorMembers();
registerQuaternionMembers();
registerOrderMembers();
registerGameObjectFactoryMembers();
registerUnitMembers();
registerPlayerMembers();
registerMembers();
initLua(gameDir);
Root *root = Root::getSingleton();