finish material
This commit is contained in:
parent
3faea2bbec
commit
248b7e7385
@ -18,6 +18,7 @@
|
|||||||
#include "ObjImpls/CK3dEntity.hpp"
|
#include "ObjImpls/CK3dEntity.hpp"
|
||||||
#include "ObjImpls/CK3dObject.hpp"
|
#include "ObjImpls/CK3dObject.hpp"
|
||||||
#include "ObjImpls/CKTexture.hpp"
|
#include "ObjImpls/CKTexture.hpp"
|
||||||
|
#include "ObjImpls/CKMaterial.hpp"
|
||||||
|
|
||||||
namespace LibCmo::CK2 {
|
namespace LibCmo::CK2 {
|
||||||
|
|
||||||
@ -272,6 +273,7 @@ CKClassRegister(cid, parentCid, \
|
|||||||
EasyClassReg(ObjImpls::CK3dEntity, CK_CLASSID::CKCID_3DENTITY, CK_CLASSID::CKCID_RENDEROBJECT, "3D Entity");
|
EasyClassReg(ObjImpls::CK3dEntity, CK_CLASSID::CKCID_3DENTITY, CK_CLASSID::CKCID_RENDEROBJECT, "3D Entity");
|
||||||
EasyClassReg(ObjImpls::CK3dObject, CK_CLASSID::CKCID_3DOBJECT, CK_CLASSID::CKCID_3DENTITY, "3D Object");
|
EasyClassReg(ObjImpls::CK3dObject, CK_CLASSID::CKCID_3DOBJECT, CK_CLASSID::CKCID_3DENTITY, "3D Object");
|
||||||
EasyClassReg(ObjImpls::CKTexture, CK_CLASSID::CKCID_TEXTURE, CK_CLASSID::CKCID_BEOBJECT, "Texture");
|
EasyClassReg(ObjImpls::CKTexture, CK_CLASSID::CKCID_TEXTURE, CK_CLASSID::CKCID_BEOBJECT, "Texture");
|
||||||
|
EasyClassReg(ObjImpls::CKMaterial, CK_CLASSID::CKCID_MATERIAL, CK_CLASSID::CKCID_BEOBJECT, "Material");
|
||||||
|
|
||||||
#undef EasyClassReg
|
#undef EasyClassReg
|
||||||
|
|
||||||
|
@ -122,6 +122,44 @@ namespace LibCmo::CK2::ObjImpls {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// extra texture data
|
||||||
|
if (chunk->SeekIdentifier(CK_STATESAVEFLAGS_MATERIAL::CK_STATESAVE_MATDATA2)) {
|
||||||
|
// read 3 extra texture
|
||||||
|
CK_ID objid;
|
||||||
|
CKObject* tex = nullptr;
|
||||||
|
|
||||||
|
for (size_t i = 1; i < 4; ++i) {
|
||||||
|
chunk->ReadObjectID(objid);
|
||||||
|
tex = m_Context->GetObject(objid);
|
||||||
|
if (tex != nullptr && tex->GetClassID() == CK_CLASSID::CKCID_TEXTURE) {
|
||||||
|
m_Textures[i] = static_cast<CKTexture*>(tex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// single effect
|
||||||
|
if (chunk->SeekIdentifier(CK_STATESAVEFLAGS_MATERIAL::CK_STATESAVE_MATDATA3)) {
|
||||||
|
CKDWORD data;
|
||||||
|
chunk->ReadStruct(data);
|
||||||
|
m_Effect = static_cast<VxMath::VX_EFFECT>(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
// effect with parameter
|
||||||
|
if (chunk->SeekIdentifier(CK_STATESAVEFLAGS_MATERIAL::CK_STATESAVE_MATDATA5)) {
|
||||||
|
// MARK: i do not support CKParameter anymore.
|
||||||
|
// so we downgrade it into single effect type.
|
||||||
|
// hope this convertion will not break anything.
|
||||||
|
|
||||||
|
// drop parameter id.
|
||||||
|
CK_ID paramid;
|
||||||
|
chunk->ReadObjectID(paramid);
|
||||||
|
|
||||||
|
// read effect self
|
||||||
|
CKDWORD data;
|
||||||
|
chunk->ReadStruct(data);
|
||||||
|
m_Effect = static_cast<VxMath::VX_EFFECT>(data);
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user