@inject IJSRuntime jsRuntime @inject IEconomyService economyService @inject IBuildOrderService buildOrderService @implements IDisposable
@economyAtSecond.Interval
T @Interval.ToTime(economyAtSecond.Interval) | A @economyAtSecond.Alloy | E @economyAtSecond.Ether
Worker Count: @(economyAtSecond.WorkerCount)
Free Worker Count: @(economyAtSecond.WorkerCount - economyAtSecond.BusyWorkerCount)
Busy Worker Count: @economyAtSecond.BusyWorkerCount
Creating Worker Count: @economyAtSecond.CreatingWorkerCount

@if (buildOrderService.StartedOrders.TryGetValue(economyAtSecond.Interval, out var ordersAtTime)) { @foreach (var order in ordersAtTime) {
Requested: @order.Info().Name
} } @if (buildOrderService.CompletedOrders.TryGetValue(economyAtSecond.Interval, out var ordersCompletedAtTime)) { @foreach (var order in ordersCompletedAtTime) {
New: @order.Info().Name
} }
@code { protected override void OnInitialized() { economyService.Subscribe(StateHasChanged); buildOrderService.Subscribe(StateHasChanged); } void IDisposable.Dispose() { economyService.Unsubscribe(StateHasChanged); buildOrderService.Unsubscribe(StateHasChanged); } protected override bool ShouldRender() { #if DEBUG jsRuntime.InvokeVoidAsync("console.time", "TimelineComponent"); #endif return true; } protected override void OnAfterRender(bool firstRender) { #if DEBUG jsRuntime.InvokeVoidAsync("console.timeEnd", "TimelineComponent"); #endif } }