forked from 0ad/0ad
Move createBasesByPattern() functionality from rmgen2 to rmgen-common
This means deprecate `createBasesByPattern` in rmgen2 and add new function `playerPlacementByPattern` in common Differential revision: https://code.wildfiregames.com/D5194 This was SVN commit r27943.
This commit is contained in:
parent
818ed56c0e
commit
56f15f0869
@ -18,18 +18,17 @@ createArea(
|
||||
|
||||
Engine.SetProgress(10);
|
||||
|
||||
var playerIDs;
|
||||
var playerPosition;
|
||||
if (!isNomad())
|
||||
{
|
||||
let pattern = g_MapSettings.TeamPlacement || pickRandom(Object.keys(g_PlayerbaseTypes));
|
||||
|
||||
[playerIDs, playerPosition] =
|
||||
createBasesByPattern(
|
||||
pattern,
|
||||
g_PlayerbaseTypes[pattern].distance,
|
||||
g_PlayerbaseTypes[pattern].groupedDistance,
|
||||
randomAngle());
|
||||
var [playerIDs, playerPosition] =
|
||||
createBases(
|
||||
...playerPlacementByPattern(
|
||||
g_MapSettings.TeamPlacement,
|
||||
fractionToTiles(randFloat(0.2, 0.35)),
|
||||
fractionToTiles(randFloat(0.08, 0.1)),
|
||||
randomAngle(),
|
||||
undefined),
|
||||
undefined);
|
||||
|
||||
markPlayerAvoidanceArea(playerPosition, defaultPlayerBaseRadius());
|
||||
}
|
||||
|
@ -17,7 +17,14 @@ Engine.SetProgress(10);
|
||||
|
||||
const teamsArray = getTeamsArray();
|
||||
const startAngle = randomAngle();
|
||||
createBasesByPattern("stronghold", fractionToTiles(0.37), fractionToTiles(0.04), startAngle);
|
||||
createBases(
|
||||
...playerPlacementByPattern(
|
||||
"stronghold",
|
||||
fractionToTiles(0.37),
|
||||
fractionToTiles(0.04),
|
||||
startAngle,
|
||||
undefined),
|
||||
undefined);
|
||||
Engine.SetProgress(20);
|
||||
|
||||
// Change the starting angle and add the players again
|
||||
@ -29,7 +36,14 @@ if (teamsArray.length == 2)
|
||||
if (teamsArray.length == 4)
|
||||
rotation = 5/4 * Math.PI;
|
||||
|
||||
createBasesByPattern("stronghold", fractionToTiles(0.15), fractionToTiles(0.04), startAngle + rotation);
|
||||
createBases(
|
||||
...playerPlacementByPattern(
|
||||
"stronghold",
|
||||
fractionToTiles(0.15),
|
||||
fractionToTiles(0.04),
|
||||
startAngle + rotation,
|
||||
undefined),
|
||||
undefined);
|
||||
Engine.SetProgress(40);
|
||||
|
||||
addElements(shuffleArray([
|
||||
|
@ -21,12 +21,15 @@ Engine.SetProgress(20);
|
||||
|
||||
if (!isNomad())
|
||||
{
|
||||
let pattern = g_MapSettings.TeamPlacement || pickRandom(Object.keys(g_PlayerbaseTypes));
|
||||
createBasesByPattern(
|
||||
let pattern = g_MapSettings.TeamPlacement;
|
||||
createBases(
|
||||
...playerPlacementByPattern(
|
||||
pattern,
|
||||
g_PlayerbaseTypes[pattern].distance,
|
||||
g_PlayerbaseTypes[pattern].groupedDistance,
|
||||
randomAngle());
|
||||
fractionToTiles(randFloat(0.2, 0.35)),
|
||||
fractionToTiles(randFloat(0.08, 0.1)),
|
||||
randomAngle(),
|
||||
undefined),
|
||||
undefined);
|
||||
}
|
||||
Engine.SetProgress(40);
|
||||
|
||||
|
@ -25,7 +25,15 @@ const mapSize = g_Map.getSize();
|
||||
const mapCenter = g_Map.getCenter();
|
||||
|
||||
const startAngle = randomAngle();
|
||||
const [playerIDs, playerPosition] = createBasesByPattern("radial", fractionToTiles(0.38), fractionToTiles(0.05), startAngle);
|
||||
const [playerIDs, playerPosition] =
|
||||
createBases(
|
||||
...playerPlacementByPattern(
|
||||
"radial",
|
||||
fractionToTiles(0.38),
|
||||
fractionToTiles(0.05),
|
||||
startAngle,
|
||||
undefined),
|
||||
undefined);
|
||||
Engine.SetProgress(20);
|
||||
|
||||
addCenterLake();
|
||||
|
@ -22,7 +22,14 @@ Engine.SetProgress(10);
|
||||
|
||||
const teamsArray = getTeamsArray();
|
||||
const startAngle = randomAngle();
|
||||
createBasesByPattern("line", fractionToTiles(0.2), fractionToTiles(0.08), startAngle);
|
||||
createBases(
|
||||
...playerPlacementByPattern(
|
||||
"line",
|
||||
fractionToTiles(0.2),
|
||||
fractionToTiles(0.08),
|
||||
startAngle,
|
||||
undefined),
|
||||
undefined);
|
||||
Engine.SetProgress(20);
|
||||
|
||||
placeBarriers();
|
||||
|
@ -25,7 +25,14 @@ createArea(
|
||||
|
||||
Engine.SetProgress(10);
|
||||
|
||||
createBasesByPattern("radial", fractionToTiles(0.4), fractionToTiles(randFloat(0.05, 0.1)), startAngle);
|
||||
createBases(
|
||||
...playerPlacementByPattern(
|
||||
"radial",
|
||||
fractionToTiles(0.4),
|
||||
fractionToTiles(randFloat(0.05, 0.1)),
|
||||
startAngle,
|
||||
undefined),
|
||||
undefined);
|
||||
Engine.SetProgress(20);
|
||||
|
||||
createSunkenTerrain();
|
||||
|
@ -604,6 +604,31 @@ function getTeamsArray()
|
||||
return teams.filter(team => true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine player starting positions based on the specified pattern.
|
||||
*/
|
||||
function playerPlacementByPattern(patternName, distance = undefined, groupedDistance = undefined, angle = undefined, center = undefined)
|
||||
{
|
||||
if (patternName === undefined)
|
||||
patternName = g_MapSettings.TeamPlacement;
|
||||
|
||||
switch (patternName)
|
||||
{
|
||||
case "radial":
|
||||
return playerPlacementCircle(distance, angle, center);
|
||||
case "river":
|
||||
return playerPlacementRiver(angle, distance, center);
|
||||
case "line":
|
||||
return placeLine(getTeamsArray(), distance, groupedDistance, angle);
|
||||
case "stronghold":
|
||||
return placeStronghold(getTeamsArray(), distance, groupedDistance, angle);
|
||||
case "randomGroup":
|
||||
return playerPlacementRandom(sortAllPlayers(), undefined);
|
||||
default:
|
||||
throw new Error("Unknown placement pattern: " + patternName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine player starting positions on a circular pattern.
|
||||
*/
|
||||
|
@ -148,7 +148,15 @@ function pickSize(sizes)
|
||||
*/
|
||||
function createBasesByPattern(type, distance, groupedDistance, startAngle)
|
||||
{
|
||||
return createBases(...g_PlayerbaseTypes[type].getPosition(distance, groupedDistance, startAngle), g_PlayerbaseTypes[type].walls);
|
||||
error("createBasesByPattern() has been deprecated. Use playerPlacementByPattern() instead.");
|
||||
return createBases(
|
||||
...playerPlacementByPattern(
|
||||
type, // patternName
|
||||
distance, // distance
|
||||
groupedDistance,
|
||||
startAngle, // angle
|
||||
undefined), // center
|
||||
undefined); // walls
|
||||
}
|
||||
|
||||
function createBases(playerIDs, playerPosition, walls)
|
||||
|
@ -17,7 +17,15 @@ createArea(
|
||||
|
||||
Engine.SetProgress(20);
|
||||
|
||||
const [playerIDs, playerPosition] = createBasesByPattern("stronghold", fractionToTiles(randFloat(0.2, 0.35)), fractionToTiles(randFloat(0.05, 0.1)), randomAngle());
|
||||
const [playerIDs, playerPosition] =
|
||||
createBases(
|
||||
...playerPlacementByPattern(
|
||||
"stronghold",
|
||||
fractionToTiles(randFloat(0.2, 0.35)),
|
||||
fractionToTiles(randFloat(0.05, 0.1)),
|
||||
randomAngle(),
|
||||
undefined),
|
||||
undefined);
|
||||
markPlayerAvoidanceArea(playerPosition, defaultPlayerBaseRadius());
|
||||
|
||||
Engine.SetProgress(30);
|
||||
|
Loading…
Reference in New Issue
Block a user