mirror of https://github.com/AxioDL/metaforce.git
Add DCLN blend type
This commit is contained in:
parent
83fdb9ab7c
commit
ebad51dc2e
|
@ -20,6 +20,7 @@ from mathutils import Vector
|
|||
hecl_typeS = [
|
||||
('NONE', "None", "Active scene not using HECL", None),
|
||||
('MESH', "Mesh", "Active scene represents an HMDL Mesh", hmdl.draw),
|
||||
('CMESH', "Collision Mesh", "Active scene represents a Collision Mesh", None),
|
||||
('ACTOR', "Actor", "Active scene represents a HECL Actor", sact.draw),
|
||||
('AREA', "Area", "Active scene represents a HECL Area", srea.draw),
|
||||
('WORLD', "World", "Active scene represents a HECL World", swld.draw),
|
||||
|
|
|
@ -235,6 +235,19 @@ def dataout_loop():
|
|||
writepipestr(b'OK')
|
||||
hecl.hmdl.cookcol(writepipebuf, bpy.data.objects[meshName])
|
||||
|
||||
elif cmdargs[0] == 'MESHCOMPILECOLLISIONALL':
|
||||
writepipestr(b'OK')
|
||||
colCount = 0
|
||||
for obj in bpy.context.scene.objects:
|
||||
if obj.type == 'MESH' and not obj.library:
|
||||
colCount += 1
|
||||
|
||||
writepipebuf(struct.pack('I', colCount))
|
||||
|
||||
for obj in bpy.context.scene.objects:
|
||||
if obj.type == 'MESH' and not obj.library:
|
||||
hecl.hmdl.cookcol(writepipebuf, obj)
|
||||
|
||||
elif cmdargs[0] == 'MESHCOMPILEALL':
|
||||
maxSkinBanks = int(cmdargs[2])
|
||||
maxOctantLength = float(cmdargs[3])
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit ed9b7914eeff6d0db2c90b34fcc3673778250ed7
|
||||
Subproject commit 7eb2b19619117c8f923d8b098e2a2d710cd3363a
|
|
@ -55,6 +55,7 @@ public:
|
|||
{
|
||||
None,
|
||||
Mesh,
|
||||
ColMesh,
|
||||
Actor,
|
||||
Area,
|
||||
World,
|
||||
|
@ -791,6 +792,9 @@ public:
|
|||
/** Compile collision mesh by name (AREA blends only) */
|
||||
ColMesh compileColMesh(const std::string& name);
|
||||
|
||||
/** Compile all meshes as collision meshes (CMESH blends only) */
|
||||
std::vector<ColMesh> compileColMeshes();
|
||||
|
||||
/** Compile all meshes into one (AREA blends only) */
|
||||
Mesh compileAllMeshes(HMDLTopology topology, int skinSlotCount=10, float maxOctantLength=5.0,
|
||||
Mesh::SurfProgFunc surfProg=[](int){});
|
||||
|
|
|
@ -502,6 +502,7 @@ public:
|
|||
std::string toString() const {return std::string(fcc, 4);}
|
||||
uint32_t toUint32() const {return num;}
|
||||
operator uint32_t() const {return num;}
|
||||
const char* getChars() const {return fcc;}
|
||||
};
|
||||
#define FOURCC(chars) FourCC(SBIG(chars))
|
||||
|
||||
|
|
|
@ -582,6 +582,7 @@ static const char* BlendTypeStrs[] =
|
|||
{
|
||||
"NONE",
|
||||
"MESH",
|
||||
"CMESH",
|
||||
"ACTOR",
|
||||
"AREA",
|
||||
"WORLD",
|
||||
|
@ -1484,6 +1485,34 @@ BlenderConnection::DataStream::compileColMesh(const std::string& name)
|
|||
return ColMesh(*m_parent);
|
||||
}
|
||||
|
||||
std::vector<BlenderConnection::DataStream::ColMesh>
|
||||
BlenderConnection::DataStream::compileColMeshes()
|
||||
{
|
||||
if (m_parent->m_loadedType != BlendType::ColMesh)
|
||||
BlenderLog.report(logvisor::Fatal, _S("%s is not a CMESH blend"),
|
||||
m_parent->m_loadedBlend.getAbsolutePath().c_str());
|
||||
|
||||
char req[128];
|
||||
snprintf(req, 128, "MESHCOMPILECOLLISIONALL");
|
||||
m_parent->_writeStr(req);
|
||||
|
||||
char readBuf[256];
|
||||
m_parent->_readStr(readBuf, 256);
|
||||
if (strcmp(readBuf, "OK"))
|
||||
BlenderLog.report(logvisor::Fatal, "unable to cook collision meshes: %s", readBuf);
|
||||
|
||||
uint32_t meshCount;
|
||||
m_parent->_readBuf(&meshCount, 4);
|
||||
|
||||
std::vector<BlenderConnection::DataStream::ColMesh> ret;
|
||||
ret.reserve(meshCount);
|
||||
|
||||
for (uint32_t i=0 ; i<meshCount ; ++i)
|
||||
ret.emplace_back(*m_parent);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
BlenderConnection::DataStream::Mesh
|
||||
BlenderConnection::DataStream::compileAllMeshes(HMDLTopology topology,
|
||||
int skinSlotCount,
|
||||
|
|
Loading…
Reference in New Issue