824 lines
20 KiB
JavaScript
824 lines
20 KiB
JavaScript
var gameType;
|
|
var map;
|
|
var maptt;
|
|
|
|
var centreMode = 1;
|
|
var centreOnTxt;
|
|
var centreOnOwn;
|
|
|
|
var plPlanets;
|
|
var inUpdate = true;
|
|
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// PLANETS AND NEBULAS
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
function Planet(system,id,name,status,relation,tag)
|
|
{
|
|
this.id = id;
|
|
this.name = name.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
|
|
this.status = status;
|
|
this.opacity = (status == "1") ? 1 : 0;
|
|
this.relation = relation;
|
|
this.tag = tag;
|
|
this.system = system;
|
|
|
|
this.drawName = Planet_drawName;
|
|
this.drawTag = Planet_drawTag;
|
|
}
|
|
|
|
function Planet_drawName()
|
|
{
|
|
var str = '<tr class="srow">';
|
|
if (this.opacity) {
|
|
str += '<td class="pimg"' + (this.system.protection ? ' style="background-color:#00274f"' : '')
|
|
+ '><img src="' + staticurl + '/beta5/pics/prem_s.png" alt="[P]" /></td><td class="prem"'
|
|
+ (this.system.protection ? ' style="background-color:#00274f"' : '') + '>';
|
|
} else {
|
|
str += '<td class="pimg"' + (this.system.protection ? ' style="background-color:#00274f"' : '')
|
|
+ '><img src="' + staticurl + '/beta5/pics/pl/s/' + this.id
|
|
+ '.png" alt="[P]" /></td><td class="planet'
|
|
+ (this.relation == 0 ? 'n' : (this.relation == 1 ? 'a' : 'o')) + '"'
|
|
+ (this.system.protection ? ' style="background-color:#00274f"' : '') + '>';
|
|
}
|
|
str += '<a href="planet?id='+this.id+'">' + this.name + '</a></td></tr>';
|
|
return str;
|
|
}
|
|
|
|
function Planet_drawTag()
|
|
{
|
|
var str = '<tr class="srow">';
|
|
if (this.opacity) {
|
|
str += '<td class="pimg"><img src="' + staticurl
|
|
+ '/beta5/pics/prem_s.png" alt="[P]" /></td><td class="prem">N/A</td></tr>';
|
|
} else {
|
|
str += '<td class="pimg"' + (this.system.protection ? ' style="background-color:#00274f"' : '')
|
|
+ '><img src="' + staticurl + '/beta5/pics/pl/s/' + this.id
|
|
+ '.png" alt="[P]" /></td><td class="planet'
|
|
+ (this.relation == 0 ? 'n' : (this.relation == 1 ? 'a' : 'o')) + '"'
|
|
+ (this.system.protection ? ' style="background-color:#00274f"' : '') + '>'
|
|
+ '[' + this.tag + ']</td></tr>';
|
|
}
|
|
return str;
|
|
}
|
|
|
|
|
|
function Nebula(id,opacity,name)
|
|
{
|
|
this.id = id;
|
|
this.name = name;
|
|
this.opacity = opacity;
|
|
|
|
this.drawName = Nebula_drawName;
|
|
this.drawTag = Nebula_drawTag;
|
|
}
|
|
|
|
function Nebula_drawName()
|
|
{
|
|
var str = '<tr class="srow"><td class="nebzone';
|
|
str += this.opacity + '"><a href="planet?id='+this.id+'">' + this.name + '</a></td></tr>';
|
|
return str;
|
|
}
|
|
|
|
function Nebula_drawTag()
|
|
{
|
|
var str = '<tr class="srow"><td class="nebzone';
|
|
str += this.opacity + '">N/A</td></tr>';
|
|
return str;
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// SYSTEMS AND UNCHARTED SPACE
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
function System(id,x,y,md5,nebula,prot)
|
|
{
|
|
this.id = id;
|
|
this.x = parseInt(x, 10);
|
|
this.y = parseInt(y, 10);
|
|
this.md5 = md5;
|
|
this.nebula = nebula;
|
|
this.protection = (prot != '0');
|
|
this.planets = new Array();
|
|
this.update = Math.round((new Date().getTime()) / 1000);
|
|
|
|
this.drawPlanets = System_drawPlanets;
|
|
this.drawAlliances = System_drawAlliances;
|
|
}
|
|
|
|
function System_drawPlanets()
|
|
{
|
|
var str = '<table class="sys';
|
|
if (this.nebula > 0)
|
|
str += 'neb' + this.nebula;
|
|
else if (this.prot > 0)
|
|
str += 'prot';
|
|
str += '" cellspacing="0" cellpadding="0">';
|
|
|
|
var i;
|
|
for (i=0;i<this.planets.length;i++)
|
|
str += this.planets[i].drawName();
|
|
|
|
return str + '</table>';
|
|
}
|
|
|
|
function System_drawAlliances()
|
|
{
|
|
var str = '<table class="sys';
|
|
if (this.nebula > 0)
|
|
str += 'neb' + this.nebula;
|
|
else if (this.prot > 0)
|
|
str += 'prot';
|
|
str += '" cellspacing="0" cellpadding="0">';
|
|
|
|
var i;
|
|
for (i=0;i<this.planets.length;i++)
|
|
str += this.planets[i].drawTag();
|
|
|
|
return str + '</table>';
|
|
}
|
|
|
|
|
|
function Uncharted()
|
|
{
|
|
this.md5 = '-';
|
|
this.update = Math.round((new Date().getTime()) / 1000);
|
|
this.drawPlanets = Uncharted_getCode;
|
|
this.drawAlliances = Uncharted_getCode;
|
|
}
|
|
|
|
function Uncharted_getCode()
|
|
{
|
|
var i, str = '<table class="sysunch" cellspacing="0" cellpadding="0">';
|
|
for (i=0;i<6;i++)
|
|
str += '<tr class="srow"><td>'+uncharted+'</td></tr>';
|
|
return str + '</table>';
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// THE MAP
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
function MapListItem(s,p,o)
|
|
{
|
|
this.system = s;
|
|
this.planet = p;
|
|
this.orbit = o;
|
|
}
|
|
|
|
function Map(mode)
|
|
{
|
|
this.systems = new Hashtable();
|
|
this.cx = false;
|
|
this.cy = false;
|
|
this.size = false;
|
|
this.refresh = '';
|
|
this.mode = mode;
|
|
|
|
this.list = new Array();
|
|
this.sortType = 1;
|
|
this.sortDir = false;
|
|
|
|
this.setParm = Map_setParm;
|
|
this.checkUpdates = Map_checkUpdates;
|
|
this.parse = Map_parse;
|
|
this.clearCache = Map_clearCache;
|
|
this.draw = Map_draw;
|
|
|
|
this.mapGridBegin = Map_gridBegin;
|
|
this.mapGridEnd = Map_gridEnd;
|
|
this.mapListBegin = Map_listBegin;
|
|
this.mapListEnd = Map_listEnd;
|
|
|
|
this.mapList = Map_list;
|
|
this.mapPlanets = Map_planets;
|
|
this.mapAlliances = Map_alliances;
|
|
}
|
|
|
|
function Map_setParm(cx,cy,size)
|
|
{
|
|
if (cx == this.cx && cy == this.cy && size == this.size)
|
|
return;
|
|
|
|
this.cx = cx;
|
|
this.cy = cy;
|
|
this.size = size;
|
|
|
|
var mod;
|
|
mod = this.size % 2;
|
|
this.minX = this.cx + (mod - this.size) / 2;
|
|
this.maxX = this.cx + (this.size + mod - 2) / 2;
|
|
this.minY = this.cy + (mod - this.size) / 2;
|
|
this.maxY = this.cy + (this.size + mod - 2) / 2;
|
|
|
|
this.checkUpdates();
|
|
}
|
|
|
|
function Map_checkUpdates()
|
|
{
|
|
|
|
var i,j,as = new Array(), str;
|
|
var now = Math.round((new Date().getTime()) / 1000);
|
|
for (i=this.minX;i<=this.maxX;i++) for (j=this.minY;j<=this.maxY;j++)
|
|
{
|
|
var str = i + ',' + j, s = this.systems.get(str);
|
|
|
|
if (!s)
|
|
as.push(str + ',');
|
|
else if (now - s.update > 60)
|
|
{
|
|
as.push(str + ',' + s.md5);
|
|
s.update = now;
|
|
}
|
|
}
|
|
this.refresh = as.join('#');
|
|
}
|
|
|
|
function Map_clearCache()
|
|
{
|
|
var i, s, lk = this.systems.keys(), nk = 0;
|
|
var now = Math.round((new Date().getTime()) / 1000);
|
|
var Mx=this.maxX+4,mx=this.minX-4, My=this.maxY+4,my=this.minY-4;
|
|
|
|
for (i=0;i<lk.length;i++)
|
|
{
|
|
s = this.systems.get(lk[i]);
|
|
if (!s || (s.x<=Mx&&s.x>=mx&&s.y<=My&&s.y>=my) || nk > 50 || now-s.update<300)
|
|
{
|
|
nk ++;
|
|
continue;
|
|
}
|
|
this.systems.remove(lk[i]);
|
|
}
|
|
}
|
|
|
|
function Map_parse(data)
|
|
{
|
|
var l = data.split('\n');
|
|
var st = 0, s, pdat, i;
|
|
var mod = '#';
|
|
|
|
while (l.length)
|
|
{
|
|
i = l.shift();
|
|
if (st == 0)
|
|
{
|
|
var a = i.split('#');
|
|
if (a[0] == '') {
|
|
s = new Uncharted();
|
|
} else {
|
|
s = new System(a[0], a[1], a[2], a[3], a[4], a[5]);
|
|
st = (a[4] > 0) ? 3 : 1;
|
|
}
|
|
this.systems.put(a[1] + "," + a[2], s);
|
|
mod += a[1] + "," + a[2] + '#';
|
|
} else if (st == 1) {
|
|
pdat = i.split('#');
|
|
st ++;
|
|
}
|
|
else if (st == 2)
|
|
{
|
|
s.planets.push(new Planet(s, pdat.shift(), i, pdat.shift(), pdat.shift(), pdat.join('#')));
|
|
st = (s.planets.length == 6) ? 0 : 1;
|
|
}
|
|
else if (st == 3)
|
|
{
|
|
pdat = i.split('#');
|
|
s.planets.push(new Nebula(pdat.shift(), pdat.shift(), pdat.join('#')));
|
|
if (s.planets.length == 6)
|
|
st = 0;
|
|
}
|
|
}
|
|
|
|
this.refresh = "";
|
|
}
|
|
|
|
function Map_draw()
|
|
{
|
|
var str;
|
|
switch (this.mode)
|
|
{
|
|
case 0: str = this.mapGridBegin() + this.mapPlanets() + this.mapGridEnd(); break;
|
|
case 1: str = this.mapGridBegin() + this.mapAlliances() + this.mapGridEnd(); break;
|
|
case 2: str = this.mapListBegin() + this.mapList() + this.mapListEnd(); break;
|
|
}
|
|
document.getElementById('jsmapint').innerHTML = str;
|
|
}
|
|
|
|
function Map_gridBegin()
|
|
{
|
|
var i, tmp = "<table class='map' id='msz" + this.size + "' cellspacing='0'>";
|
|
tmp += "<tr class='hd'><td class='idx'> </td><td class='idx'>-X</td>";
|
|
tmp += "<td colspan='"+this.size+"' class='arrow' onClick='moveUp()' " + maptt[10] + ">";
|
|
tmp += "<img src='"+staticurl+"/beta5/pics/up_"+color+".gif' alt='"+dirs[0]+"' /></a></td>";
|
|
tmp += "<td class='idx'>X</td><td class='idx'> </td></tr>";
|
|
|
|
tmp += "<tr class='hd'><td class='idx'>Y</td><td class='idx'></td>";
|
|
for (i=this.minX;i<=this.maxX;i++)
|
|
tmp += "<td class='mgrcol'>"+i+"</td>";
|
|
tmp += "<td class='idx'></td><td class='idx'>Y</td></tr>";
|
|
return tmp;
|
|
}
|
|
|
|
function Map_gridEnd()
|
|
{
|
|
var i, tmp = "<tr class='hd'><td class='idx'>-Y</td><td class='idx'> </td>";
|
|
for (i=this.minX;i<=this.maxX;i++)
|
|
tmp += "<td class='mgrcol'>"+i+"</td>";
|
|
tmp += "<td class='idx'> </td><td class='idx'>-Y</td></tr>";
|
|
tmp += "<tr class='hd'><td class='idx'> </td><td class='idx'>-X</td>";
|
|
tmp += "<td colspan='"+this.size+"' class='arrow' onClick='moveDown()' " + maptt[13] + ">";
|
|
tmp += "<img src='"+staticurl+"/beta5/pics/down_"+color+".gif' alt='"+dirs[1]+"' /></a></td><td class='idx'>X</td>";
|
|
tmp += "<td class='idx'> </td></tr>";
|
|
tmp += "</table>";
|
|
return tmp;
|
|
}
|
|
|
|
function Map_planets()
|
|
{
|
|
var j, i, str = '';
|
|
for (j=this.maxY;j>=this.minY;j--)
|
|
{
|
|
str += '<tr>';
|
|
if (j == this.maxY)
|
|
{
|
|
str += "<td rowspan='"+this.size+"' class='arrow' onClick='moveLeft()' " + maptt[11] + ">";
|
|
str += "<img src='"+staticurl+"/beta5/pics/left_"+color+".gif' alt='"+dirs[2]+"' /></td>";
|
|
}
|
|
str += "<td class='hd'>"+j+"</td>";
|
|
for (i=this.minX;i<=this.maxX;i++)
|
|
str += '<td class="system">' + this.systems.get(i+','+j).drawPlanets() + '</td>';
|
|
str += "<td class='hd'>"+j+"</td>";
|
|
if (j == this.maxY)
|
|
{
|
|
str += "<td rowspan='"+this.size+"' class='arrow' onClick='moveRight()' " + maptt[12] + ">";
|
|
str += "<img src='"+staticurl+"/beta5/pics/right_"+color+".gif' alt='"+dirs[3]+"' /></td>";
|
|
}
|
|
str += '</tr>';
|
|
}
|
|
return str;
|
|
}
|
|
|
|
function Map_alliances()
|
|
{
|
|
var j, i, str = '';
|
|
for (j=this.maxY;j>=this.minY;j--)
|
|
{
|
|
str += '<tr>';
|
|
if (j == this.maxY)
|
|
{
|
|
str += "<td rowspan='"+this.size+"' class='arrow' onClick='moveLeft()' " + maptt[11] + ">";
|
|
str += "<img src='"+staticurl+"/beta5/pics/left_"+color+".gif' alt='"+dirs[2]+"' /></td>";
|
|
}
|
|
str += "<td class='hd'>"+j+"</td>";
|
|
for (i=this.minX;i<=this.maxX;i++)
|
|
str += '<td class="system">' + this.systems.get(i+','+j).drawAlliances() + '</td>';
|
|
str += "<td class='hd'>"+j+"</td>";
|
|
if (j == this.maxY)
|
|
{
|
|
str += "<td rowspan='"+this.size+"' class='arrow' onClick='moveRight()' " + maptt[12] + ">";
|
|
str += "<img src='"+staticurl+"/beta5/pics/right_"+color+".gif' alt='"+dirs[3]+"' /></td>";
|
|
}
|
|
str += '</tr>';
|
|
}
|
|
return str;
|
|
}
|
|
|
|
function Map_listBegin()
|
|
{
|
|
var hdTypes = ['Coord','Name','Alliance','Opacity','Protected'];
|
|
var hdCols = ['', ' class="pname" colspan="2"', '', '', ''];
|
|
var i,j,o;
|
|
|
|
this.list = new Array();
|
|
for (i=this.minX;i<=this.maxX;i++) for (j=this.minY;j<=this.maxY;j++)
|
|
{
|
|
var s = this.systems.get(i+','+j);
|
|
if (!s || !s.planets)
|
|
continue;
|
|
for (k=0;k<6;k++)
|
|
this.list.push(new MapListItem(s,s.planets[k],k+1));
|
|
}
|
|
var smet = 'this.list.sort(spl_' + hdTypes[this.sortType] + '_' + (this.sortDir ? "desc" : "asc") + ')';
|
|
eval(smet);
|
|
|
|
var str = '<table class="list" cellspacing="0" cellpadding="0" id="plist"><tr>';
|
|
if (hdNames.length == 4 && gameType != 1) {
|
|
hdNames.push(lcHeader[gameType]);
|
|
}
|
|
for (i = 0; i < hdNames.length; i ++) {
|
|
str += '<th' + hdCols[i] + ' ' + maptt[20] + ' onClick="map.sortType=' + i
|
|
+ ';map.sortDir=!map.sortDir;map.draw()">';
|
|
if (this.sortType == i) {
|
|
str += '<b>';
|
|
}
|
|
str += hdNames[i];
|
|
if (this.sortType == i) {
|
|
str += '</b><img src="'+staticurl+'/beta5/pics/';
|
|
str += this.sortDir ? "up" : "down";
|
|
str += '_' + color + '.gif" alt="' + (this.sortDir ? dirs[0] : dirs[1]) + '" />';
|
|
}
|
|
str += '</th>';
|
|
}
|
|
str += '</tr>';
|
|
|
|
return str;
|
|
}
|
|
|
|
function Map_listEnd()
|
|
{
|
|
return '</table>';
|
|
}
|
|
|
|
function Map_list() {
|
|
var i, str = '';
|
|
for (i = 0; i < this.list.length; i ++) {
|
|
str += '<tr class="';
|
|
if (this.list[i].system.nebula != 0) {
|
|
str += 'nebzone' + this.list[i].planet.opacity + '"';
|
|
} else if (this.list[i].planet.opacity == 0) {
|
|
str += 'planet' + (this.list[i].planet.relation == 0 ? 'n'
|
|
: (this.list[i].planet.relation == 1 ? 'a' : 'o')) + '"';
|
|
} else {
|
|
str += 'prem"';
|
|
}
|
|
str += '><td>(<b>' + this.list[i].system.x + ',' + this.list[i].system.y + '</b>,';
|
|
str += this.list[i].orbit + ')</td>';
|
|
str += '<td';
|
|
if (this.list[i].system.nebula == 0) {
|
|
if (this.list[i].planet.opacity == 0) {
|
|
str += ' class="pimg"><img src="' + staticurl + '/beta5/pics/pl/s/'
|
|
+ this.list[i].planet.id + '.png" alt="[P]" /></td><td class="pname">';
|
|
} else {
|
|
str += ' class="pimg"><img src="' + staticurl
|
|
+ '/beta5/pics/prem_s.png" alt="[P]" /></td><td class="pname">';
|
|
}
|
|
} else {
|
|
str += ' class="pname" colspan="2">';
|
|
}
|
|
str += '<a href="planet?id=' + this.list[i].planet.id + '" ' + maptt[30] + ' >'
|
|
+ this.list[i].planet.name + '</a></td><td>';
|
|
if (this.list[i].system.nebula == 0) {
|
|
str += '[' + this.list[i].planet.tag + ']';
|
|
} else {
|
|
str += '-';
|
|
}
|
|
str += '</td><td>' + this.list[i].planet.opacity;
|
|
if (gameType != 1) {
|
|
str += '</td><td>' + (this.list[i].system.protection == 0 ? yesNo[1] : yesNo[0]);
|
|
}
|
|
str += '</td></tr>';
|
|
}
|
|
return str;
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// INITIALISATION AND GENERIC FUNCTIONS
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
function PlayerPlanet(id, name)
|
|
{
|
|
this.id = id;
|
|
this.name = name;
|
|
}
|
|
|
|
function mapInit(data)
|
|
{
|
|
gameType = document.getElementById('gametype').innerHTML;
|
|
|
|
// Receiving: mode followed by x#y#is_id#id_or_name followed by (id#name)*
|
|
var l = data.split('\n');
|
|
var m = parseInt(l.shift(), 10);
|
|
var a = l.shift().split('#');
|
|
|
|
plPlanets = new Array();
|
|
while (l.length > 0)
|
|
{
|
|
var p = l.shift().split('#');
|
|
plPlanets.push(new PlayerPlanet(p.shift(), p.join('#')));
|
|
}
|
|
|
|
centreOn = (a[2] == 1) ? a[3] : "";
|
|
centreOnOwn = (a[2] == 0) ? a[3] : 0;
|
|
|
|
map = new Map(m);
|
|
map.setParm(parseInt(a[0],10),parseInt(a[1],10),5);
|
|
drawMapLayout();
|
|
|
|
x_updateData(map.refresh, mapDataReceived);
|
|
setTimeout('maintainMap()', 11000);
|
|
}
|
|
|
|
function drawMapLayout()
|
|
{
|
|
var str = "<tr><td style='width:95%' id='jsctrls'> </td><td style='width:5%;vertical-align:top'><a href='manual?p=maps'>Help</a></td></tr>"
|
|
+ "<tr><td colspan='2'><hr/></td></tr><tr><td colspan='2' id='jsmapint'> </td></tr>";
|
|
document.getElementById('jsmap').innerHTML = "<table cellspacing='0' cellpadding='0'>" + str + "</table>";
|
|
drawMapControls();
|
|
setTimeout('x_getPlayerPlanets(playerPlanetsReceived)', 300000);
|
|
}
|
|
|
|
function playerPlanetsReceived(data)
|
|
{
|
|
plPlanets = new Array();
|
|
if (data != "")
|
|
{
|
|
var l = data.split('\n');
|
|
while (l.length > 0)
|
|
{
|
|
var p = l.shift().split('#');
|
|
plPlanets.push(new PlayerPlanet(p.shift(), p.join('#')));
|
|
}
|
|
}
|
|
drawPlayerList();
|
|
setTimeout('x_getPlayerPlanets(playerPlanetsReceived)', 300000);
|
|
}
|
|
|
|
function mapDataReceived(data)
|
|
{
|
|
if (data != "")
|
|
map.parse(data);
|
|
map.draw();
|
|
inUpdate = false;
|
|
}
|
|
|
|
function maintainMap()
|
|
{
|
|
if (inUpdate)
|
|
{
|
|
setTimeout('maintainMap()', 500);
|
|
return;
|
|
}
|
|
inUpdate = true;
|
|
map.clearCache();
|
|
map.checkUpdates();
|
|
refreshMap();
|
|
setTimeout('maintainMap()', 11000);
|
|
}
|
|
|
|
function refreshMap()
|
|
{
|
|
if (map.refresh == '')
|
|
{
|
|
map.draw();
|
|
inUpdate = false;
|
|
}
|
|
else
|
|
x_updateData(map.refresh, mapDataReceived);
|
|
}
|
|
|
|
function resultReceived(data)
|
|
{
|
|
if (data == "ERR")
|
|
{
|
|
inUpdate = false;
|
|
return;
|
|
}
|
|
|
|
var a = data.split('#');
|
|
if (a[2] == 1)
|
|
{
|
|
centreOn = a[3];
|
|
centreMode = 2;
|
|
document.getElementById('cm2').checked = true;
|
|
document.getElementById('cp').value = centreOn;
|
|
}
|
|
else
|
|
{
|
|
centreOnOwn = a[3];
|
|
centreMode = 1;
|
|
document.getElementById('cm1').checked = true;
|
|
drawPlayerList();
|
|
}
|
|
document.getElementById('cx').value = a[0];
|
|
document.getElementById('cy').value = a[1];
|
|
|
|
map.setParm(parseInt(a[0],10),parseInt(a[1],10),map.size);
|
|
refreshMap();
|
|
}
|
|
|
|
function drawPlayerList()
|
|
{
|
|
var i, str = '<select name="plpl" onChange="centreOnOwn=options[selectedIndex].value">';
|
|
str += '<option value="0">-----</option>';
|
|
for (i=0;i<plPlanets.length;i++)
|
|
{
|
|
str += '<option value="'+plPlanets[i].id+'"'+(plPlanets[i].id==centreOnOwn?' selected="selected"':'')+'>';
|
|
str += plPlanets[i].name.replace(/&/g,'&').replace(/>/g,'>').replace(/</g,'<') + '</option>';
|
|
}
|
|
str += '</select>';
|
|
document.getElementById('plpl').innerHTML = str;
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// CONTROLS
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
function setSize(s)
|
|
{
|
|
if (inUpdate)
|
|
{
|
|
setTimeout('setSize('+s+')', 500);
|
|
return;
|
|
}
|
|
inUpdate = true;
|
|
map.setParm(map.cx,map.cy,parseInt(s,10));
|
|
refreshMap();
|
|
}
|
|
|
|
function setMode(m)
|
|
{
|
|
if (inUpdate)
|
|
{
|
|
setTimeout('setMode("'+m+'")', 500);
|
|
return;
|
|
}
|
|
|
|
inUpdate = true;
|
|
map.mode = parseInt(m,10);
|
|
map.draw();
|
|
inUpdate = false;
|
|
}
|
|
|
|
function moveUp()
|
|
{
|
|
if (inUpdate)
|
|
{
|
|
setTimeout('moveUp()', 50);
|
|
return;
|
|
}
|
|
inUpdate = true;
|
|
document.getElementById('cy').value = map.cy + 1;
|
|
document.getElementById('cm0').checked = true;
|
|
centreMode = 0;
|
|
map.setParm(map.cx, map.cy+1, map.size);
|
|
refreshMap();
|
|
}
|
|
|
|
function moveDown()
|
|
{
|
|
if (inUpdate)
|
|
{
|
|
setTimeout('moveDown()', 50);
|
|
return;
|
|
}
|
|
inUpdate = true;
|
|
document.getElementById('cy').value = map.cy - 1;
|
|
document.getElementById('cm0').checked = true;
|
|
centreMode = 0;
|
|
map.setParm(map.cx, map.cy-1, map.size);
|
|
refreshMap();
|
|
}
|
|
|
|
function moveLeft()
|
|
{
|
|
if (inUpdate)
|
|
{
|
|
setTimeout('moveLeft()', 50);
|
|
return;
|
|
}
|
|
inUpdate = true;
|
|
document.getElementById('cx').value = map.cx - 1;
|
|
document.getElementById('cm0').checked = true;
|
|
centreMode = 0;
|
|
map.setParm(map.cx-1, map.cy, map.size);
|
|
refreshMap();
|
|
}
|
|
|
|
function moveRight()
|
|
{
|
|
if (inUpdate)
|
|
{
|
|
setTimeout('moveRight()', 50);
|
|
return;
|
|
}
|
|
inUpdate = true;
|
|
document.getElementById('cx').value = map.cx + 1;
|
|
document.getElementById('cm0').checked = true;
|
|
centreMode = 0;
|
|
map.setParm(map.cx+1, map.cy, map.size);
|
|
refreshMap();
|
|
}
|
|
|
|
function manualUpdate()
|
|
{
|
|
if (inUpdate)
|
|
{
|
|
setTimeout('manualUpdate()', 500);
|
|
return;
|
|
}
|
|
inUpdate = true;
|
|
|
|
if (centreMode == 0)
|
|
{
|
|
var tx, nx, ty, ny;
|
|
tx = document.getElementById('cx').value; ty = document.getElementById('cy').value;
|
|
if (tx == '-0') tx = '0';
|
|
if (ty == '-0') ty = '0';
|
|
nx = parseInt(tx,10); ny = parseInt(ty,10);
|
|
if (tx != nx.toString() || ty != ny.toString())
|
|
{
|
|
inUpdate = false;
|
|
return;
|
|
}
|
|
map.setParm(nx, ny, map.size);
|
|
refreshMap();
|
|
}
|
|
else if (centreMode == 1)
|
|
{
|
|
var i;
|
|
for (i=0;i<plPlanets.length&&plPlanets[i].id!=centreOnOwn;i++) ;
|
|
if (i==plPlanets.length)
|
|
{
|
|
inUpdate = false;
|
|
return;
|
|
}
|
|
x_findName(plPlanets[i].name, resultReceived);
|
|
}
|
|
else if (centreMode == 2)
|
|
x_findName(document.getElementById('cp').value, resultReceived);
|
|
}
|
|
|
|
|
|
//--------------------------------------------------
|
|
// LIST SORTING
|
|
//--------------------------------------------------
|
|
|
|
function spl_Coord_asc(a,b)
|
|
{
|
|
var sup;
|
|
if (a.system.x!=b.system.x)
|
|
sup = (a.system.x>b.system.x);
|
|
else if (a.system.y!=b.system.y)
|
|
sup = (a.system.y>b.system.y);
|
|
else
|
|
sup = (a.orbit>b.orbit);
|
|
return sup?1:-1;
|
|
}
|
|
|
|
function spl_Coord_desc(a,b)
|
|
{
|
|
var sup;
|
|
if (a.system.x!=b.system.x)
|
|
sup = (a.system.x>b.system.x);
|
|
else if (a.system.y!=b.system.y)
|
|
sup = (a.system.y>b.system.y);
|
|
else
|
|
sup = (a.orbit>b.orbit);
|
|
return sup?-1:1;
|
|
}
|
|
|
|
function spl_Name_asc(a,b)
|
|
{
|
|
var ra = a.planet.name.toLowerCase(); var rb = b.planet.name.toLowerCase();
|
|
return (ra < rb) ? -1 : 1;
|
|
}
|
|
|
|
function spl_Name_desc(a,b)
|
|
{
|
|
var ra = a.planet.name.toLowerCase(); var rb = b.planet.name.toLowerCase();
|
|
return (ra > rb) ? -1 : 1;
|
|
}
|
|
|
|
function spl_Alliance_asc(a,b)
|
|
{
|
|
var ra, rb;
|
|
ra = (a.system.nebula == 0) ? a.planet.tag.toLowerCase() : "";
|
|
rb = (b.system.nebula == 0) ? b.planet.tag.toLowerCase() : "";
|
|
return (ra < rb) ? -1 : (ra > rb ? 1 : spl_Name_asc(a,b));
|
|
}
|
|
|
|
function spl_Alliance_desc(a,b)
|
|
{
|
|
var ra, rb;
|
|
ra = (a.system.nebula == 0) ? a.planet.tag.toLowerCase() : "";
|
|
rb = (b.system.nebula == 0) ? b.planet.tag.toLowerCase() : "";
|
|
return (ra < rb) ? 1 : (ra > rb ? -1 : spl_Name_desc(a,b));
|
|
}
|
|
|
|
function spl_Opacity_asc(a,b)
|
|
{
|
|
var ra = parseInt(a.planet.opacity, 10); var rb = parseInt(b.planet.opacity, 10);
|
|
return (ra < rb) ? -1 : ((ra > rb) ? 1 : spl_Coord_asc(a,b));
|
|
}
|
|
|
|
function spl_Opacity_desc(a,b)
|
|
{
|
|
var ra = parseInt(a.planet.opacity, 10); var rb = parseInt(b.planet.opacity, 10);
|
|
return (ra < rb) ? 1 : ((ra > rb) ? -1 : spl_Coord_desc(a,b));
|
|
}
|
|
|
|
function spl_Protected_asc(a,b) {
|
|
var ra = a.system.protection, rb = b.system.protection;
|
|
return (ra && !rb) ? -1 : ((rb && ! ra) ? 1 : spl_Coord_asc(a, b));
|
|
}
|
|
|
|
function spl_Protected_desc(a,b) {
|
|
var ra = a.system.protection, rb = b.system.protection;
|
|
return (ra && !rb) ? 1 : ((rb && ! ra) ? -1 : spl_Coord_desc(a, b));
|
|
}
|