Lua 事件触发机制(注册,触发)

日常工作中经常会用到触发机制,这里就提供一个注册触发机制,在代码中在也不用专门去调用各个模块的接口;只需要触发即可,触发后会自动调用接口

直接上代码


local _EventHandle = {};
_EventHandle.listenerHandleIndex = 0
_EventHandle.listenersList = {}function _EventHandle:AddEventListener(eventName, listener)eventName = string.upper(eventName);if self.listenersList[eventName] == nil thenself.listenersList[eventName] = {};endself.listenerHandleIndex = self.listenerHandleIndex + 1;self.listenersList[eventName][self.listenerHandleIndex] = listener;return self.listenerHandleIndex;
endfunction _EventHandle:dispatchEvent(event)event.name = string.upper(event.name);local _eventName = event.name;if self.listenersList[_eventName] == nil then return; endfor _index, _listener in pairs(self.listenersList[_eventName]) dolocal ok, _ret = Try(_listener, event)if not ok thenG_logger:warn_format("[_EventHandle:dispatchEvent] Failed, event:%s, err:%s", _eventName, tostring(_ret))elseif _ret == "__REMOVE__" thenself.listenersList[_eventName][_index] = nil;endend
endfunction _EventHandle:removeEventListener(eventName, key)eventName = string.upper(eventName);if self.listenersList[eventName] == nil then return; endfor _index, _listener in pairs(self.listenersList[eventName]) doif key == _index or key == _listener thenself.listenersList[eventName][_index] = nil;break;endend
endfunction _EventHandle:removeAllEventListenersForEvent(eventName)self.listenersList[string.upper(eventName)] = nil;
endfunction _EventHandle:removeAllEventListeners()self.listenersList = {};
endreturn _EventHandle;

AddEventListener:注册接口

dispatchEvent:触发接口

其他的接口都是移除接口

调用

注册:Event:AddEventListener("Event:try_unlock_idcard", __on_event_try_unlock_idcard),__on_event_try_unlock_idcard是回调函数

触发:Event:dispatchEvent({name = "Event:try_unlock_idcard", player = avatar_part.owner, data_type = HotPot_Type.flash_avatar_part_count, value = avatar_part.flash_count})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118836.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Overload游戏引擎细节分析】standard材质Shader

