1
0
forked from mirrors/0ad

Array simplifications for random map scripts.

Use for...of loop and remove unneeded array and length variables.
Use fill and concat to remove unneeded loops.
Utilize map to create new arrays instead of reusing the same inside
fill.
Remove an unneeded non-recursive copy in the RandomGroup placer.

This was SVN commit r18876.
This commit is contained in:
elexis
2016-10-27 16:32:24 +00:00
parent 1234227f98
commit 37e5d6a5af
6 changed files with 29 additions and 66 deletions
@@ -108,9 +108,9 @@ for (var i = 0; i < numPlayers; i++)
playerIDs = sortPlayers(playerIDs);
// place players
var playerX = new Array(numPlayers);
var playerZ = new Array(numPlayers);
var playerAngle = new Array(numPlayers);
var playerX = [];
var playerZ = [];
var playerAngle = [];
var startAngle = randFloat(0, TWO_PI);
for (var i = 0; i < numPlayers; i++)
@@ -408,16 +408,13 @@ for (var i = 0; i < sizes.length; i++)
RMS.SetProgress(62);
log("Creating straggler trees...");
// create straggler trees
var trees = [oCarob, oBeech, oLombardyPoplar, oLombardyPoplar, oPine];
for (var t in trees)
{
group = new SimpleGroup([new SimpleObject(trees[t], 1,1, 0,1)], true, clForest);
createObjectGroupsByAreas(group, 0,
for (let tree of [oCarob, oBeech, oLombardyPoplar, oLombardyPoplar, oPine])
createObjectGroupsByAreas(
new SimpleGroup([new SimpleObject(tree, 1,1, 0,1)], true, clForest),
0,
avoidClasses(clWater, 2, clForest, 2, clCity, 3, clBaseResource, 1, clRock, 1, clMetal, 1, clPlayer, 1, clHill, 1),
scaleByMapSize(2, 38), 50, areas
);
}
RMS.SetProgress(66);
log("Create straggler cypresses...");
@@ -75,11 +75,10 @@ for (var i = 0; i < numPlayers; i++)
playerIDs = primeSortPlayers(sortPlayers(playerIDs));
// place players
var playerX = new Array(numPlayers);
var playerZ = new Array(numPlayers);
var playerAngle = new Array(numPlayers);
var playerPos = new Array(numPlayers);
var playerX = [];
var playerZ = [];
var playerAngle = [];
var playerPos = [];
var iop = 0;
for (var i = 0; i < numPlayers; i++)
@@ -462,20 +462,16 @@ createObjectGroups(group, 0,
avoidClasses(clForest, 4, clWater, 1, clPlayer, 40, clStone, 30, clMetal, 10, clCliff, 3),
scaleByMapSize(4,16), 100
);
log("Creating metal mines...");
group = new SimpleGroup([new SimpleObject(oMetalLarge, 1,1, 0,2)], true, clMetal);
createObjectGroups(group, 0,
avoidClasses(clForest, 4, clWater, 1, clPlayer, 40, clMetal, 50, clCliff, 3),
scaleByMapSize(4,16), 100
);
RMS.SetProgress(60);
log("Creating straggler trees...");
// create straggler trees
var trees = [oCarob, oBeech, oLombardyPoplar, oLombardyPoplar, oPine];
for (var t in trees)
for (let tree of [oCarob, oBeech, oLombardyPoplar, oLombardyPoplar, oPine])
{
group = new SimpleGroup([new SimpleObject(trees[t], 1,1, 0,1)], true, clForest);
createObjectGroups(group, 0,
@@ -68,10 +68,9 @@ for (var i = 0; i < numPlayers; i++)
playerIDs = sortPlayers(playerIDs);
// place players
var playerX = new Array(numPlayers);
var playerZ = new Array(numPlayers);
var playerAngle = new Array(numPlayers);
var playerX = [];
var playerZ = [];
var playerAngle = [];
var startAngle = randFloat(0, TWO_PI);
for (var i = 0; i < numPlayers; i++)
@@ -30,12 +30,7 @@ ClumpPlacer.prototype.place = function(constraint)
var retVec = [];
var size = getMapSize();
var gotRet = new Array(size);
for (var i = 0; i < size; ++i)
{
gotRet[i] = new Uint8Array(size); // bool / uint8
}
var gotRet = new Array(size).fill(0).map(p => new Uint8Array(size)); // booleans
var radius = sqrt(this.size / PI);
var perim = 4 * radius * 2 * PI;
var intPerim = ceil(perim);
@@ -153,16 +148,7 @@ ChainPlacer.prototype.place = function(constraint)
var failed = 0, count = 0;
var queueEmpty = (this.q.length ? false : true);
var gotRet = new Array(size);
for (var i = 0; i < size; ++i)
{
gotRet[i] = new Array(size);
for (var j = 0; j < size; ++j)
{
gotRet[i][j] = -1;
}
}
var gotRet = new Array(size).fill(0).map(p => new Array(size).fill(-1));
--size;
this.minRadius = Math.min(this.maxRadius, Math.max(this.minRadius, 1));
@@ -536,28 +522,25 @@ SimpleGroup.prototype.place = function(player, constraint)
var resultObjs = [];
// Try placement of objects
var length = this.elements.length;
for (var i = 0; i < length; i++)
for (let element of this.elements)
{
var objs = this.elements[i].place(this.x, this.z, player, this.avoidSelf, constraint);
var objs = element.place(this.x, this.z, player, this.avoidSelf, constraint);
if (objs === undefined)
return false;
for (var j = 0; j < objs.length; ++j)
resultObjs.push(objs[j]);
resultObjs = resultObjs.concat(objs);
}
// Add placed objects to map
length = resultObjs.length;
for (var i=0; i < length; i++)
for (let obj of resultObjs)
{
if (g_Map.validT(resultObjs[i].position.x / CELL_SIZE, resultObjs[i].position.z / CELL_SIZE, MAP_BORDER_WIDTH))
g_Map.addObject(resultObjs[i]);
if (g_Map.validT(obj.position.x / CELL_SIZE, obj.position.z / CELL_SIZE, MAP_BORDER_WIDTH))
g_Map.addObject(obj);
// Convert position to integer number of tiles
if (this.tileClass !== undefined)
this.tileClass.add(Math.floor(resultObjs[i].position.x/CELL_SIZE), Math.floor(resultObjs[i].position.z/CELL_SIZE));
this.tileClass.add(Math.floor(obj.position.x/CELL_SIZE), Math.floor(obj.position.z/CELL_SIZE));
}
return true;
@@ -586,32 +569,21 @@ function RandomGroup(elements, avoidSelf, tileClass, x, z)
RandomGroup.prototype.place = function(player, constraint)
{
var resultObjs = [];
// Pick one of the object placers at random
var placer = this.elements[randInt(this.elements.length)];
var objs = placer.place(this.x, this.z, player, this.avoidSelf, constraint);
// Failure
if (objs === undefined)
{
var resultObjs = placer.place(this.x, this.z, player, this.avoidSelf, constraint);
if (resultObjs === undefined)
return false;
}
else
{
for (var j = 0; j < objs.length; ++j)
resultObjs.push(objs[j]);
}
// Add placed objects to map
var length = resultObjs.length;
for (var i=0; i < length; i++)
for (let obj of resultObjs)
{
g_Map.addObject(resultObjs[i]);
g_Map.addObject(obj);
// Convert position to integer number of tiles
if (this.tileClass !== undefined)
this.tileClass.add(Math.floor(resultObjs[i].position.x/CELL_SIZE), Math.floor(resultObjs[i].position.z/CELL_SIZE));
this.tileClass.add(Math.floor(obj.position.x/CELL_SIZE), Math.floor(obj.position.z/CELL_SIZE));
}
return true;