1
0
forked from 0ad/0ad

Merge the 14 copies of the player placement code on river maps.

This was SVN commit r20151.
This commit is contained in:
elexis 2017-09-10 01:04:11 +00:00
parent 9119b663d8
commit f1e352927c
9 changed files with 63 additions and 264 deletions

View File

@ -67,29 +67,13 @@ var clIsland = createTileClass();
var clCorals = createTileClass();
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
var playerX = [];
var playerZ = [];
var playerX = new Array(numPlayers);
var playerZ = new Array(numPlayers);
var playerAngle = new Array(numPlayers);
var playerPos = new Array(numPlayers);
var iop = 0;
for (var i = 0; i < numPlayers; i++)
{
iop = i - 1;
if (!(numPlayers%2)){
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1);
}
else
{
if (iop%2)
{
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1);
}
else
{
playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1);
}
}
playerZ[i] = playerPos[i];
playerX[i] = 0.2 + 0.6*(i%2);
}

View File

@ -113,29 +113,13 @@ paintTerrainBasedOnHeight(2, 5, 1, tGrass);
paintTileClassBasedOnHeight(-6, 0.5, 1, clWater);
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
var playerX = [];
var playerZ = [];
var playerX = new Array(numPlayers);
var playerZ = new Array(numPlayers);
var playerAngle = new Array(numPlayers);
var playerPos = new Array(numPlayers);
var iop = 0;
for (var i = 0; i < numPlayers; i++)
{
iop = i - 1;
if (!(numPlayers%2)){
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1);
}
else
{
if (iop%2)
{
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1);
}
else
{
playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1);
}
}
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;
}

View File

@ -315,21 +315,14 @@ if (gallicCC)
RMS.SetProgress(10);
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
// Place players
var playerX = [];
var playerZ = [];
for (let i = 0; i < numPlayers; ++i)
{
let iop = i - 1;
if (numPlayers % 2 == 0)
playerZ[i] = ((iop + Math.abs(iop % 2))/2 + 1) / (numPlayers / 2 + 1);
else if (iop % 2)
playerZ[i] = ((iop + Math.abs(iop % 2))/2 + 1) / (((numPlayers + 1) / 2) + 1);
else
playerZ[i] = (iop/2 + 1) / (((numPlayers - 1) / 2) + 1);
playerZ[i] = playerPos[i];
playerX[i] = 0.2 + 0.6 * (i % 2);
}

View File

@ -64,24 +64,13 @@ var clSettlement = createTileClass();
var clShallow = createTileClass();
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
// place players
var playerX = [];
var playerZ = [];
var playerAngle = [];
var playerPos = [];
var iop = 0;
for (var i = 0; i < numPlayers; i++)
{
iop = i - 1;
if (numPlayers % 2 == 0)
playerPos[i] = ((iop + abs(iop % 2)) / 2 + 1) / ((numPlayers / 2) + 1);
else if (iop % 2 != 0)
playerPos[i] = ((iop + abs(iop % 2)) / 2 + 1) / (((numPlayers + 1) / 2) + 1);
else
playerPos[i] = (iop / 2 + 1) / (((numPlayers - 1) / 2) + 1);
playerZ[i] = 0.2 + 0.6*(i%2);
playerX[i] = playerPos[i];
}

View File

@ -59,30 +59,13 @@ var clSettlement = createTileClass();
var clShallow = createTileClass();
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
var playerX = [];
var playerZ = [];
var playerX = new Array(numPlayers);
var playerZ = new Array(numPlayers);
var playerAngle = new Array(numPlayers);
var playerPos = new Array(numPlayers);
var iop = 0;
for (var i = 0; i < numPlayers; i++)
{
iop = i - 1;
if (!(numPlayers%2)){
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1);
}
else
{
if (iop%2)
{
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1);
}
else
{
playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1);
}
}
playerZ[i] = 0.25 + 0.5*(i%2);
playerX[i] = playerPos[i];
}

View File

@ -424,9 +424,9 @@ function radialPlayerPlacement(percentRadius = 0.35)
let startAngle = randFloat(0, TWO_PI);
for (let i = 0; i < numPlayers; ++i)
for (let i = 0; i < getNumPlayers(); ++i)
{
playerAngle[i] = startAngle + i * TWO_PI / numPlayers;
playerAngle[i] = startAngle + i * TWO_PI / getNumPlayers();
playerX[i] = 0.5 + percentRadius * Math.cos(playerAngle[i]);
playerZ[i] = 0.5 + percentRadius * Math.sin(playerAngle[i]);
}
@ -434,6 +434,30 @@ function radialPlayerPlacement(percentRadius = 0.35)
return [playerIDs, playerX, playerZ, playerAngle, startAngle];
}
/**
* 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.
*/
function placePlayersRiver()
{
let playerPos = [];
let numPlayers = getNumPlayers();
let numPlayersEven = numPlayers % 2 == 0;
for (let i = 0; i < numPlayers; ++i)
{
let currentPlayerEven = i % 2 == 0;
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);
}
return playerPos;
}
function getStartingEntities(player)
{
let civ = getCivCode(player);

View File

@ -73,25 +73,12 @@ var clShore = createTileClass();
var clTreasure = createTileClass();
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
var playerX = [];
var playerZ = [];
// place players
var playerX = new Array(numPlayers);
var playerZ = new Array(numPlayers);
var playerAngle = new Array(numPlayers);
var playerPos = new Array(numPlayers);
var iop = 0;
for (var i = 0; i < numPlayers; i++)
{
iop = i - 1;
if (numPlayers % 2 == 0)
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1);
else
{
if (iop%2)
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1);
else
playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1);
}
playerZ[i] = playerPos[i];
playerX[i] = 0.30 + 0.4*(i%2);
}

