Пример #1
0
 public static void ProcessNext()
 {
     if (SocketIncoming.commandQueue.Count > 0)
     {
         MovementMessage.Process((string)SocketIncoming.commandQueue.Dequeue());
     }
 }
Пример #2
0
    void _OnHandleReceivedPacket(Transmitter transmitter, int idCommand, byte[] aPacketBuffer, int iPos)
    {
        ECommand eCommand = (ECommand)idCommand;

        if (eCommand == ECommand.LOGIN)
        {
            LoginMessage msg = new LoginMessage();
            msg.UnSealPacketBuffer(aPacketBuffer, iPos);
            msg.Unserialize();

            OnLoginMessage(transmitter, msg);
        }
        else if (eCommand == ECommand.EXIT)
        {
            ExitMessage msg = new ExitMessage();
            msg.UnSealPacketBuffer(aPacketBuffer, iPos);
            msg.Unserialize();

            OnExitMessage(transmitter, msg);
        }
        else if (eCommand == ECommand.MOVEMENT)
        {
            MovementMessage msg = new MovementMessage();
            msg.UnSealPacketBuffer(aPacketBuffer, iPos);
            msg.Unserialize();

            OnMovementMessage(transmitter, msg);
        }
    }
Пример #3
0
    void OnMessage(object msg)
    {
        if (msg is Message)
        {
            var message = (Message)msg;
            Debug.Log("Received schema-encoded message:");
            Debug.Log("message.command => " + message.command + ", message.data => " + message.data);

            switch (message.command)
            {
            case "movement":
                MovementMessage data      = (MovementMessage)message.data;
                Vector3         playerPos = GetGameEntity(GameState._Room.SessionId).obj.transform.position;
                if (data.x == playerPos.x &&
                    data.y == playerPos.y &&
                    data.z == playerPos.z &&
                    data.stateNum > GameState.CurrentCommand)
                {
                    GameState.CurrentCommand = data.stateNum;
                }

                break;
            }
        }
        else
        {
            // msgpack-encoded message
            var message = (IndexedDictionary <string, object>)msg;
            Debug.Log("Received msgpack-encoded message:");
            Debug.Log(message["hello"]);
        }
    }
        public void cleanUpMovementList()
        {
            //System.Console.WriteLine("Cleaning up movement list");
            int listCount = movementList.Values.Count;

            for (int i = 0; i < listCount; i++)
            {
                //System.Console.WriteLine("Iterating through movementlist");
                if (((MovementMessage)movementList.GetByIndex(i)).messageTerminated == true)
                {
                    MovementMessage message       = ((MovementMessage)movementList.GetByIndex(i));
                    String          messageTypeId = message.messageTypeId;
                    Character2D     character     = game.getSceneGraph().getGenericCharacter2D(message.objectId);

                    ////System.Console.WriteLine("Removing terminated message: " + message.messageTypeId);
                    movementList.RemoveAt(i);

                    if (messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MSG))
                    {
                        System.Console.WriteLine("Triggering fall message after cleanup");
                        //character.changeStatus(GameConstants.PLAYER_FALL_MSG);
                    }
                    else if (messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_LEFT_MSG))
                    {
                        ////System.Console.WriteLine("Triggering fall message after cleanup");
                        character.changeStatus(GameConstants.PLAYER_FALL_MOVING_LEFT_MSG);
                    }
                    else if (messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_RIGHT_MSG))
                    {
                        //System.Console.WriteLine("Triggering fall message after cleanup");
                        character.changeStatus(GameConstants.PLAYER_FALL_MOVING_RIGHT_MSG);
                    }
                }
            }
        }
Пример #5
0
        private void OnMovementReceivedEvent(MovementMessage movement)
        {
            var message =
                $"Message received.  Figuring out where to move to... Movement: {movement.Message}.";

            _logger.Information(Constants.LogMessageTemplate, movement.MessageId, GetType().Name,
                                "OnMovementReceivedEvent", message);
        }
Пример #6
0
    void OnMovementMessage(Transmitter transmitter, MovementMessage msg)
    {
        Vector3 velocity   = new Vector3(msg.m_fVelocityX, msg.m_fVelocityY, msg.m_fVelocityZ);
        Vector3 position   = new Vector3(msg.m_fPositionX, msg.m_fPositionY, msg.m_fPositionZ);
        float   eularAngle = msg.m_fEularAngle;
        int     animInfo   = msg.m_iAnimInfo;

        playerManager.dictOtherPlayerMotor[msg.m_iPlayerIndex].HandleMovementMessage(velocity, position, eularAngle, animInfo);
    }
Пример #7
0
    public void SendMovementMessage(Vector3 fVelocity, Vector3 fPosition, float fEularAngle, int iAnimInfo)
    {
        MovementMessage msgMovement = new MovementMessage();

        msgMovement.m_fVelocityX  = fVelocity.x;
        msgMovement.m_fVelocityY  = fVelocity.y;
        msgMovement.m_fVelocityZ  = fVelocity.z;
        msgMovement.m_fPositionX  = fPosition.x;
        msgMovement.m_fPositionY  = fPosition.y;
        msgMovement.m_fPositionZ  = fPosition.z;
        msgMovement.m_fEularAngle = fEularAngle;
        msgMovement.m_iAnimInfo   = iAnimInfo;

        m_theTansmitter.Send(msgMovement);
    }
