175 lines
5.7 KiB
C++
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;
|
|
}
|