/* * SPDX-License-Identifier: AGPL-3.0-or-later * Copyright (C) 2025 Sergej Görzen * This file is part of OmiLAXR. */ using System.Collections.Generic; using OmiLAXR.Actors.StressLevel; using UnityEngine; namespace OmiLAXR.StressLevel { /// /// Abstract base class for components that manage stress level data providers. /// Maintains a collection of data sources and provides unified access to calculated stress levels. /// public abstract class StressLevelProvider : ActorDataProvider { /// /// Current computed stress level value (0-1 range) /// [ReadOnly, SerializeField] private float stressLevel; /// /// Collection of registered stress data providers that contribute to the final calculation /// public List providers = new List(); /// /// Adds a stress data provider to the collection if not already present /// /// Provider to register public void RegisterProvider(IStressLevelDataProvider provider) { if (!providers.Contains(provider)) providers.Add(provider); } /// /// Removes a stress data provider from the collection /// /// Provider to unregister public void UnregisterProvider(IStressLevelDataProvider provider) { if (providers.Contains(provider)) providers.Remove(provider); } /// /// Clears all registered stress data providers /// public void UnregisterAllProviders() => providers.Clear(); /// /// Indicates if the provider has any registered data sources /// public bool IsActive => providers.Count > 0; /// /// Gets the current calculated stress level /// /// Stress level value between 0 (relaxed) and 1 (high stress) public float GetStressLevel() => stressLevel; /// /// Sets the current stress level value /// /// New stress level to store public void SetStressLevel(float level) => stressLevel = level; } }