Add getSubtypeNames to BlenderConnection

This commit is contained in:
Jack Andersen 2016-04-12 12:27:11 -10:00
parent 4da14b5d9b
commit e8336578d1
4 changed files with 44 additions and 0 deletions

View File

@ -1096,6 +1096,37 @@ std::vector<std::string> BlenderConnection::DataStream::getArmatureNames()
return ret;
}
std::vector<std::string> BlenderConnection::DataStream::getSubtypeNames()
{
if (m_parent->m_loadedType != BlendType::Actor)
BlenderLog.report(logvisor::Fatal, _S("%s is not an ACTOR blend"),
m_parent->m_loadedBlend.getAbsolutePath().c_str());
m_parent->_writeLine("GETSUBTYPENAMES");
char readBuf[256];
m_parent->_readLine(readBuf, 256);
if (strcmp(readBuf, "OK"))
BlenderLog.report(logvisor::Fatal, "unable to get subtypes of actor: %s", readBuf);
std::vector<std::string> ret;
uint32_t subCount;
m_parent->_readBuf(&subCount, 4);
ret.reserve(subCount);
for (uint32_t i=0 ; i<subCount ; ++i)
{
ret.emplace_back();
std::string& name = ret.back();
uint32_t bufSz;
m_parent->_readBuf(&bufSz, 4);
name.assign(bufSz, ' ');
m_parent->_readBuf(&name[0], bufSz);
}
return ret;
}
std::vector<std::string> BlenderConnection::DataStream::getActionNames()
{
if (m_parent->m_loadedType != BlendType::Actor)

View File

@ -610,6 +610,7 @@ public:
Actor compileActor();
std::vector<std::string> getArmatureNames();
std::vector<std::string> getSubtypeNames();
std::vector<std::string> getActionNames();
struct Matrix3f

View File

@ -310,6 +310,14 @@ def get_armature_names(writebuf):
writebuf(struct.pack('I', len(arm.name)))
writebuf(arm.name.encode())
# Access actor's contained subtype names
def get_subtype_names(writebuf):
writebuf(struct.pack('I', len(sact_data.subtypes)))
for sub_idx in range(len(sact_data.subtypes)):
subtype = sact_data.subtypes[sub_idx]
writebuf(struct.pack('I', len(subtype.name)))
writebuf(subtype.name.encode())
# Access actor's contained action names
def get_action_names(writebuf):
writebuf(struct.pack('I', len(sact_data.actions)))

View File

@ -191,6 +191,10 @@ def dataout_loop():
writepipeline(b'OK')
hecl.sact.get_armature_names(writepipebuf)
elif cmdargs[0] == 'GETSUBTYPENAMES':
writepipeline(b'OK')
hecl.sact.get_subtype_names(writepipebuf)
elif cmdargs[0] == 'GETACTIONNAMES':
writepipeline(b'OK')
hecl.sact.get_action_names(writepipebuf)