public override void Refresh() { if (TechRecords == null) { SetUpTechTable(); SetUpTechTree(); } foreach (var techRecord in TechRecords) { var recordedTech = techRecord.TechToDisplay; techRecord.CurrentProgress = TechCanon.GetProgressOnTechByCiv(recordedTech, ObjectToDisplay); if (TechCanon.IsTechDiscoveredByCiv(techRecord.TechToDisplay, ObjectToDisplay)) { techRecord.Status = TechnologyRecord.TechStatus.Discovered; } else if (ObjectToDisplay.TechQueue.Contains(techRecord.TechToDisplay)) { if (ObjectToDisplay.TechQueue.Peek() == techRecord.TechToDisplay) { techRecord.Status = TechnologyRecord.TechStatus.BeingResearched; } else { techRecord.Status = TechnologyRecord.TechStatus.InQueue; } } else if ( SelectionMode != TechSelectionMode.ResearchFreeTech || TechCanon.IsTechAvailableToCiv(recordedTech, ObjectToDisplay) ) { techRecord.Status = TechnologyRecord.TechStatus.Available; } else { techRecord.Status = TechnologyRecord.TechStatus.Unavailable; } techRecord.CanBeClicked = SelectionMode != TechSelectionMode.SetTechQueue || !TechCanon.IsTechDiscoveredByCiv(recordedTech, ObjectToDisplay); float sciencePerTurn = YieldLogic.GetYieldOfCivilization(ObjectToDisplay)[Simulation.YieldType.Science]; if (sciencePerTurn > 0) { techRecord.TurnsToResearch = (int)Math.Ceiling( (techRecord.TechToDisplay.Cost - techRecord.CurrentProgress) / sciencePerTurn ); } else { techRecord.TurnsToResearch = -1; } techRecord.Refresh(); } }
public void PerformResearch() { if (TechQueue.Count > 0) { var activeTech = TechQueue.Peek(); int techProgress = TechCanon.GetProgressOnTechByCiv(activeTech, this); techProgress += LastScienceYield; if (techProgress >= activeTech.Cost && TechCanon.IsTechAvailableToCiv(activeTech, this)) { TechCanon.SetTechAsDiscoveredForCiv(activeTech, this); TechQueue.Dequeue(); } else { TechCanon.SetProgressOnTechByCiv(activeTech, this, techProgress); } } }