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/options.lua"
|
||||||
include "tools/scripts/platform.lua"
|
include "tools/scripts/platform.lua"
|
||||||
include "tools/scripts/version.lua"
|
include "tools/scripts/version.lua"
|
||||||
|
include "tools/scripts/source_templating.lua"
|
||||||
|
|
||||||
-- ==================
|
-- ==================
|
||||||
-- Workspace
|
-- 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
|
@ -50,6 +50,8 @@ function ObjLoading:project()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useSourceTemplating("ObjLoading")
|
||||||
|
|
||||||
self:include(includes)
|
self:include(includes)
|
||||||
Crypto:include(includes)
|
Crypto:include(includes)
|
||||||
Utils:include(includes)
|
Utils: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 "GltfInput.h"
|
||||||
#include "XModel/Gltf/JsonGltf.h"
|
#include "XModel/Gltf/JsonGltf.h"
|
||||||
#include "XModel/XModelLoader.h"
|
#include "XModel/XModelFileLoader.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
|
|
||||||
namespace gltf
|
namespace gltf
|
||||||
{
|
{
|
||||||
class Loader : public XModelLoader
|
class Loader : public XModelFileLoader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Loader() = default;
|
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
|
#filename "Game/" + GAME + "/XModel/XModelLoader" + GAME + ".cpp"
|
||||||
#error Must define GAME_NAMESPACE
|
|
||||||
|
#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
|
#endif
|
||||||
|
|
||||||
|
#include LOADER_HEADER
|
||||||
|
|
||||||
|
#include COMMON_HEADER
|
||||||
|
#include CONSTANTS_HEADER
|
||||||
|
#include JSON_HEADER
|
||||||
|
|
||||||
#include "ObjLoading.h"
|
#include "ObjLoading.h"
|
||||||
#include "Utils/QuatInt16.h"
|
#include "Utils/QuatInt16.h"
|
||||||
#include "Utils/StringUtils.h"
|
#include "Utils/StringUtils.h"
|
||||||
@ -26,9 +41,10 @@
|
|||||||
#include <format>
|
#include <format>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <numeric>
|
#include <numeric>
|
||||||
|
#include <set>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace GAME_NAMESPACE
|
namespace GAME
|
||||||
{
|
{
|
||||||
class XModelLoader
|
class XModelLoader
|
||||||
{
|
{
|
||||||
@ -794,4 +810,14 @@ namespace GAME_NAMESPACE
|
|||||||
PartClassificationState& m_part_classification_state;
|
PartClassificationState& m_part_classification_state;
|
||||||
std::set<XAssetInfoGeneric*>& m_dependencies;
|
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
|
#pragma once
|
||||||
|
|
||||||
#include "AssetLoading/IAssetLoadingManager.h"
|
#include "AssetLoading/IAssetLoadingManager.h"
|
||||||
#include "Game/T5/T5.h"
|
#include GAME_HEADER
|
||||||
#include "Utils/MemoryManager.h"
|
#include "Utils/MemoryManager.h"
|
||||||
|
|
||||||
#include <istream>
|
#include <istream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace T5
|
namespace GAME
|
||||||
{
|
{
|
||||||
bool LoadXModel(std::istream& stream, XModel& xmodel, MemoryManager* memory, IAssetLoadingManager* manager, std::vector<XAssetInfoGeneric*>& dependencies);
|
bool LoadXModel(std::istream& stream, XModel& xmodel, MemoryManager* memory, IAssetLoadingManager* manager, std::vector<XAssetInfoGeneric*>& dependencies);
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
#include "XModelDumperT5.h"
|
#include "XModelDumperT5.h"
|
||||||
|
|
||||||
#include "Game/T5/CommonT5.h"
|
#include "Game/T5/CommonT5.h"
|
||||||
#include "Game/T5/XModel/JsonXModel.h"
|
#include "Game/T5/XModel/JsonXModelT5.h"
|
||||||
|
|
||||||
#define GAME_NAMESPACE T5
|
#define GAME_NAMESPACE T5
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include "XModelDumperT6.h"
|
#include "XModelDumperT6.h"
|
||||||
|
|
||||||
#include "Game/T6/CommonT6.h"
|
#include "Game/T6/CommonT6.h"
|
||||||
#include "Game/T6/XModel/JsonXModel.h"
|
#include "Game/T6/XModel/JsonXModelT6.h"
|
||||||
|
|
||||||
#define GAME_NAMESPACE T6
|
#define GAME_NAMESPACE T6
|
||||||
#define FEATURE_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