summaryrefslogblamecommitdiff
path: root/server/Entities/Player.js
blob: 2e70d2a5d26c44064df85621995f568a0e897872 (plain) (tree)
1
2
3
4
5
6
7
8
9
10




                                           

                          


                               







                                
                 

                    

                     
                             
                                    

                                   

                             

                           

                                



                                              

                                       




                                              





























                                                                                                                                 

     

                                  
                




                                        



                              
                          
                                                        

          

                                    
                







                                        
                          
                                          
                                                        








                                                    

                                           



                                   

                                         




                                

                                    
                                             
                           
         

                                          
                                              
                           
         

                                       
                                           
                           
         

                                         
                                             
                           
         

                                        

                                    

                                           

                                               

                                               

                                           

                                           

                                            

       



                                               


       

                                   
                     
                              



                                                   

                                       



                                             

                           
                  

                              









                                          
                           
var consts = require('../../client/consts')
const Entity = require('./Entity');
const Bullet = require('./Bullet');


var Player = function (id)
{
    var self = Entity.Entity();
    self.id = id;
    self.playerName = "";
    self.pressingRight = false;
    self.pressingLeft = false;
    self.pressingUp = false;
    self.pressingDown = false;
    self.pressingAttack = false;
    self.mouseAngle = 0;
    self.maxSpeed = 10;
    self.hp = 10;
    self.dir = 0;
    self.hpMax = 10;
    self.score = 0;
    self.move = true;
    self.sit = false;
    self.inInventory = false;
    self.ignorePlayerAttack = false;

    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.Bullet(self.id, angle);
        b.x = self.x
        b.y = self.y
    }

    self.updateSpeed = function ()
    {
        if (self.pressingRight)
        {
            self.speedX = self.maxSpeed * self.move;
            self.dir = 3;
        }
        else if (self.pressingLeft)
        {
            self.speedX = -self.maxSpeed * self.move;
            self.dir = 1;
        }
        else
            self.speedX = 0;

        if (self.pressingUp)
        {
            self.speedY = -self.maxSpeed * self.move;
            self.dir = 2;
        }
        else if (self.pressingDown)
        {
            self.speedY = self.maxSpeed * self.move;
            self.dir = 0;
        }
        else
            self.speedY = 0;
        // dont sit while moving, in case we dont press shift(rotation/dir)
        if (self.pressingAttack + self.pressingDown + self.pressingLeft + self.pressingRight + self.pressingUp != 0 && self.move)
            self.sit = false;
    }

    self.getInitPack = function ()
    {
        return {
            id: self.id,
            playerName: self.playerName,
            x: self.x,
            y: self.y,
            map: self.map,
            hp: self.hp,
            hpMax: self.hpMax,
            score: self.score,
            dir: self.dir,
            sit: self.sit,
            ignorePlayerAttack: self.ignorePlayerAttack,
        };
    }
    self.getUpdatePack = function ()
    {
        return {
            id: self.id,
            playerName: self.playerName,
            x: self.x,
            y: self.y,
            map: self.map,
            score: self.score,
            hp: self.hp,
            dir: self.dir,
            sit: self.sit,
            inInventory: self.inInventory,
            ignorePlayerAttack: self.ignorePlayerAttack,
        };
    }
    Player.list[id] = self;
    Entity.initPack.player.push(self.getInitPack());
    return self;
}

Player.list = {};

Player.onConnect = function (socket, pName)
{
    var player = Player(socket.id);

    player.playerName = pName;

    socket.on('keyPress', function (data)
    {
        if (data.shift)
            player.move = false;
        else
            player.move = true;

        if (data.inputId === 'left')
        {
            player.pressingLeft = data.state;
            player.dir = 1;
        }
        else if (data.inputId === 'right')
        {
            player.pressingRight = data.state;
            player.dir = 3;
        }
        else if (data.inputId === 'up')
        {
            player.pressingUp = data.state;
            player.dir = 2;
        }
        else if (data.inputId === 'down')
        {
            player.pressingDown = data.state;
            player.dir = 0;
        }
        else if (data.inputId === 'sit')
        {
            player.sit = data.state;
        }
        else if (data.inputId === 'attack')
        {
            player.pressingAttack = data.state;
        }
        else if (data.inputId === 'mouseAngle')
        {
            player.mouseAngle = data.state;
        }
        if (data.inputId === 'inInventory')
        {
            player.inInventory = data.state;
        }
    });

    socket.emit('init', {
        selfId: socket.id,
        player: Player.getAllInitPack(),
        bullet: Bullet.Bullet.getAllInitPack(),
    });
}

Player.getAllInitPack = function ()
{
    var players = [];
    for (var i in Player.list)
        players.push(Player.list[i].getInitPack());
    return players;
}

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

Player.update = function ()
{
    var pack = [];
    for (var i in Player.list)
    {
        var player = Player.list[i];
        player.update();
        pack.push(player.getUpdatePack());
    }
    return pack;


}

module.exports = { Player };
exports.list = Player.list;