Пример #8
0
    public void onInput(InputEvent inputEvent)
    {
        Debug.Log("inputEvent");
        bool[] rdlu = new bool[4];
        int    i    = 0;

        foreach (KeyCode keyCode in movKeyCodes)
        {
            rdlu[i++] = inputEvent.pressedKeys.Contains(keyCode);
        }
        MovementMessage message = new MovementMessage(inputEvent.player.id, rdlu);

        foreach (GameMessageListener listener in listeners)
        {
            listener.onMovement(message);
        }
    }
Пример #9
0
    public IEnumerator SendBallPosition()
    {
        while (true)
        {
            float frequency = 1.0f / 6.0f; // Sends 6 times a second

            yield return(new WaitForSeconds(frequency));

            Debug.LogError("Sending ball position !!!");
            MovementMessage ballMovement = new MovementMessage();
            ballMovement.type      = MessageType.BALL;
            ballMovement.x         = ballPos.x;
            ballMovement.y         = ballPos.y;
            ballMovement.frequency = frequency;

            s.ServerSend(ballMovement);
        }
    }
Пример #10
0
    public override void onMovement(MovementMessage message)
    {
        Debug.Log("ON MOVE");
        foreach (bool b in message.rdlu)
        {
            Debug.Log(b);
        }
        Player   player = PlayerDatabase.Instance.GetPlayer(message.playerId);
        int      x      = (message.rdlu [0] ? 1 : 0) - (message.rdlu [2] ? 1 : 0);
        int      y      = (message.rdlu [3] ? 1 : 0) - (message.rdlu [1] ? 1 : 0);
        Position newPos = player.position.Add(new Position(x, y));

        Debug.Log("New pos: " + newPos.x + ", " + newPos.y);
        if (getId(newPos) == 0)
        {
            setId(newPos, player.id);
            setId(player.position, 0);
            player.SetPosition(newPos);
        }
        else if (getId(newPos) < 0)
        {
            Debug.Log("Wrong move!!");
        }
    }
