// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
#pragma once
#include "Engine/Core/Types/BaseTypes.h"
class StreamingGroup;
class StreamableResource;
///
/// Base interface for all streamable resource handlers that implement resource streaming policy.
///
class FLAXENGINE_API IStreamingHandler
{
public:
virtual ~IStreamingHandler() = default;
public:
///
/// Calculates target quality level (0-1) for the given resource.
///
/// The resource.
/// The current time and date.
/// The current platform time (seconds).
/// Target quality (0-1).
virtual float CalculateTargetQuality(StreamableResource* resource, DateTime now, double currentTime) = 0;
///
/// Calculates the residency level for a given resource and quality level.
///
/// The resource.
/// The quality level (0-1).
/// Residency level
virtual int32 CalculateResidency(StreamableResource* resource, float quality) = 0;
///
/// Calculates the residency level to stream for a given resource and target residency.
///
/// The resource.
/// The target residency level.
/// Residency level to stream
virtual int32 CalculateRequestedResidency(StreamableResource* resource, int32 targetResidency) = 0;
///
/// Determines if the specified resource requires the streaming.
///
/// The resource.
/// The current residency level.
/// The target residency level.
/// True if perform resource streaming, otherwise false.
virtual bool RequiresStreaming(StreamableResource* resource, int32 currentResidency, int32 targetResidency)
{
return currentResidency != targetResidency;
}
};