refactor: finish all yycc adaption for ck2 except CKContext
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user