You.i Engine
CYIAbstractAssetConfiguration Class Referenceabstract

Detailed Description

Represents a set of qualifiers and rules for resolving paths to assets, used in conjunction with CYIAssetLocator.

A set of default configurations are created and added to the CYIAssetLocator by default.

Custom configurations can be created by deriving from this class. Qualifier values must be distinct across all configurations, both system defined and user defined.

As a simple example, the ScreenOrientation configuration defines two qualifiers where only one can be valid for the current device orientation.

class ScreenOrientation : public CYIAbstractAssetConfiguration
{
public:
ScreenOrientation()
{
// Since the qualifiers can be exhaustively listed, add them to the qualifier list.
m_qualifierValues.push_back("port");
m_qualifierValues.push_back("land");
}
virtual std::unique_ptr<CYIAbstractAssetConfiguration> Clone() const override
{
return std::make_unique<ScreenOrientation>(*this);
}
virtual uint32_t Test(const CYIString &name) const override
{
float nHeight = pScreen->GetHeightInches();
float nWidth = pScreen->GetWidthInches();
// Compare the test value with the current device configuration.
if ( ((nHeight < nWidth) && (name == "land")) ||
((nHeight > nWidth) && (name == "port")) )
{
// Accept the qualifier that matches the current device configuration by returning a value greater than 0. Since there can only be one match, the value returned isn't important.
return 1;
}
// Reject the qualifier if it doesn't match the current device orientation by returning 0.
return 0;
}
};

Configuration qualifiers do not need to be a list of distinct values, strings that belong to this property can be defined by overriding CYIAssetConfiguration::IsQualifier as shown in this example.

class SurfaceWidth : public CYIAbstractAssetConfiguration
{
public:
SurfaceWidth()
{
// Nothing to do here since the qualifier list is not used.
}
virtual std::unique_ptr<CYIAbstractAssetConfiguration> Clone() const override
{
return std::make_unique<SurfaceWidth>(*this);
}
virtual bool IsQualifier(const CYIString &name) const override
{
// Define a qualifier to be 'w' followed by digits.
return (name[0] == 'w') && name.SubStr(name.GetLength() - 1, 1).IsNumeric();
}
virtual uint32_t Test(const CYIString &name) const override
{
// Since multiple qualifier values may be applicable, the matching values need to be ranked.
CYIString number = name.SubStr(name.GetLength() - 1, 1);
float fQualifierWidth = number.To<float>();
float fScreenWidth = CYIAppContext::GetInstance()->GetScreen()->GetWidthInches();
if (fQualifierWidth <= fScreenWidth)
{
// Accept numbers less than screen width, but prefer the closest one by returning smaller values for closer sizes.
return static_cast<uint32_t>(fScreenWidth - fQualifierWidth) + 1;
}
// Reject numbers greater than the screen width by returning 0.
return 0;
}
};

To make use of the new configuration, it must be added to the CYIAssetLocator used by the CYIAssetLoader.

See also
CYIAssetLocator
CYIAssetLoader::GetAssetLocator

#include <asset/YiAbstractAssetConfiguration.h>

Inheritance diagram for CYIAbstractAssetConfiguration:

Public Member Functions

 CYIAbstractAssetConfiguration (const CYIAbstractAssetConfiguration &rObj)
 
virtual ~CYIAbstractAssetConfiguration ()
 
virtual bool IsQualifier (const CYIString &name) const
 
virtual std::unique_ptr< CYIAbstractAssetConfigurationClone () const =0
 
virtual uint32_t Test (const CYIString &name) const =0
 
- Public Member Functions inherited from CYIScriptableObject
 CYIScriptableObject ()
 
 CYIScriptableObject (const CYIScriptableObject &other)
 
CYIScriptableObjectoperator= (const CYIScriptableObject &other)
 
virtual ~CYIScriptableObject ()
 
CYIBindingImplementationGetBindingImplementation () const
 
void SetBindingImplementation (CYIBindingImplementation *pBindingImplementation)
 
virtual const CYIRuntimeTypeInfoGetRuntimeTypeInfoForScriptObject () const
 

Protected Member Functions

 CYIAbstractAssetConfiguration ()
 

Protected Attributes

std::list< CYIStringm_qualifierValues
 

Constructor & Destructor Documentation

CYIAbstractAssetConfiguration::CYIAbstractAssetConfiguration ( const CYIAbstractAssetConfiguration rObj)
inline
virtual CYIAbstractAssetConfiguration::~CYIAbstractAssetConfiguration ( )
inlinevirtual
CYIAbstractAssetConfiguration::CYIAbstractAssetConfiguration ( )
inlineprotected

Member Function Documentation

virtual std::unique_ptr<CYIAbstractAssetConfiguration> CYIAbstractAssetConfiguration::Clone ( ) const
pure virtual
virtual bool CYIAbstractAssetConfiguration::IsQualifier ( const CYIString name) const
inlinevirtual

Returns true if name is a qualifier for this configuration.

By default this function will test for a match if a list of qualifiers is provided in the constructor. Override this function if different behaviour is required such as regex matching.

Since qualifiers are used to create directory names, they must contain only characters valid in creating directories. Additionally, the "dash" character is reserved as a separator between qualifiers and should not be used.

virtual uint32_t CYIAbstractAssetConfiguration::Test ( const CYIString name) const
pure virtual

Returns a number used to disqualify qualifiers and compare them to each other against the current device configuration.

Returning 0 indicates name is not valid for the current device configuration and should be disqualified.

Returning a positive number indicates name is valid for the current device configuration. Smaller numbers indicate name is higher priority.

The default implementation returns 0.

Member Data Documentation

std::list<CYIString> CYIAbstractAssetConfiguration::m_qualifierValues
protected

The documentation for this class was generated from the following file: