Fixed a major bug.
This was SVN commit r11180.
This commit is contained in:
parent
7a75e068e7
commit
e82182252c
@ -1 +1 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////////////////
// passageMaker
//
// Function for creating shallow water between two given points by changing the heiight of all tiles in
// the path with height less than or equal to "maxheight" to "height"
//
// x1,z1: Starting point of path
// x2,z2: Ending point of path
// width: Width of the shallow
// maxheight: Maximum height that it changes
// height: Height of the shallow
// smooth: smooth elevation in borders
// tileclass: (Optianal) - Adds those tiles to the class given
// terrain: (Optional) - Changes the texture of the elevated land
//
/////////////////////////////////////////////////////////////////////////////////////////
function passageMaker(x1, z1, x2, z2, width, maxheight, height, smooth, tileclass, terrain)
{
var mapSize = g_Map.size;
for (var ix = 0; ix < mapSize; ix++)
{
for (var iz = 0; iz < mapSize; iz++)
{
var a = z1-z2;
var b = x2-x1;
var c = (z1*(x1-x2))-(x1*(z1-z2));
var dis = abs(a*ix + b*iz + c)/sqrt(a*a + b*b);
var k = (a*ix + b*iz + c)/(a*a + b*b);
var my = iz-(b*k);
var inline = 0;
if (b == 0)
{
if ((iz <= Math.max(z1,z2))&&(Math.min(z1,z2)))
{
inline = 1;
}
}
else
{
if ((my <= Math.max(z1,z2))&&(my >= Math.min(z1,z2)))
{
inline = 1;
}
}
if ((dis <= width)&&(inline))
{
if(g_Map.getHeight(ix, iz) <= maxheight)
{
if (dis >= width - smooth)
{
g_Map.setHeight(ix, iz, ((width - dis)*(height)+(g_Map.getHeight(ix, iz))*(dis + smooth - width))/(width - smooth)/2);
}
else
{
g_Map.setHeight(ix, iz, height);
}
if (tileclass !== null)
{
addToClass(ix, iz, tileclass);
}
if (terrain !== null)
{
placeTerrain(ix, iz, terrain);
}
}
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//rndRiver is a fuction that creates random values useful for making a jagged river.
//
//it works the same as sin or cos function. the only difference is that it's period is 1 instead of 2*pi
//it needs the "seed" parameter to use it to make random curves that don't get broken.
//seed must be created using randFloat(). or else it won't work
//
// f: Input: Same as angle in a sine function
// seed: Random Seed: Best to implement is to use randFloat()
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function rndRiver(f, seed)
{
var rndRq = seed;
var rndRw = rndRq;
var rndRe = 0;
var rndRr = f-floor(f);
var rndRa = 0;
for (var rndRx=0; rndRx<=floor(f); rndRx++)
{
rndRw = 10*(rndRw-floor(rndRw));
}
if (rndRx%2==0)
{
var rndRs = -1;
}
else
{
var rndRs = 1;
}
rndRe = (floor(rndRw))%5;
if (rndRe==0)
{
rndRa = (rndRs)*2.3*(rndRr)*(rndRr-1)*(rndRr-0.5)*(rndRr-0.5);
}
else if (rndRe==1)
{
rndRa = (rndRs)*2.6*(rndRr)*(rndRr-1)*(rndRr-0.3)*(rndRr-0.7);
}
else if (rndRe==2)
{
rndRa = (rndRs)*22*(rndRr)*(rndRr-1)*(rndRr-0.2)*(rndRr-0.3)*(rndRr-0.3)*(rndRr-0.8);
}
else if (rndRe==3)
{
rndRa = (rndRs)*180*(rndRr)*(rndRr-1)*(rndRr-0.2)*(rndRr-0.2)*(rndRr-0.4)*(rndRr-0.6)*(rndRr-0.6)*(rndRr-0.8);
}
else if (rndRe==4)
{
rndRa = (rndRs)*2.6*(rndRr)*(rndRr-1)*(rndRr-0.5)*(rndRr-0.7);
}
return rndRa;
}
/////////////////////////////////////////////////////////////////////////////////////////
// createStartingPlayerEntities
//
// Creates the starting player entities
// fx&fz: position of player base
// playerid: id of player
// civEntities: use getStartingEntities(id-1) fo this one
// BUILDING_ANGlE: angle of main base building
//
///////////////////////////////////////////////////////////////////////////////////////////
function createStartingPlayerEntities(fx, fz, playerid, civEntities, BUILDING_ANGlE)
{
var uDist = 6;
var uSpace = 2;
for (var j = 1; j < civEntities.length; ++j)
{
placeObject(fx, fz, civEntities[0].Template, playerid, BUILDING_ANGlE);
var uAngle = -BUILDING_ANGlE + PI * (j - 1) / 2;
var count = (civEntities[j].Count !== undefined ? civEntities[j].Count : 1);
for (var numberofentities = 0; numberofentities < count; numberofentities++)
{
var ux = fx + uDist * cos(uAngle) + numberofentities * uSpace * cos(uAngle + PI/2) - (0.75 * uSpace * floor(count / 2) * cos(uAngle + PI/2));
var uz = fz + uDist * sin(uAngle) + numberofentities * uSpace * sin(uAngle + PI/2) - (0.75 * uSpace * floor(count / 2) * sin(uAngle + PI/2));
placeObject(ux, uz, civEntities[j].Template, playerid, (j % 2 - 1) * PI + uAngle);
}
}
}
|
/////////////////////////////////////////////////////////////////////////////////////////
// passageMaker
//
// Function for creating shallow water between two given points by changing the heiight of all tiles in
// the path with height less than or equal to "maxheight" to "height"
//
// x1,z1: Starting point of path
// x2,z2: Ending point of path
// width: Width of the shallow
// maxheight: Maximum height that it changes
// height: Height of the shallow
// smooth: smooth elevation in borders
// tileclass: (Optianal) - Adds those tiles to the class given
// terrain: (Optional) - Changes the texture of the elevated land
//
/////////////////////////////////////////////////////////////////////////////////////////
function passageMaker(x1, z1, x2, z2, width, maxheight, height, smooth, tileclass, terrain)
{
var mapSize = g_Map.size;
for (var ix = 0; ix < mapSize; ix++)
{
for (var iz = 0; iz < mapSize; iz++)
{
var a = z1-z2;
var b = x2-x1;
var c = (z1*(x1-x2))-(x1*(z1-z2));
var dis = abs(a*ix + b*iz + c)/sqrt(a*a + b*b);
var k = (a*ix + b*iz + c)/(a*a + b*b);
var my = iz-(b*k);
var inline = 0;
if (b == 0)
{
if ((iz <= Math.max(z1,z2))&&(Math.min(z1,z2)))
{
inline = 1;
}
}
else
{
if ((my <= Math.max(z1,z2))&&(my >= Math.min(z1,z2)))
{
inline = 1;
}
}
if ((dis <= width)&&(inline))
{
if(g_Map.getHeight(ix, iz) <= maxheight)
{
if (dis >= width - smooth)
{
g_Map.setHeight(ix, iz, ((width - dis)*(height)+(g_Map.getHeight(ix, iz))*(dis + smooth - width))/(width - smooth)/2);
}
else
{
g_Map.setHeight(ix, iz, height);
}
if (tileclass !== null)
{
addToClass(ix, iz, tileclass);
}
if (terrain !== null)
{
placeTerrain(ix, iz, terrain);
}
}
}
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//rndRiver is a fuction that creates random values useful for making a jagged river.
//
//it works the same as sin or cos function. the only difference is that it's period is 1 instead of 2*pi
//it needs the "seed" parameter to use it to make random curves that don't get broken.
//seed must be created using randFloat(). or else it won't work
//
// f: Input: Same as angle in a sine function
// seed: Random Seed: Best to implement is to use randFloat()
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function rndRiver(f, seed)
{
var rndRq = seed;
var rndRw = rndRq;
var rndRe = 0;
var rndRr = f-floor(f);
var rndRa = 0;
for (var rndRx=0; rndRx<=floor(f); rndRx++)
{
rndRw = 10*(rndRw-floor(rndRw));
}
if (rndRx%2==0)
{
var rndRs = -1;
}
else
{
var rndRs = 1;
}
rndRe = (floor(rndRw))%5;
if (rndRe==0)
{
rndRa = (rndRs)*2.3*(rndRr)*(rndRr-1)*(rndRr-0.5)*(rndRr-0.5);
}
else if (rndRe==1)
{
rndRa = (rndRs)*2.6*(rndRr)*(rndRr-1)*(rndRr-0.3)*(rndRr-0.7);
}
else if (rndRe==2)
{
rndRa = (rndRs)*22*(rndRr)*(rndRr-1)*(rndRr-0.2)*(rndRr-0.3)*(rndRr-0.3)*(rndRr-0.8);
}
else if (rndRe==3)
{
rndRa = (rndRs)*180*(rndRr)*(rndRr-1)*(rndRr-0.2)*(rndRr-0.2)*(rndRr-0.4)*(rndRr-0.6)*(rndRr-0.6)*(rndRr-0.8);
}
else if (rndRe==4)
{
rndRa = (rndRs)*2.6*(rndRr)*(rndRr-1)*(rndRr-0.5)*(rndRr-0.7);
}
return rndRa;
}
/////////////////////////////////////////////////////////////////////////////////////////
// createStartingPlayerEntities
//
// Creates the starting player entities
// fx&fz: position of player base
// playerid: id of player
// civEntities: use getStartingEntities(id-1) fo this one
// BUILDING_ANGlE: angle of main base building
//
///////////////////////////////////////////////////////////////////////////////////////////
function createStartingPlayerEntities(fx, fz, playerid, civEntities, BUILDING_ANGlE)
{
var uDist = 6;
var uSpace = 2;
placeObject(fx, fz, civEntities[0].Template, playerid, BUILDING_ANGlE);
for (var j = 1; j < civEntities.length; ++j)
{
var uAngle = -BUILDING_ANGlE + PI * (j - 1) / 2;
var count = (civEntities[j].Count !== undefined ? civEntities[j].Count : 1);
for (var numberofentities = 0; numberofentities < count; numberofentities++)
{
var ux = fx + uDist * cos(uAngle) + numberofentities * uSpace * cos(uAngle + PI/2) - (0.75 * uSpace * floor(count / 2) * cos(uAngle + PI/2));
var uz = fz + uDist * sin(uAngle) + numberofentities * uSpace * sin(uAngle + PI/2) - (0.75 * uSpace * floor(count / 2) * sin(uAngle + PI/2));
placeObject(ux, uz, civEntities[j].Template, playerid, (j % 2 - 1) * PI + uAngle);
}
}
}
|
Loading…
Reference in New Issue
Block a user