mirror of
https://gitea.wildfiregames.com/0ad/0ad.git
synced 2026-06-21 14:43:52 +00:00
Unify the other axis of the 8 remaining playerPlacementRiver calls following f1e352927c, refs #4805.
Use the rotateAround function fromeb96b61954, refs #4845. Freely randomize the river angle on Corinthian Isthmus following4256744e26andeb96b61954, refs #4855. This was SVN commit r20469.
This commit is contained in:
@@ -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");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user