示例#1
0
 public CharacterObject(int _playerId, ECharacterType _characterType, int _hp, int _regen, int _speed, ETeam _teamId, Vector2 _position, EObjectDirection _direction) :
     base(_hp, _regen, _teamId, _position)
 {
     playerId      = _playerId;
     direction     = _direction;
     characterType = _characterType;
     speed         = _speed;
     abilities     = CreateAbilities();
 }
 public PlayerCommandData(int _turnNumber, float _deltaTime, Vector2 _position, EObjectDirection _direction, List <EPlayerAction> _actions, List <AbilityActivationData> _abilityActivations)
 {
     turnNumber         = _turnNumber;
     deltaTime          = _deltaTime;
     position           = _position;
     actions            = _actions;
     direction          = _direction;
     abilityActivations = _abilityActivations;
 }
示例#3
0
 public CharacterStateData(Packet _packet)
 {
     id        = _packet.ReadInt();
     playerId  = _packet.ReadInt();
     type      = (ECharacterType)_packet.ReadInt();
     position  = _packet.ReadVector2();
     direction = (EObjectDirection)_packet.ReadInt();
     teamId    = (ETeam)_packet.ReadInt();
     hp        = _packet.ReadInt();
     speed     = _packet.ReadInt();
 }
示例#4
0
 public CharacterStateData(int _id, int _playerId, ECharacterType _type, ETeam _teamId, Vector2 _position, EObjectDirection _direction, int _hp, int _speed)
 {
     id        = _id;
     playerId  = _playerId;
     type      = _type;
     teamId    = _teamId;
     position  = _position;
     direction = _direction;
     hp        = _hp;
     speed     = _speed;
 }
示例#5
0
    public void SetDirection(List <EPlayerAction> _actions)
    {
        if (_actions.Contains(EPlayerAction.HOLD_DIRECTION))
        {
            return;
        }

        bool up    = _actions.Contains(EPlayerAction.UP);
        bool left  = _actions.Contains(EPlayerAction.LEFT);
        bool right = _actions.Contains(EPlayerAction.RIGHT);
        bool down  = _actions.Contains(EPlayerAction.DOWN);

        if (up || down || left || right)
        {
            direction = PlayerDirectionUtils.GetPlayerDirection(up, down, left, right);
        }
    }
    public PlayerCommandData(Packet _packet)
    {
        turnNumber = _packet.ReadInt();
        deltaTime  = _packet.ReadFloat();
        position   = _packet.ReadVector2();
        direction  = (EObjectDirection)_packet.ReadInt();
        int actionCount = _packet.ReadInt();

        actions = new List <EPlayerAction>();
        for (int i = 0; i < actionCount; i++)
        {
            actions.Add((EPlayerAction)_packet.ReadInt());
        }
        int abilityActivationCount = _packet.ReadInt();

        abilityActivations = new List <AbilityActivationData>();
        for (int i = 0; i < abilityActivationCount; i++)
        {
            abilityActivations.Add(new AbilityActivationData(_packet));
        }
    }
示例#7
0
    private void FixedUpdate()
    {
        //TODO now we apply directly -> fix add interpolation between old and new
        while (gameStateQueue.Count > 0)
        {
            GameState gameState = gameStateQueue.Dequeue();

            turnNumber = gameState.turnNumber;

            //Handle events
            handleEvents(gameState.events);

            //Update character states
            foreach (CharacterStateData characterStateData in gameState.characters)
            {
                if (!characters.ContainsKey(characterStateData.id))
                {
                    OnCharacterShouldSpawn(characterStateData);
                }
                else
                {
                    CharacterObject character = characters[characterStateData.id];

                    character.hp    = characterStateData.hp;
                    character.speed = characterStateData.speed;

                    //Only update other players
                    if (players[Client.instance.myId].character != null && players[Client.instance.myId].character.id != characterStateData.id)
                    {
                        character.direction = characterStateData.direction;
                        character.Move(new Vector2(characterStateData.position.X, characterStateData.position.Y));
                    }
                }
            }

            //Update building states
            foreach (BuildingStateData buildingStateData in gameState.buildings)
            {
                if (!buildings.ContainsKey(buildingStateData.id))
                {
                    onBuildingShouldSpawn(buildingStateData);
                }
                else
                {
                    //TODO
                }
            }

            //Handle local player input
            if (players.ContainsKey(Client.instance.myId) && players[Client.instance.myId].character != null)
            {
                Player               localPlayer = players[Client.instance.myId];
                CharacterObject      character   = localPlayer.character;
                float                delta       = Time.deltaTime;
                List <EPlayerAction> actions     = PlayerController.GetActions();
                List <EPlayerAction> abilities   = PlayerController.GetAbilities();

                List <AbilityActivationData> abilityActivations = ActivateAbilities(character, abilities);
                MoveLocalPlayer(character, actions, delta);
                character.SetDirection(actions);
                EObjectDirection        direction         = character.direction;
                System.Numerics.Vector2 characterPosition = new System.Numerics.Vector2(character.transform.position.x, character.transform.position.y);

                //Send player command to server
                PlayerCommandData cmdData = new PlayerCommandData(turnNumber, delta, characterPosition, direction, actions, abilityActivations);
                ClientSend.PlayerCommand(cmdData);
            }


            gameStateHistory.Add(gameState);
        }

        if (gameStateHistory.Count > 5)
        {
            gameStateHistory.RemoveAt(0);
        }
    }
示例#8
0
 void Awake()
 {
     direction      = EObjectDirection.TOP;
     spriteRenderer = gameObject.GetComponent <SpriteRenderer>();
     rb             = GetComponent <Rigidbody2D>();
 }
示例#9
0
 public AlphaObject(int _playerId, Vector2 _position, EObjectDirection _direction) :
     base(_playerId, ECharacterType.ALPHA, Stats.ALPHA_HP, Stats.ALPHA_REGEN, Stats.ALPHA_SPEED, TeamManager.centauriTeam.GetTeamId(), _position, _direction)
 {
 }
示例#10
0
 public QueenObject(int _playerId, Vector2 _position, EObjectDirection _direction) :
     base(_playerId, ECharacterType.QUEEN, Stats.QUEEN_HP, Stats.QUEEN_REGEN, Stats.QUEEN_SPEED, TeamManager.centauriTeam.GetTeamId(), _position, _direction)
 {
 }
示例#11
0
 public StalkerObject(int _playerId, Vector2 _position, EObjectDirection _direction) :
     base(_playerId, ECharacterType.STALKER, Stats.STALKER_HP, Stats.STALKER_REGEN, Stats.STALKER_SPEED, TeamManager.centauriTeam.GetTeamId(), _position, _direction)
 {
 }
示例#12
0
 public TyrantObject(int _playerId, Vector2 _position, EObjectDirection _direction) :
     base(_playerId, ECharacterType.TYRANT, Stats.TYRANT_HP, Stats.TYRANT_REGEN, Stats.TYRANT_SPEED, TeamManager.centauriTeam.GetTeamId(), _position, _direction)
 {
 }