Unify the other axis of the 8 remaining playerPlacementRiver calls following f1e352927c, refs #4805.

Use the rotateAround function from eb96b61954, refs #4845.
Freely randomize the river angle on Corinthian Isthmus following
4256744e26 and eb96b61954, refs #4855.

This was SVN commit r20469.
This commit is contained in:
elexis
2017-11-17 03:11:12 +00:00
parent eb96b61954
commit b0bd645fbb
8 changed files with 21 additions and 96 deletions
@@ -62,17 +62,7 @@ var clHill = createTileClass();
var clIsland = createTileClass();
var clCorals = createTileClass();
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
var playerX = [];
var playerZ = [];
for (var i = 0; i < numPlayers; i++)
{
playerZ[i] = playerPos[i];
playerX[i] = 0.2 + 0.6*(i%2);
}
var [playerIDs, playerX, playerZ] = playerPlacementRiver(0, 0.6);
for (var i = 0; i < numPlayers; i++)
{
@@ -62,8 +62,8 @@ var landHeight = getMapBaseHeight();
var waterHeight = -4;
log("Creating the main river");
var riverAngle = randFloat(0, Math.PI);
var riverWidth = scaleByMapSize(15, 70);
var riverAngle = -Math.PI / 4;
var riverStart = new Vector2D(mapCenter.x, 0).rotateAround(riverAngle, mapCenter);
var riverEnd = new Vector2D(mapCenter.x, mapSize).rotateAround(riverAngle, mapCenter);
@@ -102,17 +102,7 @@ paintTerrainBasedOnHeight(2, 5, 1, tGrass);
paintTileClassBasedOnHeight(-6, 0.5, 1, clWater);
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
var playerX = [];
var playerZ = [];
for (var i = 0; i < numPlayers; i++)
{
playerZ[i] = Math.sqrt(0.5)*(0.6*(i%2) - 0.8 + playerPos[i]) + 0.5;
playerX[i] = Math.sqrt(0.5)*(0.6*(i%2) + 0.2 - playerPos[i]) + 0.5;
}
var [playerIDs, playerX, playerZ] = playerPlacementRiver(riverAngle + Math.PI / 2, 0.6);
for (var i = 0; i < numPlayers; i++)
{
@@ -311,17 +311,7 @@ if (gallicCC)
}
RMS.SetProgress(10);
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
var playerX = [];
var playerZ = [];
for (let i = 0; i < numPlayers; ++i)
{
playerZ[i] = playerPos[i];
playerX[i] = 0.2 + 0.6 * (i % 2);
}
var [playerIDs, playerX, playerZ] = playerPlacementRiver(0, 0.6);
for (let i = 0; i < numPlayers; ++i)
{
@@ -56,18 +56,7 @@ var clShallow = createTileClass();
var landHeight = 3;
var waterHeight = -4;
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
var playerX = [];
var playerZ = [];
for (var i = 0; i < numPlayers; i++)
{
playerZ[i] = 0.2 + 0.6*(i%2);
playerX[i] = playerPos[i];
}
var [playerIDs, playerX, playerZ] = playerPlacementRiver(Math.PI / 2, 0.6);
for (var i = 0; i < numPlayers; i++)
{
var id = playerIDs[i];
@@ -50,18 +50,9 @@ var clFood = createTileClass();
var clBaseResource = createTileClass();
var clShallow = createTileClass();
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
var waterHeight = -4;
var playerX = [];
var playerZ = [];
for (var i = 0; i < numPlayers; i++)
{
playerZ[i] = 0.25 + 0.5*(i%2);
playerX[i] = playerPos[i];
}
var [playerIDs, playerX, playerZ] = playerPlacementRiver(Math.PI / 2, 0.5);
for (var i = 0; i < numPlayers; i++)
{
@@ -139,16 +139,19 @@ function radialPlayerPlacement(radius = 0.35, startingAngle = undefined, centerX
}
/**
* Returns an array of percent numbers indicating the player location on river maps.
* For example [0.2, 0.2, 0.4, 0.4, 0.6, 0.6, 0.8, 0.8] for a 4v4 or
* [0.25, 0.33, 0.5, 0.67, 0.75] for a 2v3.
* Returns player starting positions located on two parallel lines, typically used by central river maps.
* If there are two teams with an equal number of players, each team will occupy exactly one line.
* Angle 0 means the players are placed in north to south direction, i.e. along the Z axis.
*/
function placePlayersRiver()
function playerPlacementRiver(angle, width)
{
let playerPos = [];
let positions = [];
let numPlayers = getNumPlayers();
let numPlayersEven = numPlayers % 2 == 0;
let mapCenter = new Vector2D(0.5, 0.5);
for (let i = 0; i < numPlayers; ++i)
{
let currentPlayerEven = i % 2 == 0;
@@ -156,10 +159,12 @@ function placePlayersRiver()
let offsetDivident = numPlayersEven || currentPlayerEven ? (i + 1) % 2 : 0;
let offsetDivisor = numPlayersEven ? 0 : currentPlayerEven ? +1 : -1;
playerPos[i] = ((i - 1 + offsetDivident) / 2 + 1) / ((numPlayers + offsetDivisor) / 2 + 1);
positions[i] = new Vector2D(
width * (i % 2) + (1 - width) / 2,
((i - 1 + offsetDivident) / 2 + 1) / ((numPlayers + offsetDivisor) / 2 + 1)).rotateAround(angle, mapCenter);
}
return playerPos;
return [primeSortAllPlayers(), positions.map(p => p.x), positions.map(p => p.y)];
}
/***
@@ -61,16 +61,7 @@ var clPond = createTileClass();
var clShore = createTileClass();
var clTreasure = createTileClass();
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
var playerX = [];
var playerZ = [];
for (var i = 0; i < numPlayers; i++)
{
playerZ[i] = playerPos[i];
playerX[i] = 0.30 + 0.4*(i%2);
}
var [playerIDs, playerX, playerZ] = playerPlacementRiver(0, 0.4);
for (var i = 0; i < numPlayers; i++)
{
@@ -317,17 +317,7 @@ function unknownCentralSea()
if (g_PlayerBases)
{
playerIDs = primeSortAllPlayers();
let playerPos = placePlayersRiver();
for (let i = 0; i < numPlayers; ++i)
{
playerX[i] = playerPos[i];
playerZ[i] = 0.2 + 0.6 * (i % 2);
}
if (!horizontal)
[playerX, playerZ] = [playerZ, playerX];
[playerIDs, playerX, playerZ] = playerPlacementRiver(horizontal ? Math.PI / 2 : 0, 0.6);
markPlayerArea("small");
}
@@ -370,18 +360,7 @@ function unknownCentralRiver()
if (g_PlayerBases)
{
playerIDs = primeSortAllPlayers();
let playerPos = placePlayersRiver();
for (let i = 0; i < numPlayers; ++i)
{
playerX[i] = playerPos[i];
playerZ[i] = 0.25 + 0.5*(i%2);
}
if (!horizontal)
[playerX, playerZ] = [playerZ, playerX];
[playerIDs, playerX, playerZ] = playerPlacementRiver(horizontal ? Math.PI / 2 : 0, 0.5);
markPlayerArea("large");
}