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); }