1
0

refactor: finish all yycc adaption for ck2 except CKContext

This commit is contained in:
2026-01-25 21:03:43 +08:00
parent 97b33b131a
commit a79d09a66c
27 changed files with 135 additions and 123 deletions

View File

@@ -1,4 +1,5 @@
#include "CKBitmapHandler.hpp" #include "CKBitmapHandler.hpp"
#include <yycc/patch/fopen.hpp>
#include <stb_image.h> #include <stb_image.h>
#include <stb_image_write.h> #include <stb_image_write.h>
@@ -135,7 +136,7 @@ namespace LibCmo::CK2::DataHandlers {
static bool StbReadFile(CKSTRING u8filename, VxMath::VxImageDescEx* read_image) { static bool StbReadFile(CKSTRING u8filename, VxMath::VxImageDescEx* read_image) {
if (u8filename == nullptr || read_image == nullptr) return false; if (u8filename == nullptr || read_image == nullptr) return false;
FILE* fs = YYCC::IOHelper::UTF8FOpen(u8filename, u8"rb"); FILE* fs = yycc::patch::fopen::fopen(u8filename, u8"rb");
if (fs == nullptr) return false; if (fs == nullptr) return false;
// read data // read data
@@ -210,7 +211,7 @@ namespace LibCmo::CK2::DataHandlers {
static bool StbSaveFile(CKSTRING u8filename, const VxMath::VxImageDescEx* write_image, bool save_alpha, SaveOperation oper) { static bool StbSaveFile(CKSTRING u8filename, const VxMath::VxImageDescEx* write_image, bool save_alpha, SaveOperation oper) {
if (u8filename == nullptr || write_image == nullptr) return false; if (u8filename == nullptr || write_image == nullptr) return false;
if (!write_image->IsValid()) return false; if (!write_image->IsValid()) return false;
FILE* fs = YYCC::IOHelper::UTF8FOpen(u8filename, u8"wb"); FILE* fs = yycc::patch::fopen::fopen(u8filename, u8"wb");
if (fs == nullptr) return false; if (fs == nullptr) return false;
// allocate buffer and convert data from ARGB to RGBA or RGB // allocate buffer and convert data from ARGB to RGBA or RGB

View File

@@ -1,6 +1,7 @@
#pragma once #pragma once
#include "../../VTInternal.hpp" #include "../../VTInternal.hpp"
#include <yycc/macro/class_copy_move.hpp>
#include <memory> #include <memory>
#include <functional> #include <functional>
@@ -30,7 +31,7 @@ namespace LibCmo::CK2::DataHandlers {
public: public:
CKBitmapHandler() {} CKBitmapHandler() {}
virtual ~CKBitmapHandler() {} virtual ~CKBitmapHandler() {}
YYCC_DEL_CLS_COPY_MOVE(CKBitmapHandler); YYCC_DELETE_COPY_MOVE(CKBitmapHandler)
/** /**
* @brief General CKBitmapHandler getter. * @brief General CKBitmapHandler getter.
@@ -102,7 +103,7 @@ namespace LibCmo::CK2::DataHandlers {
public: public:
CKBitmapBMPHandler(); CKBitmapBMPHandler();
virtual ~CKBitmapBMPHandler(); virtual ~CKBitmapBMPHandler();
YYCC_DEL_CLS_COPY_MOVE(CKBitmapBMPHandler); YYCC_DELETE_COPY_MOVE(CKBitmapBMPHandler)
static const CKBitmapProperties& GetBitmapDefaultProperties(); static const CKBitmapProperties& GetBitmapDefaultProperties();
@@ -118,7 +119,7 @@ namespace LibCmo::CK2::DataHandlers {
public: public:
CKBitmapTGAHandler(); CKBitmapTGAHandler();
virtual ~CKBitmapTGAHandler(); virtual ~CKBitmapTGAHandler();
YYCC_DEL_CLS_COPY_MOVE(CKBitmapTGAHandler); YYCC_DELETE_COPY_MOVE(CKBitmapTGAHandler)
static const CKBitmapProperties& GetBitmapDefaultProperties(); static const CKBitmapProperties& GetBitmapDefaultProperties();
@@ -134,7 +135,7 @@ namespace LibCmo::CK2::DataHandlers {
public: public:
CKBitmapJPGHandler(); CKBitmapJPGHandler();
virtual ~CKBitmapJPGHandler(); virtual ~CKBitmapJPGHandler();
YYCC_DEL_CLS_COPY_MOVE(CKBitmapJPGHandler); YYCC_DELETE_COPY_MOVE(CKBitmapJPGHandler)
static const CKBitmapProperties& GetBitmapDefaultProperties(); static const CKBitmapProperties& GetBitmapDefaultProperties();
@@ -150,7 +151,7 @@ namespace LibCmo::CK2::DataHandlers {
public: public:
CKBitmapPNGHandler(); CKBitmapPNGHandler();
virtual ~CKBitmapPNGHandler(); virtual ~CKBitmapPNGHandler();
YYCC_DEL_CLS_COPY_MOVE(CKBitmapPNGHandler); YYCC_DELETE_COPY_MOVE(CKBitmapPNGHandler)
static const CKBitmapProperties& GetBitmapDefaultProperties(); static const CKBitmapProperties& GetBitmapDefaultProperties();

View File

@@ -1,6 +1,7 @@
#pragma once #pragma once
#include "../../VTInternal.hpp" #include "../../VTInternal.hpp"
#include <yycc/macro/class_copy_move.hpp>
/** /**
CKBaseManager virtual functions implementations help CKBaseManager virtual functions implementations help
@@ -40,7 +41,7 @@ namespace LibCmo::CK2::MgrImpls {
XContainer::NSXString::FromCKSTRING(m_ManagerName, name); XContainer::NSXString::FromCKSTRING(m_ManagerName, name);
} }
virtual ~CKBaseManager() {} virtual ~CKBaseManager() {}
YYCC_DEL_CLS_COPY_MOVE(CKBaseManager); YYCC_DELETE_COPY_MOVE(CKBaseManager)
/** /**
@brief Acces to Manager GUID @brief Acces to Manager GUID

View File

@@ -1,6 +1,7 @@
#include "CKObjectManager.hpp" #include "CKObjectManager.hpp"
#include "../CKContext.hpp" #include "../CKContext.hpp"
#include "../ObjImpls/CKObject.hpp" #include "../ObjImpls/CKObject.hpp"
#include <yycc/cenum.hpp>
namespace LibCmo::CK2::MgrImpls { namespace LibCmo::CK2::MgrImpls {
@@ -86,7 +87,7 @@ namespace LibCmo::CK2::MgrImpls {
// set to be deleted // set to be deleted
CK_OBJECT_FLAGS objflag = obj->GetObjectFlags(); CK_OBJECT_FLAGS objflag = obj->GetObjectFlags();
YYCC::EnumHelper::Add(objflag, CK_OBJECT_FLAGS::CK_OBJECT_TOBEDELETED); yycc::cenum::add(objflag, CK_OBJECT_FLAGS::CK_OBJECT_TOBEDELETED);
obj->SetObjectFlags(objflag); obj->SetObjectFlags(objflag);
// collect class id // collect class id

View File

@@ -10,7 +10,7 @@ namespace LibCmo::CK2::MgrImpls {
public: public:
CKObjectManager(CKContext* ctx); CKObjectManager(CKContext* ctx);
virtual ~CKObjectManager(); virtual ~CKObjectManager();
YYCC_DEL_CLS_COPY_MOVE(CKObjectManager); YYCC_DELETE_COPY_MOVE(CKObjectManager)
// ========== Objects Management ========== // ========== Objects Management ==========
@@ -67,9 +67,9 @@ namespace LibCmo::CK2::MgrImpls {
* The value close to zero may cause some issue. * The value close to zero may cause some issue.
* So we add a static offset to every created CK_ID. * So we add a static offset to every created CK_ID.
*/ */
const CK_ID c_ObjectIdOffset = 61u; static constexpr CK_ID OBJECT_ID_OFFSET = 61u;
CKDWORD Id2Offset(CK_ID id) { return static_cast<CKDWORD>(id - c_ObjectIdOffset); } CKDWORD Id2Offset(CK_ID id) { return static_cast<CKDWORD>(id - OBJECT_ID_OFFSET); }
CK_ID Offset2Id(CKDWORD off) { return static_cast<CK_ID>(off + c_ObjectIdOffset); } CK_ID Offset2Id(CKDWORD off) { return static_cast<CK_ID>(off + OBJECT_ID_OFFSET); }
/** /**
* @brief The real CKObject destroy worker shared by CKObjectManager::DestroyObject and CKObjectManager::~CKObjectManager * @brief The real CKObject destroy worker shared by CKObjectManager::DestroyObject and CKObjectManager::~CKObjectManager

View File

@@ -10,7 +10,7 @@ namespace LibCmo::CK2::MgrImpls {
public: public:
CKPathManager(CKContext* ctx); CKPathManager(CKContext* ctx);
virtual ~CKPathManager(); virtual ~CKPathManager();
YYCC_DEL_CLS_COPY_MOVE(CKPathManager); YYCC_DELETE_COPY_MOVE(CKPathManager)
/** /**
* @brief Set the temp folder of current context. * @brief Set the temp folder of current context.

View File

@@ -2,6 +2,7 @@
#include "../CKStateChunk.hpp" #include "../CKStateChunk.hpp"
#include "../CKContext.hpp" #include "../CKContext.hpp"
#include "CKMesh.hpp" #include "CKMesh.hpp"
#include <yycc/cenum.hpp>
namespace LibCmo::CK2::ObjImpls { namespace LibCmo::CK2::ObjImpls {
@@ -9,7 +10,7 @@ namespace LibCmo::CK2::ObjImpls {
CKRenderObject(ctx, ckid, name), CKRenderObject(ctx, ckid, name),
m_PotentialMeshes(), m_CurrentMesh(nullptr), m_PotentialMeshes(), m_CurrentMesh(nullptr),
m_WorldMatrix(), m_ZOrder(0), m_WorldMatrix(), m_ZOrder(0),
m_MoveableFlags(YYCC::EnumHelper::Merge( m_MoveableFlags(yycc::cenum::merge(
VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_PICKABLE, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_PICKABLE,
VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_VISIBLE, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_VISIBLE,
VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_RENDERCHANNELS, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_RENDERCHANNELS,
@@ -53,15 +54,15 @@ namespace LibCmo::CK2::ObjImpls {
// regulate self flag again // regulate self flag again
// MARK: originally we should check parent here. // MARK: originally we should check parent here.
// but we do not support parent and hierarchy feature, so we simply remove flag // but we do not support parent and hierarchy feature, so we simply remove flag
YYCC::EnumHelper::Remove(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_PARENTVALID); yycc::cenum::remove(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_PARENTVALID);
// MARK: originally we should check grouped into CKPlace here. // MARK: originally we should check grouped into CKPlace here.
// but we do not support CKPlace, so we simply remove this flag // but we do not support CKPlace, so we simply remove this flag
YYCC::EnumHelper::Remove(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_PLACEVALID); yycc::cenum::remove(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_PLACEVALID);
// check z-order, if not zero, save it // check z-order, if not zero, save it
if (m_ZOrder != 0) { if (m_ZOrder != 0) {
YYCC::EnumHelper::Add(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_ZORDERVALID); yycc::cenum::add(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_ZORDERVALID);
} else { } else {
YYCC::EnumHelper::Remove(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_ZORDERVALID); yycc::cenum::remove(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_ZORDERVALID);
} }
// write 2 flags // write 2 flags
@@ -94,7 +95,7 @@ namespace LibCmo::CK2::ObjImpls {
if (!suc) return false; if (!suc) return false;
// backup moveable flags // backup moveable flags
bool hasWorldAligned = YYCC::EnumHelper::Has(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_WORLDALIGNED); bool hasWorldAligned = yycc::cenum::has(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_WORLDALIGNED);
// MARK: object animation is skipped // MARK: object animation is skipped
@@ -132,11 +133,11 @@ namespace LibCmo::CK2::ObjImpls {
chunk->ReadStruct(m_3dEntityFlags); chunk->ReadStruct(m_3dEntityFlags);
chunk->ReadStruct(m_MoveableFlags); chunk->ReadStruct(m_MoveableFlags);
// remove some properties // remove some properties
YYCC::EnumHelper::Remove(m_3dEntityFlags, yycc::cenum::remove(m_3dEntityFlags,
CK_3DENTITY_FLAGS::CK_3DENTITY_UPDATELASTFRAME, CK_3DENTITY_FLAGS::CK_3DENTITY_UPDATELASTFRAME,
CK_3DENTITY_FLAGS::CK_3DENTITY_RESERVED0 CK_3DENTITY_FLAGS::CK_3DENTITY_RESERVED0
); );
YYCC::EnumHelper::Remove(m_MoveableFlags, yycc::cenum::remove(m_MoveableFlags,
VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_RESERVED2, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_RESERVED2,
VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_STENCILONLY, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_STENCILONLY,
VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_DONTUPDATEFROMPARENT, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_DONTUPDATEFROMPARENT,
@@ -147,11 +148,11 @@ namespace LibCmo::CK2::ObjImpls {
VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_UPTODATE VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_UPTODATE
); );
if (hasWorldAligned) { if (hasWorldAligned) {
YYCC::EnumHelper::Add(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_WORLDALIGNED); yycc::cenum::add(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_WORLDALIGNED);
} }
// if order render first // if order render first
if (YYCC::EnumHelper::Has(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_RENDERFIRST)) { if (yycc::cenum::has(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_RENDERFIRST)) {
m_ZOrder = 10000; m_ZOrder = 10000;
} }
@@ -171,47 +172,47 @@ namespace LibCmo::CK2::ObjImpls {
VxMath::VxVector3 crossProduct = VxMath::NSVxVector::CrossProduct(col0, col1); VxMath::VxVector3 crossProduct = VxMath::NSVxVector::CrossProduct(col0, col1);
CKFLOAT dotProduct = VxMath::NSVxVector::DotProduct(crossProduct, col2); CKFLOAT dotProduct = VxMath::NSVxVector::DotProduct(crossProduct, col2);
if (dotProduct >= 0.0f) { if (dotProduct >= 0.0f) {
YYCC::EnumHelper::Remove(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_INDIRECTMATRIX); yycc::cenum::remove(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_INDIRECTMATRIX);
} else { } else {
YYCC::EnumHelper::Add(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_INDIRECTMATRIX); yycc::cenum::add(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_INDIRECTMATRIX);
} }
// copy visible data // copy visible data
// process direct visible // process direct visible
if (YYCC::EnumHelper::Has(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE)) { if (yycc::cenum::has(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE)) {
YYCC::EnumHelper::Add(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_VISIBLE); yycc::cenum::add(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_VISIBLE);
} else { } else {
YYCC::EnumHelper::Remove(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_VISIBLE); yycc::cenum::remove(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_VISIBLE);
} }
// process indirect visible // process indirect visible
if (YYCC::EnumHelper::Has(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE)) { if (yycc::cenum::has(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE)) {
YYCC::EnumHelper::Add(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_HIERARCHICALHIDE); yycc::cenum::add(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_HIERARCHICALHIDE);
} else { } else {
YYCC::EnumHelper::Remove(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_HIERARCHICALHIDE); yycc::cenum::remove(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_HIERARCHICALHIDE);
} }
// read associated CKPlace // read associated CKPlace
if (YYCC::EnumHelper::Has(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_PLACEVALID)) { if (yycc::cenum::has(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_PLACEVALID)) {
// MARK: we drop the support of CKPlace. // MARK: we drop the support of CKPlace.
// so we just read it and skip it. // so we just read it and skip it.
CK_ID placeid; CK_ID placeid;
chunk->ReadObjectID(placeid); chunk->ReadObjectID(placeid);
// and remove this flag // and remove this flag
YYCC::EnumHelper::Remove(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_PLACEVALID); yycc::cenum::remove(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_PLACEVALID);
} }
// read parent // read parent
if (YYCC::EnumHelper::Has(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_PARENTVALID)) { if (yycc::cenum::has(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_PARENTVALID)) {
// MAKR: we drop the support of parent and the whole 3dentity hierarchy system // MAKR: we drop the support of parent and the whole 3dentity hierarchy system
// we ignore this field. // we ignore this field.
CK_ID parentid; CK_ID parentid;
chunk->ReadObjectID(parentid); chunk->ReadObjectID(parentid);
// and remove this flag // and remove this flag
YYCC::EnumHelper::Remove(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_PARENTVALID); yycc::cenum::remove(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_PARENTVALID);
} }
// read priority (non-zero zorder) // read priority (non-zero zorder)
if (YYCC::EnumHelper::Has(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_ZORDERVALID)) { if (yycc::cenum::has(m_3dEntityFlags, CK_3DENTITY_FLAGS::CK_3DENTITY_ZORDERVALID)) {
chunk->ReadStruct(m_ZOrder); chunk->ReadStruct(m_ZOrder);
} }
@@ -227,16 +228,16 @@ namespace LibCmo::CK2::ObjImpls {
void CK3dEntity::Show(CK_OBJECT_SHOWOPTION show) { void CK3dEntity::Show(CK_OBJECT_SHOWOPTION show) {
CKObject::Show(show); CKObject::Show(show);
YYCC::EnumHelper::Remove(m_MoveableFlags, yycc::cenum::remove(m_MoveableFlags,
VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_VISIBLE, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_VISIBLE,
VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_HIERARCHICALHIDE VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_HIERARCHICALHIDE
); );
switch (show) { switch (show) {
case CK_OBJECT_SHOWOPTION::CKSHOW: case CK_OBJECT_SHOWOPTION::CKSHOW:
YYCC::EnumHelper::Add(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_VISIBLE); yycc::cenum::add(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_VISIBLE);
break; break;
case CK_OBJECT_SHOWOPTION::CKHIERARCHICALHIDE: case CK_OBJECT_SHOWOPTION::CKHIERARCHICALHIDE:
YYCC::EnumHelper::Add(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_HIERARCHICALHIDE); yycc::cenum::add(m_MoveableFlags, VxMath::VX_MOVEABLE_FLAGS::VX_MOVEABLE_HIERARCHICALHIDE);
break; break;
case CK_OBJECT_SHOWOPTION::CKHIDE: case CK_OBJECT_SHOWOPTION::CKHIDE:
break; break;

View File

@@ -9,7 +9,7 @@ namespace LibCmo::CK2::ObjImpls {
public: public:
CK3dEntity(CKContext* ctx, CK_ID ckid, CKSTRING name); CK3dEntity(CKContext* ctx, CK_ID ckid, CKSTRING name);
virtual ~CK3dEntity(); virtual ~CK3dEntity();
YYCC_DEL_CLS_COPY_MOVE(CK3dEntity); YYCC_DELETE_COPY_MOVE(CK3dEntity)
virtual CK_CLASSID GetClassID() override { virtual CK_CLASSID GetClassID() override {
return CK_CLASSID::CKCID_3DENTITY; return CK_CLASSID::CKCID_3DENTITY;

View File

@@ -11,7 +11,7 @@ namespace LibCmo::CK2::ObjImpls {
CK3dEntity(ctx, ckid, name) CK3dEntity(ctx, ckid, name)
{} {}
virtual ~CK3dObject() {} virtual ~CK3dObject() {}
YYCC_DEL_CLS_COPY_MOVE(CK3dObject); YYCC_DELETE_COPY_MOVE(CK3dObject)
virtual CK_CLASSID GetClassID() override { virtual CK_CLASSID GetClassID() override {
return CK_CLASSID::CKCID_3DOBJECT; return CK_CLASSID::CKCID_3DOBJECT;

View File

@@ -9,7 +9,7 @@ namespace LibCmo::CK2::ObjImpls {
public: public:
CKBeObject(CKContext* ctx, CK_ID ckid, CKSTRING name); CKBeObject(CKContext* ctx, CK_ID ckid, CKSTRING name);
virtual ~CKBeObject(); virtual ~CKBeObject();
YYCC_DEL_CLS_COPY_MOVE(CKBeObject); YYCC_DELETE_COPY_MOVE(CKBeObject)
virtual CK_CLASSID GetClassID() override { virtual CK_CLASSID GetClassID() override {
return CK_CLASSID::CKCID_BEOBJECT; return CK_CLASSID::CKCID_BEOBJECT;

View File

@@ -1,12 +1,13 @@
#include "CKCamera.hpp" #include "CKCamera.hpp"
#include "../CKStateChunk.hpp" #include "../CKStateChunk.hpp"
#include <yycc/cenum.hpp>
namespace LibCmo::CK2::ObjImpls { namespace LibCmo::CK2::ObjImpls {
// Convenient macro to mark this object is not UPTODATE. // Convenient macro to mark this object is not UPTODATE.
#define REMOVE_UPTODATE_FLAG { \ #define REMOVE_UPTODATE_FLAG { \
CK_OBJECT_FLAGS obj_flags = GetObjectFlags(); \ CK_OBJECT_FLAGS obj_flags = GetObjectFlags(); \
YYCC::EnumHelper::Remove(obj_flags, CK_OBJECT_FLAGS::CK_OBJECT_UPTODATE); \ yycc::cenum::remove(obj_flags, CK_OBJECT_FLAGS::CK_OBJECT_UPTODATE); \
SetObjectFlags(obj_flags); \ SetObjectFlags(obj_flags); \
} }

View File

@@ -9,7 +9,7 @@ namespace LibCmo::CK2::ObjImpls {
public: public:
CKCamera(CKContext* ctx, CK_ID ckid, CKSTRING name); CKCamera(CKContext* ctx, CK_ID ckid, CKSTRING name);
virtual ~CKCamera(); virtual ~CKCamera();
YYCC_DEL_CLS_COPY_MOVE(CKCamera); YYCC_DELETE_COPY_MOVE(CKCamera)
virtual CK_CLASSID GetClassID() override { virtual CK_CLASSID GetClassID() override {
return CK_CLASSID::CKCID_CAMERA; return CK_CLASSID::CKCID_CAMERA;

View File

@@ -9,7 +9,7 @@ namespace LibCmo::CK2::ObjImpls {
public: public:
CKGroup(CKContext* ctx, CK_ID ckid, CKSTRING name); CKGroup(CKContext* ctx, CK_ID ckid, CKSTRING name);
virtual ~CKGroup(); virtual ~CKGroup();
YYCC_DEL_CLS_COPY_MOVE(CKGroup); YYCC_DELETE_COPY_MOVE(CKGroup)
virtual CK_CLASSID GetClassID() override { virtual CK_CLASSID GetClassID() override {
return CK_CLASSID::CKCID_GROUP; return CK_CLASSID::CKCID_GROUP;

View File

@@ -1,5 +1,6 @@
#include "CKLight.hpp" #include "CKLight.hpp"
#include "../CKStateChunk.hpp" #include "../CKStateChunk.hpp"
#include <yycc/cenum.hpp>
#include <numbers> #include <numbers>
namespace LibCmo::CK2::ObjImpls { namespace LibCmo::CK2::ObjImpls {
@@ -189,24 +190,24 @@ namespace LibCmo::CK2::ObjImpls {
} }
bool CKLight::GetActivity() const { bool CKLight::GetActivity() const {
return YYCC::EnumHelper::Has(m_LightFlags, LightFlags::Active); return yycc::cenum::has(m_LightFlags, LightFlags::Active);
} }
void CKLight::Active(bool active) { void CKLight::Active(bool active) {
if (active) { if (active) {
YYCC::EnumHelper::Add(m_LightFlags, LightFlags::Active); yycc::cenum::add(m_LightFlags, LightFlags::Active);
} else { } else {
YYCC::EnumHelper::Remove(m_LightFlags, LightFlags::Active); yycc::cenum::remove(m_LightFlags, LightFlags::Active);
} }
} }
bool CKLight::GetSpecularFlag() const { bool CKLight::GetSpecularFlag() const {
return YYCC::EnumHelper::Has(m_LightFlags, LightFlags::Specular); return yycc::cenum::has(m_LightFlags, LightFlags::Specular);
} }
void CKLight::SetSpecularFlag(bool specular) { void CKLight::SetSpecularFlag(bool specular) {
if (specular) { if (specular) {
YYCC::EnumHelper::Add(m_LightFlags, LightFlags::Specular); yycc::cenum::add(m_LightFlags, LightFlags::Specular);
} else { } else {
YYCC::EnumHelper::Remove(m_LightFlags, LightFlags::Specular); yycc::cenum::remove(m_LightFlags, LightFlags::Specular);
} }
} }

View File

@@ -9,7 +9,7 @@ namespace LibCmo::CK2::ObjImpls {
public: public:
CKLight(CKContext* ctx, CK_ID ckid, CKSTRING name); CKLight(CKContext* ctx, CK_ID ckid, CKSTRING name);
virtual ~CKLight(); virtual ~CKLight();
YYCC_DEL_CLS_COPY_MOVE(CKLight); YYCC_DELETE_COPY_MOVE(CKLight)
virtual CK_CLASSID GetClassID() override { virtual CK_CLASSID GetClassID() override {
return CK_CLASSID::CKCID_LIGHT; return CK_CLASSID::CKCID_LIGHT;

View File

@@ -10,7 +10,7 @@ namespace LibCmo::CK2::ObjImpls {
public: public:
CKMaterial(CKContext* ctx, CK_ID ckid, CKSTRING name); CKMaterial(CKContext* ctx, CK_ID ckid, CKSTRING name);
virtual ~CKMaterial(); virtual ~CKMaterial();
YYCC_DEL_CLS_COPY_MOVE(CKMaterial); YYCC_DELETE_COPY_MOVE(CKMaterial)
virtual CK_CLASSID GetClassID() override { virtual CK_CLASSID GetClassID() override {
return CK_CLASSID::CKCID_MATERIAL; return CK_CLASSID::CKCID_MATERIAL;

View File

@@ -2,6 +2,7 @@
#include "../CKStateChunk.hpp" #include "../CKStateChunk.hpp"
#include "../CKContext.hpp" #include "../CKContext.hpp"
#include "CKMaterial.hpp" #include "CKMaterial.hpp"
#include <yycc/cenum.hpp>
namespace LibCmo::CK2::ObjImpls { namespace LibCmo::CK2::ObjImpls {
@@ -21,12 +22,12 @@ namespace LibCmo::CK2::ObjImpls {
m_LineCount(0), m_LineCount(0),
m_LineIndices(), m_LineIndices(),
// init flags // init flags
m_Flags(YYCC::EnumHelper::Merge( m_Flags(yycc::cenum::merge(
VxMath::VXMESH_FLAGS::VXMESH_VISIBLE, VxMath::VXMESH_FLAGS::VXMESH_VISIBLE,
VxMath::VXMESH_FLAGS::VXMESH_RENDERCHANNELS VxMath::VXMESH_FLAGS::VXMESH_RENDERCHANNELS
)) { )) {
// set visible in default // set visible in default
YYCC::EnumHelper::Add(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE); yycc::cenum::add(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE);
} }
CKMesh::~CKMesh() {} CKMesh::~CKMesh() {}
@@ -145,7 +146,7 @@ namespace LibCmo::CK2::ObjImpls {
rawbuf += CKSizeof(CKDWORD); rawbuf += CKSizeof(CKDWORD);
// write vertex position // write vertex position
if (!YYCC::EnumHelper::Has(saveflags, VertexSaveFlags::NoPos)) { if (!yycc::cenum::has(saveflags, VertexSaveFlags::NoPos)) {
CKDWORD consumed = CKSizeof(VxMath::VxVector3) * vtxCount; CKDWORD consumed = CKSizeof(VxMath::VxVector3) * vtxCount;
std::memcpy(rawbuf, m_VertexPosition.data(), consumed); std::memcpy(rawbuf, m_VertexPosition.data(), consumed);
rawbuf += consumed; rawbuf += consumed;
@@ -154,7 +155,7 @@ namespace LibCmo::CK2::ObjImpls {
// write color and specular color // write color and specular color
{ {
CKDWORD consumed = 0; CKDWORD consumed = 0;
if (!YYCC::EnumHelper::Has(saveflags, VertexSaveFlags::SingleColor)) { if (!yycc::cenum::has(saveflags, VertexSaveFlags::SingleColor)) {
consumed = CKSizeof(CKDWORD) * vtxCount; consumed = CKSizeof(CKDWORD) * vtxCount;
} else { } else {
consumed = CKSizeof(CKDWORD); consumed = CKSizeof(CKDWORD);
@@ -165,7 +166,7 @@ namespace LibCmo::CK2::ObjImpls {
} }
{ {
CKDWORD consumed = 0; CKDWORD consumed = 0;
if (!YYCC::EnumHelper::Has(saveflags, VertexSaveFlags::SingleSpecularColor)) { if (!yycc::cenum::has(saveflags, VertexSaveFlags::SingleSpecularColor)) {
consumed = CKSizeof(CKDWORD) * vtxCount; consumed = CKSizeof(CKDWORD) * vtxCount;
} else { } else {
consumed = CKSizeof(CKDWORD); consumed = CKSizeof(CKDWORD);
@@ -176,7 +177,7 @@ namespace LibCmo::CK2::ObjImpls {
} }
// write normal // write normal
if (!YYCC::EnumHelper::Has(saveflags, VertexSaveFlags::NoNormal)) { if (!yycc::cenum::has(saveflags, VertexSaveFlags::NoNormal)) {
CKDWORD consumed = CKSizeof(VxMath::VxVector3) * vtxCount; CKDWORD consumed = CKSizeof(VxMath::VxVector3) * vtxCount;
std::memcpy(rawbuf, m_VertexNormal.data(), consumed); std::memcpy(rawbuf, m_VertexNormal.data(), consumed);
rawbuf += consumed; rawbuf += consumed;
@@ -185,7 +186,7 @@ namespace LibCmo::CK2::ObjImpls {
// write uv // write uv
{ {
CKDWORD consumed = 0; CKDWORD consumed = 0;
if (!YYCC::EnumHelper::Has(saveflags, VertexSaveFlags::SingleUV)) { if (!yycc::cenum::has(saveflags, VertexSaveFlags::SingleUV)) {
consumed = CKSizeof(VxMath::VxVector2) * vtxCount; consumed = CKSizeof(VxMath::VxVector2) * vtxCount;
} else { } else {
consumed = CKSizeof(VxMath::VxVector2); consumed = CKSizeof(VxMath::VxVector2);
@@ -229,10 +230,10 @@ namespace LibCmo::CK2::ObjImpls {
// read flag // read flag
if (chunk->SeekIdentifier(CK_STATESAVEFLAGS_MESH::CK_STATESAVE_MESHFLAGS)) { if (chunk->SeekIdentifier(CK_STATESAVEFLAGS_MESH::CK_STATESAVE_MESHFLAGS)) {
chunk->ReadStruct(m_Flags); chunk->ReadStruct(m_Flags);
YYCC::EnumHelper::Mask(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_ALLFLAGS); yycc::cenum::mask(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_ALLFLAGS);
// I don't know why, just interpter the IDA code. // I don't know why, just interpter the IDA code.
YYCC::EnumHelper::Remove(m_Flags, yycc::cenum::remove(m_Flags,
VxMath::VXMESH_FLAGS::VXMESH_BOUNDINGUPTODATE, VxMath::VXMESH_FLAGS::VXMESH_BOUNDINGUPTODATE,
VxMath::VXMESH_FLAGS::VXMESH_OPTIMIZED VxMath::VXMESH_FLAGS::VXMESH_OPTIMIZED
); );
@@ -285,14 +286,14 @@ namespace LibCmo::CK2::ObjImpls {
const CKBYTE* rawbuf = static_cast<const CKBYTE*>(buf.get()); const CKBYTE* rawbuf = static_cast<const CKBYTE*>(buf.get());
// copy position if it have // copy position if it have
if (!YYCC::EnumHelper::Has(saveflags, VertexSaveFlags::NoPos)) { if (!yycc::cenum::has(saveflags, VertexSaveFlags::NoPos)) {
CKDWORD consumed = CKSizeof(VxMath::VxVector3) * vertexCount; CKDWORD consumed = CKSizeof(VxMath::VxVector3) * vertexCount;
std::memcpy(m_VertexPosition.data(), rawbuf, consumed); std::memcpy(m_VertexPosition.data(), rawbuf, consumed);
rawbuf += consumed; rawbuf += consumed;
} }
// copy color or apply single color // copy color or apply single color
if (!YYCC::EnumHelper::Has(saveflags, VertexSaveFlags::SingleColor)) { if (!yycc::cenum::has(saveflags, VertexSaveFlags::SingleColor)) {
CKDWORD consumed = CKSizeof(CKDWORD) * vertexCount; CKDWORD consumed = CKSizeof(CKDWORD) * vertexCount;
std::memcpy(m_VertexColor.data(), rawbuf, consumed); std::memcpy(m_VertexColor.data(), rawbuf, consumed);
rawbuf += consumed; rawbuf += consumed;
@@ -309,7 +310,7 @@ namespace LibCmo::CK2::ObjImpls {
} }
// copy specular color or apply a single color // copy specular color or apply a single color
if (!YYCC::EnumHelper::Has(saveflags, VertexSaveFlags::SingleSpecularColor)) { if (!yycc::cenum::has(saveflags, VertexSaveFlags::SingleSpecularColor)) {
CKDWORD consumed = CKSizeof(CKDWORD) * vertexCount; CKDWORD consumed = CKSizeof(CKDWORD) * vertexCount;
std::memcpy(m_VertexSpecularColor.data(), rawbuf, consumed); std::memcpy(m_VertexSpecularColor.data(), rawbuf, consumed);
rawbuf += consumed; rawbuf += consumed;
@@ -326,14 +327,14 @@ namespace LibCmo::CK2::ObjImpls {
} }
// copy normals if it has // copy normals if it has
if (!YYCC::EnumHelper::Has(saveflags, VertexSaveFlags::NoNormal)) { if (!yycc::cenum::has(saveflags, VertexSaveFlags::NoNormal)) {
CKDWORD consumed = CKSizeof(VxMath::VxVector3) * vertexCount; CKDWORD consumed = CKSizeof(VxMath::VxVector3) * vertexCount;
std::memcpy(m_VertexNormal.data(), rawbuf, consumed); std::memcpy(m_VertexNormal.data(), rawbuf, consumed);
rawbuf += consumed; rawbuf += consumed;
} }
// copy uv or apply single uv // copy uv or apply single uv
if (!YYCC::EnumHelper::Has(saveflags, VertexSaveFlags::SingleUV)) { if (!yycc::cenum::has(saveflags, VertexSaveFlags::SingleUV)) {
CKDWORD consumed = CKSizeof(VxMath::VxVector2) * vertexCount; CKDWORD consumed = CKSizeof(VxMath::VxVector2) * vertexCount;
std::memcpy(m_VertexUV.data(), rawbuf, consumed); std::memcpy(m_VertexUV.data(), rawbuf, consumed);
rawbuf += consumed; rawbuf += consumed;
@@ -407,7 +408,7 @@ namespace LibCmo::CK2::ObjImpls {
} }
// build normals // build normals
if (YYCC::EnumHelper::Has(saveflags, VertexSaveFlags::NoNormal)) { if (yycc::cenum::has(saveflags, VertexSaveFlags::NoNormal)) {
BuildNormals(); BuildNormals();
} else { } else {
BuildFaceNormals(); BuildFaceNormals();
@@ -425,9 +426,9 @@ namespace LibCmo::CK2::ObjImpls {
CKObject::Show(show); CKObject::Show(show);
if (show == CK_OBJECT_SHOWOPTION::CKSHOW) { if (show == CK_OBJECT_SHOWOPTION::CKSHOW) {
YYCC::EnumHelper::Add(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_VISIBLE); yycc::cenum::add(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_VISIBLE);
} else { } else {
YYCC::EnumHelper::Remove(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_VISIBLE); yycc::cenum::remove(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_VISIBLE);
} }
} }
@@ -449,15 +450,15 @@ namespace LibCmo::CK2::ObjImpls {
m_Flags = flags; m_Flags = flags;
// sync visibility to CKObject layer. // sync visibility to CKObject layer.
if (YYCC::EnumHelper::Has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_VISIBLE)) { if (yycc::cenum::has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_VISIBLE)) {
YYCC::EnumHelper::Add(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE); yycc::cenum::add(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE);
} else { } else {
YYCC::EnumHelper::Remove(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE); yycc::cenum::remove(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE);
} }
} }
VxMath::VXMESH_LITMODE CKMesh::GetLitMode() const { VxMath::VXMESH_LITMODE CKMesh::GetLitMode() const {
if (YYCC::EnumHelper::Has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_PRELITMODE)) { if (yycc::cenum::has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_PRELITMODE)) {
return VxMath::VXMESH_LITMODE::VX_PRELITMESH; return VxMath::VXMESH_LITMODE::VX_PRELITMESH;
} else { } else {
return VxMath::VXMESH_LITMODE::VX_LITMESH; return VxMath::VXMESH_LITMODE::VX_LITMESH;
@@ -467,10 +468,10 @@ namespace LibCmo::CK2::ObjImpls {
void CKMesh::SetLitMode(VxMath::VXMESH_LITMODE mode) { void CKMesh::SetLitMode(VxMath::VXMESH_LITMODE mode) {
switch (mode) { switch (mode) {
case VxMath::VXMESH_LITMODE::VX_PRELITMESH: case VxMath::VXMESH_LITMODE::VX_PRELITMESH:
YYCC::EnumHelper::Add(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_PRELITMODE); yycc::cenum::add(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_PRELITMODE);
break; break;
case VxMath::VXMESH_LITMODE::VX_LITMESH: case VxMath::VXMESH_LITMODE::VX_LITMESH:
YYCC::EnumHelper::Remove(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_PRELITMODE); yycc::cenum::remove(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_PRELITMODE);
break; break;
} }
} }
@@ -478,33 +479,33 @@ namespace LibCmo::CK2::ObjImpls {
VxMath::VXTEXTURE_WRAPMODE CKMesh::GetWrapMode() const { VxMath::VXTEXTURE_WRAPMODE CKMesh::GetWrapMode() const {
VxMath::VXTEXTURE_WRAPMODE ret = VxMath::VXTEXTURE_WRAPMODE::VXTEXTUREWRAP_NONE; VxMath::VXTEXTURE_WRAPMODE ret = VxMath::VXTEXTURE_WRAPMODE::VXTEXTUREWRAP_NONE;
if (YYCC::EnumHelper::Has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_WRAPU)) { if (yycc::cenum::has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_WRAPU)) {
YYCC::EnumHelper::Add(ret, VxMath::VXTEXTURE_WRAPMODE::VXTEXTUREWRAP_U); yycc::cenum::add(ret, VxMath::VXTEXTURE_WRAPMODE::VXTEXTUREWRAP_U);
} }
if (YYCC::EnumHelper::Has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_WRAPV)) { if (yycc::cenum::has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_WRAPV)) {
YYCC::EnumHelper::Add(ret, VxMath::VXTEXTURE_WRAPMODE::VXTEXTUREWRAP_V); yycc::cenum::add(ret, VxMath::VXTEXTURE_WRAPMODE::VXTEXTUREWRAP_V);
} }
return ret; return ret;
} }
void CKMesh::SetWrapMode(VxMath::VXTEXTURE_WRAPMODE mode) { void CKMesh::SetWrapMode(VxMath::VXTEXTURE_WRAPMODE mode) {
if (YYCC::EnumHelper::Has(mode, VxMath::VXTEXTURE_WRAPMODE::VXTEXTUREWRAP_U)) { if (yycc::cenum::has(mode, VxMath::VXTEXTURE_WRAPMODE::VXTEXTUREWRAP_U)) {
YYCC::EnumHelper::Add(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_WRAPU); yycc::cenum::add(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_WRAPU);
} else { } else {
YYCC::EnumHelper::Remove(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_WRAPU); yycc::cenum::remove(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_WRAPU);
} }
if (YYCC::EnumHelper::Has(mode, VxMath::VXTEXTURE_WRAPMODE::VXTEXTUREWRAP_V)) { if (yycc::cenum::has(mode, VxMath::VXTEXTURE_WRAPMODE::VXTEXTUREWRAP_V)) {
YYCC::EnumHelper::Add(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_WRAPV); yycc::cenum::add(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_WRAPV);
} else { } else {
YYCC::EnumHelper::Remove(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_WRAPV); yycc::cenum::remove(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_WRAPV);
} }
} }
CKMesh::VertexSaveFlags CKMesh::GenerateSaveFlags() { CKMesh::VertexSaveFlags CKMesh::GenerateSaveFlags() {
// set to initial status // set to initial status
VertexSaveFlags saveflags = YYCC::EnumHelper::Merge( VertexSaveFlags saveflags = yycc::cenum::merge(
VertexSaveFlags::SingleColor, VertexSaveFlags::SingleColor,
VertexSaveFlags::SingleSpecularColor, VertexSaveFlags::SingleSpecularColor,
VertexSaveFlags::NoNormal, VertexSaveFlags::NoNormal,
@@ -513,16 +514,16 @@ namespace LibCmo::CK2::ObjImpls {
// check no pos // check no pos
// if position is generated, skip saving position // if position is generated, skip saving position
if (YYCC::EnumHelper::Has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_PROCEDURALPOS)) { if (yycc::cenum::has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_PROCEDURALPOS)) {
YYCC::EnumHelper::Add(saveflags, VertexSaveFlags::NoPos); yycc::cenum::add(saveflags, VertexSaveFlags::NoPos);
} }
// check uv // check uv
// if uv is not generated and all uv are not the same value, remove single uv // if uv is not generated and all uv are not the same value, remove single uv
if (!YYCC::EnumHelper::Has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_PROCEDURALUV)) { if (!yycc::cenum::has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_PROCEDURALUV)) {
for (const auto& uv : m_VertexUV) { for (const auto& uv : m_VertexUV) {
if (uv != m_VertexUV.front()) { if (uv != m_VertexUV.front()) {
YYCC::EnumHelper::Remove(saveflags, VertexSaveFlags::SingleUV); yycc::cenum::remove(saveflags, VertexSaveFlags::SingleUV);
break; break;
} }
} }
@@ -532,19 +533,19 @@ namespace LibCmo::CK2::ObjImpls {
// if all color are not the same value, remove single color // if all color are not the same value, remove single color
for (const auto& col : m_VertexColor) { for (const auto& col : m_VertexColor) {
if (col != m_VertexColor.front()) { if (col != m_VertexColor.front()) {
YYCC::EnumHelper::Remove(saveflags, VertexSaveFlags::SingleColor); yycc::cenum::remove(saveflags, VertexSaveFlags::SingleColor);
break; break;
} }
} }
for (const auto& col : m_VertexSpecularColor) { for (const auto& col : m_VertexSpecularColor) {
if (col != m_VertexSpecularColor.front()) { if (col != m_VertexSpecularColor.front()) {
YYCC::EnumHelper::Remove(saveflags, VertexSaveFlags::SingleSpecularColor); yycc::cenum::remove(saveflags, VertexSaveFlags::SingleSpecularColor);
break; break;
} }
} }
// if normal not changed, and position is not generated, we should consider whether we need save normal (step into if) // if normal not changed, and position is not generated, we should consider whether we need save normal (step into if)
if (!YYCC::EnumHelper::Has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_NORMAL_CHANGED, VxMath::VXMESH_FLAGS::VXMESH_PROCEDURALPOS)) { if (!yycc::cenum::has(m_Flags, VxMath::VXMESH_FLAGS::VXMESH_NORMAL_CHANGED, VxMath::VXMESH_FLAGS::VXMESH_PROCEDURALPOS)) {
// MARK: we should build face normal first // MARK: we should build face normal first
// then we build vertex normal like BuildNormals. // then we build vertex normal like BuildNormals.
// then, we compare the difference between the generated normals and user specified normals, by simply using operator- (userNml - generatedNml) and abs the result. // then, we compare the difference between the generated normals and user specified normals, by simply using operator- (userNml - generatedNml) and abs the result.
@@ -581,7 +582,7 @@ namespace LibCmo::CK2::ObjImpls {
accnml /= static_cast<CKFLOAT>(m_VertexCount); accnml /= static_cast<CKFLOAT>(m_VertexCount);
if (accnml.Length() > 0.001f) { if (accnml.Length() > 0.001f) {
// too large difference, we need save normal // too large difference, we need save normal
YYCC::EnumHelper::Remove(saveflags, VertexSaveFlags::NoNormal); yycc::cenum::remove(saveflags, VertexSaveFlags::NoNormal);
} }
} }

View File

@@ -19,7 +19,7 @@ namespace LibCmo::CK2::ObjImpls {
public: public:
CKMesh(CKContext* ctx, CK_ID ckid, CKSTRING name); CKMesh(CKContext* ctx, CK_ID ckid, CKSTRING name);
virtual ~CKMesh(); virtual ~CKMesh();
YYCC_DEL_CLS_COPY_MOVE(CKMesh); YYCC_DELETE_COPY_MOVE(CKMesh)
virtual CK_CLASSID GetClassID() override { virtual CK_CLASSID GetClassID() override {
return CK_CLASSID::CKCID_MESH; return CK_CLASSID::CKCID_MESH;

View File

@@ -1,5 +1,6 @@
#include "CKObject.hpp" #include "CKObject.hpp"
#include "../CKStateChunk.hpp" #include "../CKStateChunk.hpp"
#include <yycc/cenum.hpp>
namespace LibCmo::CK2::ObjImpls { namespace LibCmo::CK2::ObjImpls {
@@ -32,7 +33,7 @@ namespace LibCmo::CK2::ObjImpls {
m_ObjectFlags = flags; m_ObjectFlags = flags;
} }
bool CKObject::IsToBeDeleted() const { bool CKObject::IsToBeDeleted() const {
return YYCC::EnumHelper::Has(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_TOBEDELETED); return yycc::cenum::has(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_TOBEDELETED);
} }
CKContext* CKObject::GetCKContext() const { CKContext* CKObject::GetCKContext() const {
return m_Context; return m_Context;
@@ -51,10 +52,10 @@ namespace LibCmo::CK2::ObjImpls {
void CKObject::PreSave(CKFileVisitor* file, CKDWORD flags) {} void CKObject::PreSave(CKFileVisitor* file, CKDWORD flags) {}
bool CKObject::Save(CKStateChunk* chunk, CKFileVisitor* file, CKDWORD flags) { bool CKObject::Save(CKStateChunk* chunk, CKFileVisitor* file, CKDWORD flags) {
if (YYCC::EnumHelper::Has(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE)) { if (yycc::cenum::has(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE)) {
// if hierarchy hidden // if hierarchy hidden
chunk->WriteIdentifier(CK_STATESAVEFLAGS_OBJECT::CK_STATESAVE_OBJECTHIERAHIDDEN); chunk->WriteIdentifier(CK_STATESAVEFLAGS_OBJECT::CK_STATESAVE_OBJECTHIERAHIDDEN);
} else if (!YYCC::EnumHelper::Has(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE)) { } else if (!yycc::cenum::has(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE)) {
// if really hidden // if really hidden
chunk->WriteIdentifier(CK_STATESAVEFLAGS_OBJECT::CK_STATESAVE_OBJECTHIDDEN); chunk->WriteIdentifier(CK_STATESAVEFLAGS_OBJECT::CK_STATESAVE_OBJECTHIDDEN);
} }
@@ -65,20 +66,20 @@ namespace LibCmo::CK2::ObjImpls {
bool CKObject::Load(CKStateChunk* chunk, CKFileVisitor* file) { bool CKObject::Load(CKStateChunk* chunk, CKFileVisitor* file) {
if (chunk->SeekIdentifier(CK_STATESAVEFLAGS_OBJECT::CK_STATESAVE_OBJECTHIDDEN)) { if (chunk->SeekIdentifier(CK_STATESAVEFLAGS_OBJECT::CK_STATESAVE_OBJECTHIDDEN)) {
YYCC::EnumHelper::Remove(this->m_ObjectFlags, yycc::cenum::remove(this->m_ObjectFlags,
CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE,
CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE
); );
} else { } else {
if (chunk->SeekIdentifier(CK_STATESAVEFLAGS_OBJECT::CK_STATESAVE_OBJECTHIERAHIDDEN)) { if (chunk->SeekIdentifier(CK_STATESAVEFLAGS_OBJECT::CK_STATESAVE_OBJECTHIERAHIDDEN)) {
// != 0 // != 0
YYCC::EnumHelper::Remove(this->m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE); yycc::cenum::remove(this->m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE);
YYCC::EnumHelper::Add(this->m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE); yycc::cenum::add(this->m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE);
} else { } else {
// == 0 // == 0
YYCC::EnumHelper::Add(this->m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE); yycc::cenum::add(this->m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE);
YYCC::EnumHelper::Remove(this->m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE); yycc::cenum::remove(this->m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE);
} }
} }
@@ -91,17 +92,17 @@ namespace LibCmo::CK2::ObjImpls {
void CKObject::Show(CK_OBJECT_SHOWOPTION show) { void CKObject::Show(CK_OBJECT_SHOWOPTION show) {
// clear all visible data of object flags // clear all visible data of object flags
YYCC::EnumHelper::Remove(m_ObjectFlags, yycc::cenum::remove(m_ObjectFlags,
CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE,
CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE
); );
switch (show) { switch (show) {
case CK_OBJECT_SHOWOPTION::CKSHOW: case CK_OBJECT_SHOWOPTION::CKSHOW:
YYCC::EnumHelper::Add(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE); yycc::cenum::add(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE);
break; break;
case CK_OBJECT_SHOWOPTION::CKHIERARCHICALHIDE: case CK_OBJECT_SHOWOPTION::CKHIERARCHICALHIDE:
YYCC::EnumHelper::Add(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE); yycc::cenum::add(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_HIERACHICALHIDE);
break; break;
case CK_OBJECT_SHOWOPTION::CKHIDE: case CK_OBJECT_SHOWOPTION::CKHIDE:
return; return;
@@ -109,7 +110,7 @@ namespace LibCmo::CK2::ObjImpls {
} }
bool CKObject::IsVisible() const { bool CKObject::IsVisible() const {
return YYCC::EnumHelper::Has(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE); return yycc::cenum::has(m_ObjectFlags, CK_OBJECT_FLAGS::CK_OBJECT_VISIBLE);
} }

View File

@@ -1,6 +1,7 @@
#pragma once #pragma once
#include "../../VTInternal.hpp" #include "../../VTInternal.hpp"
#include <yycc/macro/class_copy_move.hpp>
/** /**
CKObject virtual functions implementations help CKObject virtual functions implementations help
@@ -40,7 +41,7 @@ namespace LibCmo::CK2::ObjImpls {
public: public:
CKObject(CKContext* ctx, CK_ID ckid, CKSTRING name); CKObject(CKContext* ctx, CK_ID ckid, CKSTRING name);
virtual ~CKObject(); virtual ~CKObject();
YYCC_DEL_CLS_COPY_MOVE(CKObject); YYCC_DELETE_COPY_MOVE(CKObject)
CK_ID GetID() const; CK_ID GetID() const;
CKSTRING GetName() const; CKSTRING GetName() const;

View File

@@ -11,7 +11,7 @@ namespace LibCmo::CK2::ObjImpls {
CKBeObject(ctx, ckid, name) CKBeObject(ctx, ckid, name)
{} {}
virtual ~CKRenderObject() {} virtual ~CKRenderObject() {}
YYCC_DEL_CLS_COPY_MOVE(CKRenderObject); YYCC_DELETE_COPY_MOVE(CKRenderObject)
virtual CK_CLASSID GetClassID() override { virtual CK_CLASSID GetClassID() override {
return CK_CLASSID::CKCID_RENDEROBJECT; return CK_CLASSID::CKCID_RENDEROBJECT;

View File

@@ -11,7 +11,7 @@ namespace LibCmo::CK2::ObjImpls {
CKObject(ctx, ckid, name), CKObject(ctx, ckid, name),
m_Scenes() {} m_Scenes() {}
virtual ~CKSceneObject() {} virtual ~CKSceneObject() {}
YYCC_DEL_CLS_COPY_MOVE(CKSceneObject); YYCC_DELETE_COPY_MOVE(CKSceneObject)
virtual CK_CLASSID GetClassID() override { virtual CK_CLASSID GetClassID() override {
return CK_CLASSID::CKCID_SCENEOBJECT; return CK_CLASSID::CKCID_SCENEOBJECT;

View File

@@ -1,6 +1,7 @@
#include "CKTargetCamera.hpp" #include "CKTargetCamera.hpp"
#include "../CKStateChunk.hpp" #include "../CKStateChunk.hpp"
#include "../CKContext.hpp" #include "../CKContext.hpp"
#include <yycc/cenum.hpp>
namespace LibCmo::CK2::ObjImpls { namespace LibCmo::CK2::ObjImpls {
@@ -66,16 +67,16 @@ namespace LibCmo::CK2::ObjImpls {
CK3dEntity* old_target = static_cast<CK3dEntity*>(m_Context->GetObject(m_Target3dEntity)); CK3dEntity* old_target = static_cast<CK3dEntity*>(m_Context->GetObject(m_Target3dEntity));
if (old_target != nullptr) { if (old_target != nullptr) {
CK_3DENTITY_FLAGS old_target_flags = old_target->GetEntityFlags(); CK_3DENTITY_FLAGS old_target_flags = old_target->GetEntityFlags();
YYCC::EnumHelper::Remove(old_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_TARGETCAMERA); yycc::cenum::remove(old_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_TARGETCAMERA);
YYCC::EnumHelper::Add(old_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_FRAME); yycc::cenum::add(old_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_FRAME);
old_target->SetEntityFlags(old_target_flags); old_target->SetEntityFlags(old_target_flags);
} }
// Then add specified target // Then add specified target
if (target != nullptr) { if (target != nullptr) {
CK_3DENTITY_FLAGS new_target_flags = target->GetEntityFlags(); CK_3DENTITY_FLAGS new_target_flags = target->GetEntityFlags();
YYCC::EnumHelper::Add(new_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_TARGETCAMERA); yycc::cenum::add(new_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_TARGETCAMERA);
YYCC::EnumHelper::Remove(new_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_FRAME); yycc::cenum::remove(new_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_FRAME);
target->SetEntityFlags(new_target_flags); target->SetEntityFlags(new_target_flags);
} }

View File

@@ -9,7 +9,7 @@ namespace LibCmo::CK2::ObjImpls {
public: public:
CKTargetCamera(CKContext* ctx, CK_ID ckid, CKSTRING name); CKTargetCamera(CKContext* ctx, CK_ID ckid, CKSTRING name);
virtual ~CKTargetCamera(); virtual ~CKTargetCamera();
YYCC_DEL_CLS_COPY_MOVE(CKTargetCamera); YYCC_DELETE_COPY_MOVE(CKTargetCamera)
virtual CK_CLASSID GetClassID() override { virtual CK_CLASSID GetClassID() override {
return CK_CLASSID::CKCID_TARGETCAMERA; return CK_CLASSID::CKCID_TARGETCAMERA;

View File

@@ -1,6 +1,7 @@
#include "CKTargetLight.hpp" #include "CKTargetLight.hpp"
#include "../CKStateChunk.hpp" #include "../CKStateChunk.hpp"
#include "../CKContext.hpp" #include "../CKContext.hpp"
#include <yycc/cenum.hpp>
namespace LibCmo::CK2::ObjImpls { namespace LibCmo::CK2::ObjImpls {
@@ -70,16 +71,16 @@ namespace LibCmo::CK2::ObjImpls {
CK3dEntity* old_target = static_cast<CK3dEntity*>(m_Context->GetObject(m_Target3dEntity)); CK3dEntity* old_target = static_cast<CK3dEntity*>(m_Context->GetObject(m_Target3dEntity));
if (old_target != nullptr) { if (old_target != nullptr) {
CK_3DENTITY_FLAGS old_target_flags = old_target->GetEntityFlags(); CK_3DENTITY_FLAGS old_target_flags = old_target->GetEntityFlags();
YYCC::EnumHelper::Remove(old_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_TARGETLIGHT); yycc::cenum::remove(old_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_TARGETLIGHT);
YYCC::EnumHelper::Add(old_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_FRAME); yycc::cenum::add(old_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_FRAME);
old_target->SetEntityFlags(old_target_flags); old_target->SetEntityFlags(old_target_flags);
} }
// Then add specified target // Then add specified target
if (target != nullptr) { if (target != nullptr) {
CK_3DENTITY_FLAGS new_target_flags = target->GetEntityFlags(); CK_3DENTITY_FLAGS new_target_flags = target->GetEntityFlags();
YYCC::EnumHelper::Add(new_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_TARGETLIGHT); yycc::cenum::add(new_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_TARGETLIGHT);
YYCC::EnumHelper::Remove(new_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_FRAME); yycc::cenum::remove(new_target_flags, CK_3DENTITY_FLAGS::CK_3DENTITY_FRAME);
target->SetEntityFlags(new_target_flags); target->SetEntityFlags(new_target_flags);
} }

View File

@@ -9,7 +9,7 @@ namespace LibCmo::CK2::ObjImpls {
public: public:
CKTargetLight(CKContext* ctx, CK_ID ckid, CKSTRING name); CKTargetLight(CKContext* ctx, CK_ID ckid, CKSTRING name);
virtual ~CKTargetLight(); virtual ~CKTargetLight();
YYCC_DEL_CLS_COPY_MOVE(CKTargetLight); YYCC_DELETE_COPY_MOVE(CKTargetLight)
virtual CK_CLASSID GetClassID() override { virtual CK_CLASSID GetClassID() override {
return CK_CLASSID::CKCID_TARGETLIGHT; return CK_CLASSID::CKCID_TARGETLIGHT;

View File

@@ -10,7 +10,7 @@ namespace LibCmo::CK2::ObjImpls {
public: public:
CKTexture(CKContext* ctx, CK_ID ckid, CKSTRING name); CKTexture(CKContext* ctx, CK_ID ckid, CKSTRING name);
virtual ~CKTexture(); virtual ~CKTexture();
YYCC_DEL_CLS_COPY_MOVE(CKTexture); YYCC_DELETE_COPY_MOVE(CKTexture)
virtual CK_CLASSID GetClassID() override { virtual CK_CLASSID GetClassID() override {
return CK_CLASSID::CKCID_TEXTURE; return CK_CLASSID::CKCID_TEXTURE;