From 56f15f0869804b1b12f41aadbcd9ece461ba3d6b Mon Sep 17 00:00:00 2001 From: marder Date: Sun, 19 Nov 2023 15:21:26 +0000 Subject: [PATCH] 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. --- .../data/mods/public/maps/random/ambush.js | 19 +++++++------- .../data/mods/public/maps/random/empire.js | 18 +++++++++++-- .../data/mods/public/maps/random/frontier.js | 15 ++++++----- .../data/mods/public/maps/random/harbor.js | 10 +++++++- .../mods/public/maps/random/hells_pass.js | 9 ++++++- .../data/mods/public/maps/random/lions_den.js | 9 ++++++- .../public/maps/random/rmgen-common/player.js | 25 +++++++++++++++++++ .../mods/public/maps/random/rmgen2/setup.js | 10 +++++++- .../mods/public/maps/random/stronghold.js | 10 +++++++- 9 files changed, 102 insertions(+), 23 deletions(-) diff --git a/binaries/data/mods/public/maps/random/ambush.js b/binaries/data/mods/public/maps/random/ambush.js index 04318b87d9..2fcbf03361 100644 --- a/binaries/data/mods/public/maps/random/ambush.js +++ b/binaries/data/mods/public/maps/random/ambush.js @@ -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()); } diff --git a/binaries/data/mods/public/maps/random/empire.js b/binaries/data/mods/public/maps/random/empire.js index 1f852caf9b..a89d63457e 100644 --- a/binaries/data/mods/public/maps/random/empire.js +++ b/binaries/data/mods/public/maps/random/empire.js @@ -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([ diff --git a/binaries/data/mods/public/maps/random/frontier.js b/binaries/data/mods/public/maps/random/frontier.js index fd374d7827..64224ba019 100644 --- a/binaries/data/mods/public/maps/random/frontier.js +++ b/binaries/data/mods/public/maps/random/frontier.js @@ -21,12 +21,15 @@ Engine.SetProgress(20); if (!isNomad()) { - let pattern = g_MapSettings.TeamPlacement || pickRandom(Object.keys(g_PlayerbaseTypes)); - createBasesByPattern( - pattern, - g_PlayerbaseTypes[pattern].distance, - g_PlayerbaseTypes[pattern].groupedDistance, - randomAngle()); + let pattern = g_MapSettings.TeamPlacement; + createBases( + ...playerPlacementByPattern( + pattern, + fractionToTiles(randFloat(0.2, 0.35)), + fractionToTiles(randFloat(0.08, 0.1)), + randomAngle(), + undefined), + undefined); } Engine.SetProgress(40); diff --git a/binaries/data/mods/public/maps/random/harbor.js b/binaries/data/mods/public/maps/random/harbor.js index 540a5e6c63..5b1498b18e 100644 --- a/binaries/data/mods/public/maps/random/harbor.js +++ b/binaries/data/mods/public/maps/random/harbor.js @@ -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(); diff --git a/binaries/data/mods/public/maps/random/hells_pass.js b/binaries/data/mods/public/maps/random/hells_pass.js index ccf50c286a..ca5e97959d 100644 --- a/binaries/data/mods/public/maps/random/hells_pass.js +++ b/binaries/data/mods/public/maps/random/hells_pass.js @@ -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(); diff --git a/binaries/data/mods/public/maps/random/lions_den.js b/binaries/data/mods/public/maps/random/lions_den.js index d4fe57e773..6e020d7330 100644 --- a/binaries/data/mods/public/maps/random/lions_den.js +++ b/binaries/data/mods/public/maps/random/lions_den.js @@ -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(); diff --git a/binaries/data/mods/public/maps/random/rmgen-common/player.js b/binaries/data/mods/public/maps/random/rmgen-common/player.js index 527c5c80be..e6317caade 100644 --- a/binaries/data/mods/public/maps/random/rmgen-common/player.js +++ b/binaries/data/mods/public/maps/random/rmgen-common/player.js @@ -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. */ diff --git a/binaries/data/mods/public/maps/random/rmgen2/setup.js b/binaries/data/mods/public/maps/random/rmgen2/setup.js index 57ac9b962b..99f1bd273c 100644 --- a/binaries/data/mods/public/maps/random/rmgen2/setup.js +++ b/binaries/data/mods/public/maps/random/rmgen2/setup.js @@ -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) diff --git a/binaries/data/mods/public/maps/random/stronghold.js b/binaries/data/mods/public/maps/random/stronghold.js index 19971c3285..9290f29db8 100644 --- a/binaries/data/mods/public/maps/random/stronghold.js +++ b/binaries/data/mods/public/maps/random/stronghold.js @@ -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);