mirror of
				https://github.com/Laupetin/OpenAssetTools.git
				synced 2025-10-30 18:17:15 +00:00 
			
		
		
		
	chore: fix loading and writing code for T6
This commit is contained in:
		
							
								
								
									
										53
									
								
								src/ObjLoading/Game/T6/Tracer/GdtLoaderTracerT6.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								src/ObjLoading/Game/T6/Tracer/GdtLoaderTracerT6.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| #include "GdtLoaderTracerT6.h" | ||||
|  | ||||
| #include "Game/T6/ObjConstantsT6.h" | ||||
| #include "Game/T6/T6.h" | ||||
| #include "InfoString/InfoString.h" | ||||
| #include "InfoStringLoaderTracerT6.h" | ||||
|  | ||||
| #include <cstring> | ||||
| #include <format> | ||||
| #include <iostream> | ||||
|  | ||||
| using namespace T6; | ||||
|  | ||||
| namespace | ||||
| { | ||||
|     class GdtLoaderTracer final : public AssetCreator<AssetTracer> | ||||
|     { | ||||
|     public: | ||||
|         GdtLoaderTracer(MemoryManager& memory, ISearchPath& searchPath, IGdtQueryable& gdt, Zone& zone) | ||||
|             : m_gdt(gdt), | ||||
|               m_info_string_loader(memory, searchPath, zone) | ||||
|         { | ||||
|         } | ||||
|  | ||||
|         AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override | ||||
|         { | ||||
|             const auto* gdtEntry = m_gdt.GetGdtEntryByGdfAndName(ObjConstants::GDF_FILENAME_TRACER, assetName); | ||||
|             if (gdtEntry == nullptr) | ||||
|                 return AssetCreationResult::NoAction(); | ||||
|  | ||||
|             InfoString infoString; | ||||
|             if (!infoString.FromGdtProperties(*gdtEntry)) | ||||
|             { | ||||
|                 std::cerr << std::format("Failed to read tracer gdt entry: \"{}\"\n", assetName); | ||||
|                 return AssetCreationResult::Failure(); | ||||
|             } | ||||
|  | ||||
|             return m_info_string_loader.CreateAsset(assetName, infoString, context); | ||||
|         } | ||||
|  | ||||
|     private: | ||||
|         IGdtQueryable& m_gdt; | ||||
|         InfoStringLoaderTracer m_info_string_loader; | ||||
|     }; | ||||
| } // namespace | ||||
|  | ||||
| namespace T6 | ||||
| { | ||||
|     std::unique_ptr<AssetCreator<AssetTracer>> CreateGdtTracerLoader(MemoryManager& memory, ISearchPath& searchPath, IGdtQueryable& gdt, Zone& zone) | ||||
|     { | ||||
|         return std::make_unique<GdtLoaderTracer>(memory, searchPath, gdt, zone); | ||||
|     } | ||||
| } // namespace T6 | ||||
							
								
								
									
										14
									
								
								src/ObjLoading/Game/T6/Tracer/GdtLoaderTracerT6.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/ObjLoading/Game/T6/Tracer/GdtLoaderTracerT6.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include "Asset/IAssetCreator.h" | ||||
| #include "Game/T6/T6.h" | ||||
| #include "Gdt/IGdtQueryable.h" | ||||
| #include "SearchPath/ISearchPath.h" | ||||
| #include "Utils/MemoryManager.h" | ||||
|  | ||||
| #include <memory> | ||||
|  | ||||
| namespace T6 | ||||
| { | ||||
|     std::unique_ptr<AssetCreator<AssetTracer>> CreateGdtTracerLoader(MemoryManager& memory, ISearchPath& searchPath, IGdtQueryable& gdt, Zone& zone); | ||||
| } // namespace T6 | ||||
							
								
								
									
										72
									
								
								src/ObjLoading/Game/T6/Tracer/InfoStringLoaderTracerT6.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								src/ObjLoading/Game/T6/Tracer/InfoStringLoaderTracerT6.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | ||||
