public TechnologyViewModel(int level, ITechnology res)
        {
            this.Level = level;
            this.Name = res.Name;
            this.Description = res.Description;
            this.MaxLevel = res.MaxLevel;
            this.Prerequisite = res.Prerequisite;
            this.RequiredResearchTime = this.Level < this.MaxLevel ? res.ResearchTime[this.Level + 1].TotalMinutes : 0;

            this.Modifiers = res.Modifier;

            var requiredResources = res.GetRequiredResources(this.Level + 1);
            this.RequiredEnergy = requiredResources[0];
            this.RequiredCrystals = requiredResources[1];
            this.RequiredMetal = requiredResources[2];
        }
        private bool CanResearch(PlayerObject pO, int toLevel, ITechnology techLogic)
        {
            if (pO.Technologies.CurrentlyResearching != CurrentlyResearching.None)
            {
                return false;
            }

            if (toLevel > techLogic.MaxLevel)
            {
                return false;
            }

            if (pO.Buildings.ResearchCentreLevel < techLogic.Prerequisite)
            {
                return false;
            }

            var requiredResources = techLogic.GetRequiredResources(toLevel);

            return pO.Resources.Energy > requiredResources[0]
                && pO.Resources.Crystal > requiredResources[1]
                && pO.Resources.Metal > requiredResources[2];
        }