2023-02-02 12:01:28 +08:00
import enum
2023-02-03 23:20:48 +08:00
class CKEnumItem ( object ):
def __init__ ( self , name : str , value : int ):
self . name : str = name
self . value : int = value
2023-02-03 15:34:16 +08:00
class CKEnum ( object ):
def __init__ ( self , val : int ):
self . m_Value : int = val
2023-02-02 12:01:28 +08:00
2023-02-03 23:20:48 +08:00
self . __ItemsList = (
CKEnumItem ( attr , getattr ( self , attr ))
for attr in dir ( self ) if not attr . startswith ( "__" ) and not callable ( getattr ( self , attr ))
)
def Set ( self , data : int ):
self . m_Value = data
def __iter__ ( self ):
return self . __ItemsList
2023-02-03 15:34:16 +08:00
def __repr__ ( self ):
for i in self :
2023-02-03 23:20:48 +08:00
if i . value == self . m_Value :
return '<' + i . name + '>'
2023-02-02 12:01:28 +08:00
2023-02-04 22:21:18 +08:00
return "<[None]: {:d} >" . format ( self . m_Value )
2023-02-03 15:34:16 +08:00
def __str__ ( self ):
return self . __repr__ ()
class CKFlagEnum ( CKEnum ):
2023-02-03 23:20:48 +08:00
def Add ( self , data : int ):
2023-02-03 15:34:16 +08:00
self . m_Value = self . m_Value | data
2023-02-03 23:20:48 +08:00
def __contains__ ( self , probe ):
if isinstance ( probe , int ):
return bool ( self . m_Value & probe )
if isinstance ( probe , CKFlagEnum ):
return bool ( self . m_Value & probe . m_Value )
return False
2023-02-03 15:34:16 +08:00
def __repr__ ( self ):
2023-02-02 12:01:28 +08:00
pending = []
2023-02-03 15:34:16 +08:00
for i in self :
2023-02-02 12:01:28 +08:00
# if it have exactly same entry, return directly
2023-02-03 23:20:48 +08:00
if i . value == self . m_Value :
2023-02-04 22:21:18 +08:00
return '<' + i . name + '>'
2023-02-02 12:01:28 +08:00
# check exist
2023-02-03 23:20:48 +08:00
if bool ( self . m_Value & i . value ):
2023-02-02 12:01:28 +08:00
pending . append ( i . name )
2023-02-03 15:34:16 +08:00
result = ', ' . join ( pending )
2023-02-04 22:21:18 +08:00
return ( '<' + result + '>' ) if len ( result ) != 0 else "<[None]: {:d} >" . format ( self . m_Value )
2023-02-02 12:01:28 +08:00
2023-02-03 23:20:48 +08:00
class CK_FILE_WRITEMODE ( CKFlagEnum ):
2023-02-02 12:01:28 +08:00
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
2023-02-03 23:20:48 +08:00
class CK_LOAD_FLAGS ( CKFlagEnum ):
2023-02-02 12:01:28 +08:00
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 #
2023-02-03 23:20:48 +08:00
class CK_FO_OPTIONS ( CKEnum ):
CK_FO_DEFAULT = 0
CK_FO_RENAMEOBJECT = 1
CK_FO_REPLACEOBJECT = 2
CK_FO_DONTLOADOBJECT = 3
CK_ID = int
ClassHierarchy = {
1 : ( "CKCID_OBJECT" , ),
2 : ( "CKCID_OBJECT" , "CKCID_PARAMETERIN" , ),
4 : ( "CKCID_OBJECT" , "CKCID_PARAMETEROPERATION" , ),
5 : ( "CKCID_OBJECT" , "CKCID_STATE" , ),
6 : ( "CKCID_OBJECT" , "CKCID_BEHAVIORLINK" , ),
8 : ( "CKCID_OBJECT" , "CKCID_BEHAVIOR" , ),
9 : ( "CKCID_OBJECT" , "CKCID_BEHAVIORIO" , ),
12 : ( "CKCID_OBJECT" , "CKCID_RENDERCONTEXT" , ),
13 : ( "CKCID_OBJECT" , "CKCID_KINEMATICCHAIN" , ),
11 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , ),
15 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_OBJECTANIMATION" , ),
16 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_ANIMATION" , ),
18 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_ANIMATION" , "CKCID_KEYEDANIMATION" , ),
19 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , ),
52 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_DATAARRAY" , ),
10 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_SCENE" , ),
21 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_LEVEL" , ),
22 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_PLACE" , ),
23 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_GROUP" , ),
24 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_SOUND" , ),
25 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_SOUND" , "CKCID_WAVESOUND" , ),
26 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_SOUND" , "CKCID_MIDISOUND" , ),
30 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_MATERIAL" , ),
31 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_TEXTURE" , ),
32 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_MESH" , ),
53 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_MESH" , "CKCID_PATCHMESH" , ),
47 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_RENDEROBJECT" , ),
27 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_RENDEROBJECT" , "CKCID_2DENTITY" , ),
28 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_RENDEROBJECT" , "CKCID_2DENTITY" , "CKCID_SPRITE" , ),
29 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_RENDEROBJECT" , "CKCID_2DENTITY" , "CKCID_SPRITETEXT" , ),
33 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_3DENTITY" , ),
50 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_3DENTITY" , "CKCID_GRID" , ),
36 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_3DENTITY" , "CKCID_CURVEPOINT" , ),
37 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_3DENTITY" , "CKCID_SPRITE3D" , ),
43 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_3DENTITY" , "CKCID_CURVE" , ),
34 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_3DENTITY" , "CKCID_CAMERA" , ),
35 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_3DENTITY" , "CKCID_CAMERA" , "CKCID_TARGETCAMERA" , ),
38 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_3DENTITY" , "CKCID_LIGHT" , ),
39 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_3DENTITY" , "CKCID_LIGHT" , "CKCID_TARGETLIGHT" , ),
40 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_3DENTITY" , "CKCID_CHARACTER" , ),
41 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_3DENTITY" , "CKCID_3DOBJECT" , ),
42 : ( "CKCID_OBJECT" , "CKCID_SCENEOBJECT" , "CKCID_BEOBJECT" , "CKCID_3DENTITY" , "CKCID_3DOBJECT" , "CKCID_BODYPART" , ),
46 : ( "CKCID_OBJECT" , "CKCID_PARAMETER" , ),
45 : ( "CKCID_OBJECT" , "CKCID_PARAMETER" , "CKCID_PARAMETERLOCAL" , ),
55 : ( "CKCID_OBJECT" , "CKCID_PARAMETER" , "CKCID_PARAMETERLOCAL" , "CKCID_PARAMETERVARIABLE" , ),
3 : ( "CKCID_OBJECT" , "CKCID_PARAMETER" , "CKCID_PARAMETEROUT" , ),
48 : ( "CKCID_OBJECT" , "CKCID_INTERFACEOBJECTMANAGER" , ),
49 : ( "CKCID_OBJECT" , "CKCID_CRITICALSECTION" , ),
51 : ( "CKCID_OBJECT" , "CKCID_LAYER" , ),
54 : ( "CKCID_OBJECT" , "CKCID_PROGRESSIVEMESH" , ),
20 : ( "CKCID_OBJECT" , "CKCID_SYNCHRO" , ),
80 : ( "CKCID_OBJECTARRAY" , ),
81 : ( "CKCID_SCENEOBJECTDESC" , ),
82 : ( "CKCID_ATTRIBUTEMANAGER" , ),
83 : ( "CKCID_MESSAGEMANAGER" , ),
84 : ( "CKCID_COLLISIONMANAGER" , ),
85 : ( "CKCID_OBJECTMANAGER" , ),
86 : ( "CKCID_FLOORMANAGER" , ),
87 : ( "CKCID_RENDERMANAGER" , ),
88 : ( "CKCID_BEHAVIORMANAGER" , ),
89 : ( "CKCID_INPUTMANAGER" , ),
90 : ( "CKCID_PARAMETERMANAGER" , ),
91 : ( "CKCID_GRIDMANAGER" , ),
92 : ( "CKCID_SOUNDMANAGER" , ),
93 : ( "CKCID_TIMEMANAGER" , ),
- 1 : ( "CKCID_CUIKBEHDATA" , ),
56 : ( "CKCID_MAXCLASSID" , ),
128 : ( "CKCID_MAXMAXCLASSID" , ),
}
class CK_CLASSID ( CKEnum ):
2023-02-02 12:01:28 +08:00
CKCID_OBJECT = 1
CKCID_PARAMETERIN = 2
CKCID_PARAMETEROPERATION = 4
CKCID_STATE = 5
CKCID_BEHAVIORLINK = 6
CKCID_BEHAVIOR = 8
CKCID_BEHAVIORIO = 9
CKCID_RENDERCONTEXT = 12
CKCID_KINEMATICCHAIN = 13
CKCID_SCENEOBJECT = 11
CKCID_OBJECTANIMATION = 15
CKCID_ANIMATION = 16
CKCID_KEYEDANIMATION = 18
CKCID_BEOBJECT = 19
CKCID_DATAARRAY = 52
CKCID_SCENE = 10
CKCID_LEVEL = 21
CKCID_PLACE = 22
CKCID_GROUP = 23
CKCID_SOUND = 24
CKCID_WAVESOUND = 25
CKCID_MIDISOUND = 26
CKCID_MATERIAL = 30
CKCID_TEXTURE = 31
CKCID_MESH = 32
CKCID_PATCHMESH = 53
CKCID_RENDEROBJECT = 47
CKCID_2DENTITY = 27
CKCID_SPRITE = 28
CKCID_SPRITETEXT = 29
CKCID_3DENTITY = 33
CKCID_GRID = 50
CKCID_CURVEPOINT = 36
CKCID_SPRITE3D = 37
CKCID_CURVE = 43
CKCID_CAMERA = 34
CKCID_TARGETCAMERA = 35
CKCID_LIGHT = 38
CKCID_TARGETLIGHT = 39
CKCID_CHARACTER = 40
CKCID_3DOBJECT = 41
CKCID_BODYPART = 42
CKCID_PARAMETER = 46
CKCID_PARAMETERLOCAL = 45
CKCID_PARAMETERVARIABLE = 55
CKCID_PARAMETEROUT = 3
CKCID_INTERFACEOBJECTMANAGER = 48
CKCID_CRITICALSECTION = 49
CKCID_LAYER = 51
CKCID_PROGRESSIVEMESH = 54
CKCID_SYNCHRO = 20
CKCID_OBJECTARRAY = 80
CKCID_SCENEOBJECTDESC = 81
CKCID_ATTRIBUTEMANAGER = 82
CKCID_MESSAGEMANAGER = 83
CKCID_COLLISIONMANAGER = 84
CKCID_OBJECTMANAGER = 85
CKCID_FLOORMANAGER = 86
CKCID_RENDERMANAGER = 87
CKCID_BEHAVIORMANAGER = 88
CKCID_INPUTMANAGER = 89
CKCID_PARAMETERMANAGER = 90
CKCID_GRIDMANAGER = 91
CKCID_SOUNDMANAGER = 92
CKCID_TIMEMANAGER = 93
CKCID_CUIKBEHDATA = - 1
CKCID_MAXCLASSID = 56
CKCID_MAXMAXCLASSID = 128
def __repr__ ( self ):
2023-02-03 23:20:48 +08:00
hierarchy = ClassHierarchy . get ( self . m_Value , None )
2023-02-02 12:01:28 +08:00
if hierarchy is None :
2023-02-03 23:20:48 +08:00
return "[Undefined] {:d} " . format ( self . m_Value )
2023-02-02 12:01:28 +08:00
return " {} ( {} )" . format (
hierarchy [ - 1 ],
' -> ' . join ( hierarchy )
)
2023-02-03 23:20:48 +08:00
def __str__ ( self ):
hierarchy = ClassHierarchy . get ( self . m_Value , None )
if hierarchy is None :
return "[Undefined] {:d} " . format ( self . m_Value )
return hierarchy [ - 1 ]
2023-02-02 12:01:28 +08:00
2023-02-03 23:20:48 +08:00
ErrorDescription = {
0 : "Operation successful" ,
- 1 : "One of the parameter passed to the function was invalid" ,
- 2 : "One of the parameter passed to the function was invalid" ,
- 3 : "The parameter size was invalid" ,
- 4 : "The operation type didn't exist" ,
- 5 : "The function used to execute the operation is not yet implemented" ,
- 6 : "There was not enough memory to perform the action" ,
- 7 : "The function is not yet implemented" ,
- 11 : "There was an attempt to remove something not present" ,
- 13 : "There is no level currently created" ,
- 14 : "There is no level currently created" ,
- 16 : "The notification message was not used" ,
- 17 : "Attempt to add an item that was already present" ,
- 18 : "the render context is not valid" ,
- 19 : "the render context is not activated for rendering" ,
- 20 : "there was no plugins to load this kind of file" ,
- 21 : "there was no plugins to save this kind of file" ,
- 22 : "attempt to load an invalid file" ,
- 23 : "attempt to load with an invalid plugin" ,
- 24 : "attempt use an object that wasnt initialized" ,
- 25 : "attempt use a message type that wasn't registred" ,
- 29 : "No dll file found in the parse directory" ,
- 30 : "this dll has already been registred" ,
- 31 : "this dll does not contain information to create the prototype" ,
- 34 : "Invalid Object (attempt to Get an object from an invalid ID)" ,
- 35 : "Invalid window was provided as console window" ,
- 36 : "Invalid kinematic chain ( end and start effector may not be part of the same hierarchy )" ,
- 37 : "Keyboard not attached or not working properly" ,
- 38 : "Mouse not attached or not working properly" ,
- 39 : "Joystick not attached or not working properly" ,
- 40 : "Try to link imcompatible Parameters" ,
- 44 : "There is no render engine dll" ,
- 45 : "There is no current level (use CKSetCurrentLevel )" ,
- 46 : "Sound Management has been disabled" ,
- 47 : "DirectInput Management has been disabled" ,
- 48 : "Guid is already in use or invalid" ,
- 49 : "There was no more free space on disk when trying to save a file" ,
- 50 : "Impossible to write to file (write-protection ?)" ,
- 51 : "The behavior cannnot be added to this entity" ,
- 52 : "The behavior cannnot be added to this entity" ,
- 53 : "A manager was registered more than once" ,
- 54 : "CKprocess or TimeManager process while CK is paused will fail" ,
- 55 : "Some plugins were missing whileloading a file" ,
- 56 : "Virtools version too old to load this file" ,
- 57 : "CRC Error while loading file" ,
- 58 : "A Render context is already in Fullscreen Mode" ,
- 59 : "Operation was cancelled by user" ,
- 121 : "there were no animation key at the given index" ,
- 122 : "attemp to acces an animation key with an invalid index" ,
- 123 : "the animation is invalid (no entity associated or zero length)" ,
}
class CKERROR ( CKEnum ):
2023-02-02 12:01:28 +08:00
CKERR_OK = 0
CKERR_INVALIDPARAMETER = - 1
CKERR_INVALIDPARAMETERTYPE = - 2
CKERR_INVALIDSIZE = - 3
CKERR_INVALIDOPERATION = - 4
CKERR_OPERATIONNOTIMPLEMENTED = - 5
CKERR_OUTOFMEMORY = - 6
CKERR_NOTIMPLEMENTED = - 7
CKERR_NOTFOUND = - 11
CKERR_NOLEVEL = - 13
CKERR_CANCREATERENDERCONTEXT = - 14
CKERR_NOTIFICATIONNOTHANDLED = - 16
CKERR_ALREADYPRESENT = - 17
CKERR_INVALIDRENDERCONTEXT = - 18
CKERR_RENDERCONTEXTINACTIVE = - 19
CKERR_NOLOADPLUGINS = - 20
CKERR_NOSAVEPLUGINS = - 21
CKERR_INVALIDFILE = - 22
CKERR_INVALIDPLUGIN = - 23
CKERR_NOTINITIALIZED = - 24
CKERR_INVALIDMESSAGE = - 25
CKERR_NODLLFOUND = - 29
CKERR_ALREADYREGISTREDDLL = - 30
CKERR_INVALIDDLL = - 31
CKERR_INVALIDOBJECT = - 34
CKERR_INVALIDCONDSOLEWINDOW = - 35
CKERR_INVALIDKINEMATICCHAIN = - 36
CKERR_NOKEYBOARD = - 37
CKERR_NOMOUSE = - 38
CKERR_NOJOYSTICK = - 39
CKERR_INCOMPATIBLEPARAMETERS = - 40
CKERR_NORENDERENGINE = - 44
CKERR_NOCURRENTLEVEL = - 45
CKERR_SOUNDDISABLED = - 46
CKERR_DINPUTDISABLED = - 47
CKERR_INVALIDGUID = - 48
CKERR_NOTENOUGHDISKPLACE = - 49
CKERR_CANTWRITETOFILE = - 50
CKERR_BEHAVIORADDDENIEDBYCB = - 51
CKERR_INCOMPATIBLECLASSID = - 52
CKERR_MANAGERALREADYEXISTS = - 53
CKERR_PAUSED = - 54
CKERR_PLUGINSMISSING = - 55
CKERR_OBSOLETEVIRTOOLS = - 56
CKERR_FILECRCERROR = - 57
CKERR_ALREADYFULLSCREEN = - 58
CKERR_CANCELLED = - 59
CKERR_NOANIMATIONKEY = - 121
CKERR_INVALIDINDEX = - 122
CKERR_INVALIDANIMATION = - 123
def __repr__ ( self ):
2023-02-03 23:20:48 +08:00
return ErrorDescription . get ( self . m_Value , "[Undefined] {:d} " . format ( self . m_Value ))
2023-02-02 12:01:28 +08:00