public static DataTableEnemies.EnemyTypes[] GetEnemiesForLevel(AgeTypes age, int lvl) { if (m_Levels.ContainsKey(age)) { //CurLvl = 0. 0 / 2 = 0 = 0; Enemies [0] //CurLvl = 0. 1 / 2 = 0.5 = 1; Enemies [0] [1] //CurLvl = 7. 7 / 2 = 3.5 = 4; Enemies [0] [1] [2] [3] //CurLvl = 15. 15 / 2 = 7.5 = 8; Enemies [0] [1] [2] [3] [4] float amountOfEnemies = (float)lvl / m_Levels[age].NewEnemyEachAmountOfLevels; int enemyIndex = Mathf.CeilToInt(amountOfEnemies); DataTableEnemies.EnemyTypes[] enemyTypes = m_Levels[age].EnemyTypes; //Размер массива ограничеваеться размером массива доступных врагов DataTableEnemies.EnemyTypes[] enemies = new DataTableEnemies.EnemyTypes[enemyIndex + 1 <= enemyTypes.Length ? enemyIndex + 1 : enemyTypes.Length]; for (int i = 0; i < enemyTypes.Length; i++) { //EnemyTypes (j): [0] [1] [2] [3] [4] //Enemies: (enemyIndex): [0] [1] if (i <= enemyIndex) { enemies[i] = enemyTypes[i]; } } return(enemies); } return(new DataTableEnemies.EnemyTypes[] { DataTableEnemies.EnemyTypes.Enemy1, DataTableEnemies.EnemyTypes.Enemy2, DataTableEnemies.EnemyTypes.Enemy3 }); }
//Win condition public static AgeWinConditionController GetWinConditionController(AgeTypes age) { if (m_Levels.ContainsKey(age)) { return(m_Levels[age].WinConditionController); } return(null); }
public static float GetSpeedMax(AgeTypes age) { if (m_Levels.ContainsKey(age)) { return(m_Levels[age].MaxSpeed); } return(10); }
public static int GetSpawnCountSpread(AgeTypes age, int lvl, int levelSpawnCount) { if (m_Levels.ContainsKey(age)) { float baseSpawnCountSpreadPercent = m_Levels[age].BaseSpawnCountSpreadPercent / 100f; return((int)(baseSpawnCountSpreadPercent * levelSpawnCount)); } return(0); }
//Spawn // - Spawn count public static int GetSpawnCount(AgeTypes age, int lvl) { if (m_Levels.ContainsKey(age)) { int baseSpawnCount = m_Levels[age].BaseSpawnCount; return(baseSpawnCount + lvl); } return(1); }
public static int GetHPSpreadPercent(AgeTypes age, int lvl, int levelHP) { if (m_Levels.ContainsKey(age)) { float baseHPSpreadPercent = m_Levels[age].BaseHPSpreadPercent / 100f; return((int)(baseHPSpreadPercent * levelHP)); } return(0); }
//HP public static int GetHP(AgeTypes age, int lvl) { if (m_Levels.ContainsKey(age)) { int baseHP = m_Levels[age].BaseHP; return(baseHP + baseHP * lvl); } return(1); }
//Loot public static int GetMaxCoinCount(AgeTypes age, int lvl) { if (m_Levels.ContainsKey(age)) { int baseCointCount = m_Levels[age].BaseCoinCount; return(baseCointCount + baseCointCount * lvl); } return(1); }
public static float GetSpeedSpreadPercent(AgeTypes age, int lvl, float levelSpeed) { if (m_Levels.ContainsKey(age)) { float baseSpeedSpreadPercent = m_Levels[age].BaseSpeedSpreadPercent / 100f; return(baseSpeedSpreadPercent * levelSpeed); } return(0); }
public void Init(AgeTypes age, int level) { //HP int hp = DataTableLevels.GetHP(age, level); int hpSpreadPercent = DataTableLevels.GetHPSpreadPercent(age, level, hp); //Spawn int spawnCount = DataTableLevels.GetSpawnCount(age, level); int spawnCountSpread = DataTableLevels.GetSpawnCountSpread(age, level, spawnCount); float rate = DataTableLevels.GetSpawnRate(age, level); float rateSpread = DataTableLevels.GetSpawnRateSpread(age, level, rate); //Enemies float speed = DataTableLevels.GetSpeed(age, level); float speedSpreadPercent = DataTableLevels.GetSpeedSpreadPercent(age, level, speed); float maxSpeed = DataTableLevels.GetSpeedMax(age); EnemyTypes[] enemies = DataTableLevels.GetEnemiesForLevel(age, level); //Loot int maxCoinCount = DataTableLevels.GetMaxCoinCount(age, level); Debug.LogWarning(string.Format("LevelController: Start level. Age: {0}. Level: {1}", age, level)); Debug.Log(string.Format(" - HP {0}. HPSpreadPercent {1} \n - SpawnCount: {2}. SpawnCountSpread: {3} \n SpawnRate: {4}. SpawnRateSpread: {5} \n - Speed: {6}. SpeedSpread: {7}. MaxSpeed: {8}", hp, hpSpreadPercent, spawnCount, spawnCountSpread, rate, rateSpread, speed, speedSpreadPercent, maxSpeed)); Debug.Log("Enemies:\n"); for (int i = 0; i < enemies.Length; i++) { Debug.Log(string.Format("{0}\n", enemies[i])); } //Spawn points for (int i = 0; i < SpawnPoints.Length; i++) { SpawnPoints[i].OnDestroyedAllEnemiesFromSpawn += DestroyedAllEnemiesFromSpawn; SpawnPoints[i].OnDestroyEnemy += DestroyEnemyHandler; SpawnPoints[i].Init(hp, hpSpreadPercent, //HP spawnCount, spawnCountSpread, //Spawn rate, rateSpread, speed, speedSpreadPercent, //Enemies maxSpeed, enemies, maxCoinCount); //Loot m_TotalEnemiesOnLevel += SpawnPoints[i].ActualSpawnCount; } //UI GameManager.Instance.Manager_UI.CreateLevelProgressBar(GameManager.Instance.Manager_UI.UIParent_MiddleTop, level); }
// - Spawn rate public static float GetSpawnRate(AgeTypes age, int lvl) { if (m_Levels.ContainsKey(age)) { float baseSpawnRate = m_Levels[age].BaseSpawnRate; float result = baseSpawnRate - (float)lvl / m_Levels[age].RateStepEachAmountOfLevels; return(Mathf.Clamp(result, m_Levels[age].MinSpawnRate, baseSpawnRate)); } return(1); }
//Enemies public static float GetSpeed(AgeTypes age, int lvl) { if (m_Levels.ContainsKey(age)) { float constValue = 0.07f; float baseSpeed = m_Levels[age].BaseSpeed; return(baseSpeed + (baseSpeed * (lvl * constValue))); } return(1); }
public Level(AgeTypes ageType, //HP int baseHP, int baseHPSpreadPercent, //Spawn // - Spawn count int baseSpawnCount, int baseSpawnCountSpreadPercent, // - Spawn rate float baseSpawnRate, int baseSpawnRateSpreadPercent, float minSpawnRate, int rateStepEachAmountOfLevels, //Enemies // - Speed float baseSpeed, int baseSpeedSpreadPercent, float maxSpeed, // - Enemy float newEnemyEachAmountOfLevels, DataTableEnemies.EnemyTypes[] enemyTypes, //Loot int baseCoinCount, //Win condition AgeWinConditionController winConditionController) { m_AgeType = ageType; //HP m_BaseHP = baseHP; m_BaseHPSpreadPercent = baseHPSpreadPercent; //Spawn // - Spawn count m_BaseSpawnCount = baseSpawnCount; m_BaseSpawnCountSpreadPercent = baseSpawnCountSpreadPercent; // - Spawn rate m_BaseSpawnRate = baseSpawnRate; m_BaseSpawnRateSpreadPercent = baseSpawnRateSpreadPercent; m_MinSpawnRate = minSpawnRate; m_RateStepEachAmountOfLevels = rateStepEachAmountOfLevels; //Enemies // - Speed m_BaseSpeed = baseSpeed; m_BaseSpeedSpreadPercent = baseSpeedSpreadPercent; m_MaxSpeed = maxSpeed; // - Enemy m_NewEnemyEachAmountOfLevels = newEnemyEachAmountOfLevels; m_EnemyTypes = enemyTypes; //Loot m_BaseCoinCount = baseCoinCount; //Win condition WinConditionController = winConditionController; }
public static float GetSpawnRateSpread(AgeTypes age, int lvl, float spawnRate) { if (m_Levels.ContainsKey(age)) { float constValue = 2f; int baseSpawnRateSpread = m_Levels[age].BaseSpawnRateSpread; float baseSpawnPercent = m_Levels[age].BaseSpawnRateSpread / 100f; float result = baseSpawnPercent * (spawnRate / constValue); return(result); } return(0); }
static AgeWinConditionController GetWinConditionControllerForAge(AgeTypes ageType) { switch (ageType) { case AgeTypes.FirstAge: { Dictionary <DataTableItems.ItemTypes, int> itemsToWin = new Dictionary <DataTableItems.ItemTypes, int>(); itemsToWin.Add(DataTableItems.ItemTypes.Stick, 3); return(new FirstAge_WinConditionController(itemsToWin)); } } Debug.LogError("ERROR: Win condition controller for age " + ageType + " not found"); return(null); }