Esempio n. 1
0
    protected override void HandlePacket(Packet packet)
    {
        BitBuffer bitBuffer = new BitBuffer();

        bitBuffer.PutBytes(packet.getData());
        bitBuffer.Flip();
        PlayerInput input = PlayerInput.fromBytes(bitBuffer);

        switch (input.GetInputType())
        {
        case InputType.MOVEMENT:
            _players[input.GetId()].SetTargetPosition(((MovementInput)input).GetPosition());
            break;

        case InputType.ABILITY:
            AbilityInput ability = (AbilityInput)input;
            Vector3      abilityStartPosition = Vector3.zero;
            switch (ability.GetAbilityType())
            {
            case AbilityType.AUTOATTACK:
                abilityStartPosition = _players[ability.GetId()].transform.position;
                AutoAttack autoAttack = SpawnAutoAttack(ability.GetId(), abilityStartPosition, ability.GetTargetPosition());
                _lastAbilityId = (_lastAbilityId + 1) % 255;
                _autoAttacks.Add(_lastAbilityId, autoAttack);
                break;

            case AbilityType.FREEZE:
                _players[ability.GetId()].SpawnFreeze(ability.GetTargetPosition());
                break;

            case AbilityType.FLASH:
                _players[ability.GetId()].MoveTo(ability.GetTargetPosition());
                _players[ability.GetId()].CancelMovement();
                break;

            case AbilityType.EXPLOSION:
                CreateExplosion(ability.GetTargetPosition());
                break;
            }
            _channel.SendAll(new AbilityResponse(ability, abilityStartPosition), true);
            break;

        case InputType.START_GAME:
            _lastPlayerId++;
            Vector3 startPosition = new Vector3(2f, 1.2f, 0f);
            Player  player        = CreateServerPlayer(new PlayerInfo(_lastPlayerId, startPosition));
            _players.Add(_lastPlayerId, player);
            _channel.Send(new PlayerInfoBroadcast(_lastPlayerId, _players), packet.getAddress(), true);
            PlayerInfo playerInfo = new PlayerInfo(_lastPlayerId, player.GetHealth(), new PositionInfo(startPosition));
            _channel.SendAllExcluding(new NewPlayerEvent(playerInfo), packet.getAddress(), true);
            break;
        }
        packet = _channel.GetPacket();
        bitBuffer.Clear();
    }
Esempio n. 2
0
 public AbilityResponse(AbilityInput ability, Vector3 startPosition)
 {
     _id             = ability.GetId();
     _type           = ability.GetAbilityType();
     _startPosition  = new PositionInfo(startPosition);
     _targetPosition = new PositionInfo(ability.GetTargetPosition());
 }