Irrlicht_0.1源码学习(4)—include/irrTypes.h & include/IeventReceiver.h

irrTypes.h这个文件做的事很简单,通过一系列typedef操作定义了Irrlicht引擎中的所有基本数据类型,以保证引擎的可移植性。

IeventReceiver.h则定义了一些用于事件系统中的枚举和结构/类。其中包含了EEVENT_TYPE、EMOUSE_INPUT_EVENT、EGUI_EVENT_TYPE三种枚举类型以及SEvent结构和IEventReceiver类。

EEVENT_TYPE:用于枚举irrlicht引擎中所有的事件类型(gui事件、鼠标事件、键盘事件)

    //! Enumeration for all event types there are.
    enum EEVENT_TYPE
    {
        //! An event of the graphical user interface.
        EET_GUI_EVENT = 0,

        //! A mouse input event.
        EET_MOUSE_INPUT_EVENT,

        //! A key input evant.
        EET_KEY_INPUT_EVENT
    };

EMOUSE_INPUT_EVENT:用于枚举所有的鼠标输入事件

    //! Enumeration for all mouse input events
    enum EMOUSE_INPUT_EVENT
    {
        //! Left mouse button was pressed down.
        EMIE_LMOUSE_PRESSED_DOWN = 0,
        //! Right mouse button was pressed down.
        EMIE_RMOUSE_PRESSED_DOWN,
        //! Middle mouse button was pressed down.
        EMIE_MMOUSE_PRESSED_DOWN,
        //! Left mouse button was left up.
        EMIE_LMOUSE_LEFT_UP,
        //! Right mouse button was left up.
        EMIE_RMOUSE_LEFT_UP,
        //! Middle mouse button was left up.
        EMIE_MMOUSE_LEFT_UP,
        //! The mouse cursor changed its position.
        EMIE_MOUSE_MOVED
    };

EGUI_EVENT_TYPE:用于枚举所有由gui系统投递出的事件

   //! Enumeration for all events which are sendable by the gui system
   enum EGUI_EVENT_TYPE
   {
       //! A gui element has lost its key focus.
       EGET_ELEMENT_KEY_FOCUS_LOST = 0,
       //! A gui element has lost its mouse focus.
       EGET_ELEMENT_MOUSE_FOCUS_LOST,
       //! A gui element was hovered.
       EGET_ELEMENT_HOVERED,
       //! A button was clicked.
       EGET_BUTTON_CLICKED,
       //! A scrollbar has changed its position.
       EGET_SCROLL_BAR_CHANGED,
       //! A checkbox has changed its check state.
       EGET_CHECKBOX_CHANGED,
       //! A new item in a listbox was seleted.
       EGET_LISTBOX_CHANGED,
       /! An item in the listbox was selected, which was already selected.
       EGET_LISTBOX_SELECTED_AGAIN,
   };

SEvent:用于储存各类事件相关数据的结构体,其实现中使用union优化内存占用情况

//! Struct for holding event data. An event can be a gui, mouse or keyboard event.
struct SEvent
{
    EEVENT_TYPE EventType;

    union
    {
        struct
        {
            gui::IGUIElement* Caller;
            gui::EGUI_EVENT_TYPE EventType;
        } GUIEvent;

        struct
        {
            s32 X, Y; // mouse positions;
            EMOUSE_INPUT_EVENT Event;
        } MouseInput;

        struct
        {
            s32 Key; // TODO key
            bool PressedDown; // if not pressed, then left up
        } KeyInput;

    };

};

IEventReceiver:所有能够接收事件的对象必须实现的接口类,内部声明了一个处理各类事件的纯虚函数(OnEvent)

//! Interface of an object wich can receive events.
class IEventReceiver
{
public:

    //! called if an event happened. returns true if event was processed
    virtual bool OnEvent(SEvent event) = 0;
};
时间: 2024-10-14 00:58:19

Irrlicht_0.1源码学习(4)—include/irrTypes.h & include/IeventReceiver.h的相关文章

Irrlicht_0.1源码学习(5)—include/core/dimension2d.h、include/core/position2d.h、IUnknown.h、Keycodes.h & include/IrrlichtDevice.h

因为之前的学习中有遇着引擎核心模块中dimension2d和position2d这两个头文件,这里我们先把这两个文件过一遍. 首先是include/core下的dimension2d.h,这个头文件里面定义了一个叫做dimension2d的模板类,用以包装一个二维尺寸. 该类的字段只有Width和Height两个,比较容易理解,然后根据其构造方式的多样性实现了三种不同的构造方法,再接着是一些重载的运算符,分别用于判断相等.不等以及赋值. 同样,include/core下的position2d.h

