126 lines
3.8 KiB
JavaScript
126 lines
3.8 KiB
JavaScript
(function() {
|
|
var messageChannel = 'MESSAGE_CHANNEL_GATE_GAME';
|
|
var entityID;
|
|
var gates;
|
|
var racers;
|
|
|
|
|
|
function sendMessage(message) {
|
|
message.entityID = entityID;
|
|
Messages.sendMessage(
|
|
messageChannel,
|
|
JSON.stringify(message)
|
|
);
|
|
}
|
|
|
|
function onReceivedMessage(channel, message, senderID) {
|
|
try {
|
|
var data = JSON.parse(message);
|
|
} catch (e) {
|
|
print('[scoreboard_server] Error parsing message: ' + message);
|
|
return;
|
|
}
|
|
|
|
switch (data.type) {
|
|
case 'INIT_GATE':
|
|
addGate(data.gateID);
|
|
print(JSON.stringify(gates));
|
|
break;
|
|
|
|
case 'REMOVE_GATE':
|
|
removeGate(data.gateID);
|
|
break;
|
|
|
|
case 'CHECKPOINT':
|
|
addRacer(data.racerID, data.racerName);
|
|
completeCheckpoint(data.racerID, data.gateID);
|
|
print(JSON.stringify(racers));
|
|
break;
|
|
}
|
|
}
|
|
|
|
function completeCheckpoint(racerID, gateID) {
|
|
var racer = racers[racerID];
|
|
var completedGates = racer.completedGates;
|
|
var isCompleted = (completedGates.indexOf(gateID) > -1);
|
|
if (!isCompleted) {
|
|
completedGates.push(gateID);
|
|
if (completedGates.length === 1) {
|
|
racer.isRacing = true;
|
|
racer.startTime = Date.now();
|
|
sendRenderMessage();
|
|
}
|
|
else if (completedGates.length === gates.length) {
|
|
racer.isRacing = false;
|
|
racer.finishTime = ((Date.now() - racer.startTime) / 1000);
|
|
if (racer.bestTime === -1 || racer.finishTime < racer.bestTime) {
|
|
racer.bestTime = racer.finishTime;
|
|
}
|
|
racer.completedGates = [];
|
|
sendRenderMessage();
|
|
}
|
|
else if (completedGates.length > gates.length) {
|
|
print('More completed gates than gates exist! A gate was probably deleted.');
|
|
racer.isRacing = false;
|
|
racer.finishTime = ((Date.now() - racer.startTime) / 1000);
|
|
if (racer.bestTime === -1 || racer.finishTime < racer.bestTime) {
|
|
racer.bestTime = racer.finishTime;
|
|
}
|
|
racer.completedGates = [];
|
|
sendRenderMessage();
|
|
}
|
|
}
|
|
}
|
|
|
|
function addRacer(racerID, racerName) {
|
|
if (!racers[racerID]) {
|
|
racers[racerID] = {
|
|
name: racerName,
|
|
completedGates: [],
|
|
startTime: -1,
|
|
finishTime: -1,
|
|
bestTime: -1,
|
|
isRacing: false
|
|
}
|
|
}
|
|
}
|
|
|
|
function addGate(gateID) {
|
|
var isGateAdded = (gates.indexOf(gateID) > -1);
|
|
if (!isGateAdded) {
|
|
gates.push(gateID);
|
|
}
|
|
}
|
|
|
|
function removeGate(gateID) {
|
|
var gateIndex = gates.indexOf(gateID);
|
|
if (gateIndex > -1) {
|
|
gates.splice(gateIndex, 1);
|
|
}
|
|
}
|
|
|
|
function sendRenderMessage() {
|
|
sendMessage({
|
|
type: 'RENDER',
|
|
racers: racers
|
|
});
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
preload: function(id) {
|
|
entityID = id;
|
|
gates = [];
|
|
racers = {};
|
|
Messages.subscribe(messageChannel);
|
|
Messages.messageReceived.connect(null, onReceivedMessage);
|
|
print('THERE HAD BETTER BE SOME CHANGES AROUND HERE');
|
|
},
|
|
unload: function(id) {
|
|
Messages.unsubscribe(messageChannel);
|
|
Messages.messageReceived.disconnect(null, onReceivedMessage);
|
|
},
|
|
};
|
|
})
|