mirror of
https://github.com/ApfelTeeSaft/PlanetFleet.git
synced 2026-08-26 19:33:38 +00:00
implemented CPU player building a land factory
This commit is contained in:
@@ -24,7 +24,10 @@ resourceDeposits = {
|
||||
{id = 0, pos = {x = -5.240124, y = 0.000004, z = 11.061106}, rot = {w = 1.000000, x = 0.000000, y = 0.000000, z = 0.000000}},
|
||||
{id = 0, pos = {x = -5.381660, y = 0.000004, z = 11.083004}, rot = {w = 1.000000, x = 0.000000, y = 0.000000, z = 0.000000}},
|
||||
},
|
||||
numUnits = 0,
|
||||
numUnits = 1,
|
||||
units = {
|
||||
{id = 3, pos = {x = -50.000000, y = 0.000000, z = -50.000000}, rot = {w = 1.000000, x = 0.000000, y = 0.000000, z = 0.000000}},
|
||||
}
|
||||
}
|
||||
},
|
||||
numCells = 289,
|
||||
@@ -323,4 +326,4 @@ skybox = "Skybox1",
|
||||
terrain = {model = "222.xml", albedo = "222.jpg"},
|
||||
waterbodies = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
AbilityType = {SPEED = 0}
|
||||
|
||||
ablilities = {
|
||||
{type = AbilityType.SPEED, ammount = .2, units = {UnitClass.WAR_MECH}}
|
||||
}
|
||||
@@ -1,26 +1,70 @@
|
||||
function Player:foo1()
|
||||
print('foo 1')
|
||||
function Player:selectTaskForce()
|
||||
taskForce = self:getSelectedUnitsByClass(UnitClass.TANK)
|
||||
return #taskForce > 5
|
||||
end
|
||||
|
||||
function Player:issueMoveOrder()
|
||||
return false
|
||||
end
|
||||
|
||||
function Player:selectLandFactory()
|
||||
return false
|
||||
end
|
||||
|
||||
function Player:trainTaskForce()
|
||||
return false
|
||||
end
|
||||
|
||||
function Player:selectLandCell()
|
||||
return true
|
||||
end
|
||||
|
||||
function Player:foo2()
|
||||
print('foo 2')
|
||||
return true
|
||||
function Player:selectEngi()
|
||||
taskForce = self:getSelectedUnitsByClass(UnitClass.ENGINEER)
|
||||
|
||||
if #taskForce == 0 then
|
||||
self:selectUnits({self:getUnit(0)})
|
||||
end
|
||||
|
||||
taskForce = self:getSelectedUnitsByClass(UnitClass.ENGINEER)
|
||||
return #taskForce > 0
|
||||
end
|
||||
|
||||
function Player:foo3()
|
||||
print('foo 3')
|
||||
return true
|
||||
end
|
||||
function Player:issueBuildOrder()
|
||||
for i = 1, self:getNumUnits() do
|
||||
if self:getUnit(i - 1):getUnitClass() == UnitClass.LAND_FACTORY then
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function Player:foo4()
|
||||
print('foo 4')
|
||||
spawnPoint = self:getSpawnPoint()
|
||||
structure = GameObjectFactory.createUnit(self, 8, spawnPoint, Quaternion:new(1, 0, 0, 0), 0)
|
||||
self:addUnit(structure)
|
||||
|
||||
targets = {Target:new(structure, Vector3:new(0, 0, 0))}
|
||||
self:issueOrder(1, Vector3:new(0, 0, 0), targets, false)
|
||||
return true
|
||||
end
|
||||
|
||||
Player.behaviour = {
|
||||
type = BTNodeType.SEQUENCE,
|
||||
type = BTNodeType.SELECTOR,
|
||||
children = {
|
||||
{type = BTNodeType.FUNCTION, func = Player.foo3}
|
||||
{
|
||||
type = BTNodeType.SEQUENCE, children = {
|
||||
{type = BTNodeType.FUNCTION, func = 'selectTaskForce'},
|
||||
{type = BTNodeType.FUNCTION, func = 'issueMoveOrder'},
|
||||
},
|
||||
type = BTNodeType.SEQUENCE, children = {
|
||||
{type = BTNodeType.FUNCTION, func = 'selectLandFactory'},
|
||||
{type = BTNodeType.FUNCTION, func = 'trainTaskForce'}
|
||||
},
|
||||
type = BTNodeType.SEQUENCE, children = {
|
||||
{type = BTNodeType.FUNCTION, func = 'selectLandCell'},
|
||||
{type = BTNodeType.FUNCTION, func = 'selectEngi'},
|
||||
{type = BTNodeType.FUNCTION, func = 'issueBuildOrder'}
|
||||
}
|
||||
}
|
||||
--[[
|
||||
]]--
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
--TYPE = {ATTACK = 0, BUILD = 1, MOVE = 2, GARRISON = 3, EJECT = 4, PATROL = 5, LAUNCH = 6};
|
||||
UnitClass = {WAR_MECH = 0, TANK = 1, ARTILLERY = 2, ENGINEER = 3, TRANSPORT = 4, CARGO_SHIP = 5, CARRIER = 6, SUBMARINE = 7, LAND_FACTORY = 8, NAVAL_FACTORY = 9, MARKET = 10, LAB = 11, POINT_DEFENSE = 12}
|
||||
UnitType = {UNDERWATER = 0, SEA_LEVEL = 1, HOVER = 2, LAND = 3, AIR = 4}
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
technologies = {
|
||||
{
|
||||
name = '',
|
||||
cost = 10,
|
||||
icon = '',
|
||||
description = '',
|
||||
abilities = {0},
|
||||
units = {}
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,12 @@
|
||||
BTNodeType = {SELECTOR = 0, SEQUENCE = 1, FUNCTION = 2}
|
||||
|
||||
function executeBtNode(btNode)
|
||||
function executeBtNode(agent, btNode)
|
||||
for i = 1, #btNode.children do
|
||||
if btNode.children[i].type == BTNodeType.FUNCTION then
|
||||
res = btNode.children[i].func()
|
||||
func = btNode.children[i].func
|
||||
res = agent[func](agent)
|
||||
else
|
||||
res = executeBtNode(btNode.children[i])
|
||||
res = executeBtNode(agent, btNode.children[i])
|
||||
end
|
||||
|
||||
if btNode.type == BTNodeType.SELECTOR then
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
Structure = {}
|
||||
|
||||
function Structure:new{Unit:new()}
|
||||
Structure.behaviour = {
|
||||
type = BTNodeType.SEQUENCE,
|
||||
children = {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
Unit = {}
|
||||
|
||||
function Unit:new(un)
|
||||
unit = un or {}
|
||||
self.__index = index
|
||||
setmetatable(unit, self)
|
||||
return unit
|
||||
end
|
||||
Unit.behaviour = {
|
||||
type = BTNodeType.SEQUENCE,
|
||||
children = {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
Vehicle = {}
|
||||
|
||||
function Vehicle:new{Unit:new()}
|
||||
Vehicle.behaviour = {
|
||||
type = BTNodeType.SEQUENCE,
|
||||
children = {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,11 +34,13 @@ namespace battleship{
|
||||
SOL_LUA_VIEW.script("game.players = {}");
|
||||
|
||||
for(int i = 0; i < players.size(); i++)
|
||||
SOL_LUA_VIEW["game"]["players"][i + 1] = *players[i];
|
||||
SOL_LUA_VIEW["game"]["players"][i + 1] = players[i];
|
||||
|
||||
for(int i = 0; i < players.size(); i++)
|
||||
if(players[i]->isCpuPlayer())
|
||||
SOL_LUA_VIEW.script("executeBtNode(game.players[" + to_string(i + 1) + "].behaviour)");
|
||||
if(players[i]->isCpuPlayer()){
|
||||
string plStr = "game.players[" + to_string(i + 1) + "]";
|
||||
SOL_LUA_VIEW.script("executeBtNode(" + plStr + ", " + plStr + ".behaviour)");
|
||||
}
|
||||
}
|
||||
|
||||
void Game::update(){
|
||||
|
||||
@@ -7,9 +7,11 @@
|
||||
#include <root.h>
|
||||
|
||||
#include "gameManager.h"
|
||||
#include "gameObjectFactory.h"
|
||||
#include "guiAppState.h"
|
||||
#include "defConfigs.h"
|
||||
#include "player.h"
|
||||
#include "resourceDeposit.h"
|
||||
|
||||
using namespace std;
|
||||
using namespace vb01;
|
||||
@@ -25,9 +27,59 @@ namespace battleship{
|
||||
return gameManager;
|
||||
}
|
||||
|
||||
void GameManager::registerOrderMembers(){
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
void GameManager::initLua(string gameDir){
|
||||
@@ -45,6 +97,11 @@ namespace battleship{
|
||||
}
|
||||
|
||||
void GameManager::start(string gameDir) {
|
||||
registerVectorMembers();
|
||||
registerQuaternionMembers();
|
||||
registerOrderMembers();
|
||||
registerGameObjectFactoryMembers();
|
||||
registerUnitMembers();
|
||||
registerPlayerMembers();
|
||||
initLua(gameDir);
|
||||
|
||||
|
||||
@@ -29,6 +29,11 @@ namespace battleship{
|
||||
private:
|
||||
GameManager(){}
|
||||
~GameManager(){}
|
||||
void registerOrderMembers();
|
||||
void registerVectorMembers();
|
||||
void registerQuaternionMembers();
|
||||
void registerGameObjectFactoryMembers();
|
||||
void registerUnitMembers();
|
||||
void registerPlayerMembers();
|
||||
void initLua(std::string);
|
||||
|
||||
|
||||
+3
-2
@@ -33,16 +33,17 @@ namespace battleship{
|
||||
string mapName = wstringToString(mapListbox->getContents()[selectedMap]);
|
||||
Map *map = Map::getSingleton();
|
||||
map->load(mapName);
|
||||
Game::getSingleton()->addPlayer(new Player(0, 0, 0));
|
||||
|
||||
int numPlayers = map->getNumSpawnPoints();
|
||||
|
||||
for(int i = 0; i < numPlayers; i++){
|
||||
Player *player = new Player(0, 0, i + 1, false);
|
||||
Player *player = new Player(0, 0, i);
|
||||
map->loadPlayerGameObjects(player);
|
||||
Game::getSingleton()->addPlayer(player);
|
||||
}
|
||||
|
||||
Game::getSingleton()->addPlayer(new Player(0, 0, 0, false));
|
||||
|
||||
StateManager *stateManager = GameManager::getSingleton()->getStateManager();
|
||||
stateManager->attachAppState(new InGameAppState(difficulties, factions));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user