@inject IJSRuntime jsRuntime; @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 { [Inject] IEconomyService EconomyService { get; set; } = default!; [Inject] IBuildOrderService BuildOrderService { get; set; } = default!; 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 } }