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);
|
Engine.SetProgress(10);
|
||||||
|
|
||||||
var playerIDs;
|
|
||||||
var playerPosition;
|
|
||||||
if (!isNomad())
|
if (!isNomad())
|
||||||
{
|
{
|
||||||
let pattern = g_MapSettings.TeamPlacement || pickRandom(Object.keys(g_PlayerbaseTypes));
|
var [playerIDs, playerPosition] =
|
||||||
|
createBases(
|
||||||
[playerIDs, playerPosition] =
|
...playerPlacementByPattern(
|
||||||
createBasesByPattern(
|
g_MapSettings.TeamPlacement,
|
||||||
pattern,
|
fractionToTiles(randFloat(0.2, 0.35)),
|
||||||
g_PlayerbaseTypes[pattern].distance,
|
fractionToTiles(randFloat(0.08, 0.1)),
|
||||||
g_PlayerbaseTypes[pattern].groupedDistance,
|
randomAngle(),
|
||||||
randomAngle());
|
undefined),
|
||||||
|
undefined);
|
||||||
|
|
||||||
markPlayerAvoidanceArea(playerPosition, defaultPlayerBaseRadius());
|
markPlayerAvoidanceArea(playerPosition, defaultPlayerBaseRadius());
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,14 @@ Engine.SetProgress(10);
|
|||||||
|
|
||||||
const teamsArray = getTeamsArray();
|
const teamsArray = getTeamsArray();
|
||||||
const startAngle = randomAngle();
|
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);
|
Engine.SetProgress(20);
|
||||||
|
|
||||||
// Change the starting angle and add the players again
|
// Change the starting angle and add the players again
|
||||||
@ -29,7 +36,14 @@ if (teamsArray.length == 2)
|
|||||||
if (teamsArray.length == 4)
|
if (teamsArray.length == 4)
|
||||||
rotation = 5/4 * Math.PI;
|
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);
|
Engine.SetProgress(40);
|
||||||
|
|
||||||
addElements(shuffleArray([
|
addElements(shuffleArray([
|
||||||
|
@ -21,12 +21,15 @@ Engine.SetProgress(20);
|
|||||||
|
|
||||||
if (!isNomad())
|
if (!isNomad())
|
||||||
{
|
{
|
||||||
let pattern = g_MapSettings.TeamPlacement || pickRandom(Object.keys(g_PlayerbaseTypes));
|
let pattern = g_MapSettings.TeamPlacement;
|
||||||
createBasesByPattern(
|
createBases(
|
||||||
pattern,
|
...playerPlacementByPattern(
|
||||||
g_PlayerbaseTypes[pattern].distance,
|
pattern,
|
||||||
g_PlayerbaseTypes[pattern].groupedDistance,
|
fractionToTiles(randFloat(0.2, 0.35)),
|
||||||
randomAngle());
|
fractionToTiles(randFloat(0.08, 0.1)),
|
||||||
|
randomAngle(),
|
||||||
|
undefined),
|
||||||
|
undefined);
|
||||||
}
|
}
|
||||||
Engine.SetProgress(40);
|
Engine.SetProgress(40);
|
||||||
|
|
||||||
|
@ -25,7 +25,15 @@ const mapSize = g_Map.getSize();
|
|||||||
const mapCenter = g_Map.getCenter();
|
const mapCenter = g_Map.getCenter();
|
||||||
|
|
||||||
const startAngle = randomAngle();
|
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);
|
Engine.SetProgress(20);
|
||||||
|
|
||||||
addCenterLake();
|
addCenterLake();
|
||||||
|
@ -22,7 +22,14 @@ Engine.SetProgress(10);
|
|||||||
|
|
||||||
const teamsArray = getTeamsArray();
|
const teamsArray = getTeamsArray();
|
||||||
const startAngle = randomAngle();
|
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);
|
Engine.SetProgress(20);
|
||||||
|
|
||||||
placeBarriers();
|
placeBarriers();
|
||||||
|
@ -25,7 +25,14 @@ createArea(
|
|||||||
|
|
||||||
Engine.SetProgress(10);
|
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);
|
Engine.SetProgress(20);
|
||||||
|
|
||||||
createSunkenTerrain();
|
createSunkenTerrain();
|
||||||
|
@ -604,6 +604,31 @@ function getTeamsArray()
|
|||||||
return teams.filter(team => true);
|
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.
|
* Determine player starting positions on a circular pattern.
|
||||||
*/
|
*/
|
||||||
|
@ -148,7 +148,15 @@ function pickSize(sizes)
|
|||||||
*/
|
*/
|
||||||
function createBasesByPattern(type, distance, groupedDistance, startAngle)
|
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)
|
function createBases(playerIDs, playerPosition, walls)
|
||||||
|
@ -17,7 +17,15 @@ createArea(
|
|||||||
|
|
||||||
Engine.SetProgress(20);
|
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());
|
markPlayerAvoidanceArea(playerPosition, defaultPlayerBaseRadius());
|
||||||
|
|
||||||
Engine.SetProgress(30);
|
Engine.SetProgress(30);
|
||||||
|
Loading…
Reference in New Issue
Block a user