Use pickRandom in random map scripts.

Avoids helper index variables, replacing deprecated randInt calls,
making the code shorter and nicer to read.

Patch By: bb
Differential Revision: https://code.wildfiregames.com/D222
Refs #4326 https://code.wildfiregames.com/D121

This was SVN commit r19305.
This commit is contained in:
elexis 2017-03-16 21:30:10 +00:00
parent f1e31cb823
commit ddfc985586
15 changed files with 45 additions and 82 deletions

View File

@ -251,7 +251,7 @@ for (var i = 0; i < numLakes; ++i)
if (!lakeAreaLen)
break;
chosenPoint = lakeAreas[randInt(lakeAreaLen)];
chosenPoint = pickRandom(lakeAreas);
placer = new ChainPlacer(1, floor(scaleByMapSize(4, 8)), floor(scaleByMapSize(40, 180)), 0.7, chosenPoint[0], chosenPoint[1]);
var terrainPainter = new LayeredPainter(

View File

@ -396,24 +396,9 @@ for (var ix = 0; ix < mapSize; ix++)
explorableArea.points.push(pt);
}
if(h > 35)
{
var rnd = randFloat();
if(g_Map.validT(ix, iz) && rnd < 0.1)
{
var i = randInt(aTrees.length);
placeObject(ix+randFloat(), iz+randFloat(), aTrees[i], 0, randFloat(0, TWO_PI));
}
}
else if(h < 15 && hillDecoClass.countMembersInRadius(ix, iz, 1) == 0)
{
var rnd = randFloat();
if(g_Map.validT(ix, iz) && rnd < 0.05)
{
var i = randInt(aTrees.length);
placeObject(ix+randFloat(), iz+randFloat(), aTrees[i], 0, randFloat(0, TWO_PI));
}
}
if (h > 35 && g_Map.validT(ix, iz) && randFloat(0, 1) < 0.1 ||
h < 15 && g_Map.validT(ix, iz) && randFloat(0, 1) < 0.05 && hillDecoClass.countMembersInRadius(ix, iz, 1) == 0)
placeObject(ix + randFloat(0, 1), iz + randFloat(0, 1), pickRandom(aTrees), 0, randFloat(0, 2 * PI));
}
}

View File