提示:Shader属于GPU编程,难写难调试,阅读本文需有一定的OpenGL基础,可以写简单的Shader,不适合不会OpenGL的朋友 一、Blinn-Phong光照模型 Blinn-Phong光照模型,又称为Blinn-phong反射模型(Bli…

腾讯云抱歉不满足产品首购条件解决方法

购买腾讯云服务器提示“抱歉,检测到相同实名认证主体已购买,不满足产品首购条件,您可了解其他商品。”,购买腾讯云特价云服务器是有新用户首购限制的,说当前腾讯云认证主体的其他账号已经购买过云服务器,一…

【wespeaker】模型ECAPA_TDNN介绍

本次主要介绍开源项目wespeaker模型介绍 1. 模型超参数 model_args: feat_dim: 80 embed_dim: 192 pooling_func: “ASTP” projection_args: project_type: “softmax” # add_margin, arc_margin, sphere, softmax scale: 32.0 easy_margin: False 2. 模型结构 2.1 Layer…

【Python机器学习】零基础掌握FeatureHasher特征提取

如何高效地处理海量特征数据? 在大数据和机器学习的时代,处理海量的数据特征是一个常见但棘手的问题。特别是在文本分析、社交媒体挖掘或电子商务推荐系统中,数据维度经常会非常高。那么,如何在不损失太多信息的情况下,高效地处理这些高维数据呢? 想象一下,一个社交媒…

node-red常用包分析

node-red-contrib-opcua Use OpcUa-Item to define variables. Use OpcUa-Client to read / write / subscribe / browse OPC UA server. 需要想通过OpcUa-Item节点来指定一个数据点。 触发器-->opcua_item----->opcua_client opcua_client的Action项解析: …

【前端设计模式】之抽象工厂模式

抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定具体类。在前端开发中,抽象工厂模式可以帮助我们更好地组织和管理代码,提高代码的可维护性和可扩展性。 抽象工厂模式特性 抽象工…

HugeGraph Hubble 配置 https 协议的操作步骤

背景 HugeGraph 图数据库的 Server 端支持 https 配置,官方文档中有说明相对比较容易,而 Hubble 部署过程都是 http的。 我们有一个应用要嵌入 hubble 页面,而且部署为 https ,那么 Hubble 是否支持配置 https 呢?网…

大数据技术学习笔记(三)—— Hadoop 的运行模式

目录 1 本地模式2 伪分布式模式3 完全分布式模式3.1 准备3台客户机3.2 同步分发内容3.2.1 分发命令3.2.2 执行分发操作 3.3 集群配置3.3.1 集群部署规划3.3.2 配置文件说明3.3.3 修改配置文件3.3.4 分发配置信息 3.4 SSH无密登录配置3.4.1 配置ssh3.4.2 无密钥配置 3.5 单点启动…

python的多线程介绍之thread

python的多线程介绍之thread Python的thread模块是Python标准库中的一个模块,用于创建和管理线程。它是Python早期支持多线程的方式之一,但在Python 2.4之后,推荐使用threading模块来实现多线程。 以下是thread模块的一些基本功能和用法&…

随笔 | 写在剑桥学习一个月的这一天

目录 来剑桥的第一天各种意外正式的冒险社恐直接表达放轻松,勇敢面对后记. 来剑桥的第一天 来剑桥的第一天,还是那么印象深刻。 那是来英国的第二天,伦敦的天气还行,偶尔多云偶尔天晴。 和他纠结半天,最终还是选择了…

C++【多态】

文章目录: C 多态1. 多态的概念2. 多态的定义和实现2.1 构成多态的必要条件2.2 虚函数和重写2.3 虚函数重写的两个例外2.4 例题运用2.5 final 和 override2.6 重载、重写、重定义 3. 抽象类4. 多态的原理4.1 虚表指针4.2 多态和非多态调用4.3 回想满足条件4.4 虚函数…

Selenium中WebDriver最新Chrome驱动安装教程

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

【广州华锐互动】智能家居设计3D虚拟还原系统

随着科技的飞速发展,人们对家居生活的需求也在不断提高。智能家居作为一种新兴的生活方式,正逐渐成为现代人追求的理想居住环境。而智能家居设计3D虚拟还原系统,正是为了让人们更好地了解和体验智能家居带来的便捷与舒适,让未来生…

聚观早报 |2024年春节连休8天;RTE2023开幕

【聚观365】10月26日消息 2024年春节连休8天 RTE2023开幕 一加12首发“东方屏” 微软公布2024财年第一财季财报 Alphabet Q3业绩好于预期 2024年春节连休8天 国务院办公厅发布关于2024年部分节假日安排的通知。2024年春节,2月10日至17日放假调休,共…

1023 组个最小数

给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最…

面向边缘场景的 PWA 实践

背景 随着5G技术的发展,物联网边缘侧主要应用于数据传输量大、安全要求高以及数据实时处理等行业与应用场景中。其中,边缘计算是一种分布式计算模式,其将计算资源和数据处理能力推向接近数据源的边缘设备,以减少延迟并提高响应速度…

信息系统架构的设计理论与实践

信息系统架构的设计理论与实践 信息系统架构概述 信息系统架构的定义和发展 信息系统架构的定义 骚戴理解:这里只要背定义即可 信息系统架构的发展 信息系统架构的分类(集中式和分布式) 集中式结构 分布式结构 信息系统常用的四种架构模型…

番外8.2---配置/管理硬盘

""" Step1:清楚磁盘、硬盘(HDD)、光驱的概念及是否具有包含关系。 Step2:硬件设备(IDE、SCSI、SATA、NVMe、软驱等)命名方式及在linux系统里对应的文件名称。 Step3:&#xff1…

2023-10学习笔记

1.sql注入 不管是上一篇博客,通过java代码执行sql 还是我们常用的Mybatis的#{}和${} 都会提到sql注入的问题 1.1啥是sql注入 应该知道是说传入无关的参数,比如本来是想要一个where条件查询参数 但是你拼了一个drop 比如 原来的sql select * from…

Python数据结构——数组

数组是一种基本的数据结构,用于存储一系列相同类型的元素。Python提供了多种数组实现,包括列表、NumPy数组和array模块。本文将详细介绍Python中的数组数据结构的使用,并提供示例代码来说明。 列表(List):…