/// <summary>создает объект из потомка ItemController</summary> private void CreateItem <T>(GameSave.ItemType newType, GameSave.BrickHp baseHp = GameSave.BrickHp.singleHP) where T : ItemController { var freeCellList = GetFreeCellInRow(TurnCount); if (freeCellList.Count <= 0) { return; //свободных мест нет! } var freeColumn = freeCellList[Random.Range(0, freeCellList.Count)]; var newBlock = _itemList.FirstOrDefault(item => item.GetType() == typeof(T) && !item.gameObject.activeSelf); if (newBlock == null) { foreach (var prefabItem in prefabList) { if (null != prefabItem.gameObject.GetComponent <T>()) { newBlock = (Instantiate(prefabItem, transform)).GetComponent <T>(); break; } } newBlock.manager = this; _itemList.Add(newBlock); } int decreasedValue = ((int)baseHp + 1) * CurrentBrickHpReductionValue(); newBlock.Init(TurnCount, freeColumn, TurnCount * ((int)baseHp + 1) - decreasedValue); }
void CreateItem(GameSave.ItemType itemToCreate, GameSave.BrickHp baseHP = GameSave.BrickHp.singleHP) { switch (itemToCreate) { case GameSave.ItemType.cube: CreateItem <CubeController>(itemToCreate, baseHP); break; case GameSave.ItemType.boss: CreateItem <BossController>(itemToCreate, baseHP); break; case GameSave.ItemType.onion: CreateItem <OnionController>(itemToCreate, baseHP); break; case GameSave.ItemType.corner: CreateItem <CornerController>(itemToCreate, baseHP); break; case GameSave.ItemType.armoured: CreateItem <ArmouredController>(itemToCreate, baseHP); break; case GameSave.ItemType.dissapearing: CreateItem <DissapearingController>(itemToCreate, baseHP); break; case GameSave.ItemType.moving: CreateItem <MovingController>(itemToCreate, baseHP); break; case GameSave.ItemType.teleport: CreateItem <TeleportController>(itemToCreate, baseHP); break; case GameSave.ItemType.ballCoin: CreateItem <BallCoinController>(itemToCreate, baseHP); break; case GameSave.ItemType.starCoin: CreateItem <StarCoinController>(itemToCreate, baseHP); break; case GameSave.ItemType.upForceCoin: CreateItem <UpForceCoinController>(itemToCreate, baseHP); break; case GameSave.ItemType.diffuseBallCoin: CreateItem <DiffuseCoinController>(itemToCreate, baseHP); break; case GameSave.ItemType.dopelgangerCoin: CreateItem <DopelgangerCoinController>(itemToCreate, baseHP); break; case GameSave.ItemType.jumpBallCoin: CreateItem <JumpCoinController>(itemToCreate, baseHP); break; case GameSave.ItemType.laserCoin: CreateItem <SingleLaserCoinController>(itemToCreate, baseHP); break; case GameSave.ItemType.crossLaserCoin: CreateItem <CrossLaserCoinController>(itemToCreate, baseHP); break; case GameSave.ItemType.killerCoin: CreateItem <KillerCoinController>(itemToCreate, baseHP); break; case GameSave.ItemType.invunerable: CreateItem <InvunerableController>(itemToCreate, baseHP); break; case GameSave.ItemType.superBossWall: CreateItem <SuperBossWallController>(itemToCreate, baseHP); break; case GameSave.ItemType.superBossShield: CreateItem <SuperBossShieldController>(itemToCreate, baseHP); break; case GameSave.ItemType.superBossExplosive: CreateItem <SuperBossExplosiveController>(itemToCreate, baseHP); break; case GameSave.ItemType.magicDustCoin: CreateItem <MagicDustCoinCoinController>(itemToCreate, baseHP); break; case GameSave.ItemType.removeBallCoin: CreateItem <RemoveBallCoinController>(itemToCreate, baseHP); break; case GameSave.ItemType.explosive: CreateItem <ExplosiveController>(itemToCreate, baseHP); break; case GameSave.ItemType.blackHoleCoin: CreateItem <BlackHoleCoinController>(itemToCreate, baseHP); break; case GameSave.ItemType.reduceBallsCountCoin: CreateItem <ReduceBallsCoinController>(itemToCreate, baseHP); break; } }