HB/htdocs/n3p7bLn59Yco3d/js/api.js
2020-11-15 17:31:22 +01:00

534 lines
No EOL
18 KiB
JavaScript

var Desktop =
{
dom : {windows: {}},
ressources : {metal: 2000, cristal: 1500, ions: 1000, energie: [1000,1500]},
planete : 1, //Planete sélectionné
planetes : [[01,'Pegasi Alpha',8,31,4,1],[02,'Pegasi Beta',8,31,3,2],[03,'Pegasi Delta',8,31,2,3],[04,'Pegasi Zeta',8,31,1,4]], //id, nom , amas, syteme solaire, position, image.
menu : [['Fenêtre 1',fenetre1],['Fenêtre 2',fenetre2],['Batiments',batiments],['Dialog',dialog],['Notification',notification],['Double',doubler]],
descriptions : {
batiments:
{
1:['Usine de Métal','metal.png','Le purificateur de métal vous fournit les matières premières pour la construction de vos infrastructures et de vos unités. Plus vous développerez vos purificateurs, plus ils produiront de ressources. Les purificateurs les plus développés ont aussi besoin de plus d\'énergie.'],
2:['Purificateur de Cristal','cristal.png','Le purificateur de cristal vous fournit les ressources pour vos installations électroniques et pour les alliages. Le purificateur de cristal consomme deux fois plus d\'énergie que celui de métal. Tous les vaisseaux et bâtiments ont besoin de cristal pour leur bouclier ou encore leurs composants électroniques. La production augmente avec le développement de l\'usine.'],
3:['Ionisateur','hydrogene.jpg','L\'ionisateur utilise des ions négatifs et positifs d\'hydrogène pour créer une source conventionnelle de courant stable, servant à alimenter les bâtiments covenants qui nécessitent une arrivée massive de cette "ressource" pour actionner les divers éléments matériels des contrôles. La centrale de fusion à besoin de beaucoup d\'ions pour fonctionner.']
}},
Start : function()
{
/*new Ajax.Request('descriptions.xml',{method: 'get',onSuccess: function(xhr)
{
Desktop.dom.descriptions = xhr.responseXML;
truc = xhr;
bat = Desktop.dom.descriptions.documentElement.getElementsByTagName('*');
//alert(bat[2].textContent);
for(var i in bat)
{
//Desktop.descriptions['batiments'][bat[i].getAttribute('id')] = [bat[i].getAttribute('name'),bat[i].getAttribute('img'),bat[i].textContent];
//Desktop.descriptions.batiments = bat[i];
alert(i);
}
}});*/
this.dom.menu = create('ul',document.body,'menu');
this.dom.barre = create('div',document.body,'barre');
var barre = new Array();
for(var i=0; i < this.menu.length ; i++)
{
this.menu[i][2] = create('li',this.dom.menu);
this.menu[i][2].innerHTML = this.menu[i][0];
this.menu[i][2].onclick = this.menu[i][1];
}
var ressources = create('div',document.body,'ressources');
var metal = create('div',ressources);
metal.innerHTML = 'Métal : ';
metal = create('span',metal);
metal.innerHTML = this.ressources.metal;
var cristal = create('div',ressources);
cristal.innerHTML = 'Cristal : ';
cristal = create('span',cristal);
cristal.innerHTML = this.ressources.cristal;
var ions = create('div',ressources);
ions.innerHTML = 'Ions : ';
ions = create('span',ions);
ions.innerHTML = this.ressources.ions;
var energie = create('div',ressources);
energie.innerHTML = 'Energie : ';
var energie = create('span',energie);
energie.innerHTML = this.ressources.energie[0] +'/'+ this.ressources.energie[1];
this.dom.ressources = {metal: metal,cristal: cristal, ions: ions,energie: energie};
var planetes = create('div',document.body,'planetes');
var up = create('span',planetes,document.body,'up');
up.onclick = function()
{
return;
}
for(var i = 0; i <= 2 && i < this.planetes[i].length; i++)
{
var p = create('img',planetes);
p.src = 'planetes/'+this.planetes[i][5]+'.jpg';
p.onclick = callback(function(i) { Desktop.ChangePlanete(i);},i);
if(this.planetes[i][0] == this.planete) Element.addClassName(p,'selected');
}
var down = create('span',planetes,0,'down');
down.onclick = function()
{
return;
}
},
NewWin : function(id,t,c)
{
if(!this.dom.windows[id])
{
var o = new Object();
o.win = create('div',document.body,'Window'+id,'window');
o.win.style.zIndex = 10;
o.top = create('div',o.win,0,'top');
o.topleft = create('span',o.top,0,'topleft');
o.topcenter = create('span',o.top,0,'topcenter');
o.topright = create('span',o.top,0,'topright');
o.barre = create('div',o.win,0,'barre');
o.barre.onmousedown = function(event) { Desktop.WinMove(id,event,1); };
o.barre.onmouseup = function(event) { Desktop.WinMove(id,event,3); };
o.titre = create('span',o.barre,0,'titre');
o.titre.innerHTML = t;
o.button = create('div',o.barre,0,'button');
o.button.onmousedown, o.button.onmouseup = function() { return false;};
o.hide = create('span',o.button,0,'hide');
o.full = create('span',o.button,0,'full');
o.close = create('span',o.button,0,'close');
o.hide.onclick = function() { Desktop.WinHide(id); };
o.full.onclick = function() { Desktop.WinFull(id); };
o.close.onclick = function() { Desktop.WinClose(id); };
o.hide.onmousedown, o.full.onmousedown, o.close.onmousedown = function() { return false;};
o.content = create('div',o.win,0,'content');
if(typeof(c) == 'object') o.content.appendChild(c);
else o.content.innerHTML = c;
o.bottom = create('div',o.win,0,'bottom');
o.bottomleft = create('span',o.bottom,0,'bottomleft');
o.bottomcenter = create('span',o.bottom,0,'bottomcenter');
o.bottomright = create('span',o.bottom,0,'bottomright');
o.barre = create('div',this.dom.barre);
o.barre.innerHTML = t;
o.barre.onclick = function() { Desktop.WinFocus(id); } ;
o.id = id;
o.x = o.win.offsetLeft;
o.y = o.win.offsetTop;
o.h = o.win.offsetHeight;
o.w = o.win.offsetWidth;
o.full = false;
o.move = false;
o.moveX = 0;
o.moveY = 0;
this.dom.windows[id] = o;
var r = new Object();
r.id = id;
r.Close = function() { return Desktop.WinClose(id); } ;
r.Full = function() { return Desktop.WinFull(id); } ;
r.Hide = function() { return Desktop.WinHide(id); } ;
r.Focus = function() { return Desktop.WinFocus(id); } ;
r.Move = function(x,y) { return Desktop.WinMove(id,x,y); } ;
r.Resize = function(x,y) { return Desktop.WinResize(id,x,y); } ;
r.Content = function(t) { return Desktop.WinContent(id,t); } ;
this.WinFocus(id);
return r;
}
else this.WinFocus(id);
},
WinFull : function(id)
{
if(this.dom.windows[id].full)
{
this.dom.windows[id].win.style.left = this.dom.windows[id].full[0]+'px';
this.dom.windows[id].win.style.top = this.dom.windows[id].full[1]+'px';
this.dom.windows[id].win.style.width = this.dom.windows[id].full[2]+'px';
this.dom.windows[id].win.style.height = this.dom.windows[id].full[3]+'px';
this.dom.windows[id].full = false;
}
else
{
this.dom.windows[id].full = [this.dom.windows[id].win.offsetLeft, this.dom.windows[id].win.offsetTop, this.dom.windows[id].win.offsetWidth, this.dom.windows[id].win.offsetHeight];
this.dom.windows[id].win.style.top = '0';
this.dom.windows[id].win.style.left = '0';
this.dom.windows[id].win.style.width = '100%';
this.dom.windows[id].win.style.height = (document.documentElement.offsetHeight - this.dom.barre.offsetHeight - 49) + 'px';
}
Desktop.WinFocus(id);
},
WinHide : function(id)
{
this.dom.windows[id].win.style.display = 'none';
},
WinFocus : function(id)
{
this.dom.windows[id].win.style.display = 'block';
this.dom.windows[id].x = this.dom.windows[id].win.offsetLeft;
this.dom.windows[id].y = this.dom.windows[id].win.offsetTop;
this.dom.windows[id].w = this.dom.windows[id].win.offsetHeight;
this.dom.windows[id].h = this.dom.windows[id].win.offsetWidth;
var z = this.dom.windows[id].win.style.zIndex * 1;
for(var i in this.dom.windows)
{
z = z >= this.dom.windows[i].win.style.zIndex ? z : this.dom.windows[i].win.style.zIndex * 1;
}
this.dom.windows[id].win.style.zIndex = z+1;
},
WinMove : function(id,event,action)
{
if(action == 1 && !this.dom.windows[id].full) // MouseDown
{
Desktop.WinFocus(id);
this.dom.windows[id].moveX = Event.pointerX(event) - this.dom.windows[id].win.offsetLeft;
this.dom.windows[id].moveY = Event.pointerY(event) - this.dom.windows[id].win.offsetTop;
document.body.onmousemove = function(event) { Desktop.dom.windows[id].move = event; Desktop.WinMove(id,event,2);};
opacity(this.dom.windows[id].win,50);
}
else if(action == 2) //MouseMove
{
x = Event.pointerX(event) - this.dom.windows[id].moveX;
y = Event.pointerY(event) - this.dom.windows[id].moveY;
this.dom.windows[id].win.style.left = (x > 0 ? x : 0) + 'px';
this.dom.windows[id].win.style.top = (y > 0 ? y : 0) + 'px';
}
else if(action == 3) //MouseUp
{
this.dom.windows[id].x = this.dom.windows[id].win.offsetLeft;
this.dom.windows[id].y = this.dom.windows[id].win.offsetTop;
opacity(this.dom.windows[id].win,100);
document.body.onmousemove = function() { return false;};
}
},
WinContent: function(id,c)
{
if(typeof(c) == 'object')
{
this.dom.windows[id].content.innerHTML = '';
this.dom.windows[id].content.appendChild(c);
}
else this.dom.windows[id].content.innerHTML = c;
},
WinClose : function(id)
{
Element.remove(this.dom.windows[id].win);
Element.remove(this.dom.windows[id].barre);
delete this.dom.windows[id];
},
Dialog : function(text,callback)
{
if(!this.dom.dialog)
{
this.dom.darkness = create('div',document.body,'darkness');
fade('darkness',0,80,400);
this.dom.dialog = create('div',document.body,'dialog');
var p = create('p',this.dom.dialog);
p.innerHTML = text;
var ok = create('span',this.dom.dialog,0,'button');
ok.innerHTML = 'ok';
var cancel = create('span',this.dom.dialog,0,'button');
cancel.innerHTML = 'Annuler';
var quit = create('span',this.dom.dialog,0,'quit');
var close = function()
{
Element.remove(Desktop.dom.dialog);
Element.remove(Desktop.dom.darkness);
Desktop.dom.dialog = false;
Desktop.dom.darkness = false;
};
quit.onclick = close;
cancel.onclick = close;
ok.onclick = function()
{
close();
callback();
};
}
},
Notification: function(message)
{
if(!this.dom.notification)
{
this.dom.notification = create('p',document.body,'notification');
this.dom.notification.innerHTML = message;
move('notification','bottom',-110,35,2000);
setTimeout(function() {move('notification','bottom',35,-110,2000);},7000);
setTimeout(function() {Element.remove(Desktop.dom.notification); Desktop.dom.notification = false;},10000);
}
},
Ressource: function(ressource,set)
{
switch(ressource)
{
case 'metal':
case 'cristal':
case 'ions':
if(set)
{
this.dom.ressources[ressource].innerHTML = set;
this.ressources[ressource] = set;
}
break;
case 'energie':
if(set)
{
this.dom.ressources[ressource].innerHTML = set+'/'+this.ressources[ressource][1];
this.ressources[ressource][0] = set;
}
break;
case 'energieAll':
if(set)
{
this.dom.ressources[ressource].innerHTML = this.ressources[ressource][0]+'/'+set;
this.ressources[ressource][1] = set;
}
break;
default: return false;
}
return this.ressources[ressource];
},
ChangePlanete: function(i)
{
if(this.planetes[i][0] != this.planete) alert('Changement de planete : '+this.planetes[i][1]);
}
}
function create(type,parent,id,classe)
{
var element = document.createElement(type);
if(id && !$(id)) element.setAttribute('id',id);
if(classe) Element.addClassName(element,classe);
if(parent) element = $(parent).appendChild(element);
return element;
}
function callback(funct,parameter)
{
return function() { funct(parameter); };
}
function move(objet,relative,from,to,speed)
{
switch(relative)
{
case 'top':
case 'bottom':
case 'left':
case 'right':
for(var i=1; i <= (Math.floor(Math.abs(from - to))) ;i++)
{
setTimeout(callback(function(i) {$(objet).style[relative] = (from < to ? from + i : from -i)+'px';},i),Math.floor(speed / (Math.floor(Math.abs(from - to))) * i));
}
break;
default: return false;
}
}
function fade(objet,from,to,speed)
{
for(var i = 1; (Math.floor(Math.abs(from - to)) / 10) >= i; i++)
{
setTimeout(callback(function(i) {opacity(objet,(from < to ? from + i * 10 : from - i * 10));},i),Math.floor(speed / (Math.floor(Math.abs(from - to)) / 10)) * i);
}
}
function opacity(objet,opacity)
{
$(objet).style.opacity = opacity / 100;
$(objet).style.MozOpacity = opacity /100;
$(objet).style.KhtmlOpacity = opacity / 100;
$(objet).style.filter = "alpha(opacity="+opacity+")";
}
function bulle(objet,text)
{
if(!$('bulle'))
{
objet.onmouvehover = function()
{
bulle = $('body').appendChild(document.createElement('div'));
bulle.setAttribute('id','bulle');
};
}
}
function fenetre1()
{
var test1 = Desktop.NewWin('test1','Test','<i>Hello World</i>');
}
function fenetre2()
{
var test2 = Desktop.NewWin('test2','Test 2','<p>Bla bla bla bla bla bla bla bla bla bla bla<br />Bla bla bla bla bla bla bla bla bla bla bla<br />Bla bla bla bla bla bla bla bla bla bla bla<br />Bla bla bla bla bla bla bla bla bla bla bla<br />Bla bla bla bla bla bla bla bla bla bla bla<br />Bla bla bla bla bla bla bla bla bla bla bla<br />Bla bla bla bla bla bla bla bla bla bla bla<br /></p>');
}
function dialog()
{
Desktop.Dialog('Test',function() {alert('test');});
}
function notification()
{
Desktop.Notification('test');
}
function doubler()
{
Desktop.Ressource('metal',Desktop.ressources.metal*2);
Desktop.Ressource('cristal',Desktop.ressources.cristal*2);
Desktop.Ressource('ions',Desktop.ressources.ions*2);
Desktop.Ressource('energie',Desktop.ressources.energie[0]*2);
}
/*description = {
bat01: 'Le purificateur de m&eacute;tal vous fournit les mati&egrave;res premi&egrave;res pour la construction de vos infrastructures et de vos unit&eacute;s. Plus vous d&eacute;velopperez vos purificateurs, plus ils produiront de ressources. Les purificateurs les plus d&eacute;velopp&eacute;s ont aussi besoin de plus d\'&eacute;nergie.',
bat02: 'Le purificateur de cristal vous fournit les ressources pour vos installations &eacute;lectroniques et pour les alliages. Le purificateur de cristal consomme deux fois plus d\'&eacute;nergie que celui de m&eacute;tal. Tous les vaisseaux et b&acirc;timents ont besoin de cristal pour leur bouclier ou encore leurs composants &eacute;lectroniques. La production augmente avec le d&eacute;veloppement de l\'usine.',
bat03:'L\'ionisateur utilise des ions n&eacute;gatifs et positifs d\'hydrog&egrave;ne pour cr&eacute;er une source conventionnelle de courant stable, servant &agrave; alimenter les b&acirc;timents covenants qui n&eacute;cessitent une arriv&eacute;e massive de cette "ressource" pour actionner les divers &eacute;l&eacute;ments mat&eacute;riels des contr&ocirc;les. La centrale de fusion &agrave; besoin de beaucoup d\'ions pour fonctionner.'
};
ajax = {bat01: ['Usine de Métal','metal.png',3,100,200,300,0],bat02: ['Usine de Cristal','cristal.png',3,100,200,300,0],bat03: ['Ionisateur','hydrogene.jpg',3,100,200,300,0]};*/
function batiments()
{
var batiments = Desktop.descriptions.batiments;
var all = create('div');
all.style.height = '100%';
var left = create('dl',all,0,'menu');
var dt = create('dt',left);
dt.innerHTML = 'Batiments';
var right = create('div',all,0,'description');
var titre = create('h4',right);
titre.innerHTML = batiments[1][0];
var img = create('img',right);
img.src = 'images/'+batiments[1][1];
img.alt = batiments[1][0];
var p = create('p',right);
p.innerHTML = batiments[1][2];
var button = create('button',right);
button.innerHTML = 'Construire';
button.onclick = function() { alert('Construction!') };
for(var i in batiments)
{
var dd = create('dd',left);
dd.innerHTML = batiments[i][0];
if(i == 1) Element.addClassName(dd,'selected');
dd.onclick = callback(function(par)
{
var i = par[0];
var dd = par[1];
var dds = dd.parentNode.childNodes;
for(var j = 1; j < dds.length; j++)
{
Element.removeClassName(dds[j],'selected');
}
Element.addClassName(dd,'selected');
titre.innerHTML = batiments[i][0];
img.src = 'images/'+batiments[i][1];
img.alt = batiments[i][0];
p.innerHTML = batiments[i][2];
},[i,dd]);
}
Desktop.NewWin('batiments','Batiments',all);
}
Desktop.Start();
Element.remove($('start'));
Desktop.Notification('Bienvenue sur Halo-Battle');