deargui-vpl/ref/virtools/Samples/Behaviors/Narratives/Narratives.cpp

175 lines
5.7 KiB
C++

//
// 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;
}