202 lines
12 KiB
C++
202 lines
12 KiB
C++
|
#pragma once
|
||
|
|
||
|
#include "../VTUtils.hpp"
|
||
|
#include "CKTypes.hpp"
|
||
|
#include <cinttypes>
|
||
|
#include <cstdint>
|
||
|
|
||
|
namespace LibCmo::CK2 {
|
||
|
|
||
|
#pragma region Preregistred Managers
|
||
|
|
||
|
// Virtools Managers GUID second data is 0
|
||
|
|
||
|
constexpr const CKDWORD OBJECT_MANAGER_GUID1 = 0x7cbb3b91;
|
||
|
constexpr const CKDWORD ATTRIBUTE_MANAGER_GUID1 = 0x3d242466;
|
||
|
constexpr const CKDWORD MESSAGE_MANAGER_GUID1 = 0x466a0fac;
|
||
|
constexpr const CKDWORD FLOOR_MANAGER_GUID1 = 0x420936f9;
|
||
|
constexpr const CKDWORD COLLISION_MANAGER_GUID1 = 0x38244712;
|
||
|
constexpr const CKDWORD GRID_MANAGER_GUID1 = 0x7f004791;
|
||
|
constexpr const CKDWORD TIME_MANAGER_GUID1 = 0x89ce7b32;
|
||
|
constexpr const CKDWORD BEHAVIOR_MANAGER_GUID1 = 0x58d621ae;
|
||
|
constexpr const CKDWORD INPUT_MANAGER_GUID1 = 0xf787c904;
|
||
|
constexpr const CKDWORD SOUND_MANAGER_GUID1 = 0xdce135f6;
|
||
|
constexpr const CKDWORD MIDI_MANAGER_GUID1 = 0x594154a6;
|
||
|
constexpr const CKDWORD INTERFACE_MANAGER_GUID1 = 0x9a4b8e3d;
|
||
|
constexpr const CKDWORD RENDER_MANAGER_GUID1 = 0xa213c8d5;
|
||
|
constexpr const CKDWORD PARAMETER_MANAGER_GUID1 = 0x9ce57ab6;
|
||
|
constexpr const CKDWORD PATH_MANAGER_GUID1 = 0x15fd54b9;
|
||
|
constexpr const CKDWORD VARIABLE_MANAGER_GUID1 = 0x98cc3cc9;
|
||
|
|
||
|
constexpr const CKGUID OBJECT_MANAGER_GUID{ OBJECT_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID ATTRIBUTE_MANAGER_GUID{ ATTRIBUTE_MANAGER_GUID1, 0 };
|
||
|
constexpr const CKGUID MESSAGE_MANAGER_GUID{ MESSAGE_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID TIME_MANAGER_GUID{ TIME_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID SOUND_MANAGER_GUID{ SOUND_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID MIDI_MANAGER_GUID{ MIDI_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID INPUT_MANAGER_GUID{ INPUT_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID BEHAVIOR_MANAGER_GUID{ BEHAVIOR_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID FLOOR_MANAGER_GUID{ FLOOR_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID COLLISION_MANAGER_GUID{ COLLISION_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID GRID_MANAGER_GUID{ GRID_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID INTERFACE_MANAGER_GUID{ INTERFACE_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID RENDER_MANAGER_GUID{ RENDER_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID PARAMETER_MANAGER_GUID{ PARAMETER_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID PATH_MANAGER_GUID{ PATH_MANAGER_GUID1 ,0 };
|
||
|
constexpr const CKGUID VARIABLE_MANAGER_GUID{ VARIABLE_MANAGER_GUID1 ,0 };
|
||
|
|
||
|
#pragma endregion
|
||
|
|
||
|
/**
|
||
|
Specify the way files are saved to disk (compression)
|
||
|
@remark
|
||
|
+ File write mode controls the format of a Virtools file when saved. More specifically it
|
||
|
controls whether compression is enabled and also if the Virtools Dev Interface specific data
|
||
|
should be stored in the file (if CKFILE_FORVIEWER flag is set , no interface data is saved)
|
||
|
|
||
|
See also: CKContext::SetFileWriteMode, CKContext::GetFileWriteMode, CKContext::SetCompressionLevel,
|
||
|
CKContext::SetGlobalImagesSaveOptions, CKContext::SetGlobalSoundsSaveOptions
|
||
|
*/
|
||
|
enum class CK_FILE_WRITEMODE : uint32_t {
|
||
|
CKFILE_UNCOMPRESSED = 0, /**< Save data uncompressed */
|
||
|
CKFILE_CHUNKCOMPRESSED_OLD = 1, /**< Obsolete */
|
||
|
CKFILE_EXTERNALTEXTURES_OLD = 2, /**< Obsolete : use CKContext::SetGlobalImagesSaveOptions instead. */
|
||
|
CKFILE_FORVIEWER = 4, /**< Don't save Interface Data within the file, the level won't be editable anymore in the interface */
|
||
|
CKFILE_WHOLECOMPRESSED = 8, /**< Compress the whole file */
|
||
|
};
|
||
|
LIBCMO_BITFLAG_OPERATORS(CK_FILE_WRITEMODE);
|
||
|
/**
|
||
|
Load Options.
|
||
|
@remark
|
||
|
+ This options apply when loading a Virtools file
|
||
|
or a importing a 3D Model file.
|
||
|
+ They defines whether object geometry,only animations
|
||
|
or only behaviors should be loaded.
|
||
|
+ One can specify (using the CK_LOAD_AS_DYNAMIC_OBJECT) if
|
||
|
created CKObjects should be created as dynamic (See also Dynamic Objects)
|
||
|
See also : CKContext::Load, CKContext::CKSave
|
||
|
*/
|
||
|
enum class CK_LOAD_FLAGS : uint32_t {
|
||
|
CK_LOAD_ANIMATION = 1 << 0, /**< Load animations */
|
||
|
CK_LOAD_GEOMETRY = 1 << 1, /**< Load geometry. */
|
||
|
CK_LOAD_DEFAULT = CK_LOAD_GEOMETRY | CK_LOAD_ANIMATION, /**< Load animations & geometry */
|
||
|
CK_LOAD_ASCHARACTER = 1 << 2, /**< Load all the objects and create a character that contains them all . */
|
||
|
CK_LOAD_DODIALOG = 1 << 3, /**< Check object name unicity and warns the user with a dialog box when duplicate names are found. */
|
||
|
CK_LOAD_AS_DYNAMIC_OBJECT = 1 << 4, /**< Objects loaded from this file may be deleted at run-time or are temporary */
|
||
|
CK_LOAD_AUTOMATICMODE = 1 << 5, /**< Check object name unicity and automatically rename or replace according to the options specified in CKContext::SetAutomaticLoadMode */
|
||
|
CK_LOAD_CHECKDUPLICATES = 1 << 6, /**< Check object name unicity (The list of duplicates is stored in the CKFile class after a OpenFile call */
|
||
|
CK_LOAD_CHECKDEPENDENCIES = 1 << 7, /**< Check if every plugins needed are availables */
|
||
|
CK_LOAD_ONLYBEHAVIORS = 1 << 8, /**< */
|
||
|
};
|
||
|
LIBCMO_BITFLAG_OPERATORS(CK_LOAD_FLAGS);
|
||
|
/**
|
||
|
Options that will be used to create this object...
|
||
|
*/
|
||
|
enum class CK_FO_OPTIONS : uint32_t {
|
||
|
CK_FO_DEFAULT = 0, /**< Default behavior : a new object will be created with the name stored in CKFileObject */
|
||
|
CK_FO_RENAMEOBJECT, /**< Renaming : a new object will be created with the name stored in CKFileObject + a integer value XXX to ensure its uniqueness */
|
||
|
CK_FO_REPLACEOBJECT, /**< Do not create a new object, instead use an existing one which CK_ID is given by CreatedObject to load the chunk on */
|
||
|
CK_FO_DONTLOADOBJECT, /**< Object chunk will not be read either because it is a reference or because the loaded object already exist in the current level and the user choose to keep the existing one. */
|
||
|
};
|
||
|
/**
|
||
|
Type identifier for a Virtools plugin.
|
||
|
@remark
|
||
|
+ Each plugin must be given a type.
|
||
|
+ This enumeration is used to identify a specific catagory
|
||
|
of plugin when using the CKPluginManager.
|
||
|
|
||
|
@see CKPluginManager
|
||
|
*/
|
||
|
enum class CK_PLUGIN_TYPE : uint32_t {
|
||
|
CKPLUGIN_BITMAP_READER = 0, /**< The plugin is bitmap (textures,sprites) loader */
|
||
|
CKPLUGIN_SOUND_READER = 1, /**< Sound Reader Plugin */
|
||
|
CKPLUGIN_MODEL_READER = 2, /**< 3D Model Reader */
|
||
|
CKPLUGIN_MANAGER_DLL = 3, /**< The plugin implements a Manager */
|
||
|
CKPLUGIN_BEHAVIOR_DLL = 4, /**< The plugin implements one or more behaviors */
|
||
|
CKPLUGIN_RENDERENGINE_DLL = 5, /**< Render Engine plugin */
|
||
|
CKPLUGIN_MOVIE_READER = 6, /**< Movie (AVI,Mpeg) reader */
|
||
|
CKPLUGIN_EXTENSION_DLL = 7, /**< Generic extension (definition of new parameter types or operations for ex.) */
|
||
|
};
|
||
|
/**
|
||
|
@remark CHUNK_OPTIONS in original Virtools header.
|
||
|
*/
|
||
|
enum class CK_STATECHUNK_CHUNKOPTIONS : uint32_t {
|
||
|
CHNK_OPTION_IDS = 0x01, /**< IDS are stored inside chunk */
|
||
|
CHNK_OPTION_MAN = 0x02, /**< Managers ints are store inside chunk */
|
||
|
CHNK_OPTION_CHN = 0x04, /**< Sub chunk are stored inside chunk */
|
||
|
CHNK_OPTION_FILE = 0x08, /**< Chunk was written with indices relative to a file.... */
|
||
|
CHNK_OPTION_ALLOWDYN = 0x10, /**< Dynamic object can be written in the chunk */
|
||
|
CHNK_OPTION_LISTBIG = 0x20, /**< List are store in big Endian ? */
|
||
|
CHNK_DONTDELETE_PTR = 0x40, /**< Data buffer stored in m_Buffer is not owned by CKStateChunk , it must not be deleted... */
|
||
|
CHNK_DONTDELETE_PARSER = 0x80, /**< m_Parser Ptr is not owned by CKStateChunk , it must not be deleted... */
|
||
|
};
|
||
|
LIBCMO_BITFLAG_OPERATORS(CK_STATECHUNK_CHUNKOPTIONS);
|
||
|
enum class CK_STATECHUNK_CHUNKVERSION : uint32_t {
|
||
|
CHUNK_VERSIONBASE = 0,
|
||
|
CHUNK_VERSION1 = 4, /**< equal to file version : WriteObjectID => table */
|
||
|
CHUNK_VERSION2 = 5, /**< add Manager Data */
|
||
|
CHUNK_VERSION3 = 6, /**< New ConvertToBuffer / ReadFromBuffer (file system changed to reflect this ) */
|
||
|
CHUNK_VERSION4 = 7, /**< New WriteObjectID when saving to a file */
|
||
|
};
|
||
|
enum class CK_STATECHUNK_DATAVERSION : uint32_t {
|
||
|
CHUNKDATA_OLDVERSION = 0, /**< Before any version was saved */
|
||
|
CHUNKDATA_BASEVERSION = 1, /**< First version */
|
||
|
CHUNK_WAVESOUND_VERSION2 = 2, /**< Changes in wavesound format */
|
||
|
CHUNK_WAVESOUND_VERSION3 = 3, /**< Changes in wavesound format */
|
||
|
CHUNK_MATERIAL_VERSION_ZTEST = 4, /**< Change in material save format */
|
||
|
CHUNK_MAJORCHANGE_VERSION = 5, /**< Optimisations on many save functions */
|
||
|
CHUNK_MACCHANGE_VERSION = 6, /**< Misc new Statechunk functions for macintosh (Big-Endian <-> Little Endian conversion ) */
|
||
|
CHUNK_WAVESOUND_VERSION4 = 7, /**< Changes in wavesound format (Added sound length) */
|
||
|
CHUNK_SCENECHANGE_VERSION = 8, /**< Changes in sceneObjectDesc format (Remove lasttimevalue) */
|
||
|
CHUNK_MESHCHANGE_VERSION = 9, /**< Changes in Mesh save format (primitives) */
|
||
|
CHUNK_DEV_2_1 = 10, /**< Changes in wavesound reading of inside, outside angles */
|
||
|
CHUNKDATA_CURRENTVERSION = CHUNK_DEV_2_1,
|
||
|
};
|
||
|
/**
|
||
|
CKObject Flags
|
||
|
@remark
|
||
|
+ Flags specifying special settings for basic objects.
|
||
|
+ Some of this flags are shared with sub-classes such as CKParameterIn,CKParameterOut and CKBehaviorIO.
|
||
|
+ You rarely need to modify directly this flags through CKObject::SetFlags or CKObject::ModifyObjectFlags instead
|
||
|
you should always use the specific acces function (given between ()) which may need to perform additionnal operations.
|
||
|
See also: CKObject, CKObject::GetObjectFlags, CKObject::ModifyObjectFlags
|
||
|
*/
|
||
|
enum class CK_OBJECT_FLAGS : uint32_t {
|
||
|
CK_OBJECT_INTERFACEOBJ = 0x00000001, /**< Reserved for Inteface Use */
|
||
|
CK_OBJECT_PRIVATE = 0x00000002, /**< The object must not be displayed in interface (Lists,Level view,etc...),nor should it be saved. (CKObject::IsPrivate() */
|
||
|
CK_OBJECT_INTERFACEMARK = 0x00000004,
|
||
|
CK_OBJECT_FREEID = 0x00000008, /**< ID of this object can be released safely and is free to be reused by future CKobjects. */
|
||
|
CK_OBJECT_TOBEDELETED = 0x00000010, /**< This object is being deleted */
|
||
|
CK_OBJECT_NOTTOBESAVED = 0x00000020, /**< This object must not be saved */
|
||
|
CK_OBJECT_VISIBLE = 0x00000040, /**< This object is visible (CKObject::Show) */
|
||
|
CK_OBJECT_NAMESHARED = 0x00000080, /**< This object has its name from another entity */
|
||
|
CK_OBJECT_DYNAMIC = 0x00000108, /**< This object may be created or deleted at run-time, it also contails CK_OBJECT_FREEID. (CKObject::IsDynamic,CKContext::CreateObject) */
|
||
|
CK_OBJECT_HIERACHICALHIDE = 0x00000200, /**< This object hides all its hierarchy (CKObject::Show) */
|
||
|
CK_OBJECT_UPTODATE = 0x00000400, /**< (Camera,etc..) */
|
||
|
CK_OBJECT_TEMPMARKER = 0x00000800,
|
||
|
CK_OBJECT_ONLYFORFILEREFERENCE = 0x00001000,
|
||
|
CK_OBJECT_NOTTOBEDELETED = 0x00002000, /**< This object must not be deleted in a clear all */
|
||
|
CK_OBJECT_APPDATA = 0x00004000, /**< This object has app data */
|
||
|
CK_OBJECT_SINGLEACTIVITY = 0x00008000, /**< this object has an information of single activity */
|
||
|
CK_OBJECT_LOADSKIPBEOBJECT = 0x00010000, /**< When loading this object the CKBeObject part should be skipped */
|
||
|
CK_OBJECT_NOTTOBELISTEDANDSAVED = 0x00000023, /**< Combination of Private and Not To Be Saved The following flags are specific to parameters (they are stored here for object's size purposes ) */
|
||
|
CK_PARAMETEROUT_SETTINGS = 0x00400000,
|
||
|
CK_PARAMETEROUT_PARAMOP = 0x00800000, /**< This parameter is the output of a CKParameterOperation (Automatically set by Engine) */
|
||
|
CK_PARAMETERIN_DISABLED = 0x01000000, /**< Parameter In or Out is disabled (CKBehavior::EnableInputParameter,CKBehavior::DisableInputParameter) */
|
||
|
CK_PARAMETERIN_THIS = 0x02000000, /**< Special parameter type : its value and type are always equal to its owner (CKParameter::SetAsMyselfParameter) */
|
||
|
CK_PARAMETERIN_SHARED = 0x04000000,
|
||
|
CK_PARAMETEROUT_DELETEAFTERUSE = 0x08000000, /**< When adding parameters to CKMessage, they can be automatically deleted when message is released (CKMessage::AddParameter) */
|
||
|
CK_OBJECT_PARAMMASK = 0x0FC00000, /**< Mask for options specific to parameters The Following flags are specific for Behavior ios (CKBehaviorIO) */
|
||
|
CK_BEHAVIORIO_IN = 0x10000000, /**< This BehaviorIO is a behavior input (CKBehaviorIO::SetType} */
|
||
|
CK_BEHAVIORIO_OUT = 0x20000000, /**< This BehaviorIO is a behavior output (CKBehaviorIO::SetType) */
|
||
|
CK_BEHAVIORIO_ACTIVE = 0x40000000, /**< This BehaviorIO is a currently active (CKBehaviorIO::Activate} */
|
||
|
CK_OBJECT_IOTYPEMASK = 0x30000000,
|
||
|
CK_OBJECT_IOMASK = 0xF0000000, /**< The Following flags are specific for Behavior ios (CKBehaviorIO) */
|
||
|
CKBEHAVIORLINK_RESERVED = 0x10000000, /**< This BehaviorIO is a behavior input (CKBehaviorIO::SetType} */
|
||
|
CKBEHAVIORLINK_ACTIVATEDLASTFRAME = 0x20000000, /**< This link had been activated last frame */
|
||
|
CK_OBJECT_BEHAVIORLINKMASK = 0x30000000,
|
||
|
};
|
||
|
LIBCMO_BITFLAG_OPERATORS(CK_OBJECT_FLAGS);
|
||
|
|
||
|
}
|