refactor(2/?)

This commit is contained in:
2023-08-23 16:04:58 +08:00
parent 1b8f2ff0d5
commit ad9d0cadce
16 changed files with 857 additions and 566 deletions

View File

@ -1,138 +1,123 @@
#include "../CKObjects.hpp"
#include "CKObject.hpp"
#include "../CKStateChunk.hpp"
#include "../CKIdentifiers.hpp"
#include "../VTUtils.hpp"
namespace LibCmo::CK2::CKObjectImplements {
namespace LibCmo::CK2 {
CKObject::CKObject(CKMinContext* ctx, CK_ID ckid, CKSTRING name) :
m_ID(ckid), m_Context(ctx),
m_Name(name == nullptr ? "" : name),
m_ObjectFlags(CK_OBJECT_FLAGS::CK_PARAMETERIN_DISABLED) {
;
void CKObject::PreSave(CKFile* file, CKDWORD flags) {}
CKStateChunk* CKObject::Save(CKFile* file, CKDWORD flags) {
return nullptr;
}
CKObject::~CKObject() {
}
bool CKObject::Load(CKStateChunk* chunk, const CKFileDocument* doc) {
if (chunk->SeekIdentifier(Identifiers::CK_STATESAVEFLAGS_OBJECT::CK_STATESAVE_OBJECTHIDDEN)) {
EnumsHelper::FlagEnumRm(this->m_ObjectFlags,
{ CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE,
CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE }
);
bool CKObject::Load(CKStateChunk* chunk, CKFile* file) {
if (chunk->SeekIdentifier(CK_STATESAVEFLAGS_OBJECT::CK_STATESAVE_OBJECTHIDDEN)) {
EnumsHelper::Rm(this->m_ObjectFlags,
EnumsHelper::Merge({ CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE }));
} else {
if (chunk->SeekIdentifier(Identifiers::CK_STATESAVEFLAGS_OBJECT::CK_STATESAVE_OBJECTHIERAHIDDEN)) {
if (chunk->SeekIdentifier(CK_STATESAVEFLAGS_OBJECT::CK_STATESAVE_OBJECTHIERAHIDDEN)) {
// != 0
EnumsHelper::FlagEnumRm(this->m_ObjectFlags,
{ CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE, }
);
EnumsHelper::FlagEnumAdd(this->m_ObjectFlags,
{ CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE, }
);
EnumsHelper::Rm(this->m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE);
EnumsHelper::Add(this->m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE);
} else {
// == 0
EnumsHelper::FlagEnumAdd(this->m_ObjectFlags,
{ CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE, }
);
EnumsHelper::FlagEnumRm(this->m_ObjectFlags,
{ CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE, }
);
EnumsHelper::Add(this->m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE);
EnumsHelper::Rm(this->m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE);
}
}
return true;
}
CKStateChunk* CKObject::Save(const CKFileDocument* doc) {
return nullptr;
}
CKSceneObject::CKSceneObject(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKObject(ctx, ckid, name) {
}
CKSceneObject::~CKSceneObject() {
}
CKBeObject::CKBeObject(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKSceneObject(ctx, ckid, name) {
}
CKBeObject::~CKBeObject() {
}
CKGroup::CKGroup(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKBeObject(ctx, ckid, name) {
}
CKGroup::~CKGroup() {
}
CKMesh::CKMesh(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKBeObject(ctx, ckid, name) {
}
CKMesh::~CKMesh() {
}
CKTexture::CKTexture(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKBeObject(ctx, ckid, name) {
}
CKTexture::~CKTexture() {
}
CKMaterial::CKMaterial(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKBeObject(ctx, ckid, name) {
}
CKMaterial::~CKMaterial() {
}
CKRenderObject::CKRenderObject(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKBeObject(ctx, ckid, name) {
}
CKRenderObject::~CKRenderObject() {
}
CK3dEntity::CK3dEntity(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKRenderObject(ctx, ckid, name) {
}
CK3dEntity::~CK3dEntity() {
}
CK3dObject::CK3dObject(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CK3dEntity(ctx, ckid, name) {
}
CK3dObject::~CK3dObject() {
}
void CKObject::PostLoad() {}
CKParameterIn::CKParameterIn(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKObject(ctx, ckid, name) {
}
CKParameterIn::~CKParameterIn() {
}
//CKSceneObject::CKSceneObject(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKObject(ctx, ckid, name) {
//}
//CKSceneObject::~CKSceneObject() {
//}
CKParameter::CKParameter(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKObject(ctx, ckid, name) {
}
CKParameter::~CKParameter() {
}
//CKBeObject::CKBeObject(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKSceneObject(ctx, ckid, name) {
//}
//CKBeObject::~CKBeObject() {
//}
CKParameterOut::CKParameterOut(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKParameter(ctx, ckid, name) {
}
CKParameterOut::~CKParameterOut() {
}
//CKGroup::CKGroup(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKBeObject(ctx, ckid, name) {
//}
//CKGroup::~CKGroup() {
//}
CKParameterLocal::CKParameterLocal(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKParameter(ctx, ckid, name) {
}
CKParameterLocal::~CKParameterLocal() {
}
//CKMesh::CKMesh(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKBeObject(ctx, ckid, name) {
//}
//CKMesh::~CKMesh() {
//}
CKParameterOperation::CKParameterOperation(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKObject(ctx, ckid, name) {
}
CKParameterOperation::~CKParameterOperation() {
}
//CKTexture::CKTexture(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKBeObject(ctx, ckid, name) {
//}
//CKTexture::~CKTexture() {
//}
CKBehaviorLink::CKBehaviorLink(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKObject(ctx, ckid, name) {
}
CKBehaviorLink::~CKBehaviorLink() {
}
//CKMaterial::CKMaterial(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKBeObject(ctx, ckid, name) {
//}
//CKMaterial::~CKMaterial() {
//}
CKBehaviorIO::CKBehaviorIO(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKObject(ctx, ckid, name) {
}
CKBehaviorIO::~CKBehaviorIO() {
}
//CKRenderObject::CKRenderObject(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKBeObject(ctx, ckid, name) {
//}
//CKRenderObject::~CKRenderObject() {
//}
CKBehavior::CKBehavior(CKMinContext* ctx, CK_ID ckid, CKSTRING name) : CKSceneObject(ctx, ckid, name) {
}
CKBehavior::~CKBehavior() {
}
//CK3dEntity::CK3dEntity(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKRenderObject(ctx, ckid, name) {
//}
//CK3dEntity::~CK3dEntity() {
//}
//CK3dObject::CK3dObject(CKContext* ctx, CK_ID ckid, CKSTRING name) : CK3dEntity(ctx, ckid, name) {
//}
//CK3dObject::~CK3dObject() {
//}
//CKParameterIn::CKParameterIn(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKObject(ctx, ckid, name) {
//}
//CKParameterIn::~CKParameterIn() {
//}
//CKParameter::CKParameter(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKObject(ctx, ckid, name) {
//}
//CKParameter::~CKParameter() {
//}
//CKParameterOut::CKParameterOut(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKParameter(ctx, ckid, name) {
//}
//CKParameterOut::~CKParameterOut() {
//}
//CKParameterLocal::CKParameterLocal(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKParameter(ctx, ckid, name) {
//}
//CKParameterLocal::~CKParameterLocal() {
//}
//CKParameterOperation::CKParameterOperation(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKObject(ctx, ckid, name) {
//}
//CKParameterOperation::~CKParameterOperation() {
//}
//CKBehaviorLink::CKBehaviorLink(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKObject(ctx, ckid, name) {
//}
//CKBehaviorLink::~CKBehaviorLink() {
//}
//CKBehaviorIO::CKBehaviorIO(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKObject(ctx, ckid, name) {
//}
//CKBehaviorIO::~CKBehaviorIO() {
//}
//CKBehavior::CKBehavior(CKContext* ctx, CK_ID ckid, CKSTRING name) : CKSceneObject(ctx, ckid, name) {
//}
//CKBehavior::~CKBehavior() {
//}
}

View File

@ -0,0 +1,275 @@
#pragma once
#include "../../VTUtils.hpp"
#include "../CKContext.hpp"
namespace LibCmo::CK2 {
class CKObject {
public:
CKObject(CKContext* ctx, CK_ID ckid, CKSTRING name) :
m_ID(ckid),
m_HasName(name != nullptr ? CKTRUE : CKFALSE), m_Name(name != nullptr ? name : ""),
m_Context(ctx),
m_ObjectFlags(CK_OBJECT_FLAGS::CK_PARAMETERIN_DISABLED)
{}
virtual ~CKObject() {}
LIBCMO_DISABLE_COPY_MOVE(CKObject);
CK_ID GetID(void) {
return m_ID;
}
CKSTRING GetName(void) {
if (m_HasName) return m_Name.c_str();
else return nullptr;
}
void SetName(CKSTRING u8_name) {
if (u8_name == nullptr) {
m_HasName = false;
m_Name.clear();
} else {
m_HasName = true;
m_Name = u8_name;
}
}
CK_OBJECT_FLAGS GetObjectFlags(void) {
return m_ObjectFlags;
}
void SetObjectFlags(CK_OBJECT_FLAGS flags) {
m_ObjectFlags = flags;
}
CKContext* GetCKContext() {
return m_Context;
}
virtual CK_CLASSID GetClassID(void) {
return CK_CLASSID::CKCID_OBJECT;
}
virtual void PreSave(CKFile* file, CKDWORD flags);
virtual CKStateChunk* Save(CKFile* file, CKDWORD flags);
virtual bool Load(CKStateChunk* chunk, CKFile* file);
virtual void PostLoad();
private:
CK_ID m_ID;
CKBOOL m_HasName;
std::string m_Name;
CK_OBJECT_FLAGS m_ObjectFlags;
CKContext* m_Context;
};
//class CKSceneObject : public CKObject {
//public:
// CKSceneObject(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKSceneObject(const CKSceneObject&) = delete;
// CKSceneObject& operator=(const CKSceneObject&) = delete;
// virtual ~CKSceneObject();
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_SCENEOBJECT; }
//protected:
// XBitArray m_Scenes;
//};
//class CKBeObject : public CKSceneObject {
//public:
// CKBeObject(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKBeObject(const CKBeObject&) = delete;
// CKBeObject& operator=(const CKBeObject&) = delete;
// virtual ~CKBeObject();
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_BEOBJECT; }
//protected:
//};
//
//#pragma region Map Related
//
// class CKGroup : public CKBeObject {
// public:
// CKGroup(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKGroup(const CKGroup&) = delete;
// CKGroup& operator=(const CKGroup&) = delete;
// virtual ~CKGroup();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_GROUP; }
// protected:
//
// };
//
// class CKMesh : public CKBeObject {
// public:
// CKMesh(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKMesh(const CKMesh&) = delete;
// CKMesh& operator=(const CKMesh&) = delete;
// virtual ~CKMesh();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_MESH; }
// protected:
//
// };
//
// class CKTexture : public CKBeObject {
// public:
// CKTexture(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKTexture(const CKTexture&) = delete;
// CKTexture& operator=(const CKTexture&) = delete;
// virtual ~CKTexture();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_TEXTURE; }
// protected:
//
// };
//
// class CKMaterial : public CKBeObject {
// public:
// CKMaterial(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKMaterial(const CKMaterial&) = delete;
// CKMaterial& operator=(const CKMaterial&) = delete;
// virtual ~CKMaterial();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_MATERIAL; }
// protected:
//
// };
//
// class CKRenderObject : public CKBeObject {
// public:
// CKRenderObject(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKRenderObject(const CKRenderObject&) = delete;
// CKRenderObject& operator=(const CKRenderObject&) = delete;
// ~CKRenderObject();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_RENDEROBJECT; }
// protected:
//
// };
//
// class CK3dEntity : public CKRenderObject {
// public:
// CK3dEntity(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CK3dEntity(const CK3dEntity&) = delete;
// CK3dEntity& operator=(const CK3dEntity&) = delete;
// virtual ~CK3dEntity();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_3DENTITY; }
// protected:
//
// };
//
// class CK3dObject :public CK3dEntity {
// public:
// CK3dObject(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CK3dObject(const CK3dObject&) = delete;
// CK3dObject& operator=(const CK3dObject&) = delete;
// ~CK3dObject();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_3DOBJECT; }
// protected:
//
// };
//
//#pragma endregion
//
//#pragma region Behavior Related
//
// class CKParameterIn :public CKObject {
// public:
// CKParameterIn(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKParameterIn(const CKParameterIn&) = delete;
// CKParameterIn& operator=(const CKParameterIn&) = delete;
// ~CKParameterIn();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_PARAMETERIN; }
// protected:
//
// };
//
// class CKParameter :public CKObject {
// public:
// CKParameter(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKParameter(const CKParameter&) = delete;
// CKParameter& operator=(const CKParameter&) = delete;
// ~CKParameter();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_PARAMETER; }
// protected:
//
// };
//
// class CKParameterOut :public CKParameter {
// public:
// CKParameterOut(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKParameterOut(const CKParameterOut&) = delete;
// CKParameterOut& operator=(const CKParameterOut&) = delete;
// ~CKParameterOut();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_PARAMETEROUT; }
// protected:
//
// };
//
// class CKParameterLocal :public CKParameter {
// public:
// CKParameterLocal(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKParameterLocal(const CKParameterLocal&) = delete;
// CKParameterLocal& operator=(const CKParameterLocal&) = delete;
// ~CKParameterLocal();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_PARAMETERLOCAL; }
// protected:
//
// };
//
// class CKParameterOperation :public CKObject {
// public:
// CKParameterOperation(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKParameterOperation(const CKParameterOperation&) = delete;
// CKParameterOperation& operator=(const CKParameterOperation&) = delete;
// ~CKParameterOperation();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_PARAMETEROPERATION; }
// protected:
//
// };
//
// class CKBehaviorLink :public CKObject {
// public:
// CKBehaviorLink(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKBehaviorLink(const CKBehaviorLink&) = delete;
// CKBehaviorLink& operator=(const CKBehaviorLink&) = delete;
// ~CKBehaviorLink();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_BEHAVIORLINK; }
// protected:
//
// };
//
// class CKBehaviorIO :public CKObject {
// public:
// CKBehaviorIO(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKBehaviorIO(const CKBehaviorIO&) = delete;
// CKBehaviorIO& operator=(const CKBehaviorIO&) = delete;
// ~CKBehaviorIO();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_BEHAVIORIO; }
// protected:
//
// };
//
// class CKBehavior :public CKSceneObject {
// public:
// CKBehavior(CKContext* ctx, CK_ID ckid, CKSTRING name);
// CKBehavior(const CKBehavior&) = delete;
// CKBehavior& operator=(const CKBehavior&) = delete;
// ~CKBehavior();
//
// virtual CK_CLASSID GetClassID(void) override { return CK_CLASSID::CKCID_BEHAVIOR; }
// protected:
//
// };
//
//#pragma endregion
}