1
0
forked from 0ad/0ad

Tweaks player starting positions so that allies are near each other. Adds some useful functions to the game.

This was SVN commit r11220.
This commit is contained in:
O.Davoodi 2012-03-02 13:17:35 +00:00
parent 4653dc62e9
commit 59ce8b3081
21 changed files with 144 additions and 24 deletions

View File

@ -75,7 +75,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = primeSortPlayers(sortPlayers(playerIDs));
// place players

File diff suppressed because one or more lines are too long

View File

@ -136,7 +136,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
// place players

View File

@ -77,7 +77,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
// place players

View File

@ -77,7 +77,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
// place players

View File

@ -107,7 +107,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
// place players

View File

@ -98,7 +98,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = primeSortPlayers(sortPlayers(playerIDs));
// place players

View File

@ -81,7 +81,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
// place players

View File

@ -102,7 +102,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
//array holding starting islands based on number of players
var startingPlaces=[[0],[0,3],[0,2,4],[0,1,3,4],[0,1,2,3,4],[0,1,2,3,4,5]];

View File

@ -107,7 +107,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
// place players

View File

@ -93,7 +93,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
// Place players

View File

@ -100,7 +100,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
// place players

View File

@ -75,7 +75,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
// place players

View File

@ -28,7 +28,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
// place players

View File

@ -67,7 +67,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
// place players

View File

@ -76,7 +76,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
// place players

View File

@ -112,7 +112,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = sortPlayers(playerIDs);
// place players
@ -278,16 +278,16 @@ for (var c = 0 ; c < numPlayers ; c++)
riverAngle[c] = startAngle + (((2 * c + 1) / (numPlayers * 2)) * TWO_PI );
PX[c] = round(fractionToTiles(0.5 + 0.5 * cos(riverAngle[c])));
PZ[c] = round(fractionToTiles(0.5 + 0.5 * sin(riverAngle[c])));
log (playerIDs[c], ",,," ,playerIDs[0]);
isRiver[c][numPlayers]=1;
/*if ((c == numPlayers-1)&&(!areAllies(playerIDs[c]-1, playerIDs[0]-1)))
//log (playerIDs[c], ",,," ,playerIDs[0]);
//isRiver[c][numPlayers]=1;
if ((c == numPlayers-1)&&(!areAllies(playerIDs[c]-1, playerIDs[0]-1)))
{
isRiver[c][numPlayers]=1;
}
else if ((c < numPlayers-1)&&(!areAllies(playerIDs[c]-1, playerIDs[c+1]-1)))
{
isRiver[c][numPlayers]=1;
}*/
}
}
//theta is the start value for rndRiver function. seed implies

View File

@ -403,6 +403,66 @@ function getCivCode(player)
return g_MapSettings.PlayerData[player].Civ;
}
function areAllies(player1, player2)
{
if ((g_MapSettings.PlayerData[player1].Team == undefined)||(g_MapSettings.PlayerData[player2].Team == undefined)||(g_MapSettings.PlayerData[player2].Team == -1)||(g_MapSettings.PlayerData[player1].Team == -1))
{
return 0;
}
else
{
return (g_MapSettings.PlayerData[player1].Team === g_MapSettings.PlayerData[player2].Team);
}
}
function getPlayerTeam(player)
{
return g_MapSettings.PlayerData[player].Team
}
function sortPlayers(source)
{
if (!source.length)
return [];
var result = new Array(0);
var team = new Array(5);
for (var q = 0; q < 5; q++)
{
team[q] = new Array(1);
}
for (var i = -1; i < 4; i++)
{
for (var j = 0; j < source.length; j++)
{
if (getPlayerTeam(j) == i)
{
team[i+1].unshift(j+1);
}
}
team[i+1].pop();
result=result.concat(shuffleArray(team[i+1]))
}
return result;
}
function primeSortPlayers(source)
{
if (!source.length)
return [];
var prime = new Array(source.length);
for (var i = 0; i < round(source.length/2); i++)
{
prime[2*i]=source[i];
prime[2*i+1]=source[7-i];
}
return prime;
}
function getStartingEntities(player)
{
var civ = getCivCode(player);
@ -506,3 +566,63 @@ function borderClasses(/*class1, idist1, odist1, class2, idist2, odist2, etc*/)
return new AndConstraint(ar);
}
}
// Checks if the given tile is in class "id"
function checkIfInClass(x, z, id)
{
var tileClass = getTileClass(id);
if (tileClass !== null)
{
if (tileClass.countMembersInRadius(x, z, 1) !== null)
{
return tileClass.countMembersInRadius(x, z, 1);
}
else
{
return 0;
}
}
else
{
return 0;
}
}
// Function to get the distance between 2 points
function getDistance(x1, z1, x2, z2)
{
return Math.pow(Math.pow(x1 - x2, 2) + Math.pow(z1 - z2, 2), 1/2)
}
// Returns the abgle between two points in radians. --Warning:This can cause sync problems in cross-platform multiplayer games--
function getAngle(x1, z1, x2, z2)
{
var vector = [x2 - x1, z2 - z1];
var output = 0;
if (vector[0] !== 0 || vector[1] !== 0)
{
var output = Math.acos(vector[0]/getDistance(x1, z1, x2, z2));
if (vector[1] > 0) {output = PI + (PI - Math.acos(vector[0]/getDistance(x1, z1, x2, z2)))};
};
return (output + PI/2) % (2*PI);
};
// Returns the tangent of angle between the line that is created by two points and the X+ axis.
function getDirection(x1, z1, x2, z2)
{
if (x1 == x2)
{
return 100000;
}
else
{
return (z1-z2)/(x1-x2);
}
}
function getTerrainTexture(x, y)
{
return g_Map.texture[x][z];
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -91,7 +91,7 @@ for (var i = 0; i < numPlayers; i++)
{
playerIDs.push(i+1);
}
playerIDs = shuffleArray(playerIDs);
playerIDs = primeSortPlayers(sortPlayers(playerIDs));
// place players