// // Narratives.cpp : Defines the initialization routines for the DLL. // #include "CKAll.h" #ifdef CK_LIB #define RegisterBehaviorDeclarations Register_Narratives_BehaviorDeclarations #define InitInstance _Narratives_InitInstance #define ExitInstance _Narratives_ExitInstance #define CKGetPluginInfoCount CKGet_Narratives_PluginInfoCount #define CKGetPluginInfo CKGet_Narratives_PluginInfo #define g_PluginInfo g_Narratives_PluginInfo #else #define RegisterBehaviorDeclarations RegisterBehaviorDeclarations #define InitInstance InitInstance #define ExitInstance ExitInstance #define CKGetPluginInfoCount CKGetPluginInfoCount #define CKGetPluginInfo CKGetPluginInfo #define g_PluginInfo g_PluginInfo #endif CKERROR InitInstance(CKContext* context); CKERROR ExitInstance(CKContext* context); #define NARRATIVES_BEHAVIOR CKGUID(0x5bc80700,0x24183459) //uncomment for 4.1 patch and think to not exclude callbehavior2 from build #define NARRATIVES_CALLBEHAVIOR_SETTING CKGUID(0x5bc80700,0x24183450) CKPluginInfo g_PluginInfo; PLUGIN_EXPORT int CKGetPluginInfoCount() { return 1; } PLUGIN_EXPORT CKPluginInfo* CKGetPluginInfo(int Index) { g_PluginInfo.m_Author = "Virtools"; g_PluginInfo.m_Description = "Narratives Building Blocks"; g_PluginInfo.m_Extension = ""; g_PluginInfo.m_Type = CKPLUGIN_BEHAVIOR_DLL; g_PluginInfo.m_Version = 0x000001; g_PluginInfo.m_InitInstanceFct = InitInstance; g_PluginInfo.m_ExitInstanceFct = ExitInstance; g_PluginInfo.m_GUID = NARRATIVES_BEHAVIOR; g_PluginInfo.m_Summary = "Narratives Building Blocks"; return &g_PluginInfo; } PLUGIN_EXPORT void RegisterBehaviorDeclarations(XObjectDeclarationArray *reg); void RegisterBehaviorDeclarations(XObjectDeclarationArray *reg) { // Scene Management RegisterBehavior(reg, FillBehaviorGetCurrentSceneDecl); RegisterBehavior(reg, FillBehaviorLaunchSceneDecl); RegisterBehavior(reg, FillBehaviorAddToSceneDecl); RegisterBehavior(reg, FillBehaviorRemoveFromSceneDecl); RegisterBehavior(reg, FillBehaviorSaveICDecl); RegisterBehavior(reg, FillBehaviorRestoreICDecl); RegisterBehavior(reg, FillBehaviorSaveStateDecl); RegisterBehavior(reg, FillBehaviorReadStateDecl); RegisterBehavior(reg, FillBehaviorEnterStateDecl); RegisterBehavior(reg, FillBehaviorIsInStateDecl); RegisterBehavior(reg, FillBehaviorExitStateDecl); // Object Management RegisterBehavior(reg, FillObjectCreatorDecl); RegisterBehavior(reg, FillObjectLoaderDecl); RegisterBehavior(reg, FillObjectCopierDecl); RegisterBehavior(reg, FillObjectDeleterDecl); RegisterBehavior(reg, FillObjectRenameDecl); RegisterBehavior(reg, FillObsoleteObjectRenamerDecl); RegisterBehavior(reg, FillDynamicDeleterDecl); RegisterBehavior(reg, FillTextureLoaderDecl); RegisterBehavior(reg, FillspriteLoaderDecl); RegisterBehavior(reg, FillSoundLoaderDecl); // Scripts Management RegisterBehavior(reg, FillBehaviorActivateObjectDecl); RegisterBehavior(reg, FillBehaviorActivateScriptDecl); RegisterBehavior(reg, FillBehaviorDeactivateObjectDecl); RegisterBehavior(reg, FillBehaviorDeactivateScriptDecl); RegisterBehavior(reg, FillBehaviorExecuteScriptDecl); RegisterBehavior(reg, FillBehaviorCallScriptDecl); RegisterBehavior(reg, FillBehaviorAttachScriptDecl); #ifdef NARRATIVES_CALLBEHAVIOR_SETTING RegisterBehavior(reg, FillBehaviorCallBehavior2Decl); #else RegisterBehavior(reg, FillBehaviorCallBehaviorDecl); #endif RegisterBehavior(reg, FillBehaviorDUMMY0Decl); } CKERROR CreateDUMMY0Proto(CKBehaviorPrototype **pproto){ CKBehaviorPrototype *proto = CreateCKBehaviorPrototype("yop"); if(!proto) return CKERR_OUTOFMEMORY; proto->SetFlags(CK_BEHAVIORPROTOTYPE_OBSOLETE); proto->SetFunction(NULL); *pproto = proto; return CK_OK; } CKObjectDeclaration *FillBehaviorDUMMY0Decl() { CKObjectDeclaration *od = CreateCKObjectDeclaration("Dummy0"); od->SetDescription(""); od->SetCategory(""); od->SetType(CKDLL_BEHAVIORPROTOTYPE); od->SetGuid(CKGUID(0xd0b7adf3,0xd3ff3cf6)); od->SetAuthorGuid(VIRTOOLS_GUID); od->SetAuthorName("Virtools"); od->SetVersion(0x00010000); od->SetCreationFunction(CreateDUMMY0Proto); od->SetCompatibleClassId(CKCID_BEOBJECT); od->NeedManager(CKGUID(0x44700134,0x553862c0)); // INTERFACE_BEHAVIOR return od; } #define PARAMGUID_ONDUPLICATE CKGUID(0x9694a19,0x35a2358b) CKERROR InitInstance(CKContext* context) { //create flag parameter for SetProperties/GetProperties BBs /* "Ignore", "Rename", "Use Current", "Replace" */ CKParameterManager* pm = context->GetParameterManager(); if (pm) { //typedef enum CK_LOADMODE //CKLOAD_OK=0, // Ignore ( Name unicity is broken ) //CKLOAD_REPLACE=1, // Replace the existing object (Not yet implemented) //CKLOAD_RENAME=2, // Rename the loaded object //CKLOAD_USECURRENT CKERROR error = pm->RegisterNewEnum(PARAMGUID_ONDUPLICATE,"On Duplicate","Ignore=0,Rename=2,Use Current=3,Replace=1"); // We hide the parameters (structures and flags) CKParameterTypeDesc* param_type = pm->GetParameterTypeDescription(PARAMGUID_ONDUPLICATE); if (param_type) param_type->dwFlags|=CKPARAMETERTYPE_HIDDEN; #ifdef NARRATIVES_CALLBEHAVIOR_SETTING error = pm->RegisterNewFlags(NARRATIVES_CALLBEHAVIOR_SETTING,"Settings","Reset=1,Wait for Completion=2,Stop at Exit=4,Parameter Restore=8,Hijack Parameters Once=16,Freeze IO mapping=32,Real Time Execution=64,Check Proto Validity=128,Save Internal States=256"); param_type = pm->GetParameterTypeDescription(NARRATIVES_CALLBEHAVIOR_SETTING); if (param_type) param_type->dwFlags|=CKPARAMETERTYPE_HIDDEN; #endif } return CK_OK; } CKERROR ExitInstance(CKContext* context) { CKParameterManager* pm = context->GetParameterManager(); if (pm) { pm->UnRegisterParameterType(PARAMGUID_ONDUPLICATE); } return CK_OK; }