| #include "InfoStringLoaderTracerT6.h" | ||||
|  | ||||
| #include "Game/T6/InfoString/InfoStringToStructConverter.h" | ||||
| #include "Game/T6/T6.h" | ||||
| #include "Game/T6/Tracer/TracerFields.h" | ||||
|  | ||||
| #include <cassert> | ||||
| #include <cstring> | ||||
| #include <format> | ||||
| #include <iostream> | ||||
| #include <limits> | ||||
|  | ||||
| using namespace T6; | ||||
|  | ||||
| namespace | ||||
| { | ||||
|     class InfoStringToTracerConverter final : public InfoStringToStructConverter | ||||
|     { | ||||
|     protected: | ||||
|         bool ConvertExtensionField(const cspField_t& field, const std::string& value) override | ||||
|         { | ||||
|             switch (static_cast<tracerFieldType_t>(field.iFieldType)) | ||||
|             { | ||||
|             case TFT_TRACERTYPE: | ||||
|                 return ConvertEnumInt(field.szName, value, field.iOffset, tracerTypeNames, std::extent_v<decltype(tracerTypeNames)>); | ||||
|  | ||||
|             case TFT_NUM_FIELD_TYPES: | ||||
|             default: | ||||
|                 assert(false); | ||||
|                 return false; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|     public: | ||||
|         InfoStringToTracerConverter(const InfoString& infoString, | ||||
|                                     TracerDef& tracer, | ||||
|                                     ZoneScriptStrings& zoneScriptStrings, | ||||
|                                     MemoryManager& memory, | ||||
|                                     AssetCreationContext& context, | ||||
|                                     AssetRegistration<AssetTracer>& registration, | ||||
|                                     const cspField_t* fields, | ||||
|                                     const size_t fieldCount) | ||||
|             : InfoStringToStructConverter(infoString, &tracer, zoneScriptStrings, memory, context, registration, fields, fieldCount) | ||||
|         { | ||||
|         } | ||||
|     }; | ||||
| } // namespace | ||||
|  | ||||
| InfoStringLoaderTracer::InfoStringLoaderTracer(MemoryManager& memory, ISearchPath& searchPath, Zone& zone) | ||||
|     : m_memory(memory), | ||||
|       m_search_path(searchPath), | ||||
|       m_zone(zone) | ||||
| { | ||||
| } | ||||
|  | ||||
| AssetCreationResult InfoStringLoaderTracer::CreateAsset(const std::string& assetName, const InfoString& infoString, AssetCreationContext& context) | ||||
| { | ||||
|     auto* tracer = m_memory.Alloc<TracerDef>(); | ||||
|     tracer->name = m_memory.Dup(assetName.c_str()); | ||||
|  | ||||
|     AssetRegistration<AssetTracer> registration(assetName, tracer); | ||||
|  | ||||
|     InfoStringToTracerConverter converter( | ||||
|         infoString, *tracer, m_zone.m_script_strings, m_memory, context, registration, tracer_fields, std::extent_v<decltype(tracer_fields)>); | ||||
|     if (!converter.Convert()) | ||||
|     { | ||||
|         std::cerr << std::format("Failed to parse tracer: \"{}\"\n", assetName); | ||||
|         return AssetCreationResult::Failure(); | ||||
|     } | ||||
|  | ||||
|     return AssetCreationResult::Success(context.AddAsset(std::move(registration))); | ||||
| } | ||||
							
								
								
									
										21
									
								
								src/ObjLoading/Game/T6/Tracer/InfoStringLoaderTracerT6.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/ObjLoading/Game/T6/Tracer/InfoStringLoaderTracerT6.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include "Asset/AssetCreationContext.h" | ||||
| #include "Asset/AssetCreationResult.h" | ||||
| #include "InfoString/InfoString.h" | ||||
|  | ||||
| namespace T6 | ||||
| { | ||||
|     class InfoStringLoaderTracer | ||||
|     { | ||||
|     public: | ||||
|         InfoStringLoaderTracer(MemoryManager& memory, ISearchPath& searchPath, Zone& zone); | ||||
|  | ||||
|         AssetCreationResult CreateAsset(const std::string& assetName, const InfoString& infoString, AssetCreationContext& context); | ||||
|  | ||||
|     private: | ||||
|         MemoryManager& m_memory; | ||||
|         ISearchPath& m_search_path; | ||||
|         Zone& m_zone; | ||||
|     }; | ||||
| } // namespace T6 | ||||
							
								
								
									
										54
									
								
								src/ObjLoading/Game/T6/Tracer/RawLoaderTracerT6.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/ObjLoading/Game/T6/Tracer/RawLoaderTracerT6.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| #include "RawLoaderTracerT6.h" | ||||
|  | ||||
| #include "Game/T6/ObjConstantsT6.h" | ||||
| #include "Game/T6/T6.h" | ||||
| #include "InfoString/InfoString.h" | ||||
| #include "InfoStringLoaderTracerT6.h" | ||||
|  | ||||
| #include <cstring> | ||||
| #include <format> | ||||
| #include <iostream> | ||||
|  | ||||
| using namespace T6; | ||||
|  | ||||
| namespace | ||||
| { | ||||
|     class RawLoaderTracer final : public AssetCreator<AssetTracer> | ||||
|     { | ||||
|     public: | ||||
|         RawLoaderTracer(MemoryManager& memory, ISearchPath& searchPath, Zone& zone) | ||||
|             : m_search_path(searchPath), | ||||
|               m_info_string_loader(memory, searchPath, zone) | ||||
|         { | ||||
|         } | ||||
|  | ||||
|         AssetCreationResult CreateAsset(const std::string& assetName, AssetCreationContext& context) override | ||||
|         { | ||||
|             const auto fileName = std::format("tracer/{}", assetName); | ||||
|             const auto file = m_search_path.Open(fileName); | ||||
|             if (!file.IsOpen()) | ||||
|                 return AssetCreationResult::NoAction(); | ||||
|  | ||||
|             InfoString infoString; | ||||
|             if (!infoString.FromStream(ObjConstants::INFO_STRING_PREFIX_TRACER, *file.m_stream)) | ||||
|             { | ||||
|                 std::cerr << std::format("Could not parse as info string file: \"{}\"\n", fileName); | ||||
|                 return AssetCreationResult::Failure(); | ||||
|             } | ||||
|  | ||||
|             return m_info_string_loader.CreateAsset(assetName, infoString, context); | ||||
|         } | ||||
|  | ||||
|     private: | ||||
|         ISearchPath& m_search_path; | ||||
|         InfoStringLoaderTracer m_info_string_loader; | ||||
|     }; | ||||
| } // namespace | ||||
|  | ||||
| namespace T6 | ||||
| { | ||||
|     std::unique_ptr<AssetCreator<AssetTracer>> CreateRawTracerLoader(MemoryManager& memory, ISearchPath& searchPath, Zone& zone) | ||||
|     { | ||||
|         return std::make_unique<RawLoaderTracer>(memory, searchPath, zone); | ||||
|     } | ||||
| } // namespace T6 | ||||
							
								
								
									
										13
									
								
								src/ObjLoading/Game/T6/Tracer/RawLoaderTracerT6.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/ObjLoading/Game/T6/Tracer/RawLoaderTracerT6.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include "Asset/IAssetCreator.h" | ||||
| #include "Game/T6/T6.h" | ||||
| #include "SearchPath/ISearchPath.h" | ||||
| #include "Utils/MemoryManager.h" | ||||
|  | ||||
| #include <memory> | ||||
|  | ||||
| namespace T6 | ||||
| { | ||||
|     std::unique_ptr<AssetCreator<AssetTracer>> CreateRawTracerLoader(MemoryManager& memory, ISearchPath& searchPath, Zone& zone); | ||||
| } // namespace T6 | ||||
		Reference in New Issue
	
	Block a user