summaryrefslogblamecommitdiff
path: root/app.js
blob: 2bf026c5d0526f8c32e2d3e6fcc3c3d7eda07dce (plain) (tree)


















































































































































































































































                                                                            
var express = require("express");
var app = express();
var serv = require("http").Server(app);

app.get('/', function(req,res) {
    res.sendFile(__dirname + '/client/index.html');
});

app.use('/client', express.static(__dirname + '/client'));

serv.listen(2000);
console.log("Server started.");
var DEBUG = true;
var SOCKET_LIST = {};

var Entity = function(){
    var self = {
        x:250,
        y:250,
        speedX:0,
        speedY:0,
        id:"",
    }
    self.update = function(){
        self.updatePosition();
    }
    self.updatePosition = function(){
        self.x += self.speedX;
        self.y += self.speedY;
    }
    self.getDistance = function(pt){
        return Math.sqrt(Math.pow(self.x-pt.x,2)) + Math.pow(self.y-pt.y,2);
    }
    return self;
}

var Player = function(id){
    var self = Entity();
        self.id = id;
        self.number = "" + Math.floor(10 * Math.random());
        self.pressingRight = false;
        self.pressingLeft = false;
        self.pressingUp = false;
        self.pressingDown = false;
        self.pressingAttack = false;
        self.mouseAngle = 0;
        self.maxSpeed = 10;

    var super_update = self.update;
    self.update = function(){
        self.updateSpeed();
        super_update();
        if(self.pressingAttack){
            self.shootBullet(self.mouseAngle);
        }
    }

    self.shootBullet = function(angle){
        var b = Bullet(self.id, angle);
        b.x = self.x
        b.y = self.y
    }

    self.updateSpeed = function(){
        if(self.pressingRight)
            self.speedX = self.maxSpeed;
        else if(self.pressingLeft)
            self.speedX = -self.maxSpeed;
        else
            self.speedX = 0;

        if(self.pressingUp)
            self.speedY = -self.maxSpeed;
        else if(self.pressingDown)
            self.speedY = self.maxSpeed;
        else
            self.speedY = 0;
    }
    Player.list[id] = self;
    return self;
}

Player.list = {};
Player.onConnect = function(socket){
    var player = Player(socket.id);

    socket.on('keyPress', function(data){
        if (data.inputId === 'left')
            player.pressingLeft = data.state;
        else if (data.inputId === 'right')
            player.pressingRight = data.state;
        else if (data.inputId === 'up')
            player.pressingUp = data.state;
        else if (data.inputId === 'down')
            player.pressingDown = data.state;
        else if (data.inputId === 'attack')
            player.pressingAttack = data.state;
        else if (data.inputId === 'mouseAngle')
            player.mouseAngle = data.state;
    });
}

Player.onDisconnect = function(socket){
    delete Player.list[socket.id];
}

Player.update = function(){
    var pack = [];
    for(var i in Player.list){
        var player = Player.list[i];
        player.update();
        pack.push({
            x:player.x,
            y:player.y,
            number:player.number
        });
    }
    return pack;
}

var Bullet = function(parent, angle) {
    var self = Entity();
    self.id = Math.random();
    self.speedX = Math.cos(angle/180*Math.PI) *10;
    self.speedY = Math.sin(angle/180*Math.PI) *10;
    self.parent = parent;
    self.timer = 0;
    self.toRemove = false;
    var super_update = self.update;
    self.update = function(){
        if (self.timer++ > 100)
            self.toRemove = true;
        super_update();
        for (var i in Player.list){
            var p = Player.list[i];
            if(self.getDistance(p) < 32 && self.parent !== p.id){
                //hp --
                self.toRemove = true;
            }
        }
    }
    Bullet.list[self.id] = self;
    return self;
}

Bullet.list= {};

Bullet.update = function(){
    var pack = [];
    for(var i in Bullet.list){
        var bullet = Bullet.list[i];
        bullet.update();
        if(bullet.toRemove)
            delete Bullet.list[i];
        else
            pack.push({
                x:bullet.x,
                y:bullet.y,
            });
    }
    return pack;
}

var USERS = {
    "bob":"bub", 
    "asd": "fgh"
}

var isValidPassword = function(data, cb){
    setTimeout(function(){
        cb(USERS[data.username] === data.password);
    },10);
}

var isUsernameTaken = function(data, cb){
    setTimeout(function(){
        cb(USERS[data.username]);
    },10);
}

var addUser = function(data, cb){
    setTimeout(function(){
        USERS[data.username] = data.password;
        cb();
    },10);
}

var io = require('socket.io')(serv, {});
io.sockets.on('connection', function(socket){
    socket.id = Math.random();
    SOCKET_LIST[socket.id] = socket;

    socket.on('signIn', function(data){
        isValidPassword(data, function(res){
            if (res){
                Player.onConnect(socket);
                socket.emit('signInResponse', {success:true});
            } else {
                socket.emit('signInResponse', {success:false});
            }
        });
    });
    socket.on('signUp', function(data){
        isUsernameTaken(data, function(res){
            if (res){
                socket.emit('signUpResponse', {success:false});
            } else {
                addUser(data, function(){
                    socket.emit('signUpResponse', {success:true});
                });
            }
        });
    });

    socket.on('disconnect', function(){
        delete SOCKET_LIST[socket.id];
        Player.onDisconnect(socket);
    });
    socket.on('sendMsgToServer', function(data){
        var playerName = ("" + socket.id).slice(2,7);
        for (var i in SOCKET_LIST){
            SOCKET_LIST[i].emit('addToChat', playerName + ': ' + data);
        }
    });
   
    socket.on('evalServer', function(data){
        if(DEBUG){
            socket.emit('evalAnswer', eval(data));
        }
    });
});

setInterval(function(){
    var pack = {
        player:Player.update(),
        bullet:Bullet.update()
    }
    
    for(var i in SOCKET_LIST){
        var socket = SOCKET_LIST[i];
        socket.emit('newPositions', pack);
    }
},1000/25);