Пример #11
0
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.G))
        {
            // Testing
            seed = Random.Range(0, Int32.MaxValue);
            dungeonGeneration.Clear();
            spawner.SetServer(this);
            spawner.seed = seed;
            spawner.ClearMonsters();
            dungeonGeneration.Generate(seed);
        }

        if (Input.GetKeyDown(KeyCode.K))
        {
            //Testing
            for (int i = 0; i < spawner.monsters.Length; i++)
            {
                if (spawner.monsters[i] != null)
                {
                    spawner.monsters[i].GetComponent <Monster>().health = 0;
                }
            }
        }

        if (Input.GetKeyDown(KeyCode.Escape))
        {
            panelsManager.ShowMenuPanel();
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            StartShooting();
        }

        if (Input.GetKeyUp(KeyCode.Space))
        {
            StopShooting();
        }

        switch (state)
        {
        case GameState.STOP:

            break;

        case GameState.START:

            break;

        case GameState.GAME:

            speed = joystick.InputVector * Time.deltaTime * 12;
            player.animator.SetBool("Walking", false);

            // Get server player
            if (speed.magnitude > 0 && !player.died)
            {
                //player.transform.position += speed;
                Rigidbody2D playerRb2D = player.GetComponent <Rigidbody2D>();
                playerRb2D.MovePosition(playerRb2D.position + speed);
                player.SetRotation(joystick.InputVector);
                player.animator.SetBool("Walking", true);
            }

            movementElapsed += Time.deltaTime;

            // Shooting
            if (player.shooting)
            {
                player.AnimateShooting(player.shootingElapsed);
                //Debug.Log(player.shootingElapsed);

                if (player.shootingElapsed >= player.frequency)
                {
                    player.shootingElapsed = player.shootingElapsed % player.frequency;
                    shootingElapsed        = shootingElapsed % player.frequency;
                    ServerShoot();
                }
            }

            // Movement
            if (movementElapsed >= GameManager.FREQUENCY)
            {
                movementElapsed = movementElapsed % GameManager.FREQUENCY;
                dungeonGeneration.HighlightRoom(player);

                if (sharingMovements)
                {
                    ShareMovements();
                }
                else
                {
                    sharingMovements = true;
                }
            }



            // Server movement Lerp
            for (int i = 0; i < nbOfPlayers; i++)
            {
                Player  playerIndex        = players[i].GetComponent <Player>();
                Vector2 startClientPos     = startPlayersPositions[i];
                Vector2 endClientPos       = endPlayersPositions[i];
                float   startClientRot     = startPlayersRotations[i];
                float   endClientRot       = endPlayersRotations[i];
                float   timeStartedLerping = timesStartedLerping[i];
                playerIndex.shootingElapsed += Time.deltaTime;

                if (i != 0)
                {
                    float lerpPercentage = (Time.time - timeStartedLerping) / GameManager.FREQUENCY;
                    //Debug.Log(string.Format("lerpPercent[{0}] = (time[{1}] - tS[{2}]) / tTRG[{3}]", lerpPercentage, Time.time, timeStartedLerping, GameManager.FREQUENCY));
                    playerIndex.transform.position = Vector3.Lerp(startClientPos, endClientPos, lerpPercentage);
                    float lerpedRotation = Mathf.LerpAngle(startClientRot, endClientRot, lerpPercentage);
                    playerIndex.SetRotation(lerpedRotation);

                    // If we havent moved then we are not walking
                    if (Vector2.Distance(startClientPos, endClientPos) < 0.1f)
                    {
                        playerIndex.animator.SetBool("Walking", false);
                    }
                    else
                    {
                        playerIndex.animator.SetBool("Walking", true);
                    }


                    if (playerIndex.shooting)
                    {
                        playerIndex.AnimateShooting(playerIndex.shootingElapsed);
                        if (playerIndex.shootingElapsed >= playerIndex.frequency)
                        {
                            playerIndex.shootingElapsed = playerIndex.shootingElapsed % playerIndex.frequency;
                            ClientShoot(i);
                        }
                    }
                    else
                    {
                        playerIndex.StopShooting();
                    }
                }
            }

            break;
        }

        // Server read received messages
        switch (s.received.type)
        {
        case MessageType.NONE:
        {
        }
        break;

        case MessageType.CLIENT_NEW_PLAYER:
        {
            Debug.LogError("Received Start Server from client");
            AddPlayer();
            SharePlayers();
        }
        break;

        case MessageType.MOVEMENT:
        {
            // Received movement from client
            MovementMessage mm = (MovementMessage)s.received;
            //Debug.Log("Movement from " + mm.playerId);
            lastClientMovement = mm.playerId;
            startPlayersPositions[lastClientMovement] = players[lastClientMovement].transform.position;
            startPlayersRotations[lastClientMovement] = players[lastClientMovement].GetComponent <Player>().visorRotation;
            endPlayersRotations[lastClientMovement]   = mm.visorRotation;
            endPlayersPositions[lastClientMovement]   = new Vector3(mm.x, mm.y);
            players[lastClientMovement].GetComponent <Player>().shooting = mm.shooting;

            timesStartedLerping[lastClientMovement] = Time.time;
        }
        break;

        case MessageType.CLIENT_GO_TO_NEXT_ROOM:
        {
            ClientGoToNextRoomMessage goToNextRoomMessage = (ClientGoToNextRoomMessage)s.received;
            GoToNextRoom(goToNextRoomMessage.seed);
        }
        break;

        case MessageType.CLIENT_SHARE_MONSTERS_SPAWN:
        {
            ClientShareMonstersSpawnMessage shareMonstersSpawnMessage = (ClientShareMonstersSpawnMessage)s.received;
            //spawner.SpawnMonsters(shareMonstersSpawnMessage.roomId, shareMonstersSpawnMessage.seed);
            // Teleportation
            if (shareMonstersSpawnMessage.teleport)
            {
                Player  player           = players[shareMonstersSpawnMessage.playerId].GetComponent <Player>();
                Vector2 teleportPosition = dungeonGeneration.GetPositionByPlayerDirection(0, shareMonstersSpawnMessage.roomId, player.GetVisorDirection());
                players[0].transform.position = teleportPosition;
            }

            ShareSpawnMonsters(shareMonstersSpawnMessage.roomId, shareMonstersSpawnMessage.playerId, shareMonstersSpawnMessage.seed, shareMonstersSpawnMessage.teleport);
        }
        break;

        case MessageType.CLIENT_DIE:
        {
            ClientDieMessage clientDieMessage = (ClientDieMessage)s.received;

            players[clientDieMessage.playerId].GetComponent <Player>().SetDied();

            ShareDeath(clientDieMessage.playerId);
        }
        break;
        }
        s.received.OnRead();
    }
Пример #12
0
 public override void onMovement(MovementMessage movementMessage)
 {
     Send(movementMessage);
 }
Пример #13
0
    void Update()
    {
        if (goingRight)
        {
            pos    = serverPlayer.transform.position;
            pos.x += Time.deltaTime * speed;
            serverPlayer.transform.position = pos;

            MovementMessage mv = new MovementMessage();
            mv.type      = MessageType.SERVER;
            mv.x         = pos.x;
            mv.y         = pos.y;
            mv.frequency = Time.time;

            s.ServerSend(mv);
        }

        if (goingLeft)
        {
            pos    = serverPlayer.transform.position;
            pos.x -= Time.deltaTime * speed;
            serverPlayer.transform.position = pos;

            MovementMessage mv = new MovementMessage();
            mv.type      = MessageType.SERVER;
            mv.x         = pos.x;
            mv.y         = pos.y;
            mv.frequency = Time.time;

            s.ServerSend(mv);
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            Debug.LogError("START GAME");

            state = GameState.START;
        }

        // Messages
        switch (s.received.type)
        {
        case MessageType.NONE:
            break;

        case MessageType.START:

            Debug.LogError("START GAME");

            state = GameState.START;

            break;

        case MessageType.CLIENT:
            MovementMessage mm = (MovementMessage)s.received;
            clientPlayer.transform.position = new Vector3(mm.x, mm.y);
            break;

        default:
            Debug.Log("Unhandled type " + s.received.type.ToString());
            break;
        }
        s.received.OnRead();  // Always set a message to read on recieved


        // State
        switch (state)
        {
        case GameState.STOP:

            break;

        case GameState.START:
            ballPos = ball.transform.position;

            ballInitPos = new Vector3(ball.transform.position.x, ball.transform.position.y, ball.transform.position.z);
            ballSpeed   = randomBallSpeed();
            waitTime   += Time.deltaTime;

            if (waitTime > 3)
            {
                waitTime = 0;
                StopCoroutine(sendBallCoroutine);
                StartCoroutine(sendBallCoroutine);
                state = GameState.GAME;
            }
            break;

        case GameState.GAME:
            RectTransform ballTransform   = ball.GetComponent <RectTransform>();
            RectTransform clientTransform = clientPlayer.GetComponent <RectTransform>();
            RectTransform serverTransform = serverPlayer.GetComponent <RectTransform>();


            if (rectOverlaps(ballTransform, wallLeft))
            {
                //Debug.Log("Left");
                ballSpeed.x *= -1;
            }

            if (rectOverlaps(ballTransform, wallRight))
            {
                //Debug.Log("Right");
                ballSpeed.x *= -1;
            }

            if (rectOverlaps(ballTransform, wallTop))
            {
                //Debug.Log("Top");
                //ballSpeed.y *= -1;
                ballPos = ballInitPos;
                Debug.LogError("SEND RESET");
                s.ServerSend(new ResetMessage());
                state = GameState.START;
            }

            if (rectOverlaps(ballTransform, wallBottom))
            {
                //Debug.Log("Bottom");
                //ballSpeed.y *= -1;
                ballPos = ballInitPos;
                Debug.LogError("SEND RESET");
                s.ServerSend(new ResetMessage());
                state = GameState.START;
            }

            if (rectOverlaps(ballTransform, clientTransform))
            {
                ballSpeed.y *= -1;
            }

            if (rectOverlaps(ballTransform, serverTransform))
            {
                ballSpeed.y *= -1;
            }

            ballPos += ballSpeed;
            ball.transform.position = ballPos;


            break;
        }
    }
