mirror of
https://github.com/simon987/Much-Assembly-Required-Frontend.git
synced 2025-12-14 07:09:06 +00:00
Initial commit
This commit is contained in:
274
mar/old/GameClient.js
Normal file
274
mar/old/GameClient.js
Normal file
@@ -0,0 +1,274 @@
|
||||
/**
|
||||
* Listens for authentications responses from the server
|
||||
*/
|
||||
function authListener(message){
|
||||
|
||||
if(message.t === "auth"){
|
||||
|
||||
if(message.m === "ok"){
|
||||
console.log("Auth successful");
|
||||
client.requestUserInfo();
|
||||
|
||||
} else {
|
||||
console.log("Auth failed");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Listens for user info responses from the server
|
||||
*/
|
||||
function userInfoListener(message){
|
||||
if(message.t === "userInfo"){
|
||||
|
||||
game = new Game();
|
||||
game.worldX = message.worldX;
|
||||
game.worldY = message.worldY;
|
||||
|
||||
client.requestTerrain();
|
||||
}
|
||||
}
|
||||
|
||||
function formattedKeyBuffer(kbBuffer) {
|
||||
|
||||
var str = "Keyboard: ";
|
||||
|
||||
for(var i = 0; i < 16; i++){
|
||||
|
||||
if(kbBuffer[i] !== undefined) {
|
||||
|
||||
str += "0x" + kbBuffer[i].toString(16) + " ";
|
||||
|
||||
} else {
|
||||
|
||||
str += "____ ";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return str;
|
||||
|
||||
}
|
||||
|
||||
function terrainListener(message){
|
||||
if(message.t === "terrain"){
|
||||
|
||||
if(game.world !== undefined){
|
||||
|
||||
game.world.update(message.terrain);
|
||||
|
||||
} else {
|
||||
game.world = new Word(message.terrain);
|
||||
|
||||
//Setup keyboard buffer display
|
||||
game.textLayer = new PIXI.Container();
|
||||
game.rootContainer.addChild(game.textLayer);
|
||||
game.kbBuffer = [];
|
||||
|
||||
game.keyboardBuffer = new PIXI.Text(formattedKeyBuffer([]), {fontSize: 16, fontFamily: "fixedsys", fill: "white"});
|
||||
game.textLayer.addChild(game.keyboardBuffer);
|
||||
|
||||
|
||||
//Handle keypresses
|
||||
window.addEventListener('keydown', function(event) {
|
||||
|
||||
if(game.kbBuffer.length <= 16) {
|
||||
|
||||
client.sendKeypress(event.keyCode);
|
||||
|
||||
//Locally update the buffer
|
||||
game.kbBuffer.push(event.keyCode);
|
||||
game.keyboardBuffer.text = formattedKeyBuffer(game.kbBuffer);
|
||||
|
||||
if(event.keyCode >= 37 && event.keyCode <= 40){
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
console.log("Gameloop started");
|
||||
gameLoop();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function tickListener(message){
|
||||
if(message.t === "tick"){
|
||||
//Request objects
|
||||
client.socket.send(JSON.stringify({t: "object", x: game.worldX, y: game.worldY}));
|
||||
|
||||
//Update key buffer display
|
||||
if(game.textLayer){
|
||||
if(message.keys !== undefined){
|
||||
console.log(message.keys);
|
||||
|
||||
game.kbBuffer = message.keys;
|
||||
game.keyboardBuffer.text = formattedKeyBuffer(game.kbBuffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function objectListener(message){
|
||||
|
||||
if(message.t === "object"){
|
||||
|
||||
game.world.updateObjects(message.objects);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function codeListener(message){
|
||||
|
||||
if(message.t === "code"){
|
||||
|
||||
ace.edit("editor").setValue(message.code);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function GameClient(callback) {
|
||||
|
||||
var self = this;
|
||||
|
||||
var listeners = [];
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
||||
xhr.open("GET", "./getServerInfo.php", true);
|
||||
|
||||
xhr.onreadystatechange = function () {
|
||||
if (xhr.readyState === 4 && xhr.status === 200) {
|
||||
|
||||
console.log("Received server info " + xhr.responseText);
|
||||
|
||||
setTimeout(function(){
|
||||
var info = JSON.parse(xhr.responseText);
|
||||
|
||||
self.socket = new WebSocket(info.address);
|
||||
self.username = info.username;
|
||||
self.tickLength = info.tickLength;
|
||||
self.serverName = info.serverName;
|
||||
|
||||
|
||||
self.socket.onopen = function () {
|
||||
|
||||
//Send auth request
|
||||
self.socket.send(info.token);
|
||||
|
||||
|
||||
//Setup event managers
|
||||
listeners.push(authListener);
|
||||
listeners.push(userInfoListener);
|
||||
listeners.push(terrainListener);
|
||||
listeners.push(tickListener);
|
||||
listeners.push(objectListener);
|
||||
listeners.push(codeListener);
|
||||
|
||||
client.socket.onmessage = function(e){
|
||||
|
||||
//console.log("Received " + e.data);
|
||||
var message = JSON.parse(e.data);
|
||||
|
||||
for(var i = 0; i < listeners.length ; i++){
|
||||
listeners[i](message);
|
||||
}
|
||||
};
|
||||
|
||||
self.reloadCode();
|
||||
|
||||
|
||||
if(callback !== undefined){
|
||||
callback();
|
||||
}
|
||||
}
|
||||
}, 100);
|
||||
}
|
||||
};
|
||||
xhr.send(null);
|
||||
|
||||
|
||||
this.requestUserInfo = function(){
|
||||
this.socket.send(JSON.stringify({t: "userInfo"}));
|
||||
};
|
||||
|
||||
this.requestTerrain = function(){
|
||||
this.socket.send(JSON.stringify({t: "terrain", x: game.worldX, y: game.worldY}));
|
||||
};
|
||||
|
||||
this.uploadCode = function(code){
|
||||
console.log("Uploaded code");
|
||||
this.socket.send(JSON.stringify({t: "uploadCode", code: code}))
|
||||
};
|
||||
|
||||
this.reloadCode = function(){
|
||||
this.socket.send(JSON.stringify({t: "codeRequest"}))
|
||||
};
|
||||
|
||||
this.sendKeypress = function(key){
|
||||
if(key !== 0){
|
||||
this.socket.send(JSON.stringify({t:"k", k:key}));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Change an object's location and initialise the move animation
|
||||
function moveObject(newX, newY, gameObject) {
|
||||
|
||||
//Resync object
|
||||
|
||||
for(clip in gameObject.clips){
|
||||
gameObject.clips[clip].x = (gameObject.x - gameObject.y) * 64;
|
||||
gameObject.clips[clip].y = ((gameObject.x + gameObject.y) * 32) - 16;
|
||||
}
|
||||
|
||||
var tiledx = newX - gameObject.x;
|
||||
var tiledy = newY - gameObject.y;
|
||||
|
||||
gameObject.dx = 0;
|
||||
gameObject.dy = 0;
|
||||
|
||||
//Recalculate position
|
||||
gameObject.x = newX;
|
||||
gameObject.y = newY;
|
||||
|
||||
if (tiledx === 1) {
|
||||
//We need to move 128px to the right and the minimum tick length is 1s.
|
||||
//This means that we have maximum 60 frames to do the animation
|
||||
gameObject.dx = 64 / 58;
|
||||
gameObject.dy = 32 / 58;
|
||||
gameObject.walking = 58;
|
||||
//Recalculate Z order immediately
|
||||
gameObject.sprite.z = gameObject.y + gameObject.x + 0.1;
|
||||
} else if (tiledx === -1) {
|
||||
gameObject.dx = -64 / 58;
|
||||
gameObject.dy = -32 / 58;
|
||||
gameObject.walking = 58;
|
||||
|
||||
//The Z order needs to be recalculated when the movement ends
|
||||
gameObject.recalculateZAfter = true;
|
||||
} else if (tiledy === 1) {
|
||||
gameObject.dx = -64 / 58;
|
||||
gameObject.dy = 32 / 58;
|
||||
gameObject.walking = 58;
|
||||
//Recalculate Z order immediately
|
||||
gameObject.sprite.z = gameObject.y + gameObject.x + 0.1;
|
||||
} else if (tiledy === -1) {
|
||||
gameObject.dx = 64 / 58;
|
||||
gameObject.dy = -32 / 58;
|
||||
gameObject.walking = 58;
|
||||
//The Z order needs to be recalculated when the movement ends
|
||||
gameObject.recalculateZAfter = true;
|
||||
}
|
||||
|
||||
game.worldLayer.children.sort(depthCompare);
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user