botsArena/src/arenas/tron/js.js

128 lines
4.3 KiB
JavaScript
Raw Normal View History

2016-06-29 11:35:10 +02:00
function createElem(type,attributes){
var elem=document.createElement(type);
for (var i in attributes)
{elem.setAttribute(i,attributes[i]);}
return elem;
}
2016-07-01 07:50:35 +02:00
function addLog(message){
var divLogs = document.getElementById("logs");
var p=createElem('p',{});
p.innerHTML=message;
divLogs.appendChild(p);
divLogs.scrollTop = divLogs.scrollHeight;
}
2016-06-29 12:26:03 +02:00
function createElemNS(type,attributes){
2016-06-29 13:43:20 +02:00
//same as createElem but with ns for svg file
2016-06-29 12:20:16 +02:00
var elem=document.createElementNS("http://www.w3.org/2000/svg",type);
2016-06-29 12:14:01 +02:00
for (var i in attributes)
2016-06-29 12:26:03 +02:00
{elem.setAttributeNS(null,i,attributes[i]);}
2016-06-29 12:14:01 +02:00
return elem;
}
2016-06-29 23:41:50 +02:00
function changeSelect(number,botId){
//show an other selector if bot is chosen
var next = parseInt(number) + 1;
2016-06-29 23:45:16 +02:00
if((botId > 0) && (number < 12)){
2016-06-29 23:42:28 +02:00
if(document.getElementById('selectBot' + next)){
2016-06-29 23:41:50 +02:00
return;
}else{
show_bot_panel(next);
}
2016-06-29 23:52:10 +02:00
if(number > 0){
2016-06-29 23:51:31 +02:00
document.getElementById('fightButton').disabled = false;
2016-06-29 23:50:50 +02:00
}
2016-06-29 23:41:50 +02:00
}
}
2016-06-29 23:08:43 +02:00
function show_bot_panel(number){
//configurePlayers
var fieldset = createElem('fieldset',{'class':'botFormulaire'});
2016-06-29 23:19:36 +02:00
var legend = createElem('legend',{});
legend.innerHTML = 'bot ' + number;
fieldset.appendChild(legend);
2016-06-29 23:08:43 +02:00
var p=createElem('p');
2016-06-29 23:43:32 +02:00
var select = createElem('select',{'id':'selectBot' + number, 'onchange':'changeSelect(' + number + ',this.value);'});
2016-06-29 23:47:26 +02:00
var option = createElem('option',{'value': '0', 'selected': 'selected','disabled':'disabled'});
2016-06-29 23:25:28 +02:00
option.innerHTML = '';
select.appendChild(option);
2016-06-29 23:16:04 +02:00
for (var i = 0; i < botsAvailable.length; i++){
var option = createElem('option',{'value': botsAvailable[i]['id']});
option.innerHTML = botsAvailable[i]['name'];
2016-06-29 23:08:43 +02:00
select.appendChild(option);
}
p.appendChild(select);
fieldset.appendChild(p);
2016-06-30 13:52:20 +02:00
2016-06-29 23:08:43 +02:00
document.getElementById('configurePlayers').appendChild(fieldset);
}
2016-06-29 09:30:21 +02:00
2016-07-03 12:50:29 +02:00
function applyInitMessage(req,xd_check){
2016-06-30 13:52:20 +02:00
document.getElementById('fightButton').disabled=true;
2016-06-29 16:30:39 +02:00
//callback function when init game request
2016-06-29 13:55:23 +02:00
if(req.readyState == 4){
if(req.status == 200) {
2016-07-01 07:50:35 +02:00
//alert (req.responseText);
try{
var ret = JSON.parse(req.responseText);
}catch(e){
2016-07-01 07:54:25 +02:00
addLog('erreur' + req.responseText);
2016-07-01 07:50:35 +02:00
return;
}
addLog(ret['logs']);
2016-07-03 12:50:29 +02:00
if(ret['status'] == "OK"){
play(ret['gameId'],xd_check);
}
2016-06-29 09:30:21 +02:00
2016-06-29 13:43:20 +02:00
}else{
2016-06-30 14:17:12 +02:00
alert ('error ' + req.status);
2016-06-29 13:43:20 +02:00
document.getElementById('fightButton').disabled=false;
return;
}
}
}
2016-07-03 12:50:29 +02:00
function play(gameId,xd_check){
2016-07-03 12:51:30 +02:00
var req = new XMLHttpRequest();
2016-07-03 12:51:18 +02:00
req.onreadystatechange = function(){
2016-07-03 12:50:29 +02:00
if(req.readyState == 4){
if(req.status == 200) {
addLog(req.responseText);
}else{
}
}
};
2016-07-03 12:52:24 +02:00
req.open("POST", '/tron', true);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.send('act=play&xd_check=' + xd_check + '&gameId=' + gameId + '&fullLogs=' + document.getElementById("fullLogs").checked);
2016-07-03 12:50:29 +02:00
}
2016-06-30 12:18:32 +02:00
function tron(xd_check){
2016-06-29 12:55:45 +02:00
//empty
while (document.getElementById('fightResult').firstChild) {
document.getElementById('fightResult').removeChild(document.getElementById('fightResult').firstChild);
}
// draw border;
2016-06-29 13:04:30 +02:00
var svg = createElemNS('svg',{'id':'map','width':'500','height':'500','viewBox':'0 0 1000 1000'});
2016-06-29 12:55:45 +02:00
var rect=createElemNS('rect',{'x':'0','y':'0','width':'1000','height':'1000','style':'stroke:#000000; fill:none;'});
svg.appendChild(rect);
document.getElementById("fightResult").appendChild(svg);
2016-07-01 07:50:35 +02:00
var plogs = createElem("p",{'id':'logs'});
document.getElementById("fightResult").appendChild(plogs);
2016-06-30 13:52:20 +02:00
//get bot list
var botsList=[];
var i=0;
while(document.getElementById('selectBot' + i)){
2016-06-30 14:22:08 +02:00
botsList.push(document.getElementById('selectBot' + i).value);
2016-06-30 13:52:20 +02:00
i++;
}
2016-06-29 13:43:20 +02:00
//ask arena to send bots init messages
2016-06-29 13:55:23 +02:00
var request = new XMLHttpRequest();
2016-07-03 12:50:29 +02:00
request.onreadystatechange = function(){applyInitMessage(request,xd_check)};
2016-06-29 13:43:20 +02:00
request.open("POST", '/tron', true);
request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
2016-06-30 13:54:34 +02:00
request.send('act=initGame&xd_check=' + xd_check + '&bots=' + JSON.stringify(botsList) + '&fullLogs=' + document.getElementById("fullLogs").checked);
2016-06-29 10:40:08 +02:00
}