Пример #14
0
    void Update()
    {
        // Do nothing if we don't connected
        if (GameState._Room == null)
        {
            return;
        }

        // Fetch user info and display
        _HealthBar.value = ((User)GetGameEntity(GameState._Room.SessionId)._Entity).health;

        if (_HealthBar.value > 0)
        {
            MovementMessage data = new MovementMessage();

            if (IsMovementHandle())
            {
                data.stateNum = GameState.CurrentCommand++;
                Debug.Log(GameState._Room.SessionId);
                Vector3 playerPos = GetGameEntity(GameState._Room.SessionId).obj.transform.position;

                data.x = playerPos.x + GameState.HeroVelocity.x;
                data.y = playerPos.y + GameState.HeroVelocity.y;
                data.z = playerPos.z + GameState.HeroVelocity.z;

                SpeculativeMovement(GameState.HeroVelocity);

                Message msg = new Message();
                msg.command = "movement";
                msg.data    = data;
                GameState._Room.Send(msg);
            }

            if (IsProjectileThrown())
            {
                CreateProjectile(Mathf.Atan2(lastProjectileJoystickPos.y, lastProjectileJoystickPos.x));
            }
        }

        lastProjectileJoystickPos = new Vector2(_ProjectileJoystick.Horizontal, _ProjectileJoystick.Vertical);

        // Move all entities toward their server position
        foreach (KeyValuePair <string, GameEntity> entry in GameState.Entities)
        {
            if (entry.Value.obj != null && entry.Value._Entity is User && ((User)entry.Value._Entity).health <= 0)
            {
                Instantiate(_Explosion, entry.Value.obj.transform.position, Quaternion.identity);
                Destroy(entry.Value.obj);
            }

            if (entry.Value.obj != null && entry.Key != GameState._Room.SessionId)
            {
                Vector3 serverPos = new Vector3(entry.Value._Entity.x, entry.Value._Entity.y, entry.Value._Entity.z);

                if (serverPos != entry.Value.obj.transform.position)
                {
                    Vector3 interpolatedPos = Vector3.Lerp(entry.Value.obj.transform.position, serverPos, 0.1f);
                    entry.Value.obj.transform.position = interpolatedPos;
                }
            }
        }
    }
Пример #15
0
    void Update()
    {
        if (goingRight)
        {
            pos    = clientPlayer.transform.position;
            pos.x += Time.deltaTime * speed;
            clientPlayer.transform.position = pos;

            MovementMessage mv = new MovementMessage();
            mv.type      = MessageType.CLIENT;
            mv.x         = pos.x;
            mv.y         = pos.y;
            mv.frequency = Time.time;

            c.ClientSend(mv);
        }

        if (goingLeft)
        {
            pos    = clientPlayer.transform.position;
            pos.x -= Time.deltaTime * speed;
            clientPlayer.transform.position = pos;

            MovementMessage mv = new MovementMessage();
            mv.type      = MessageType.CLIENT;
            mv.x         = pos.x;
            mv.y         = pos.y;
            mv.frequency = Time.time;

            c.ClientSend(mv);
        }

        // Messages
        switch (c.received.type)
        {
        case MessageType.NONE:
            break;

        case MessageType.SERVER:
        {
            MovementMessage mm = (MovementMessage)c.received;
            serverPlayer.transform.position = new Vector3(mm.x, mm.y);
        }
        break;

        case MessageType.BALL:
        {
            MovementMessage mm = (MovementMessage)c.received;
            startBallPos       = ball.transform.position;
            endBallPos         = new Vector3(mm.x, mm.y);
            frequency          = mm.frequency;
            timeStartedLerping = Time.time;
        }
        break;

        case MessageType.RESET:
        {
            Debug.LogError("RESET BALL POS");
        }
        break;

        default:
            Debug.Log("Unhandled message type " + c.received.type);
            break;
        }
        c.received.OnRead(); // Always set a message to read on recieved

        // State
        switch (state)
        {
        case GameState.STOP:
            if (c.Connected())
            {
                state = GameState.START;
            }
            break;

        case GameState.START:
            //Start
            c.ClientSend(new StartMessage());

            Debug.LogError("CLIENT SENT START");

            state = GameState.GAME;
            break;

        case GameState.GAME:

            break;
        }


        // Lerp
        float lerpPercentage = (Time.time - timeStartedLerping) / frequency;

        //Debug.Log(string.Format("lerpPercent[{0}] = (time[{1}] - tS[{2}]) / tTRG[{3}]", lerpPercentage, Time.time, timeStartedLerping, frequency));
        ball.transform.position = Vector3.Lerp(startBallPos, endBallPos, lerpPercentage);
    }
