/// <summary> /// Gets the unit training time. /// </summary> public int GetTrainingTime(int index, LogicLevel level, int additionalBarrackCount) { int trainingTime = this._trainingTime[index]; if (this.GetVillageType() != 1 && LogicDataTables.GetGlobals().UseNewTraining() && this.GetCombatItemType() == 0) { if (level != null) { LogicGameObjectManager gameObjectManager = level.GetGameObjectManagerAt(0); if (this._unitType != 0) { if (this._unitType == 1) { int barrackCount = gameObjectManager.GetBarrackCount(); int barrackFound = 0; if (barrackCount > 0) { int productionLevel = this.GetRequiredProductionHouseLevel(); int idx = 0; do { LogicBuilding barrack = (LogicBuilding)gameObjectManager.GetBarrack(idx); if (barrack != null) { if (barrack.GetBuildingData().GetProducesUnitsOfType() == this.GetUnitOfType()) { if (barrack.GetUpgradeLevel() >= productionLevel) { if (!barrack.IsConstructing()) { barrackFound += 1; } } } } } while (++idx != barrackCount); } if (barrackFound + additionalBarrackCount <= 0) { return(trainingTime); } int[] barrackDivisor = LogicDataTables.GetGlobals().GetBarrackReduceTrainingDevisor(); int divisor = barrackDivisor[LogicMath.Min(barrackDivisor.Length - 1, barrackFound + additionalBarrackCount - 1)]; if (divisor > 0) { return(trainingTime / divisor); } return(trainingTime); } if (this.GetUnitOfType() == 2) { int barrackCount = gameObjectManager.GetDarkBarrackCount(); int barrackFound = 0; if (barrackCount > 0) { int productionLevel = this.GetRequiredProductionHouseLevel(); int idx = 0; do { LogicBuilding barrack = (LogicBuilding)gameObjectManager.GetDarkBarrack(idx); if (barrack != null) { if (barrack.GetBuildingData().GetProducesUnitsOfType() == this.GetCombatItemType()) { if (barrack.GetUpgradeLevel() >= productionLevel) { if (!barrack.IsConstructing()) { barrackFound += 1; } } } } } while (++idx != barrackCount); } if (barrackCount + additionalBarrackCount <= 0) { return(trainingTime); } int[] barrackDivisor = LogicDataTables.GetGlobals().GetDarkBarrackReduceTrainingDevisor(); int divisor = barrackDivisor[LogicMath.Min(barrackDivisor.Length - 1, barrackCount + additionalBarrackCount - 1)]; if (divisor > 0) { return(trainingTime / divisor); } return(trainingTime); } } Debugger.Error("invalid type for unit"); } else { Debugger.Error("level was null in getTrainingTime()"); } } return(trainingTime); }
public int GetTrainingTime(int index, LogicLevel level, int additionalBarrackCount) { int trainingTime = this.m_trainingTime[index]; if (LogicDataTables.GetGlobals().UseNewTraining() && this.GetVillageType() != 1 && this.GetCombatItemType() == LogicCombatItemData.COMBAT_ITEM_TYPE_CHARACTER) { if (level != null) { LogicGameObjectManager gameObjectManager = level.GetGameObjectManagerAt(0); switch (this.m_unitType) { case 1: int barrackCount = gameObjectManager.GetBarrackCount(); int productionLevel = this.GetRequiredProductionHouseLevel(); int barrackFound = 0; for (int i = 0; i < barrackCount; i++) { LogicBuilding barrack = (LogicBuilding)gameObjectManager.GetBarrack(i); if (barrack != null) { if (barrack.GetBuildingData().GetProducesUnitsOfType() == this.GetUnitOfType()) { if (barrack.GetUpgradeLevel() >= productionLevel) { if (!barrack.IsConstructing()) { barrackFound += 1; } } } } } if (barrackFound + additionalBarrackCount <= 0) { return(trainingTime); } int[] barrackDivisor = LogicDataTables.GetGlobals().GetBarrackReduceTrainingDevisor(); int divisor = barrackDivisor[LogicMath.Min(barrackDivisor.Length - 1, barrackFound + additionalBarrackCount - 1)]; if (divisor > 0) { return(trainingTime / divisor); } return(trainingTime); case 2: barrackCount = gameObjectManager.GetDarkBarrackCount(); productionLevel = this.GetRequiredProductionHouseLevel(); barrackFound = 0; for (int i = 0; i < barrackCount; i++) { LogicBuilding barrack = (LogicBuilding)gameObjectManager.GetDarkBarrack(i); if (barrack != null) { if (barrack.GetBuildingData().GetProducesUnitsOfType() == this.GetUnitOfType()) { if (barrack.GetUpgradeLevel() >= productionLevel) { if (!barrack.IsConstructing()) { barrackFound += 1; } } } } } if (barrackFound + additionalBarrackCount <= 0) { return(trainingTime); } barrackDivisor = LogicDataTables.GetGlobals().GetDarkBarrackReduceTrainingDevisor(); divisor = barrackDivisor[LogicMath.Min(barrackDivisor.Length - 1, barrackFound + additionalBarrackCount - 1)]; if (divisor > 0) { return(trainingTime / divisor); } return(trainingTime); default: Debugger.Error("invalid type for unit"); break; } } else { Debugger.Error("level was null in getTrainingTime()"); } } return(trainingTime); }