Hooks
static bool BeforeCvLuaFractal_CreateFractal(lua_State* L, CvFractal*& result);static void AfterCvLuaFractal_CreateFractal(lua_State* L, CvFractal*& result);static CvFractal* ReplaceCvLuaFractal_CreateFractal(CvFractal* (*original)(lua_State*), lua_State* L);// CivHooks.h gives this hook point no types, so nothing checks these hooks' parameters.host->RegisterHook(host->pluginIndex, CivHooks::CvLuaFractal_CreateFractal::ID, CIV_HOOK_BEFORE, (void*)&BeforeCvLuaFractal_CreateFractal);host->RegisterHook(host->pluginIndex, CivHooks::CvLuaFractal_CreateFractal::ID, CIV_HOOK_AFTER, (void*)&AfterCvLuaFractal_CreateFractal);host->RegisterHook(host->pluginIndex, CivHooks::CvLuaFractal_CreateFractal::ID, CIV_HOOK_REPLACE, (void*)&ReplaceCvLuaFractal_CreateFractal);
Code
108CvFractal* CvLuaFractal::CreateFractal(lua_State* L)109{110 //This will use Lua's memory manager and Lua is responsible for destruction.111 void* ptr = lua_newuserdata(L, sizeof(CvFractal));112 CvFractal* pFractal = new(ptr) CvFractal();113114 lua_newtable(L);115116 //__index117 lua_newtable(L);118119 lua_pushvalue(L, -3); //push userdata as upvalue120 lua_pushcclosure(L, lGetHeight, 1);121 lua_setfield(L, -2, "GetHeight");122123 lua_pushvalue(L, -3); //push userdata as upvalue124 lua_pushcclosure(L, lBuildRidges, 1);125 lua_setfield(L, -2, "BuildRidges");126127 lua_setfield(L, -2, "__index");128129 //__gc130 lua_pushcclosure(L, lDestroy, 0);131 lua_setfield(L, -2, "__gc");132133 lua_setmetatable(L, -2);134135 return pFractal;136}