View File

@ -283,60 +283,25 @@ else if (md == 2) //continent
else if (md == 3) //central sea
{
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
var playerX = new Array(numPlayers);
var playerZ = new Array(numPlayers);
var playerAngle = new Array(numPlayers);
var playerPos = new Array(numPlayers);
var iop = 0;
var playerX = [];
var playerZ = [];
var playerAngle = [];
var mdd1 = randIntInclusive(1,2);
if (mdd1 == 1) //vertical
{
for (var i = 0; i < numPlayers; i++)
{
iop = i - 1;
if (!(numPlayers%2)){
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1);
}
else
{
if (iop%2)
{
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1);
}
else
{
playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1);
}
}
playerZ[i] = playerPos[i];
playerX[i] = 0.2 + 0.6*(i%2);
}
}
else //horizontal
{
for (var i = 0; i < numPlayers; i++)
{
iop = i - 1;
if (!(numPlayers%2)){
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1);
}
else
{
if (iop%2)
{
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1);
}
else
{
playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1);
}
}
playerZ[i] = 0.2 + 0.6*(i%2);
playerX[i] = playerPos[i];
}
}
var WATER_WIDTH = randFloat(0.22,0.3)+scaleByMapSize(1,4)/20;
log("Creating sea");
@ -512,61 +477,25 @@ else if (md == 4) //central river
}
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
var playerX = [];
var playerZ = [];
var playerAngle = [];
var playerX = new Array(numPlayers);
var playerZ = new Array(numPlayers);
var playerAngle = new Array(numPlayers);
var playerPos = new Array(numPlayers);
var iop = 0;
var mdd1 = randIntInclusive(1,2);
if (mdd1 == 1) //horizontal
{
for (var i = 0; i < numPlayers; i++)
{
iop = i - 1;
if (!(numPlayers%2)){
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1);
}
else
{
if (iop%2)
{
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1);
}
else
{
playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1);
}
}
playerZ[i] = 0.25 + 0.5*(i%2);
playerX[i] = playerPos[i];
}
}
else //vertical
{
for (var i = 0; i < numPlayers; i++)
{
iop = i - 1;
if (!(numPlayers%2)){
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1);
}
else
{
if (iop%2)
{
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1);
}
else
{
playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1);
}
}
playerZ[i] = playerPos[i];
playerX[i] = 0.25 + 0.5*(i%2);
}
}
log("Creating the main river");

View File

@ -149,61 +149,24 @@ if (md == 2) //continent
else if (md == 3) //central sea
{
var playerIDs = primeSortAllPlayers();
// place players
var playerX = new Array(numPlayers);
var playerZ = new Array(numPlayers);
var playerAngle = new Array(numPlayers);
var playerPos = new Array(numPlayers);
var iop = 0;
var playerPos = placePlayersRiver();
var playerX = [];
var playerZ = [];
var playerAngle = [];
var mdd1 = randIntInclusive(1,2);
if (mdd1 == 1) //vertical
{
for (var i = 0; i < numPlayers; i++)
{
iop = i - 1;
if (!(numPlayers%2)){
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1);
}
else
{
if (iop%2)
{
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1);
}
else
{
playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1);
}
}
playerZ[i] = playerPos[i];
playerX[i] = 0.2 + 0.6*(i%2);
}
}
else //horizontal
{
for (var i = 0; i < numPlayers; i++)
{
iop = i - 1;
if (!(numPlayers%2)){
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1);
}
else
{
if (iop%2)
{
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1);
}
else
{
playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1);
}
}
playerZ[i] = 0.2 + 0.6*(i%2);
playerX[i] = playerPos[i];
}
}
var WATER_WIDTH = randFloat(0.22,0.3)+scaleByMapSize(1,4)/20;
log("Creating sea");
@ -377,62 +340,25 @@ else if (md == 4) //central river
}
var playerIDs = primeSortAllPlayers();
var playerPos = placePlayersRiver();
var playerX = [];
var playerZ = [];
var playerAngle = [];
// place players
var playerX = new Array(numPlayers);
var playerZ = new Array(numPlayers);
var playerAngle = new Array(numPlayers);
var playerPos = new Array(numPlayers);
var iop = 0;
var mdd1 = randIntInclusive(1,2);
if (mdd1 == 1) //horizontal
{
for (var i = 0; i < numPlayers; i++)
{
iop = i - 1;
if (!(numPlayers%2)){
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1);
}
else
{
if (iop%2)
{
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1);
}
else
{
playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1);
}
}
playerZ[i] = 0.25 + 0.5*(i%2);
playerX[i] = playerPos[i];
}
}
else //vertical
{
for (var i = 0; i < numPlayers; i++)
{
iop = i - 1;
if (!(numPlayers%2)){
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / ((numPlayers / 2) + 1);
}
else
{
if (iop%2)
{
playerPos[i] = ((iop + abs(iop%2))/2 + 1) / (((numPlayers + 1) / 2) + 1);
}
else
{
playerPos[i] = ((iop)/2 + 1) / ((((numPlayers - 1)) / 2) + 1);
}
}
playerZ[i] = playerPos[i];
playerX[i] = 0.25 + 0.5*(i%2);
}
}
log("Creating the main river");