Irrlicht_0.1源码学习(3)—include/Irrlicht.h

从这一篇开始分析学习irrlicht源码,第一次就交给include目录下的Irrlicht.h头文件吧:) 文件的最开始是一大段绿油油的注释块,主要写了一些版权相关的东西,这里直接忽略...,有兴趣的自行阅读 然后是一连串预编译指令,没啥好说的,引用了n多的头文件,这里暂不作添加,以后分析完再一个一个慢慢添加进来就可以了. 继续向下看,这个文件包含的内容很简单,先声明一个创建引擎设备对象的函数(createDevice),然后建立一个命名空间irr,在该命名空间里又分别包含了:core.gui

Irrlicht_0.1源码学习(1)——Welcome to the Irrlicht Engine

关于Irrlicht这一引擎,想必不用过多介绍什么了,下面是我从其首页上搬来的一段介绍文字,以供参考 The Irrlicht Engine is an open source high performance realtime 3D engine written in C++. It is completely cross-platform, using D3D, OpenGL and its own software renderers, and has all of the state-o

Irrlicht_0.1源码学习(6)—include/core/*

由于irrlicht引擎core部分的主要内容为一系列的自定数据结构以及一些重要的常量,理解难度着实不大,毕竟都是一些coding的基本功了. 首先打开irrmath.h,该文件在core命名空间里定义了4个常数:用于32位浮点数比较的误差精度ROUNDING_ERROR.圆周率常量PI.以及角度弧度相互转换的转换系数GRAD_PI和GRAD_PI2. 接着我们打开heapsort.h,看文件名就能猜到,这个文件应该是用来实现堆排序功能的.果不其然,该文件中只实现了两个堆排序相关的函数:heap

Redis源码学习-Lua脚本

Redis源码学习-Lua脚本 1.Sublime Text配置 我是在Win7下,用Sublime Text + Cygwin开发的,配置方法请参考<Sublime Text 3下C/C++开发环境搭建>. 要注意的是:在Cygwin中安装Lua解析器后,SublimeClang插件就能识别出可饮用的Lua头文件了,因为Build System中我们已经配置过"-I", "D:\\cygwin64\\usr\\include",而新安装的Lua头文件会

Spring源码学习笔记(3)

Spring源码学习笔记(三) 前言----     最近花了些时间看了<Spring源码深度解析>这本书,算是入门了Spring的源码吧.打算写下系列文章,回忆一下书的内容,总结代码的运行流程.推荐那些和我一样没接触过SSH框架源码又想学习的,阅读郝佳编著的<Spring源码深度解析>这本书,会是个很好的入门. DispatcherServlet 实现核心功能 和普通的 Servelt 类一样, DispatcherServlet 中的 doGet() 和 doPost() 方法

Redis源码学习:字符串

Redis源码学习:字符串 1.初识SDS 1.1 SDS定义 Redis定义了一个叫做sdshdr(SDS or simple dynamic string)的数据结构.SDS不仅用于 保存字符串,还用来当做缓冲区,例如AOF缓冲区或输入缓冲区等.如下所示,整数len和free分别表示buf数组中已使用的长度和剩余可用的长度,buf是一个原生C字符串,以\0结尾. sds就是sdshdr中char buf[]的别名,后面能看到,各种操作函数的入参和返回值都是sds而非sdshdr.那sdshd

Netty源码学习——ChannelPipeline模型分析

参考Netty API io.netty.channel.ChannelPipeline A list of ChannelHandlers which handles or intercepts inbound events and outbount operations of aChannel.ChannelPipeline implements an advanced form of theIntercepting Filter pattern to give a user full co

caffe源码学习之Proto数据格式【1】

前言: 由于业务需要,接触caffe已经有接近半年,一直忙着阅读各种论文,重现大大小小的模型. 期间也总结过一些caffe源码学习笔记,断断续续,这次打算系统的记录一下caffe源码学习笔记,巩固一下C++,同时也梳理一下自己之前的理解. 正文: 我们先不看caffe的框架结构,先介绍一下caffe.proto,是google开源的一种数据交互格式--Google Protobuf,这种数据的格式,我们可以看到caffe.proto中内容: syntax = "proto2"; pac