using System; using System.Diagnostics; using Godot; using GodotHostTest.AetherBind; using GodotHostTest.Game.Target; using GodotHostTest.Interfaces; using Microsoft.Extensions.Logging; using OwofGames.AetherBind; using OwofGames.GodotHost.Observability; using OwofGames.GodotLume; using ServiceSource = GodotHostTest.AetherBind.ServiceSource; namespace GodotHostTest.Game.Level; public partial class LevelServiceSource : ServiceSource { private Activity? _levelActivity; [Export] private TargetSpawner _targetSpawner = null!; protected override void OnScopeCreated(IProvider serviceProvider) { OnScopeCreatedWithProvider(serviceProvider); } [WithProvider] private void OnScopeCreated(ILogger logger, IOptional activitySourceFactoryWrapper, IValueSetter targetCollector, IValueSetter targetSpawner) { if (activitySourceFactoryWrapper.TryGet(out var activitySourceFactory)) // ReSharper disable once ExplicitCallerInfoArgument - the caller name is not significant in this case _levelActivity = activitySourceFactory.ActivitySource.StartActivity("Level") ?? throw new InvalidOperationException( "No listeners for the activity - is OpenTelemetry running?"); else logger.LogWarning("Tracing not enabled, cannot start the activity."); targetCollector.Set(_targetSpawner); targetSpawner.Set(_targetSpawner); } public override void _Ready() { // after 3 seconds, dispose the activity for simulation purposes GetTree().CreateTimer(3).Timeout += () => _levelActivity?.Dispose(); } }