using Voile.Rendering;

namespace Voile;

public interface IStartableSystem
{
    /// <summary>
    /// Starts this system.
    /// </summary>
    void Start();
}

/// <summary>
/// A system that accepts additional data for starting. 
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IStartableSystem<T>
{
    void Start(T configuration);
}

/// <summary>
/// A system that has the ability to reload its internal state.
/// </summary>
public interface IReloadableSystem
{
    /// <summary>
    /// Reloads internal system state.
    /// </summary>
    void Reload();
}

public interface IUpdatableSystem
{
    /// <summary>
    /// Updates this system.
    /// </summary>
    /// <param name="deltaTime">Time step.</param>
    void Update(double deltaTime);
}

/// <summary>
/// A system that renders itself to the screen, ex. UI or particles.
/// </summary>
public interface IRenderableSystem
{
    void Render(RenderSystem renderer);
}