@ -281,7 +281,7 @@ function getPointsByHeight(heightRange, avoidPoints = [], avoidClass = undefined
for (let tries = 0; tries < maxTries; ++tries)
{
let point = validVertices[randInt(validVertices.length)];
let point = pickRandom(validVertices);
if (placements.every(p => getDistance(p.x, p.y, point.x, point.y) > max(minDistance, p.dist)))
{
points.push(point);
@ -315,7 +315,7 @@ function placeMine(point, centerEntity)
{
let angle = i * dAngle + randFloat(0, dAngle);
let dist = randFloat(2, 5);
placeObject(point.x + dist * Math.cos(angle), point.y + dist * Math.sin(angle), decorations[randInt(0, decorations.length - 1)], 0, randFloat(0, TWO_PI));
placeObject(point.x + dist * Math.cos(angle), point.y + dist * Math.sin(angle), pickRandom(decorations), 0, randFloat(0, 2 * PI));
}
}
@ -355,19 +355,19 @@ let clGrove = createTileClass();
function placeGrove(point)
{
placeObject(point.x, point.y, ["structures/gaul_outpost", "gaia/flora_tree_oak_new"][randInt(0, 1)], 0, randFloat(0, TWO_PI));
let quantity = randInt(20, 30);
placeObject(point.x, point.y, pickRandom(["structures/gaul_outpost", "gaia/flora_tree_oak_new"]), 0, randFloat(0, 2 * PI));
let quantity = randIntInclusive(20, 30);
let dAngle = TWO_PI / quantity;
for (let i = 0; i < quantity; ++i)
{
let angle = i * dAngle + randFloat(0, dAngle);
let angle = dAngle * randFloat(i, i+1);
let dist = randFloat(2, 5);
let objectList = groveEntities;
if (i % 3 == 0)
objectList = groveActors;
let x = point.x + dist * Math.cos(angle);
let y = point.y + dist * Math.sin(angle);
placeObject(x, y, objectList[randInt(0, objectList.length - 1)], 0, randFloat(0, TWO_PI));
placeObject(x, y, pickRandom(objectList), 0, randFloat(0, 2 * PI));
createArea(new ClumpPlacer(5, 1, 1, 1, floor(x), floor(y)), [new TerrainPainter("temp_grass_plants"), paintClass(clGrove)]);
}
}
@ -388,7 +388,7 @@ function placeCamp(point,
{
let angle = i * dAngle + randFloat(0, dAngle);
let dist = randFloat(1, 3);
placeObject(point.x + dist * Math.cos(angle), point.y + dist * Math.sin(angle), otherEntities[randInt(0, otherEntities.length - 1)], 0, randFloat(0, TWO_PI));
placeObject(point.x + dist * Math.cos(angle), point.y + dist * Math.sin(angle), pickRandom(otherEntities), 0, randFloat(0, 2 * PI));
}
}
@ -418,7 +418,7 @@ function placeStartLocationResources(point, foodEntities = ["gaia/flora_bush_ber
objectList = groveActors;
x = point.x + dist * Math.cos(angle);
y = point.y + dist * Math.sin(angle);
placeObject(x, y, objectList[randInt(0, objectList.length - 1)], 0, randFloat(0, TWO_PI));
placeObject(x, y, pickRandom(objectList), 0, randFloat(0, 2 * PI));
createArea(new ClumpPlacer(5, 1, 1, 1, floor(x), floor(y)), [new TerrainPainter("temp_grass_plants"), paintClass(clGrove)]);
currentAngle += dAngle;
}
@ -441,7 +441,7 @@ function placeStartLocationResources(point, foodEntities = ["gaia/flora_bush_ber
dist = randFloat(10, 15);
x = point.x + dist * Math.cos(angle);
y = point.y + dist * Math.sin(angle);
placeObject(x, y, foodEntities[randInt(0, foodEntities.length - 1)], 0, randFloat(0, TWO_PI));
placeObject(x, y, pickRandom(foodEntities), 0, randFloat(0, 2 * PI));
currentAngle += dAngle;
}
}
@ -708,17 +708,17 @@ for (let h = 0; h < heighLimits.length; ++h)
let y = areas[h][t].y;
let actor = undefined;
let texture = myBiome[h].texture[randInt(myBiome[h].texture.length)];
let texture = pickRandom(myBiome[h].texture);
if (slopeMap[x][y] < 0.4 * (minSlope[h] + maxSlope[h]))
{
if (randFloat() < myBiome[h].actor[1])
actor = myBiome[h].actor[0][randInt(myBiome[h].actor[0].length)];
actor = pickRandom(myBiome[h].actor[0]);
}
else
{
texture = myBiome[h].textureHS[randInt(myBiome[h].textureHS.length)];
texture = pickRandom(myBiome[h].textureHS);
if (randFloat() < myBiome[h].actorHS[1])
actor = myBiome[h].actorHS[0][randInt(myBiome[h].actorHS[0].length)];
actor = pickRandom(myBiome[h].actorHS[0]);
}
g_Map.setTexture(x, y, texture);
if (actor)
@ -747,7 +747,7 @@ for (let i = 0; i < resourceSpots.length; ++i)
if (choice == 1)
placeMine(resourceSpots[i], "gaia/geology_metal_temperate_slabs");
if (choice == 2)
placeCustomFortress(resourceSpots[i].x, resourceSpots[i].y, fences[randInt(0, fences.length - 1)], "other", 0, randFloat(0, TWO_PI));
placeCustomFortress(resourceSpots[i].x, resourceSpots[i].y, pickRandom(fences), "other", 0, randFloat(0, 2 * PI));
if (choice == 3)
placeGrove(resourceSpots[i]);
if (choice == 4)

View File

@ -78,7 +78,7 @@ function getStartLocationsByHeightmap(heightRange, maxTries = 1000, minDistToBor
let startLoc = [];
let minDist = Infinity;
for (let p = 0; p < numberOfPlayers; ++p)
startLoc.push(validStartLoc[randInt(validStartLoc.length)]);
startLoc.push(pickRandom(validStartLoc));
for (let p1 = 0; p1 < numberOfPlayers - 1; ++p1)
{
for (let p2 = p1 + 1; p2 < numberOfPlayers; ++p2)
@ -139,7 +139,6 @@ function distributeEntitiesByHeight(heightRange, avoidPoints, minDistance = 30,
for (let tries = 0; tries < maxTries; ++tries)
{
let checkPointIndex = randInt(validPoints.length);
let checkPoint = validPoints[checkPointIndex];
if (placements.every(p => getDistance(p.x, p.y, checkPoint.x, checkPoint.y) > minDistance))

View File

@ -265,7 +265,7 @@ for (let i = 0; i < numIslands; ++i)
if (!landAreaLen)
break;
chosenPoint = landAreas[randInt(landAreaLen)];
chosenPoint = pickRandom(landAreas);
// create big islands
let placer = new ChainPlacer(floor(scaleByMapSize(4, 8)), floor(scaleByMapSize(8, 14)), floor(scaleByMapSize(25, 60)), 0.07, chosenPoint[0], chosenPoint[1], scaleByMapSize(30, 70));
@ -308,7 +308,7 @@ for (let i = 0; i < numIslands; ++i)
if (!landAreaLen)
break;
chosenPoint = landAreas[randInt(0, landAreaLen)];
chosenPoint = pickRandom(landAreas);
let placer = new ChainPlacer(floor(scaleByMapSize(4, 7)), floor(scaleByMapSize(7, 10)), floor(scaleByMapSize(16, 40)), 0.07, chosenPoint[0], chosenPoint[1], scaleByMapSize(22, 40));
let terrainPainter = new LayeredPainter(

View File

@ -210,7 +210,7 @@ for (var i = 0; i < numIslands; ++i)
if (!landAreaLen)
break;
chosenPoint = landAreas[randInt(landAreaLen)];
chosenPoint = pickRandom(landAreas);
// create big islands
placer = new ChainPlacer(floor(scaleByMapSize(4, 8)), floor(scaleByMapSize(8, 14)), floor(scaleByMapSize(25, 60)), 0.07, chosenPoint[0], chosenPoint[1], scaleByMapSize(30,70));
@ -250,7 +250,7 @@ for (var i = 0; i < numIslands; ++i)
if (!landAreaLen)
break;
chosenPoint = landAreas[randInt(0, landAreaLen)];
chosenPoint = pickRandom(landAreas);
placer = new ChainPlacer(floor(scaleByMapSize(4, 7)), floor(scaleByMapSize(7, 10)), floor(scaleByMapSize(16, 40)), 0.07, chosenPoint[0], chosenPoint[1], scaleByMapSize(22,40));
terrainPainter = new LayeredPainter(

View File

@ -144,9 +144,7 @@ function randomizePlacerCoordinates(placer, halfMapSize)
*/
function randomizePlacerCoordinatesFromAreas(placer, areas)
{
let i = randInt(areas.length);
let pt = areas[i].points[randInt(areas[i].points.length)];
let pt = pickRandom(pickRandom(areas).points);
placer.x = pt.x;
placer.z = pt.z;
}

View File

@ -634,8 +634,7 @@ function createMountain(maxHeight, minRadius, maxRadius, numCircles, constraint,
for (var i = 0; i < numCircles; ++i)
{
var badPoint = false;
var point = edges[randInt(edges.length)];
var cx = point[0], cz = point[1];
var [cx, cz] = pickRandom(edges);
if (queueEmpty)
{

View File

@ -156,9 +156,7 @@ ChainPlacer.prototype.place = function(constraint)
var edges = [[this.x, this.z]];
for (var i = 0; i < this.numCircles; ++i)
{
var point = edges[randInt(edges.length)];
var cx = point[0], cz = point[1];
var [cx, cz] = pickRandom(edges);
if (queueEmpty)
var radius = randInt(this.minRadius, this.maxRadius);
else
@ -475,10 +473,7 @@ RandomObject.prototype.place = function(cx, cz, player, avoidSelf, constraint, m
else
{
var angle = randFloat(this.minAngle, this.maxAngle);
//Randomly select entity
var type = this.types[randInt(this.types.length)];
resultObjs.push(new Entity(type, player, x, z, angle));
resultObjs.push(new Entity(pickRandom(this.types), player, x, z, angle));
break;
}
}
@ -569,10 +564,7 @@ function RandomGroup(elements, avoidSelf, tileClass, x, z)
RandomGroup.prototype.place = function(player, constraint)
{
// Pick one of the object placers at random
var placer = this.elements[randInt(this.elements.length)];
var resultObjs = placer.place(this.x, this.z, player, this.avoidSelf, constraint);
var resultObjs = pickRandom(this.elements).place(this.x, this.z, player, this.avoidSelf, constraint);
if (resultObjs === undefined)
return false;

View File

@ -530,22 +530,18 @@ function setBiome(biomeIndex)
"fruitBush": "gaia/flora_bush_grapes",
"chicken": "gaia/fauna_chicken",
"fish": "gaia/fauna_fish",
"mainHuntableAnimal": pickRandom([
"gaia/fauna_wildebeest",
"gaia/fauna_zebra",
"gaia/fauna_giraffe",
"gaia/fauna_elephant_african_bush"
]),
"secondaryHuntableAnimal": "gaia/fauna_gazelle",
"stoneLarge": "gaia/geology_stonemine_desert_quarry",
"stoneSmall": "gaia/geology_stone_savanna_small",
"metalLarge": "gaia/geology_metal_savanna_slabs"
};
var rts = randInt(1,4);
if (rts == 1)
g_Gaia.mainHuntableAnimal = "gaia/fauna_wildebeest";
else if (rts == 2)
g_Gaia.mainHuntableAnimal = "gaia/fauna_zebra";
else if (rts == 3)
g_Gaia.mainHuntableAnimal = "gaia/fauna_giraffe";
else if (rts == 4)
g_Gaia.mainHuntableAnimal = "gaia/fauna_elephant_african_bush";
g_Decoratives = {
"grass": "actor|props/flora/grass_savanna.xml",
"grassShort": "actor|props/flora/grass_medit_field.xml",

View File

@ -68,5 +68,5 @@ RandomTerrain.prototype = new Terrain();
RandomTerrain.prototype.constructor = RandomTerrain;
RandomTerrain.prototype.placeNew = function(x, z)
{
this.terrains[randInt(this.terrains.length)].placeNew(x, z);
pickRandom(this.terrains).placeNew(x, z);
};

View File

@ -78,7 +78,7 @@ function addElements(elements)
*/
function pickAmount(amounts)
{
var amount = amounts[randInt(amounts.length)];
let amount = pickRandom(amounts);
if (amount in g_Amounts)
return g_Amounts[amount];
@ -91,7 +91,7 @@ function pickAmount(amounts)
*/
function pickMix(mixes)
{
var mix = mixes[randInt(mixes.length)];
let mix = pickRandom(mixes);
if (mix in g_Mixes)
return g_Mixes[mix];
@ -104,7 +104,7 @@ function pickMix(mixes)
*/
function pickSize(sizes)
{
var size = sizes[randInt(sizes.length)];
let size = pickRandom(sizes);
if (size in g_Sizes)
return g_Sizes[size];
@ -310,7 +310,7 @@ function randomStartingPositionPattern()
formats.push("line");
return {
"setup": formats[randInt(formats.length)],
"setup": pickRandom(formats),
"distance": randFloat(0.2, 0.35),
"separation": randFloat(0.05, 0.1)
};

View File

@ -163,7 +163,7 @@ for (var i = 0; i < numPlayers; i++)
var tX = round(fx + tDist * cos(tAngle));
var tZ = round(fz + tDist * sin(tAngle));
group = new SimpleGroup(
[new SimpleObject([oPalm, oTamarix][randInt(0,1)], num, num, 0,5)],
[new SimpleObject(pickRandom([oPalm, oTamarix]), num, num, 0,5)],
false, clBaseResource, tX, tZ
);
createObjectGroup(group, 0, avoidClasses(clBaseResource,2));

View File

@ -1292,17 +1292,13 @@ for (var i = 0; i < numPlayers; i++)
}
if (!placableArea.length)
{
for (var mx = 0; mx < mapSize; ++mx)
for (var mz = 0; mz < mapSize; ++mz)
if (g_Map.getHeight(mx, mz) >= 3 && g_Map.getHeight(mx, mz) <= 3.12)
placableArea.push([mx, mz]);
}
var chosen = floor(Math.random()*placableArea.length);
playerX[i] = placableArea[chosen][0];
playerZ[i] = placableArea[chosen][1];
}
[playerX[i], playerZ[i]] = pickRandom(placableArea);
}
for (var i = 0; i < numPlayers; ++i)
{

View File

@ -1,9 +1,7 @@
Trigger.prototype.SpawnAndAttack = function()
{
var rand = Math.random();
// randomize spawn points
var spawnPoint = rand > 0.5 ? "B" : "C";
var intruders = TriggerHelper.SpawnUnitsFromTriggerPoints(spawnPoint, "units/rome_legionnaire_marian", this.attackSize, 0);
var intruders = TriggerHelper.SpawnUnitsFromTriggerPoints(
pickRandom(["B", "C"]), "units/rome_legionnaire_marian", this.attackSize, 0);
for (var origin in intruders)
{