--[[ file name . GameList.lua author . Clark/陈泽丹 created . 8.13.2011 purpose . 双向队列 --]] --module("GameList", package.seeall) --双向队列 function list_newList() local first = 1 local last = 0 local list = {} local listManager = {} function listManager.pushFront(_tempObj) first = first - 1 list[first] = _tempObj end function listManager.pushBack(_tempObj) last = last + 1 list[last] = _tempObj end function listManager.temp_getFront() if listManager.bool_isEmpty() then return nil else local val = list[first] return val end end function listManager.temp_getBack() if listManager.bool_isEmpty() then return nil else local val = list[last] return val end end function listManager.popFront() if listManager.bool_isEmpty() then return end list[first] = nil first = first + 1 end function listManager.popBack() if listManager.bool_isEmpty() then return end list[last] = nil last = last - 1 end function listManager.clear() while false == listManager.bool_isEmpty() do listManager.popFront() end end function listManager.bool_isEmpty() if first > last then first = 1 last = 0 return true else return false end end function listManager.d_getSize() if listManager.bool_isEmpty() then return 0 else return last - first + 1 end end return listManager end
--[[ file name : GameEvents.lua author : Clark/陈泽丹 created : 8:13:2011 purpose : 故事情节线 --]] --module("GameEvents", package.seeall) --pakList = require "GameList" function manager_newEventManager() --事件流 function events_newEvents(_ID) local ID = _ID or os.time() local cmdpars = list_newList() --隐藏数据 local events = {} --公开数据 function events.id_getID() return ID end --添加事件 function events.push(_trigger, _tTgrPar, _fun, _tFunPar, _szName) local t = { szName = _szName or "", trigger = _trigger, tTgrPar = _tTgrPar or {}, fun = _fun, tFunPar = _tFunPar or {}} cmdpars.pushBack(t) end --清空事件 function events.clear() cmdpars.clear() end --创建事件 function events.setEvent() local tVal = cmdpars.temp_getFront() if nil ~= tVal then if nil ~= tVal.trigger then API_TraceError(tVal.szName .. " setEvent") tVal.trigger(events.id_getID(), tVal.tTgrPar) end end end --处理事件 function events.onEvent(tEventPar) local tEventPar = tEventPar or {} local tVal = cmdpars.temp_getFront() cmdpars.popFront() if nil ~= tVal then if nil ~= tVal.fun then tVal.fun(events.id_getID(), tVal.tFunPar, tEventPar) API_TraceError(tVal.szName .. " onEvent") end end end --是否还有事件 function events.bool_isEmpty() local val = cmdpars.bool_isEmpty() return val end return events --返回公开数据 end --事件流的管理 local et = {} local manager = {} function manager.events_newEvents(_ID) et[_ID] = events_newEvents(_ID) return et[_ID] end function manager.events_getEvents(_ID) return et[_ID] end function manager.deleteEvents(_ID) if nil ~= et[_ID] then et[_ID].clear() end et[_ID] = nil end return manager end
EVENT_MANAGER = manager_newEventManager() --API_TraceError --API_Trace --监视器基类(语法所限, 未把相关函数实现为虚函数) local function trigger_newGTrigger(_eventID) local triggerThis = { pTrigger = nil, --监视器指针为空 m_eventID = _eventID } --API_TraceError("-> ------------------- newTrigger ------------------ " .. triggerThis.m_eventID) --删除全局触发器 function triggerThis.nil_deleteTrigger() API_DestroyTriggerG(triggerThis.pTrigger) --API_TraceError("<- ----------------- deleteTrigger ----------------- " .. triggerThis.m_eventID) return nil end return triggerThis end --死亡回调函数 function onDieCallBack(_tEventPar, param2, Type, FastID, KillerType, KillerID, MonsterID, MapID, PosX, PosY) API_TraceError("onDieCallBack " .. _tEventPar .. " Kill: " .. MonsterID) local et = EVENT_MANAGER.events_getEvents(_tEventPar) if nil ~= et then et.onEvent() et.setEvent() end end --时间的全局触发函数 function onTimeCallBack(_tEventPar) API_TraceError("onTimeCallBack " .. _tEventPar) local et = EVENT_MANAGER.events_getEvents(_tEventPar) if nil ~= et then et.onEvent() et.setEvent() end end --区域监听生物的全局触发器个人角色版 function onAreaCallBack(_dTeamID, _tEventPar, _param3, _param4) API_TraceError("onAreaCallBack " .. _tEventPar) local et = EVENT_MANAGER.events_getEvents(_tEventPar) if nil ~= et then et.onEvent() et.setEvent() end end TestEventID = 0 function onAreaSigleCallBack(_dTeamID, _tEventPar, _param3, _param4) API_TraceError("onAreaSigleCallBack " .. _dTeamID) local et = EVENT_MANAGER.events_getEvents(TestEventID) if nil ~= et then et.onEvent() et.setEvent() end end --生成死亡的全局触发器 function trigger_newGDieTrigger(_tEventPar, _pSomething) local triggerThis = trigger_newGTrigger(_tEventPar) triggerThis.pTrigger = API_CreateDieTriggerG(_tEventPar, 0, 0, _pSomething, "onDieCallBack") if 0 == triggerThis.pTrigger then API_TraceError("Failed in trigger_newGDieTrigger: API_CreateDieTriggerG ") end return triggerThis end --生成时间的全局触发器 function trigger_newGTimerTrigger(_tEventPar, _timeStep) local triggerThis = trigger_newGTrigger(_tEventPar) triggerThis.pTrigger = API_CreateTimerTriggerG(_tEventPar, os.time(), _timeStep, 1, "onTimeCallBack") if 0 == triggerThis.pTrigger then API_TraceError("Failed in trigger_newGTimerTrigger: API_CreateTimerTriggerG ") end return triggerThis end --生成监听生物的全局触发器 function trigger_newGSigleAreaTrigger(_tEventPar, _dTeamID, _dMapObj, _dPosX, _dPosY, _dRadius) local triggerThis = trigger_newGTrigger(_tEventPar) triggerThis.pTrigger = API_CreateAreaCreatureTriggerG(0, _dTeamID, _dMapObj, _dPosX, _dPosY, _dRadius, "onAreaSigleCallBack") if 0 == triggerThis.pTrigger then API_TraceError("Failed in trigger_newGAreaTrigger: API_CreateAreaCreatureTriggerG ") end return triggerThis end