Add beginnings of a port of semperfi to javascript
parent
58d5bd4161
commit
034c1d7c4b
|
@ -0,0 +1,164 @@
|
||||||
|
// -- definitions
|
||||||
|
|
||||||
|
const oilRes = "OilResource";
|
||||||
|
const resLab = "A0ResearchFacility";
|
||||||
|
const powGen = "A0PowerGenerator";
|
||||||
|
const factory = "A0LightFactory";
|
||||||
|
const derrick = "A0ResourceExtractor";
|
||||||
|
const cybFactory = "A0CyborgFactory";
|
||||||
|
const playerHQ = "A0CommandCentre";
|
||||||
|
const vtolPad = "A0VtolPad";
|
||||||
|
const vtolFactory = "A0VTolFactory1";
|
||||||
|
const sensorTower = "Sys-SensoTower02";
|
||||||
|
|
||||||
|
// --- utility functions
|
||||||
|
|
||||||
|
function dbgPlr(message)
|
||||||
|
{
|
||||||
|
if (me == selectedPlayer)
|
||||||
|
{
|
||||||
|
console(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function dbgObj(obj, message)
|
||||||
|
{
|
||||||
|
if (obj.selected)
|
||||||
|
{
|
||||||
|
console(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If positive, there are oil derricks that unused due to lack of power generators.
|
||||||
|
// If negative, we have too many power generator (usually not a problem in itself).
|
||||||
|
function numUnusedDerricks()
|
||||||
|
{
|
||||||
|
var derricklist = enumStruct(me, derrick);
|
||||||
|
var powgenlist = enumStruct(me, powGen);
|
||||||
|
return derricklist.length - powgenlist.length * 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
function conCanHelp(mydroid, bx, by)
|
||||||
|
{
|
||||||
|
return (mydroid.order != DORDER_HELPBUILD
|
||||||
|
&& mydroid.order != DORDER_BUILD
|
||||||
|
&& mydroid.order != DORDER_LINEBUILD
|
||||||
|
&& droidCanReach(mydroid, bx, by));
|
||||||
|
}
|
||||||
|
|
||||||
|
function grabTrucksAndBuild(range, bstats, maxBlockingTiles)
|
||||||
|
{
|
||||||
|
var closestDroid, bx, by, mydroid, i;
|
||||||
|
var builders = enumDroid(me, DROID_CONSTRUCT);
|
||||||
|
var closestDist = 99999;
|
||||||
|
var droidlist = [];
|
||||||
|
var found = false;
|
||||||
|
|
||||||
|
// Find truck closest to our base
|
||||||
|
for (i = 0; i < builders.length; i++)
|
||||||
|
{
|
||||||
|
mydroid = builders[i];
|
||||||
|
var currDist = distBetweenTwoPoints(startPositions[me].x, startPositions[me].y, mydroid.x, mydroid.y);
|
||||||
|
if (conCanHelp(mydroid, startPositions[me].x, startPositions[me].y))
|
||||||
|
{
|
||||||
|
if (currDist < range)
|
||||||
|
{
|
||||||
|
dbgObj(mydroid, "added to build list");
|
||||||
|
droidlist.push(mydroid);
|
||||||
|
}
|
||||||
|
else if (currDist < closestDist)
|
||||||
|
{
|
||||||
|
dbgObj(mydroid, "is closest to build");
|
||||||
|
closestDroid = mydroid; // record this droid as being closest so far
|
||||||
|
closestDist = currDist;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else dbgObj(mydroid, "cannot help, sorry; order is " + mydroid.order + " and can reach? " + conCanHelp(mydroid, startPositions[me].x, startPositions[me].y));
|
||||||
|
}
|
||||||
|
if (droidlist.length == 0 && closestDroid) droidlist.push(closestDroid);
|
||||||
|
for (i = 0; i < droidlist.length; i++)
|
||||||
|
{
|
||||||
|
mydroid = droidlist[i];
|
||||||
|
var result = pickStructLocation(mydroid, bstats, startPositions[me].x, startPositions[me].y, maxBlockingTiles);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
dbgObj(mydroid, "Construction work");
|
||||||
|
orderDroidStatsLoc(mydroid, DORDER_BUILD, bstats, result.x, result.y);
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dbgObj(mydroid, "Pick struct location failed");
|
||||||
|
debug("Pick struct location failed for droid " + mydroid.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return found;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- custom triggers
|
||||||
|
|
||||||
|
function buildPowerGenerators()
|
||||||
|
{
|
||||||
|
if (isStructureAvailable(powGen, me))
|
||||||
|
{
|
||||||
|
if (!grabTrucksAndBuild(20, powGen, 1))
|
||||||
|
{
|
||||||
|
dbgPlr("Needed power generator but could not build one");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function conDroids()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function doResearch()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildFundamentals()
|
||||||
|
{
|
||||||
|
var needPwGen = false;
|
||||||
|
|
||||||
|
// Do we need power generators?
|
||||||
|
//if ((playerPower(me) < HIGH_POWER * 2 or numFactories() > 1) and numUnusedDerricks() > 0)
|
||||||
|
if (numUnusedDerricks() > 0)
|
||||||
|
{
|
||||||
|
needPwGen = true;
|
||||||
|
dbgPlr("More power generators needed");
|
||||||
|
}
|
||||||
|
if (needPwGen)
|
||||||
|
{
|
||||||
|
queue("buildPowerGenerators");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- game events
|
||||||
|
|
||||||
|
function eventGameInit()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
function eventStructureAttacked(hitStruct, attackerObj)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
function eventStartLevel()
|
||||||
|
{
|
||||||
|
queue("conDroids");
|
||||||
|
queue("doResearch");
|
||||||
|
queue("buildFundamentals");
|
||||||
|
/*
|
||||||
|
if (numFactories() > 1 && isStructureAvailable(defStructs[0], me) && getDifficulty(me) > MEDIUM)
|
||||||
|
{
|
||||||
|
dbgPlr("TRUCK RUSH!");
|
||||||
|
next("truckRush");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
next("buildFundamentals");
|
||||||
|
}*/
|
||||||
|
}
|
Loading…
Reference in New Issue