游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5130|回复: 0

盖莫游戏引擎-插件-插件工厂

[复制链接]

56

主题

94

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2010-6-23 14:13:00 | 显示全部楼层 |阅读模式

本着简单,易用的设计原则
我给盖莫引擎加入了一个简单的插件系统
插件基类如下:
class Plugin : public
virtual RefCount
{
public:
    virtual
~Plugin(){}
    virtual PLUGIN_FORMAT GetFormat()const
=
0;
    virtual engine_string GetMaker()const
=
0;
    virtual engine_string GetDescription()const
=
0;
    virtual
void  GetVersion(int
&main,int
&sub,int
&pitch) =
0;
private:   
    virtual
bool Init(void* data) =
0;
    virtual
void Deinit(void* data) =
0;
    friend class PluginFactory;
};

可以看出基本的插件方法有获取插件格式,插件作者,插件描述,插件版本等
下面的是简单的插件工厂
////////////////////////////////////////////////////////////
/// 定义引擎插件工厂(管理器)
////////////////////////////////////////////////////////////
class GAPI PluginFactory : public Singleton&ltluginFactory>
{
public:
    bool RegisterPlugin(Plugin* plugin);
    void UnRegisterPlugin(Plugin* plugin);
};
这是一个简单的单件
它只有2个函数注册和反注册插件
使用的时候只要获取插件指针
然后传入插件工厂注册之后即可使用
(注册的本质就是根据插件类型设置必要的插件上下文数据)

这种插件方法有它的弊端 不过在我看来最大的好处就是简单咯

下面是简单的视频播放插件咯
////////////////////////////////////////////////////////////
/// 定义引擎视频播放器(全局唯一)
////////////////////////////////////////////////////////////
class VideoPlayer : public Plugin
{
public:
    ///////////////////////////////////////////////////////
    /// 构造,析构视频播放器
    ///////////////////////////////////////////////////////
    VideoPlayer(){}
    virtual
~VideoPlayer(){}
       ///////////////////////////////////////////////////////
    /// 播放指定视频
    ///////////////////////////////////////////////////////

virtual
bool Play(const engine_string& video) =
0;
   
    ///////////////////////////////////////////////////////
    /// 视频更新每帧调用
    ///////////////////////////////////////////////////////   

virtual
bool Update() =
0;
   
    ///////////////////////////////////////////////////////
    /// 停止并卸载视频?
    ///////////////////////////////////////////////////////

virtual
void Stop() =
0;
   
    ///////////////////////////////////////////////////////
    /// 获取,设置视频当前音量(0-1)
    ///////////////////////////////////////////////////////   

virtual
float GetVolume()const
=
0;
    virtual
void  SetVolume(float volume) =
0;
};
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-11-4 16:48

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表