mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-07-13 22:45:52 +00:00
CMDL cooking updates
This commit is contained in:
parent
cdeb1234c8
commit
3b7f7f2f3a
@ -13,7 +13,7 @@ namespace Blender
|
||||
bool BuildMasterShader(const HECL::ProjectPath& path)
|
||||
{
|
||||
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection();
|
||||
if (!conn.createBlend(path.getAbsolutePath(), HECL::BlenderConnection::TypeNone))
|
||||
if (!conn.createBlend(path, HECL::BlenderConnection::TypeNone))
|
||||
return false;
|
||||
{
|
||||
HECL::BlenderConnection::PyOutStream os = conn.beginPythonOut(true);
|
||||
|
@ -51,7 +51,7 @@ bool ReadANCSToBlender(HECL::BlenderConnection& conn,
|
||||
HECL::ProjectPath cmdlPath = pakRouter.getWorking(cmdlE);
|
||||
if (force || cmdlPath.getPathType() == HECL::ProjectPath::PT_NONE)
|
||||
{
|
||||
if (!conn.createBlend(cmdlPath.getAbsolutePath(), HECL::BlenderConnection::TypeMesh))
|
||||
if (!conn.createBlend(cmdlPath, HECL::BlenderConnection::TypeMesh))
|
||||
return false;
|
||||
|
||||
HECL::SystemStringView bestNameView(pakRouter.getBestEntryName(*cmdlE));
|
||||
@ -77,7 +77,7 @@ bool ReadANCSToBlender(HECL::BlenderConnection& conn,
|
||||
fileChanged(bestNameView.sys_str().c_str());
|
||||
|
||||
/* Establish ANCS blend */
|
||||
if (!conn.createBlend(outPath.getAbsolutePath(), HECL::BlenderConnection::TypeActor))
|
||||
if (!conn.createBlend(outPath, HECL::BlenderConnection::TypeActor))
|
||||
return false;
|
||||
HECL::BlenderConnection::PyOutStream os = conn.beginPythonOut(true);
|
||||
|
||||
|
@ -11,6 +11,8 @@ namespace Retro
|
||||
namespace DNACMDL
|
||||
{
|
||||
|
||||
using Mesh = HECL::BlenderConnection::DataStream::Mesh;
|
||||
|
||||
struct Header : BigDNA
|
||||
{
|
||||
DECL_DNA
|
||||
|
@ -512,15 +512,6 @@ public:
|
||||
float thisFac = ++count / fsz;
|
||||
progress(bestNameView.sys_str().c_str(), thisFac);
|
||||
|
||||
HECL::ProjectPath cooked = getCooked(item.second);
|
||||
if (force || cooked.getPathType() == HECL::ProjectPath::PT_NONE)
|
||||
{
|
||||
PAKEntryReadStream s = item.second->beginReadStream(*m_node);
|
||||
FILE* fout = HECL::Fopen(cooked.getAbsolutePath().c_str(), _S("wb"));
|
||||
fwrite(s.data(), 1, s.length(), fout);
|
||||
fclose(fout);
|
||||
}
|
||||
|
||||
HECL::ProjectPath working = getWorking(item.second, extractor);
|
||||
if (extractor.func_a) /* Doesn't need PAKRouter access */
|
||||
{
|
||||
@ -542,6 +533,17 @@ public:
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/* Extract original cooked copy AFTER working so timestamps make
|
||||
* the original a valid cached item */
|
||||
HECL::ProjectPath cooked = getCooked(item.second);
|
||||
if (force || cooked.getPathType() == HECL::ProjectPath::PT_NONE)
|
||||
{
|
||||
PAKEntryReadStream s = item.second->beginReadStream(*m_node);
|
||||
FILE* fout = HECL::Fopen(cooked.getAbsolutePath().c_str(), _S("wb"));
|
||||
fwrite(s.data(), 1, s.length(), fout);
|
||||
fclose(fout);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -38,12 +38,18 @@ struct CMDL
|
||||
|
||||
/* Do extract */
|
||||
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection();
|
||||
if (!conn.createBlend(outPath.getAbsolutePath(), HECL::BlenderConnection::TypeMesh))
|
||||
if (!conn.createBlend(outPath, HECL::BlenderConnection::TypeMesh))
|
||||
return false;
|
||||
DNACMDL::ReadCMDLToBlender<PAKRouter<PAKBridge>, MaterialSet, std::pair<CSKR*,CINF*>, DNACMDL::SurfaceHeader_1_2, 2>
|
||||
(conn, rs, pakRouter, entry, dataSpec, loadRp);
|
||||
return conn.saveBlend();
|
||||
}
|
||||
|
||||
static bool Cook(const DNACMDL::Mesh& mesh,
|
||||
const HECL::ProjectPath& outPath)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ struct DeafBabe : BigDNA
|
||||
DECL_DNA
|
||||
Value<atUint32> material;
|
||||
bool fireThrough() const {return material >> 18 & 0x1;}
|
||||
void setFireThrough(bool v) {material &= 0x40000; material |= v << 18;}
|
||||
void setFireThrough(bool v) {material &= ~0x40000; material |= v << 18;}
|
||||
|
||||
enum Type
|
||||
{
|
||||
@ -39,7 +39,7 @@ struct DeafBabe : BigDNA
|
||||
MatLeaves
|
||||
};
|
||||
Type type() const {return Type(material & 0xff);}
|
||||
void setType(Type t) {material &= 0xff; material |= t;}
|
||||
void setType(Type t) {material &= ~0xff; material |= t;}
|
||||
};
|
||||
|
||||
struct Edge : BigDNA
|
||||
|
@ -50,7 +50,7 @@ bool MREA::Extract(const SpecBase& dataSpec,
|
||||
rs.seekAlign32();
|
||||
|
||||
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection();
|
||||
if (!conn.createBlend(outPath.getAbsolutePath(), HECL::BlenderConnection::TypeArea))
|
||||
if (!conn.createBlend(outPath, HECL::BlenderConnection::TypeArea))
|
||||
return false;
|
||||
|
||||
/* Open Py Stream and read sections */
|
||||
|
@ -38,7 +38,7 @@ struct CMDL
|
||||
|
||||
/* Do extract */
|
||||
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection();
|
||||
if (!conn.createBlend(outPath.getAbsolutePath(), HECL::BlenderConnection::TypeMesh))
|
||||
if (!conn.createBlend(outPath, HECL::BlenderConnection::TypeMesh))
|
||||
return false;
|
||||
DNACMDL::ReadCMDLToBlender<PAKRouter<PAKBridge>, MaterialSet, std::pair<CSKR*,CINF*>, DNACMDL::SurfaceHeader_1_2, 4>
|
||||
(conn, rs, pakRouter, entry, dataSpec, loadRp);
|
||||
|
@ -18,7 +18,7 @@ struct DeafBabe : BigDNA
|
||||
DECL_DNA
|
||||
Value<atUint64> material;
|
||||
bool fireThrough() const {return material >> 18 & 0x1;}
|
||||
void setFireThrough(bool v) {material &= 0x40000; material |= v << 18;}
|
||||
void setFireThrough(bool v) {material &= ~0x40000; material |= v << 18;}
|
||||
|
||||
enum Type
|
||||
{
|
||||
@ -34,7 +34,7 @@ struct DeafBabe : BigDNA
|
||||
MatLeaves
|
||||
};
|
||||
Type type() const {return Type(material & 0xff);}
|
||||
void setType(Type t) {material &= 0xff; material |= t;}
|
||||
void setType(Type t) {material &= ~0xff; material |= t;}
|
||||
};
|
||||
|
||||
using Edge = DNAMP1::DeafBabe::Edge;
|
||||
|
@ -186,7 +186,7 @@ bool MREA::Extract(const SpecBase& dataSpec,
|
||||
|
||||
/* Start up blender connection */
|
||||
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection();
|
||||
if (!conn.createBlend(outPath.getAbsolutePath(), HECL::BlenderConnection::TypeArea))
|
||||
if (!conn.createBlend(outPath, HECL::BlenderConnection::TypeArea))
|
||||
return false;
|
||||
|
||||
/* Open Py Stream and read sections */
|
||||
|
@ -38,7 +38,7 @@ struct CMDL
|
||||
|
||||
/* Do extract */
|
||||
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection();
|
||||
if (!conn.createBlend(outPath.getAbsolutePath(), HECL::BlenderConnection::TypeMesh))
|
||||
if (!conn.createBlend(outPath, HECL::BlenderConnection::TypeMesh))
|
||||
return false;
|
||||
DNACMDL::ReadCMDLToBlender<PAKRouter<PAKBridge>, MaterialSet, std::pair<CSKR*,CINF*>, DNACMDL::SurfaceHeader_3, 5>
|
||||
(conn, rs, pakRouter, entry, dataSpec, loadRp);
|
||||
|
@ -99,7 +99,7 @@ bool MREA::Extract(const SpecBase& dataSpec,
|
||||
|
||||
/* Start up blender connection */
|
||||
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection();
|
||||
if (!conn.createBlend(outPath.getAbsolutePath(), HECL::BlenderConnection::TypeArea))
|
||||
if (!conn.createBlend(outPath, HECL::BlenderConnection::TypeArea))
|
||||
return false;
|
||||
|
||||
/* Open Py Stream and read sections */
|
||||
|
@ -93,7 +93,7 @@ bool SpecBase::canCook(const HECL::ProjectPath& path)
|
||||
if (HECL::IsPathBlend(path))
|
||||
{
|
||||
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection();
|
||||
if (!conn.openBlend(path.getAbsolutePath()))
|
||||
if (!conn.openBlend(path))
|
||||
return false;
|
||||
if (conn.getBlendType() != HECL::BlenderConnection::TypeNone)
|
||||
return true;
|
||||
@ -112,21 +112,40 @@ bool SpecBase::canCook(const HECL::ProjectPath& path)
|
||||
return false;
|
||||
}
|
||||
|
||||
using Mesh = HECL::BlenderConnection::DataStream::Mesh;
|
||||
|
||||
void SpecBase::doCook(const HECL::ProjectPath& path, const HECL::ProjectPath& cookedPath)
|
||||
{
|
||||
if (HECL::IsPathBlend(path))
|
||||
{
|
||||
HECL::BlenderConnection& conn = HECL::BlenderConnection::SharedConnection();
|
||||
if (!conn.openBlend(path.getAbsolutePath()))
|
||||
if (!conn.openBlend(path))
|
||||
return;
|
||||
if (conn.getBlendType() == HECL::BlenderConnection::TypeMesh)
|
||||
switch (conn.getBlendType())
|
||||
{
|
||||
case HECL::BlenderConnection::TypeMesh:
|
||||
{
|
||||
HECL::BlenderConnection::DataStream ds = conn.beginData();
|
||||
Mesh mesh = ds.compileMesh();
|
||||
ds.close();
|
||||
cookMesh(path, ds, cookedPath);
|
||||
break;
|
||||
}
|
||||
case HECL::BlenderConnection::TypeActor:
|
||||
{
|
||||
HECL::BlenderConnection::DataStream ds = conn.beginData();
|
||||
cookActor(path, ds, cookedPath);
|
||||
break;
|
||||
}
|
||||
case HECL::BlenderConnection::TypeArea:
|
||||
{
|
||||
HECL::BlenderConnection::DataStream ds = conn.beginData();
|
||||
cookArea(path, ds, cookedPath);
|
||||
break;
|
||||
}
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
else if (HECL::IsPathYAML(path))
|
||||
{
|
||||
FILE* fp = HECL::Fopen(path.getAbsolutePath().c_str(), _S("r"));
|
||||
cookYAML(fp, cookedPath);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -45,6 +45,7 @@ struct SpecBase : HECL::Database::IDataSpec
|
||||
|
||||
/* Cook handlers */
|
||||
using BlendStream = HECL::BlenderConnection::DataStream;
|
||||
using Mesh = BlendStream::Mesh;
|
||||
virtual void cookMesh(const HECL::ProjectPath& in, BlendStream& ds, const HECL::ProjectPath& out) const=0;
|
||||
virtual void cookActor(const HECL::ProjectPath& in, BlendStream& ds, const HECL::ProjectPath& out) const=0;
|
||||
virtual void cookArea(const HECL::ProjectPath& in, BlendStream& ds, const HECL::ProjectPath& out) const=0;
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
#include "DNAMP1/MLVL.hpp"
|
||||
#include "DNAMP1/STRG.hpp"
|
||||
#include "DNAMP1/CMDL.hpp"
|
||||
|
||||
namespace Retro
|
||||
{
|
||||
@ -281,6 +282,8 @@ struct SpecMP1 : SpecBase
|
||||
|
||||
void cookMesh(const HECL::ProjectPath& in, BlendStream& ds, const HECL::ProjectPath& out) const
|
||||
{
|
||||
Mesh mesh = ds.compileMesh();
|
||||
DNAMP1::CMDL::Cook(mesh, out);
|
||||
}
|
||||
|
||||
void cookActor(const HECL::ProjectPath& in, BlendStream& ds, const HECL::ProjectPath& out) const
|
||||
|
2
hecl
2
hecl
@ -1 +1 @@
|
||||
Subproject commit dd557bb7c5a3a409988d1b24d81ddd1f66791701
|
||||
Subproject commit 120d22fd527452be9cc49dd601fd908cd5693555
|
Loading…
x
Reference in New Issue
Block a user