forked from 0ad/0ad
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:
parent
f1e31cb823
commit
ddfc985586
@ -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(
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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))
|
||||
|
@ -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(
|
||||
|
@ -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(
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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",
|
||||
|
@ -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);
|
||||
};
|
||||
|
@ -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)
|
||||
};
|
||||
|
@ -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));
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user