Пример #1
0
        /// <summary>
        /// Resolves card playing, then spawns unit of given type
        /// </summary>
        /// <param name="message"></param>
        private void CardPlayed(MatchMessageCardPlayed message)
        {
            if (_connection.BattleConnection.HostId == _connection.Session.UserId)
            {
                MatchMessageUnitSpawned unitSpawned = null;
                switch (message.Card.CardData.type)
                {
                case CardType.BigShip:
                case CardType.AoEShip:
                case CardType.Boats:
                    int         id    = _nextId + 1;
                    PlayerColor color = message.PlayerId == _connection.BattleConnection.HostId ? PlayerColor.Black : PlayerColor.Red;
                    unitSpawned = new MatchMessageUnitSpawned(message.PlayerId, color, id, message.Card.CardData, message.NodeX, message.NodeY);
                    break;

                default:
                    break;
                }

                if (unitSpawned != null)
                {
                    _nextId += 1;
                    _stateManager.SendMatchStateMessage(MatchMessageType.UnitSpawned, unitSpawned);
                    _stateManager.SendMatchStateMessageSelf(MatchMessageType.UnitSpawned, unitSpawned);
                }
            }
        }
        /// <summary>
        /// Reads match messages sent by other players, and fires locally events basing on opCode.
        /// </summary>
        /// <param name="opCode"></param>
        /// <param name="messageJson"></param>
        public void ReceiveMatchStateHandle(long opCode, string messageJson)
        {
            //Choosing which event should be invoked basing on opCode, then parsing json to MatchMessage class and firing event
            switch ((MatchMessageType)opCode)
            {
            //UNITS
            case MatchMessageType.UnitSpawned:
                MatchMessageUnitSpawned matchMessageUnitSpawned = MatchMessageUnitSpawned.Parse(messageJson);
                OnUnitSpawned?.Invoke(matchMessageUnitSpawned);
                break;

            case MatchMessageType.UnitMoved:
                MatchMessageUnitMoved matchMessageUnitMoved = MatchMessageUnitMoved.Parse(messageJson);
                OnUnitMoved?.Invoke(matchMessageUnitMoved);
                break;

            case MatchMessageType.UnitAttacked:
                MatchMessageUnitAttacked matchMessageUnitAttacked = MatchMessageUnitAttacked.Parse(messageJson);
                OnUnitAttacked?.Invoke(matchMessageUnitAttacked);
                break;

            //SPELLS
            case MatchMessageType.SpellActivated:
                MatchMessageSpellActivated matchMessageSpellActivated = MatchMessageSpellActivated.Parse(messageJson);
                OnSpellActivated?.Invoke(matchMessageSpellActivated);
                break;

            //CARDS
            case MatchMessageType.CardPlayRequest:
                if (_connection.BattleConnection.HostId == _connection.Account.User.Id)
                {
                    MatchMessageCardPlayRequest matchMessageCardPlayRequest = MatchMessageCardPlayRequest.Parse(messageJson);
                    OnCardRequested?.Invoke(matchMessageCardPlayRequest);
                }
                break;

            case MatchMessageType.CardPlayed:
                MatchMessageCardPlayed matchMessageCardPlayed = MatchMessageCardPlayed.Parse(messageJson);
                OnCardPlayed?.Invoke(matchMessageCardPlayed);
                break;


            case MatchMessageType.CardCanceled:
                MatchMessageCardCanceled matchMessageCardCancelled = MatchMessageCardCanceled.Parse(messageJson);
                OnCardCancelled?.Invoke(matchMessageCardCancelled);
                break;

            case MatchMessageType.StartingHand:
                MatchMessageStartingHand matchMessageStartingHand = MatchMessageStartingHand.Parse(messageJson);
                OnStartingHandReceived?.Invoke(matchMessageStartingHand);
                break;
            }
        }
Пример #3
0
        /// <summary>
        /// Spawns new unit and adds it to dictionary.
        /// </summary>
        /// <param name="message"></param>
        private void SpawnUnit(MatchMessageUnitSpawned message)
        {
            CardType    cardType = message.Card.GetCardInfo().CardType;
            Node        node     = Scene02BattleController.Instance.Nodes[message.NodeX, message.NodeY];
            PlayerColor player   = message.OwnerId == _connection.Session.UserId ? PlayerColor.Black : PlayerColor.Red;
            int         id       = message.UnitId;

            Quaternion rotation;

            if (_connection.BattleConnection.HostId == _connection.Session.UserId)
            {
                rotation = player == PlayerColor.Black ? Quaternion.Euler(0, 90, 0) : Quaternion.Euler(0, -90, 0);
            }
            else
            {
                rotation = player == PlayerColor.Black ? Quaternion.Euler(0, -90, 0) : Quaternion.Euler(0, 90, 0);
            }

            GameObject prefab = Resources.Load <GameObject>("Units/" + cardType.ToString() + "_" + player.ToString());

            Unit unit = GameObject.Instantiate(prefab, node.transform.position, rotation).GetComponent <Unit>();

            if (unit)
            {
                string ownerId = message.OwnerId;
                unit.Init(player, ownerId, id, node, message.Card);
                _units[player].Add(id, unit);
                unit.OnAfterDestroyed += HandleAfterUnitDestroyed;
            }

            UnitAI unitAI = unit.GetComponent <UnitAI>();

            if (unitAI != null)
            {
                unitAI.Init(_stateManager, this, _connection.BattleConnection.HostId == _connection.Session.UserId);
            }
            else
            {
                Debug.LogWarning("Could not initialize null UnitAI");
            }

            if (OnAfterUnitInstantiated != null)
            {
                OnAfterUnitInstantiated(unit);
            }
        }
Пример #4
0
        /// <summary>
        /// Builds forts at the start of the game.
        /// </summary>
        /// <param name="userId"></param>
        public void BuildStartingStructures(string userId)
        {
            bool isHost = userId == _connection.BattleConnection.HostId;

            CardData fortCard = new CardData()
            {
                type  = CardType.Fort,
                level = 1
            };

            CardData mainFortCard = new CardData()
            {
                type  = CardType.MainFort,
                level = 1
            };

            int fortX     = isHost ? 4 : 10;
            int mainFortX = isHost ? 2 : 12;

            var playerColor = isHost ? PlayerColor.Black : PlayerColor.Red;

            MatchMessageUnitSpawned fortTop = new MatchMessageUnitSpawned(
                userId, playerColor, _nextId++, fortCard, fortX, 10);
            MatchMessageUnitSpawned fortBot = new MatchMessageUnitSpawned(
                userId, playerColor, _nextId++, fortCard, fortX, 2);
            MatchMessageUnitSpawned fortMain = new MatchMessageUnitSpawned(
                userId, playerColor, _nextId++, mainFortCard, mainFortX, 6);

            _stateManager.SendMatchStateMessage(MatchMessageType.UnitSpawned, fortTop);
            _stateManager.SendMatchStateMessage(MatchMessageType.UnitSpawned, fortBot);
            _stateManager.SendMatchStateMessage(MatchMessageType.UnitSpawned, fortMain);

            _stateManager.SendMatchStateMessageSelf(MatchMessageType.UnitSpawned, fortTop);
            _stateManager.SendMatchStateMessageSelf(MatchMessageType.UnitSpawned, fortBot);
            _stateManager.SendMatchStateMessageSelf(MatchMessageType.UnitSpawned, fortMain);

            Unit tower2 = _units[playerColor][_nextId - 3];
            Unit tower1 = _units[playerColor][_nextId - 2];
            Unit castle = _units[playerColor][_nextId - 1];
        }