Exemplo n.º 1
0
        private static void ChangeEntity(Game game, PowerHistoryChangeEntity history)
        {
            PowerHistoryEntity phEntity = history.Entity;

            Playable oldEntity = (Playable)game.IdEntityDic[phEntity.Id];
            Card     newCard   = Cards.FromId(history.CardId);

            if (oldEntity.Card.Type == newCard.Type)
            {
                oldEntity.Card = newCard;
            }
            else
            {
                Playable entity;
                switch (newCard.Type)
                {
                case CardType.MINION:
                    entity = new Minion(oldEntity.Controller, newCard, oldEntity.NativeTags, oldEntity.Id);
                    break;

                case CardType.SPELL:
                    entity = new Spell(oldEntity.Controller, newCard, oldEntity.NativeTags, oldEntity.Id);
                    break;

                case CardType.HERO:
                    entity = new Hero(oldEntity.Controller, newCard, oldEntity.NativeTags, oldEntity.Id);
                    break;

                case CardType.WEAPON:
                    entity = new Weapon(oldEntity.Controller, newCard, oldEntity.NativeTags, oldEntity.Id);
                    break;

                default:
                    throw new ArgumentNullException();
                }

                switch (oldEntity.Zone.Type)
                {
                case Zone.PLAY:
                    oldEntity.Controller.BoardZone.ChangeEntity((Minion)oldEntity, (Minion)entity);
                    break;

                case Zone.DECK:
                    oldEntity.Controller.DeckZone.ChangeEntity(oldEntity, entity);
                    break;

                case Zone.HAND:
                    oldEntity.Controller.HandZone.ChangeEntity(oldEntity, entity);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
        }
        public override object ReadJson(JsonReader reader, System.Type objectType, object existingValue, JsonSerializer serializer)
        {
            var jsonObject = JObject.Load(reader);
            IPowerHistoryEntry history;

            switch ((PowerType)jsonObject["PowerType"].Value <int>())
            {
            case PowerType.FULL_ENTITY:
                history = new PowerHistoryFullEntity();
                break;

            case PowerType.SHOW_ENTITY:
                history = new PowerHistoryShowEntity();
                break;

            case PowerType.HIDE_ENTITY:
                history = new PowerHistoryHideEntity();
                break;

            case PowerType.TAG_CHANGE:
                history = new PowerHistoryTagChange();
                break;

            case PowerType.BLOCK_START:
                history = new PowerHistoryBlockStart();
                break;

            case PowerType.BLOCK_END:
                history = new PowerHistoryBlockEnd();
                break;

            case PowerType.CREATE_GAME:
                history = new PowerHistoryCreateGame();
                break;

            case PowerType.META_DATA:
                history = new PowerHistoryMetaData();
                break;

            case PowerType.CHANGE_ENTITY:
                history = new PowerHistoryChangeEntity();
                break;

            case PowerType.RESET_GAME:
            default:
                throw new ArgumentOutOfRangeException();
            }

            serializer.Populate(jsonObject.CreateReader(), history);
            return(history);
        }