mirror of
https://github.com/borgesdan/xn65
synced 2024-12-29 21:54:47 +01:00
Remove XnaErrorCode em ContentTypeReaderManager
This commit is contained in:
parent
3d81be8066
commit
a0c5d31b12
@ -33,7 +33,7 @@ namespace xna {
|
|||||||
activators.insert({ hash, activador });
|
activators.insert({ hash, activador });
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<PContentTypeReader> ContentTypeReaderManager::ReadTypeManifest(Int typeCount, sptr<ContentReader>& contentReader, xna_error_ptr_arg)
|
std::vector<PContentTypeReader> ContentTypeReaderManager::ReadTypeManifest(Int typeCount, sptr<ContentReader>& contentReader)
|
||||||
{
|
{
|
||||||
initMaps();
|
initMaps();
|
||||||
|
|
||||||
@ -48,8 +48,7 @@ namespace xna {
|
|||||||
|
|
||||||
auto typeReader = ContentTypeReaderManager::GetTypeReader(xnaType.empty() ? readerTypeName : xnaType, contentReader, newTypeReaders);
|
auto typeReader = ContentTypeReaderManager::GetTypeReader(xnaType.empty() ? readerTypeName : xnaType, contentReader, newTypeReaders);
|
||||||
|
|
||||||
if (contentReader->ReadInt32() != typeReader->TypeVersion()) {
|
if (contentReader->ReadInt32() != typeReader->TypeVersion()) {
|
||||||
xna_error_apply(err, XnaErrorCode::BAD_TYPE);
|
|
||||||
ContentTypeReaderManager::RollbackAddReaders(newTypeReaders);
|
ContentTypeReaderManager::RollbackAddReaders(newTypeReaders);
|
||||||
return std::vector<PContentTypeReader>();
|
return std::vector<PContentTypeReader>();
|
||||||
}
|
}
|
||||||
@ -69,11 +68,10 @@ namespace xna {
|
|||||||
return contentTypeReaderArray;
|
return contentTypeReaderArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
sptr<ContentTypeReader> ContentTypeReaderManager::GetTypeReader(sptr<Type> const& targetType, sptr<ContentReader>& contentReader, xna_error_ptr_arg)
|
sptr<ContentTypeReader> ContentTypeReaderManager::GetTypeReader(sptr<Type> const& targetType)
|
||||||
{
|
{
|
||||||
if (!targetType) {
|
if (!targetType) {
|
||||||
xna_error_apply(err, XnaErrorCode::ARGUMENT_IS_NULL);
|
throw std::invalid_argument("ContentTypeReaderManager::GetTypeReader: targetType is null.");
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto const& item : ContentTypeReaderManager::targetTypeToReader) {
|
for (auto const& item : ContentTypeReaderManager::targetTypeToReader) {
|
||||||
@ -91,30 +89,25 @@ namespace xna {
|
|||||||
initMaps();
|
initMaps();
|
||||||
}
|
}
|
||||||
|
|
||||||
sptr<ContentTypeReader> ContentTypeReaderManager::GetTypeReader(String const& readerTypeName, sptr<ContentReader>& contentReader, std::vector<PContentTypeReader>& newTypeReaders, xna_error_ptr_arg)
|
sptr<ContentTypeReader> ContentTypeReaderManager::GetTypeReader(String const& readerTypeName, sptr<ContentReader>& contentReader, std::vector<PContentTypeReader>& newTypeReaders)
|
||||||
{
|
{
|
||||||
sptr<ContentTypeReader> reader = nullptr;
|
sptr<ContentTypeReader> reader = nullptr;
|
||||||
|
|
||||||
if (ContentTypeReaderManager::nameToReader.contains(readerTypeName)) {
|
if (ContentTypeReaderManager::nameToReader.contains(readerTypeName)) {
|
||||||
return ContentTypeReaderManager::nameToReader[readerTypeName];
|
return ContentTypeReaderManager::nameToReader[readerTypeName];
|
||||||
}
|
}
|
||||||
else if (!ContentTypeReaderManager::InstantiateTypeReader(readerTypeName, contentReader, reader, err)) {
|
else if (!ContentTypeReaderManager::InstantiateTypeReader(readerTypeName, contentReader, reader)) {
|
||||||
return reader;
|
return reader;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xna_error_haserros(err))
|
ContentTypeReaderManager::AddTypeReader(readerTypeName, contentReader, reader);
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
ContentTypeReaderManager::AddTypeReader(readerTypeName, contentReader, reader, err);
|
|
||||||
|
|
||||||
if (xna_error_haserros(err)) return nullptr;
|
|
||||||
|
|
||||||
newTypeReaders.push_back(reader);
|
newTypeReaders.push_back(reader);
|
||||||
|
|
||||||
return reader;
|
return reader;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ContentTypeReaderManager::InstantiateTypeReader(String const& readerTypeName, sptr<ContentReader>& contentReader, sptr<ContentTypeReader>& reader, xna_error_ptr_arg)
|
bool ContentTypeReaderManager::InstantiateTypeReader(String const& readerTypeName, sptr<ContentReader>& contentReader, sptr<ContentTypeReader>& reader)
|
||||||
{
|
{
|
||||||
sptr<Type> type = nullptr;
|
sptr<Type> type = nullptr;
|
||||||
|
|
||||||
@ -122,8 +115,7 @@ namespace xna {
|
|||||||
type = Type::NameOfRegisteredTypes[readerTypeName];
|
type = Type::NameOfRegisteredTypes[readerTypeName];
|
||||||
|
|
||||||
if (!type) {
|
if (!type) {
|
||||||
xna_error_apply(err, XnaErrorCode::INVALID_OPERATION);
|
throw std::runtime_error("ContentTypeReaderManager::InstantiateTypeReader: registered type is null.");
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ContentTypeReaderManager::readerTypeToReader.contains(type)) {
|
if (ContentTypeReaderManager::readerTypeToReader.contains(type)) {
|
||||||
@ -136,12 +128,11 @@ namespace xna {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContentTypeReaderManager::AddTypeReader(String const& readerTypeName, sptr<ContentReader>& contentReader, sptr<ContentTypeReader>& reader, xna_error_ptr_arg)
|
void ContentTypeReaderManager::AddTypeReader(String const& readerTypeName, sptr<ContentReader>& contentReader, sptr<ContentTypeReader>& reader)
|
||||||
{
|
{
|
||||||
auto targetType = reader->TargetType();
|
auto targetType = reader->TargetType();
|
||||||
|
|
||||||
if (ContentTypeReaderManager::targetTypeToReader.contains(targetType)) {
|
if (ContentTypeReaderManager::targetTypeToReader.contains(targetType)) {
|
||||||
xna_error_apply(err, XnaErrorCode::INVALID_OPERATION);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,7 +147,7 @@ namespace xna {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
for (size_t i = 0; i < newTypeReaders.size(); ++i) {
|
for (size_t i = 0; i < newTypeReaders.size(); ++i) {
|
||||||
auto newTypeReader = newTypeReaders[i];
|
auto& newTypeReader = newTypeReaders[i];
|
||||||
ContentTypeReaderManager::RollbackAddReader(ContentTypeReaderManager::nameToReader, newTypeReader);
|
ContentTypeReaderManager::RollbackAddReader(ContentTypeReaderManager::nameToReader, newTypeReader);
|
||||||
ContentTypeReaderManager::RollbackAddReader(ContentTypeReaderManager::targetTypeToReader, newTypeReader);
|
ContentTypeReaderManager::RollbackAddReader(ContentTypeReaderManager::targetTypeToReader, newTypeReader);
|
||||||
ContentTypeReaderManager::RollbackAddReader(ContentTypeReaderManager::readerTypeToReader, newTypeReader);
|
ContentTypeReaderManager::RollbackAddReader(ContentTypeReaderManager::readerTypeToReader, newTypeReader);
|
||||||
|
@ -89,14 +89,14 @@ namespace xna {
|
|||||||
//-------------------------------------------------------//
|
//-------------------------------------------------------//
|
||||||
// ContentTypeReaderManager //
|
// ContentTypeReaderManager //
|
||||||
//-------------------------------------------------------//
|
//-------------------------------------------------------//
|
||||||
|
|
||||||
|
//A manager that constructs and keeps track of type reader objects.
|
||||||
class ContentTypeReaderManager {
|
class ContentTypeReaderManager {
|
||||||
public:
|
public:
|
||||||
static std::vector<PContentTypeReader> ReadTypeManifest(Int typeCount, sptr<ContentReader>& contentReader, xna_error_nullarg);
|
static std::vector<PContentTypeReader> ReadTypeManifest(Int typeCount, sptr<ContentReader>& contentReader);
|
||||||
static sptr<ContentTypeReader> GetTypeReader(sptr<Type> const& targetType, sptr<ContentReader>& contentReader, xna_error_nullarg);
|
|
||||||
|
//Looks up a reader for the specified type.
|
||||||
inline sptr<ContentTypeReader> GetTypeReader(sptr<Type> const& targetType, xna_error_nullarg) {
|
static sptr<ContentTypeReader> GetTypeReader(sptr<Type> const& targetType);
|
||||||
return ContentTypeReaderManager::GetTypeReader(targetType, this->contentReader, err);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline static bool ContainsTypeReader(sptr<Type> const& targetType) {
|
inline static bool ContainsTypeReader(sptr<Type> const& targetType) {
|
||||||
return ContentTypeReaderManager::targetTypeToReader.contains(targetType);
|
return ContentTypeReaderManager::targetTypeToReader.contains(targetType);
|
||||||
@ -104,9 +104,9 @@ namespace xna {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
ContentTypeReaderManager(sptr<ContentReader>& contentReader);
|
ContentTypeReaderManager(sptr<ContentReader>& contentReader);
|
||||||
static sptr<ContentTypeReader> GetTypeReader(String const& readerTypeName, sptr<ContentReader>& contentReader, std::vector<PContentTypeReader>& newTypeReaders, xna_error_nullarg);
|
static sptr<ContentTypeReader> GetTypeReader(String const& readerTypeName, sptr<ContentReader>& contentReader, std::vector<PContentTypeReader>& newTypeReaders);
|
||||||
static bool InstantiateTypeReader(String const& readerTypeName, sptr<ContentReader>& contentReader, sptr<ContentTypeReader>& reader, xna_error_nullarg);
|
static bool InstantiateTypeReader(String const& readerTypeName, sptr<ContentReader>& contentReader, sptr<ContentTypeReader>& reader);
|
||||||
static void AddTypeReader(String const& readerTypeName, sptr<ContentReader>& contentReader, sptr<ContentTypeReader>& reader, xna_error_nullarg);
|
static void AddTypeReader(String const& readerTypeName, sptr<ContentReader>& contentReader, sptr<ContentTypeReader>& reader);
|
||||||
static void RollbackAddReaders(std::vector<sptr<ContentTypeReader>>& newTypeReaders);
|
static void RollbackAddReaders(std::vector<sptr<ContentTypeReader>>& newTypeReaders);
|
||||||
|
|
||||||
static void RollbackAddReader(std::map<String, PContentTypeReader>& dictionary, sptr<ContentTypeReader>& reader);
|
static void RollbackAddReader(std::map<String, PContentTypeReader>& dictionary, sptr<ContentTypeReader>& reader);
|
||||||
|
@ -59,9 +59,9 @@ namespace PlatformerStarterKit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!player)
|
if (!player)
|
||||||
std::exception("A level must have a starting point.");
|
throw std::runtime_error("A level must have a starting point.");
|
||||||
if (exit == InvalidPosition)
|
if (exit == InvalidPosition)
|
||||||
std::exception("A level must have an exit.");
|
throw std::runtime_error("A level must have an exit.");
|
||||||
}
|
}
|
||||||
|
|
||||||
Tile Level::LoadTile(char tileType, int x, int y) {
|
Tile Level::LoadTile(char tileType, int x, int y) {
|
||||||
@ -93,6 +93,8 @@ namespace PlatformerStarterKit {
|
|||||||
default:
|
default:
|
||||||
std::exception("Unsupported tile type character");
|
std::exception("Unsupported tile type character");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Tile(nullptr, TileCollision::Passable);;
|
||||||
}
|
}
|
||||||
|
|
||||||
Tile Level::LoadTile(xna::String const& name, TileCollision collision) {
|
Tile Level::LoadTile(xna::String const& name, TileCollision collision) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user