Пример #16
0
 public virtual void onMovement(MovementMessage message)
 {
 }
        public void registerMovement(String idString, String movementType)
        {
            //System.Console.WriteLine("Register movement type: " + movementType);
            if (movementType.Equals(GameConstants.PLAYER_MOVEMENT_RIGHT_MSG))
            {
                Player player = game.getSceneGraph().getPlayer(idString);


                MovementMessage message             = new MovementMessage();
                Vector2         destinationPosition = new Vector2();
                destinationPosition.X = player.objectPosition.X + GameConstants.PLAYER_AMOUNT_MOVED_PER_KEYPRESS;
                destinationPosition.Y = player.objectPosition.Y;

                message.objectId            = GameConstants.PLAYER_OBJECT_ID;
                message.messageTypeId       = movementType;
                message.destinationPosition = destinationPosition;

                message.rateOfMovement = GameConstants.PLAYER_RATE_OF_MOVEMENT;

                if (!movementList.Contains(message.objectId))
                {
                    //System.Console.WriteLine("Adding message to movement list");
                    movementList.Add(message.objectId, message);
                }
            }

            else if (movementType.Equals(GameConstants.PLAYER_MOVEMENT_LEFT_MSG))
            {
                Player player = game.getSceneGraph().getPlayer(idString);


                MovementMessage message             = new MovementMessage();
                Vector2         destinationPosition = new Vector2();
                destinationPosition.X = player.objectPosition.X - GameConstants.PLAYER_AMOUNT_MOVED_PER_KEYPRESS;
                destinationPosition.Y = player.objectPosition.Y;

                message.objectId            = GameConstants.PLAYER_OBJECT_ID;
                message.messageTypeId       = movementType;
                message.destinationPosition = destinationPosition;

                message.rateOfMovement = GameConstants.PLAYER_RATE_OF_MOVEMENT;

                if (!movementList.Contains(message.objectId))
                {
                    //System.Console.WriteLine("Adding message to movement list");
                    movementList.Add(message.objectId, message);
                }
            }

            else if (movementType.Equals(GameConstants.PLAYER_CHANGE_CLOTHES_MSG))
            {
                Player player = game.getSceneGraph().getPlayer(idString);


                MovementMessage message             = new MovementMessage();
                Vector2         destinationPosition = new Vector2();
                destinationPosition.X = player.objectPosition.X;
                destinationPosition.Y = player.objectPosition.Y;

                message.objectId            = GameConstants.PLAYER_OBJECT_ID;
                message.messageTypeId       = movementType;
                message.destinationPosition = destinationPosition;

                message.rateOfMovement = GameConstants.PLAYER_RATE_OF_MOVEMENT;

                if (!movementList.Contains(message.objectId))
                {
                    //System.Console.WriteLine("Adding message to movement list");
                    movementList.Add(message.objectId, message);
                }
            }

            else if (movementType.Equals(GameConstants.PLAYER_INITIAL_JUMP_MSG))
            {
                Player player = game.getSceneGraph().getPlayer(idString);


                MovementMessage message             = new MovementMessage();
                Vector2         destinationPosition = new Vector2();
                destinationPosition.X = player.objectPosition.X;
                destinationPosition.Y = player.objectPosition.Y - GameConstants.PLAYER_JUMP_HEIGHT;

                message.objectId            = GameConstants.PLAYER_OBJECT_ID;
                message.messageTypeId       = movementType;
                message.destinationPosition = destinationPosition;

                message.rateOfMovement = GameConstants.PLAYER_RATE_OF_JUMP;

                MovementMessage oldMessage = (MovementMessage)getMessageFromListByKey(GameConstants.PLAYER_OBJECT_ID);
                //if was walking and switching to jump...
                if (movementList.Contains(message.objectId))
                {
                    if (oldMessage != null &&
                        (oldMessage.messageTypeId.Equals(GameConstants.PLAYER_MOVEMENT_RIGHT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_MOVEMENT_LEFT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_CYCLE_JUMP_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_FALL_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_LEFT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_RIGHT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_FALL_MOVING_LEFT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_FALL_MOVING_RIGHT_MSG)))
                    {
                        movementList.Remove(oldMessage.objectId);
                    }
                }

                if (!movementList.Contains(message.objectId))
                {
                    //System.Console.WriteLine("Adding message: " + message.messageTypeId + " to movement list");
                    movementList.Add(message.objectId, message);
                }
            }


            else if (movementType.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_RIGHT_MSG))
            {
                Player player = game.getSceneGraph().getPlayer(idString);


                MovementMessage message             = new MovementMessage();
                Vector2         destinationPosition = new Vector2();
                destinationPosition.X = player.objectPosition.X + GameConstants.PLAYER_MAGNIFIED_RATE_OF_MOVEMENT;
                destinationPosition.Y = player.objectPosition.Y - GameConstants.PLAYER_JUMP_HEIGHT;

                message.objectId            = GameConstants.PLAYER_OBJECT_ID;
                message.messageTypeId       = movementType;
                message.destinationPosition = destinationPosition;

                message.rateOfMovement = GameConstants.PLAYER_RATE_OF_JUMP;

                MovementMessage oldMessage = (MovementMessage)getMessageFromListByKey(GameConstants.PLAYER_OBJECT_ID);
                //if was walking and switching to jump...
                if (movementList.Contains(message.objectId))
                {
                    if (oldMessage != null &&
                        (oldMessage.messageTypeId.Equals(GameConstants.PLAYER_MOVEMENT_RIGHT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_MOVEMENT_LEFT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_CYCLE_JUMP_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_FALL_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_LEFT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_RIGHT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_FALL_MOVING_LEFT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_FALL_MOVING_RIGHT_MSG)))
                    {
                        movementList.Remove(oldMessage.objectId);
                    }
                }

                if (!movementList.Contains(message.objectId))
                {
                    //System.Console.WriteLine("Adding message: " + message.messageTypeId + " to movement list");
                    movementList.Add(message.objectId, message);
                }
            }

            else if (movementType.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_LEFT_MSG))
            {
                Player player = game.getSceneGraph().getPlayer(idString);


                MovementMessage message             = new MovementMessage();
                Vector2         destinationPosition = new Vector2();
                destinationPosition.X = player.objectPosition.X - GameConstants.PLAYER_MAGNIFIED_RATE_OF_MOVEMENT;
                destinationPosition.Y = player.objectPosition.Y - GameConstants.PLAYER_JUMP_HEIGHT;

                message.objectId            = GameConstants.PLAYER_OBJECT_ID;
                message.messageTypeId       = movementType;
                message.destinationPosition = destinationPosition;

                message.rateOfMovement = GameConstants.PLAYER_RATE_OF_JUMP;

                MovementMessage oldMessage = (MovementMessage)getMessageFromListByKey(GameConstants.PLAYER_OBJECT_ID);
                //if was walking and switching to jump...
                if (movementList.Contains(message.objectId))
                {
                    if (oldMessage != null &&
                        (oldMessage.messageTypeId.Equals(GameConstants.PLAYER_MOVEMENT_RIGHT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_MOVEMENT_LEFT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_CYCLE_JUMP_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_FALL_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_LEFT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_RIGHT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_FALL_MOVING_LEFT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_FALL_MOVING_RIGHT_MSG)))
                    {
                        movementList.Remove(oldMessage.objectId);
                    }
                }

                if (!movementList.Contains(message.objectId))
                {
                    //System.Console.WriteLine("Adding message: " + message.messageTypeId + " to movement list");
                    movementList.Add(message.objectId, message);
                }
            }

            else if (movementType.Equals(GameConstants.PLAYER_FALL_MSG))
            {
                Player player = game.getSceneGraph().getPlayer(idString);


                MovementMessage message             = new MovementMessage();
                Vector2         destinationPosition = new Vector2();
                destinationPosition.X = player.objectPosition.X;
                destinationPosition.Y = player.objectPosition.Y + GameConstants.PLAYER_FALL_DISTANCE;

                message.objectId            = GameConstants.PLAYER_OBJECT_ID;
                message.messageTypeId       = movementType;
                message.destinationPosition = destinationPosition;

                message.rateOfMovement = GameConstants.PLAYER_RATE_OF_JUMP;


                if (!movementList.Contains(message.objectId))
                {
                    //System.Console.WriteLine("Adding message to movement list");
                    movementList.Add(message.objectId, message);
                }
            }

            else if (movementType.Equals(GameConstants.PLAYER_FALL_MOVING_LEFT_MSG))
            {
                Player player = game.getSceneGraph().getPlayer(idString);


                MovementMessage message             = new MovementMessage();
                Vector2         destinationPosition = new Vector2();
                destinationPosition.X = player.objectPosition.X - GameConstants.PLAYER_MAGNIFIED_RATE_OF_MOVEMENT;
                destinationPosition.Y = player.objectPosition.Y + GameConstants.PLAYER_FALL_DISTANCE;

                message.objectId            = GameConstants.PLAYER_OBJECT_ID;
                message.messageTypeId       = movementType;
                message.destinationPosition = destinationPosition;

                message.rateOfMovement = GameConstants.PLAYER_RATE_OF_JUMP;


                if (!movementList.Contains(message.objectId))
                {
                    //System.Console.WriteLine("Adding message to movement list");
                    movementList.Add(message.objectId, message);
                }
            }

            else if (movementType.Equals(GameConstants.PLAYER_FALL_MOVING_RIGHT_MSG))
            {
                Player player = game.getSceneGraph().getPlayer(idString);


                MovementMessage message             = new MovementMessage();
                Vector2         destinationPosition = new Vector2();
                destinationPosition.X = player.objectPosition.X + GameConstants.PLAYER_MAGNIFIED_RATE_OF_MOVEMENT;
                destinationPosition.Y = player.objectPosition.Y + GameConstants.PLAYER_FALL_DISTANCE;

                message.objectId            = GameConstants.PLAYER_OBJECT_ID;
                message.messageTypeId       = movementType;
                message.destinationPosition = destinationPosition;

                message.rateOfMovement = GameConstants.PLAYER_RATE_OF_JUMP;


                if (!movementList.Contains(message.objectId))
                {
                    //System.Console.WriteLine("Adding message to movement list");
                    movementList.Add(message.objectId, message);
                }
            }



            else if (movementType.Equals(GameConstants.PLAYER_ATTACK_MSG))
            {
                Player player = game.getSceneGraph().getPlayer(idString);


                MovementMessage message             = new MovementMessage();
                Vector2         destinationPosition = new Vector2();
                destinationPosition.X = player.objectPosition.X;
                destinationPosition.Y = player.objectPosition.Y;

                message.objectId            = GameConstants.PLAYER_OBJECT_ID;
                message.messageTypeId       = movementType;
                message.destinationPosition = destinationPosition;

                message.rateOfMovement = GameConstants.PLAYER_RATE_OF_MOVEMENT;

                MovementMessage oldMessage = (MovementMessage)getMessageFromListByKey(GameConstants.PLAYER_OBJECT_ID);
                //if was walking and switching to jump...
                if (movementList.Contains(message.objectId))
                {
                    if (oldMessage != null &&
                        (oldMessage.messageTypeId.Equals(GameConstants.PLAYER_MOVEMENT_RIGHT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_MOVEMENT_LEFT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_CYCLE_JUMP_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_FALL_MSG)))
                    {
                        movementList.Remove(oldMessage.objectId);
                    }
                }

                if (!movementList.Contains(message.objectId))
                {
                    //System.Console.WriteLine("Adding message: " + message.messageTypeId + " to movement list");
                    movementList.Add(message.objectId, message);
                }
            }

            //handle jump modifiers


            else if (movementType.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_LEFT_MODIFIER) ||
                     movementType.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_RIGHT_MODIFIER) ||
                     movementType.Equals(GameConstants.PLAYER_CYCLE_JUMP_MOVING_LEFT_MODIFIER) ||
                     movementType.Equals(GameConstants.PLAYER_CYCLE_JUMP_MOVING_RIGHT_MODIFIER) ||
                     movementType.Equals(GameConstants.PLAYER_FALL_MOVING_LEFT_MODIFIER) ||
                     movementType.Equals(GameConstants.PLAYER_FALL_MOVING_RIGHT_MODIFIER))
            {
                Player player = game.getSceneGraph().getPlayer(idString);


                MovementMessage message             = new MovementMessage();
                Vector2         destinationPosition = new Vector2();

                message.objectId = GameConstants.PLAYER_OBJECT_ID;

                if (movementList.Contains(message.objectId))
                {
                    MovementMessage containedMessage = getMessageFromListByKey(message.objectId);
                    destinationPosition.Y = containedMessage.destinationPosition.Y;
                    if (movementType.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_LEFT_MODIFIER) ||
                        movementType.Equals(GameConstants.PLAYER_CYCLE_JUMP_MOVING_LEFT_MODIFIER) ||
                        movementType.Equals(GameConstants.PLAYER_FALL_MOVING_LEFT_MODIFIER))
                    {
                        destinationPosition.X = player.objectPosition.X - GameConstants.PLAYER_MAGNIFIED_RATE_OF_MOVEMENT;
                    }
                    else if (movementType.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_RIGHT_MODIFIER) ||
                             movementType.Equals(GameConstants.PLAYER_CYCLE_JUMP_MOVING_RIGHT_MODIFIER) ||
                             movementType.Equals(GameConstants.PLAYER_FALL_MOVING_RIGHT_MODIFIER))
                    {
                        destinationPosition.X = player.objectPosition.X + GameConstants.PLAYER_MAGNIFIED_RATE_OF_MOVEMENT;
                    }

                    message.messageTypeId = containedMessage.messageTypeId;
                }

                else
                {
                    if (movementType.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_LEFT_MODIFIER) ||
                        movementType.Equals(GameConstants.PLAYER_CYCLE_JUMP_MOVING_LEFT_MODIFIER) ||
                        movementType.Equals(GameConstants.PLAYER_FALL_MOVING_LEFT_MODIFIER))
                    {
                        destinationPosition.X = player.objectPosition.X - GameConstants.PLAYER_MAGNIFIED_RATE_OF_MOVEMENT;
                    }

                    else if (movementType.Equals(GameConstants.PLAYER_INITIAL_JUMP_MOVING_RIGHT_MODIFIER) ||
                             movementType.Equals(GameConstants.PLAYER_CYCLE_JUMP_MOVING_RIGHT_MODIFIER) ||
                             movementType.Equals(GameConstants.PLAYER_FALL_MOVING_RIGHT_MODIFIER))
                    {
                        destinationPosition.X = player.objectPosition.X + GameConstants.PLAYER_MAGNIFIED_RATE_OF_MOVEMENT;
                    }

                    destinationPosition.Y = player.objectPosition.Y - GameConstants.PLAYER_JUMP_HEIGHT;
                    message.messageTypeId = movementType;
                }



                message.destinationPosition = destinationPosition;

                message.rateOfMovement = GameConstants.PLAYER_RATE_OF_JUMP;

                MovementMessage oldMessage = (MovementMessage)getMessageFromListByKey(GameConstants.PLAYER_OBJECT_ID);
                //if was walking and switching to jump...
                if (movementList.Contains(message.objectId))
                {
                    if (oldMessage != null &&
                        (oldMessage.messageTypeId.Equals(GameConstants.PLAYER_MOVEMENT_RIGHT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_MOVEMENT_LEFT_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_INITIAL_JUMP_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_CYCLE_JUMP_MSG) ||
                         oldMessage.messageTypeId.Equals(GameConstants.PLAYER_FALL_MSG)))
                    {
                        movementList.Remove(oldMessage.objectId);
                    }
                }

                if (!movementList.Contains(message.objectId))
                {
                    //System.Console.WriteLine("Adding message: " + message.messageTypeId + " to movement list");
                    movementList.Add(message.objectId, message);
                }
            }
        }
 public void SetMovementMessage(MovementMessage msg)
 {
     if (m_currMsg == msg)
         return;
     m_currMsg = msg;
     m_CurrMovementFunction = m_MovementDelegates[(int)m_currMsg];
     //Debug.Log(msg);
 }
        /// <exception cref="T:System.Exception">A delegate callback throws an exception.</exception>
        private void OnMessageReceivedEvent(Message message)
        {
            _logger.Information(Constants.LogMessageTemplate, message.MessageId, GetType().Name,
                                "OnMessageReceivedEvent", "Message received.  Sending on.");

            switch (message.MessageTypes)
            {
            case Enums.MessageTypes.Movement:
            {
                _logger.Information(Constants.LogMessageTemplate, message.MessageId, GetType().Name,
                                    "OnMessageReceivedEvent", "Movement type detected. Sending on.");

                var item     = message.MessageList.Intersect(Constants.MovementItems).FirstOrDefault();
                var movement = new MovementMessage(message.MessageId, item);

                _messageHub.Publish(movement);

                //MovementEventHandler?.Invoke(this,
                //    new MovementTypeEventArgs(
                //        new Exception("Movement Handler: Error."),
                //        false,
                //        "Movement Sent Event.",
                //        args.SentMessage.MessageList));
                //MovementEventHandler(this,
                //    new MovementTypeEventArgs(
                //        new Exception("Movement Handler: Error."),
                //        false,
                //        "Movement Sent Event.",
                //        args.SentMessage.MessageList));
                break;
            }

            case Enums.MessageTypes.Action:
            {
                _logger.Information(Constants.LogMessageTemplate, message.MessageId, GetType().Name,
                                    "OnMessageReceivedEvent", "Action type detected. Sending on.");

                var item     = message.MessageList.Intersect(Constants.ActionItems).FirstOrDefault();
                var onObject = Constants.ObjectItems.Where(x => x.Contains("Door")).Select(x => x).FirstOrDefault();
                var action   = new ActionMessage(message.MessageId, item, onObject, string.Empty);

                _messageHub.Publish(action);

                //ActionEventHandler(this,
                //    new ActionTypeEventArgs(
                //        new Exception("Action Handler: Error."),
                //        false,
                //        "Action Sent Event.",
                //        args.SentMessage.MessageList));
                break;
            }

            case Enums.MessageTypes.Object:
            {
                _logger.Information(Constants.LogMessageTemplate, message.MessageId, GetType().Name,
                                    "OnMessageReceivedEvent", "Object type detected. Sending on.");

                var item     = message.MessageList.Intersect(Constants.ObjectItems).FirstOrDefault();
                var onObject = Constants.ActionItems.Where(x => x.Contains("Open")).Select(x => x).FirstOrDefault();
                var action   = new ActionMessage(message.MessageId, item, onObject, string.Empty);

                _messageHub.Publish(action);

                //ObjectEventHandler(this,
                //    new ObjectTypeEventArgs(
                //        new Exception("Object Handler: Error."),
                //        false,
                //        "Object Sent Event.",
                //        args.SentMessage.MessageList));
                break;
            }

            case Enums.MessageTypes.Monster:
            {
                _logger.Information(Constants.LogMessageTemplate, message.MessageId, GetType().Name,
                                    "OnMessageReceivedEvent", "Monster type detected.  Sending on.");

                var item      = message.MessageList.Intersect(Constants.MonsterItems).FirstOrDefault();
                var onMonster = Constants.MonsterItems.Where(x => x.Contains("Orc")).Select(x => x).FirstOrDefault();
                var action    = new ActionMessage(message.MessageId, item, string.Empty, onMonster);

                _messageHub.Publish(action);

                //MonsterEventHandler(this,
                //    new MonsterTypeEventArgs(
                //        new Exception("Monster Handler: Error."),
                //        false,
                //        "Monster Sent Event.",
                //        args.SentMessage.MessageList));
                break;
            }

            default:
            {
                _logger.Error(Constants.LogMessageTemplate, message.MessageId, GetType().Name,
                              "OnMessageReceivedEvent", "Unknown type detected.");
                throw new ArgumentOutOfRangeException("Unknown type detected.");
            }
            }
        }