public void Refresh() { this.pressure = this.GetCurrentPressure(); UseLevel useLevel = this.pressureTransitions.GetUseLevel(this.pressure, this.resourceUse.PreviousUseLevel); this.resourceUse = new ResourceUse(this.resourceIdentifier, useLevel, this.resourceUse.CurrentUseLevel); }
internal UseLevel GetUseLevel(long pressure, UseLevel previousUseLevel) { if (pressure > this.mediumToHigh) { return(UseLevel.High); } if (PressureTransitions.Between(pressure, this.highToMedium, this.mediumToHigh)) { if (previousUseLevel == UseLevel.High) { return(UseLevel.High); } return(UseLevel.Medium); } else { if (PressureTransitions.Between(pressure, this.lowToMedium, this.highToMedium)) { return(UseLevel.Medium); } if (PressureTransitions.Between(pressure, this.mediumToLow, this.lowToMedium) && (previousUseLevel == UseLevel.Medium || previousUseLevel == UseLevel.High)) { return(UseLevel.Medium); } return(UseLevel.Low); } }
public static GraphData LevelBasedLayout(Dictionary <string, Node> dict, UseLevel useLevel) { // Generate containers of levels of inclusion (min or max level found). bool useMin = (useLevel == UseLevel.Min); List <List <Node> > levels = Levels(dict, useMin); double cellSize = CalculateNodeSizes(dict); // Simple layout algorithm based on include level List <int> counts = new List <int>(); int sum = 0; foreach (var l in levels) { sum += l.Count; } int avgCount = sum / levels.Count; int y = 0; for (int i = 0; i < levels.Count; ++i) { List <Node> lvl = levels[i]; int x = 0; int remaining = lvl.Count; for (int j = 0; j < lvl.Count; ++j) { if (x >= avgCount) { ++y; x = 0; remaining -= avgCount; } int shift = Math.Min(avgCount, remaining) - 1; lvl[j].center.X = (-shift / 2 + x) * cellSize; lvl[j].center.Y = y * cellSize; ++x; } ++y; } return(NormalizeNodePositions(dict, new Size(cellSize, cellSize))); }
private ResourceSample CalculateStableSample() { UseLevel stableUseLevel = UseLevel.Low; for (int i = 0; i < this.useLevelSampleCounts.Length; i++) { if (this.useLevelSampleCounts[i] != 0) { stableUseLevel = (UseLevel)i; break; } } long pressure = (long)(from sample in this.samples where sample.UseLevel == stableUseLevel select sample).Average((ResourceSample sample) => sample.Pressure); return(new ResourceSample(stableUseLevel, pressure)); }
public ResourceUse(ResourceIdentifier resource, UseLevel currentUseLevel, UseLevel previousUseLevel) { this.Resource = resource; this.CurrentUseLevel = currentUseLevel; this.PreviousUseLevel = previousUseLevel; }
public int GetUseLevelPercentage(UseLevel useLevel) { return(this.useLevelSampleCounts[(int)useLevel] * 100 / this.samples.Length); }
public ResourceSample(UseLevel useLevel, long pressure) { this.useLevel = useLevel; this.pressure = pressure; }