mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-19 15:52:53 +00:00
chore: use RawTemplater to template XModel loading code for t5 and t6
This commit is contained in:
parent
a2735b4f23
commit
7227c84cde
@ -4,6 +4,7 @@ include "tools/scripts/linking.lua"
|
||||
include "tools/scripts/options.lua"
|
||||
include "tools/scripts/platform.lua"
|
||||
include "tools/scripts/version.lua"
|
||||
include "tools/scripts/source_templating.lua"
|
||||
|
||||
-- ==================
|
||||
-- Workspace
|
||||
|
31
src/ObjCommon/Game/T5/XModel/XModelConstantsT5.h
Normal file
31
src/ObjCommon/Game/T5/XModel/XModelConstantsT5.h
Normal file
@ -0,0 +1,31 @@
|
||||
#pragma once
|
||||
|
||||
#include "Game/T5/T5.h"
|
||||
|
||||
namespace T5
|
||||
{
|
||||
inline const char* HITLOC_NAMES[]{
|
||||
// clang-format off
|
||||
"none",
|
||||
"helmet",
|
||||
"head",
|
||||
"neck",
|
||||
"torso_upper",
|
||||
"torso_lower",
|
||||
"right_arm_upper",
|
||||
"left_arm_upper",
|
||||
"right_arm_lower",
|
||||
"left_arm_lower",
|
||||
"right_hand",
|
||||
"left_hand",
|
||||
"right_leg_upper",
|
||||
"left_leg_upper",
|
||||
"right_leg_lower",
|
||||
"left_leg_lower",
|
||||
"right_foot",
|
||||
"left_foot",
|
||||
"gun",
|
||||
// clang-format on
|
||||
};
|
||||
static_assert(std::extent_v<decltype(HITLOC_NAMES)> == HITLOC_COUNT);
|
||||
} // namespace T5
|
33
src/ObjCommon/Game/T6/XModel/XModelConstantsT6.h
Normal file
33
src/ObjCommon/Game/T6/XModel/XModelConstantsT6.h
Normal file
@ -0,0 +1,33 @@
|
||||
#pragma once
|
||||
|
||||
#include "Game/T6/T6.h"
|
||||
|
||||
namespace T6
|
||||
{
|
||||
inline const char* HITLOC_NAMES[]{
|
||||
// clang-format off
|
||||
"none",
|
||||
"helmet",
|
||||
"head",
|
||||
"neck",
|
||||
"torso_upper",
|
||||
"torso_middle",
|
||||
"torso_lower",
|
||||
"right_arm_upper",
|
||||
"left_arm_upper",
|
||||
"right_arm_lower",
|
||||
"left_arm_lower",
|
||||
"right_hand",
|
||||
"left_hand",
|
||||
"right_leg_upper",
|
||||
"left_leg_upper",
|
||||
"right_leg_lower",
|
||||
"left_leg_lower",
|
||||
"right_foot",
|
||||
"left_foot",
|
||||
"gun",
|
||||
"shield",
|
||||
// clang-format on
|
||||
};
|
||||
static_assert(std::extent_v<decltype(HITLOC_NAMES)> == HITLOC_COUNT);
|
||||
} // namespace T6
|
@ -49,6 +49,8 @@ function ObjLoading:project()
|
||||
path.join(folder, "ObjLoading")
|
||||
}
|
||||
}
|
||||
|
||||
useSourceTemplating("ObjLoading")
|
||||
|
||||
self:include(includes)
|
||||
Crypto:include(includes)
|
||||
|
@ -1,49 +0,0 @@
|
||||
#include "XModelLoaderT5.h"
|
||||
|
||||
#include "Game/T5/CommonT5.h"
|
||||
#include "Game/T5/XModel/JsonXModel.h"
|
||||
|
||||
#define GAME_NAMESPACE T5
|
||||
|
||||
namespace T5
|
||||
{
|
||||
const char* HITLOC_NAMES[]{
|
||||
// clang-format off
|
||||
"none",
|
||||
"helmet",
|
||||
"head",
|
||||
"neck",
|
||||
"torso_upper",
|
||||
"torso_lower",
|
||||
"right_arm_upper",
|
||||
"left_arm_upper",
|
||||
"right_arm_lower",
|
||||
"left_arm_lower",
|
||||
"right_hand",
|
||||
"left_hand",
|
||||
"right_leg_upper",
|
||||
"left_leg_upper",
|
||||
"right_leg_lower",
|
||||
"left_leg_lower",
|
||||
"right_foot",
|
||||
"left_foot",
|
||||
"gun",
|
||||
// clang-format on
|
||||
};
|
||||
static_assert(std::extent_v<decltype(HITLOC_NAMES)> == HITLOC_COUNT);
|
||||
} // namespace T5
|
||||
|
||||
#include "XModel/GenericXModelLoader.inc.h"
|
||||
|
||||
namespace T5
|
||||
{
|
||||
bool LoadXModel(std::istream& stream, XModel& xmodel, MemoryManager* memory, IAssetLoadingManager* manager, std::vector<XAssetInfoGeneric*>& dependencies)
|
||||
{
|
||||
std::set<XAssetInfoGeneric*> dependenciesSet;
|
||||
XModelLoader loader(stream, *memory, *manager, dependenciesSet);
|
||||
|
||||
dependencies.assign(dependenciesSet.cbegin(), dependenciesSet.cend());
|
||||
|
||||
return loader.Load(xmodel);
|
||||
}
|
||||
} // namespace T5
|
@ -1,51 +0,0 @@
|
||||
#include "XModelLoaderT6.h"
|
||||
|
||||
#include "Game/T6/CommonT6.h"
|
||||
#include "Game/T6/XModel/JsonXModel.h"
|
||||
|
||||
#define GAME_NAMESPACE T6
|
||||
|
||||
namespace T6
|
||||
{
|
||||
const char* HITLOC_NAMES[]{
|
||||
// clang-format off
|
||||
"none",
|
||||
"helmet",
|
||||
"head",
|
||||
"neck",
|
||||
"torso_upper",
|
||||
"torso_middle",
|
||||
"torso_lower",
|
||||
"right_arm_upper",
|
||||
"left_arm_upper",
|
||||
"right_arm_lower",
|
||||
"left_arm_lower",
|
||||
"right_hand",
|
||||
"left_hand",
|
||||
"right_leg_upper",
|
||||
"left_leg_upper",
|
||||
"right_leg_lower",
|
||||
"left_leg_lower",
|
||||
"right_foot",
|
||||
"left_foot",
|
||||
"gun",
|
||||
"shield",
|
||||
// clang-format on
|
||||
};
|
||||
static_assert(std::extent_v<decltype(HITLOC_NAMES)> == HITLOC_COUNT);
|
||||
} // namespace T6
|
||||
|
||||
#include "XModel/GenericXModelLoader.inc.h"
|
||||
|
||||
namespace T6
|
||||
{
|
||||
bool LoadXModel(std::istream& stream, XModel& xmodel, MemoryManager* memory, IAssetLoadingManager* manager, std::vector<XAssetInfoGeneric*>& dependencies)
|
||||
{
|
||||
std::set<XAssetInfoGeneric*> dependenciesSet;
|
||||
XModelLoader loader(stream, *memory, *manager, dependenciesSet);
|
||||
|
||||
dependencies.assign(dependenciesSet.cbegin(), dependenciesSet.cend());
|
||||
|
||||
return loader.Load(xmodel);
|
||||
}
|
||||
} // namespace T6
|
@ -1,13 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "AssetLoading/IAssetLoadingManager.h"
|
||||
#include "Game/T6/T6.h"
|
||||
#include "Utils/MemoryManager.h"
|
||||
|
||||
#include <istream>
|
||||
#include <vector>
|
||||
|
||||
namespace T6
|
||||
{
|
||||
bool LoadXModel(std::istream& stream, XModel& xmodel, MemoryManager* memory, IAssetLoadingManager* manager, std::vector<XAssetInfoGeneric*>& dependencies);
|
||||
}
|
@ -2,14 +2,14 @@
|
||||
|
||||
#include "GltfInput.h"
|
||||
#include "XModel/Gltf/JsonGltf.h"
|
||||
#include "XModel/XModelLoader.h"
|
||||
#include "XModel/XModelFileLoader.h"
|
||||
|
||||
#include <memory>
|
||||
#include <ostream>
|
||||
|
||||
namespace gltf
|
||||
{
|
||||
class Loader : public XModelLoader
|
||||
class Loader : public XModelFileLoader
|
||||
{
|
||||
public:
|
||||
Loader() = default;
|
||||
|
18
src/ObjLoading/XModel/XModelFileLoader.h
Normal file
18
src/ObjLoading/XModel/XModelFileLoader.h
Normal file
@ -0,0 +1,18 @@
|
||||
#pragma once
|
||||
|
||||
#include "XModel/XModelCommon.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
class XModelFileLoader
|
||||
{
|
||||
public:
|
||||
XModelFileLoader() = default;
|
||||
virtual ~XModelFileLoader() = default;
|
||||
XModelFileLoader(const XModelFileLoader& other) = default;
|
||||
XModelFileLoader(XModelFileLoader&& other) noexcept = default;
|
||||
XModelFileLoader& operator=(const XModelFileLoader& other) = default;
|
||||
XModelFileLoader& operator=(XModelFileLoader&& other) noexcept = default;
|
||||
|
||||
virtual std::unique_ptr<XModelCommon> Load() = 0;
|
||||
};
|
@ -1,9 +1,24 @@
|
||||
#pragma once
|
||||
#options GAME (T5, T6)
|
||||
|
||||
#ifndef GAME_NAMESPACE
|
||||
#error Must define GAME_NAMESPACE
|
||||
#filename "Game/" + GAME + "/XModel/XModelLoader" + GAME + ".cpp"
|
||||
|
||||
#set LOADER_HEADER "\"XModelLoader" + GAME + ".h\""
|
||||
#set COMMON_HEADER "\"Game/" + GAME + "/Common" + GAME + ".h\""
|
||||
#set CONSTANTS_HEADER "\"Game/" + GAME + "/XModel/XModelConstants" + GAME + ".h\""
|
||||
#set JSON_HEADER "\"Game/" + GAME + "/XModel/JsonXModel" + GAME + ".h\""
|
||||
|
||||
#if GAME == "T5"
|
||||
#define FEATURE_T5
|
||||
#elif GAME == "T6"
|
||||
#define FEATURE_T6
|
||||
#endif
|
||||
|
||||
#include LOADER_HEADER
|
||||
|
||||
#include COMMON_HEADER
|
||||
#include CONSTANTS_HEADER
|
||||
#include JSON_HEADER
|
||||
|
||||
#include "ObjLoading.h"
|
||||
#include "Utils/QuatInt16.h"
|
||||
#include "Utils/StringUtils.h"
|
||||
@ -26,9 +41,10 @@
|
||||
#include <format>
|
||||
#include <iostream>
|
||||
#include <numeric>
|
||||
#include <set>
|
||||
#include <vector>
|
||||
|
||||
namespace GAME_NAMESPACE
|
||||
namespace GAME
|
||||
{
|
||||
class XModelLoader
|
||||
{
|
||||
@ -794,4 +810,14 @@ namespace GAME_NAMESPACE
|
||||
PartClassificationState& m_part_classification_state;
|
||||
std::set<XAssetInfoGeneric*>& m_dependencies;
|
||||
};
|
||||
} // namespace GAME_NAMESPACE
|
||||
|
||||
bool LoadXModel(std::istream& stream, XModel& xmodel, MemoryManager* memory, IAssetLoadingManager* manager, std::vector<XAssetInfoGeneric*>& dependencies)
|
||||
{
|
||||
std::set<XAssetInfoGeneric*> dependenciesSet;
|
||||
XModelLoader loader(stream, *memory, *manager, dependenciesSet);
|
||||
|
||||
dependencies.assign(dependenciesSet.cbegin(), dependenciesSet.cend());
|
||||
|
||||
return loader.Load(xmodel);
|
||||
}
|
||||
} // namespace GAME
|
@ -1,18 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "XModel/XModelCommon.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
class XModelLoader
|
||||
{
|
||||
public:
|
||||
XModelLoader() = default;
|
||||
virtual ~XModelLoader() = default;
|
||||
XModelLoader(const XModelLoader& other) = default;
|
||||
XModelLoader(XModelLoader&& other) noexcept = default;
|
||||
XModelLoader& operator=(const XModelLoader& other) = default;
|
||||
XModelLoader& operator=(XModelLoader&& other) noexcept = default;
|
||||
|
||||
virtual std::unique_ptr<XModelCommon> Load() = 0;
|
||||
};
|
@ -1,13 +1,19 @@
|
||||
#options GAME (T5, T6)
|
||||
|
||||
#filename "Game/" + GAME + "/XModel/XModelLoader" + GAME + ".h"
|
||||
|
||||
#set GAME_HEADER "\"Game/" + GAME + "/" + GAME + ".h\""
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "AssetLoading/IAssetLoadingManager.h"
|
||||
#include "Game/T5/T5.h"
|
||||
#include GAME_HEADER
|
||||
#include "Utils/MemoryManager.h"
|
||||
|
||||
#include <istream>
|
||||
#include <vector>
|
||||
|
||||
namespace T5
|
||||
namespace GAME
|
||||
{
|
||||
bool LoadXModel(std::istream& stream, XModel& xmodel, MemoryManager* memory, IAssetLoadingManager* manager, std::vector<XAssetInfoGeneric*>& dependencies);
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
#include "XModelDumperT5.h"
|
||||
|
||||
#include "Game/T5/CommonT5.h"
|
||||
#include "Game/T5/XModel/JsonXModel.h"
|
||||
#include "Game/T5/XModel/JsonXModelT5.h"
|
||||
|
||||
#define GAME_NAMESPACE T5
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#include "XModelDumperT6.h"
|
||||
|
||||
#include "Game/T6/CommonT6.h"
|
||||
#include "Game/T6/XModel/JsonXModel.h"
|
||||
#include "Game/T6/XModel/JsonXModelT6.h"
|
||||
|
||||
#define GAME_NAMESPACE T6
|
||||
#define FEATURE_T6
|
||||
|
64
tools/scripts/source_templating.lua
Normal file
64
tools/scripts/source_templating.lua
Normal file
@ -0,0 +1,64 @@
|
||||
function useSourceTemplating(projectName)
|
||||
local projectFolder = path.join(ProjectFolder(), projectName)
|
||||
local templateFiles = os.matchfiles(path.join(projectFolder, "**.template"))
|
||||
|
||||
local createdFiles = {}
|
||||
|
||||
for i = 1, #templateFiles do
|
||||
local templateFile = templateFiles[i]
|
||||
local relativeTemplatePath = path.getrelative(projectFolder, templateFile)
|
||||
local relativeResultPath = path.replaceextension(relativeTemplatePath, "")
|
||||
local resultExtension = path.getextension(relativeResultPath)
|
||||
|
||||
local data = io.readfile(templateFile)
|
||||
local gameOptionsStart, gameOptionsCount = string.find(data, "#options%s+GAME%s*%(")
|
||||
|
||||
if gameOptionsStart == nil then
|
||||
error("Source template " .. relativeTemplatePath .. " must define an option called GAME")
|
||||
end
|
||||
|
||||
local gameOptionsPos, gameOptionsLenPlusOne = string.find(data, "[%a%d%s,]+%)", gameOptionsStart + gameOptionsCount)
|
||||
|
||||
if gameOptionsPos ~= gameOptionsStart + gameOptionsCount then
|
||||
error("Source template " .. relativeTemplatePath .. " must define an option called GAME")
|
||||
end
|
||||
|
||||
local gameOptions = string.sub(data, gameOptionsPos, gameOptionsLenPlusOne - 1)
|
||||
local games = string.explode(gameOptions, ",%s*")
|
||||
|
||||
files {
|
||||
templateFile
|
||||
}
|
||||
|
||||
filter("files:" .. templateFile)
|
||||
buildmessage("Templating source file " .. relativeTemplatePath)
|
||||
buildinputs {
|
||||
TargetDirectoryBuildTools .. "/" .. ExecutableByOs('RawTemplater')
|
||||
}
|
||||
buildcommands {
|
||||
'"' .. TargetDirectoryBuildTools .. '/' .. ExecutableByOs('RawTemplater') .. '"'
|
||||
.. ' -o "%{prj.location}/"'
|
||||
.. " %{file.relpath}"
|
||||
}
|
||||
for i = 1, #games do
|
||||
local gameName = games[i]
|
||||
local outputFileName = path.replaceextension(path.replaceextension(relativeResultPath, "") .. gameName, resultExtension)
|
||||
local outputFile = "%{prj.location}/Game/" .. gameName .. "/" .. outputFileName
|
||||
|
||||
table.insert(createdFiles, outputFile)
|
||||
|
||||
buildoutputs {
|
||||
outputFile
|
||||
}
|
||||
end
|
||||
filter {}
|
||||
|
||||
includedirs {
|
||||
"%{prj.location}"
|
||||
}
|
||||
|
||||
files {
|
||||
createdFiles
|
||||
}
|
||||
end
|
||||
end
|
Loading…
x
Reference in New Issue
Block a user