public static void ApplyGameInfoEffect(this GameInfo gameInfo, GameInfoEffectBase effect) { switch (effect) { case LevelEffect levelEffect: gameInfo.Level.Points += levelEffect.ExpGain; break; case KingdomEffect kingdomEffect: gameInfo.Kingdom.Points += kingdomEffect.ExpGain; break; case ItemEffect itemEffect: gameInfo.Inventory.AddOrUpdate(itemEffect.Item); break; case CompoundEffect compoundEffect: foreach (var e in compoundEffect.Effects) { gameInfo.ApplyGameInfoEffect(e); } break; } }