MMORPG大型ゲーム設計と開発(クライアントアーキテクチャpart 2 of vgui)

28113 ワード

このセクションでは、vguiの基礎システムの部分について説明します.ライブラリが外部に提供する重要なインタフェースでもあります.UIセクションの重要なセクションとして、このセクションには重要なセクションがあります.前のセクションが表示されていない場合は、次の接続に注意してください.クライアントUIセクションでは、どのようなものを設計するか想像できます.まずUIのほとんどの操作がウィンドウの表示であるが,ウィンドウにはどのような要素があるのだろうか.リンク、テキスト...
CODE
/**

 * PAP Engine ( -- )

 * $Id system.h

 * @link -- for the canonical source repository

 * @copyright Copyright (c) 2013-2014 viticm( [email protected] )

 * @license

 * @user viticm<[email protected]/[email protected]>

 * @date 2014-3-26 11:26:48

 * @uses vgui base system

 */

#ifndef VGUI_BASE_SYSTEM_H_

#define VGUI_BASE_SYSTEM_H_



#include <OgreRoot.h>

#include <imm.h>

#include "CEGUIString.h"

#include "vengine/ui/system.h"

#include "vgui/config.h"



/** ogre and cegui { **/



namespace Ogre {

class Root;

}; //namespace Ogre



namespace CEGUI {

class System;

class OgreCEGUIRenderer;

class FalagardActionButton;

class EventArgs;

class Window;

}; //namespace CEGUI



namespace vgui_script {

class Base;

}; //namespace vgui_script



/** }ogre and cegui **/



namespace vgui_window {

class Manager;

}; //namespace vgui_base



namespace vgui_icon {

class Manager;

}; //namespace vgui_icon



namespace vgui_string {

class System;

}; //namespace vgui_string



namespace vgui_creature {



namespace head_board {

class System;

}; //namespace head_board



}; //namespace vgui_creature



namespace vgui_base {



class System : public vengine_ui::System {



VENGINE_KERNEL_DECLARE_DYNAMIC(vgui_base_System);



 public:

   System();

   virtual ~System();

   static System* getself();



 public: //implement from abstract class

   virtual void on_windowsize_change(uint32_t message,

                                     WPARAM wparam, 

                                     LPARAM lparam); //        

   virtual void injectinput(); //       true      

   virtual bool messageprocess(HWND hwnd, 

                               uint32_t message, 

                               WPARAM wparam, 

                               LPARAM lparam); //      

   virtual bool is_mousehover(); //     UI  

   //          

   virtual bool is_mousehover_chatboard(int64_t x, int64_t y); 

   //             

   virtual STRING get_chatboard_hyplink_content(int64_t x, int64_t y);

   //           

   virtual vengine_ui::CreatureHeadBoard* create_creature_headboard();

   //            

   virtual void add_behit_board(bool _double, 

                                const char* info, 

                                float startx, 

                                float starty, 

                                uint8_t type, 

                                uint8_t movetype);

   virtual bool is_windowshow(const char* name, 

                              const char* childname = NULL);

   virtual bool close_allwindow();

   //  UI    UI    

   virtual void fakeobject_show(const char* windowname, const char* name);

   // UI    UI    

   virtual void fakeobject_destroy(const char* windowname, 

                                   const char* name);

   

   //debugs

 public:

   virtual void debug_push_chatstring(const char* name, 

                                      const char* message);

   virtual void debug_save_fonttexture();



 public:

   virtual void change_dragflag(bool flag);

   virtual bool is_dragend();



 public:

   //           

   virtual STRING parsestring_varparam(const char* id, ...);

   virtual void parsestring_nocolor(const STRING& in, 

                                    STRING& out, 

                                    bool control = false);

   virtual STRING parsestring_nocolor_varparam(const char* id, ...);

   virtual STRING parsestring_no_varparam(const char* id);

   virtual STRING parsestring_nocolor_no_varparam(const char* id);



   //         

   virtual STRING get_talktemplate(const STRING& key, uint16_t index);

   virtual STRING modify_chattemplate(const STRING& temp, 

                                      const STRING& talker, 

                                      const STRING& target);

   virtual STRING get_talkrand_helpmessage(); //        

   //         EditBox

   virtual bool is_IME_editbox_active(const char* windowname);

   virtual int32_t get_current_IMEstate(); //         

   virtual STRING get_IME_editbox_string(const char* name); //      



   //        

   virtual bool inject_iteminfo(

       vengine_game::ItemTransferSystem::element_t* element);



   virtual void on_pushescape();

   virtual bool is_paopao_active();

   virtual uint32_t lumination_ogrecolor(uint32_t ogrecolor, 

                                         int32_t lumination);

   virtual int32_t ogrecolor_lumination(uint32_t ogrecolor);



   //             

   virtual bool check_stringfilter(

       const STRING& in, 

       const vengine_ui::filtertype_enum type = vengine_ui::kFilterTypeNone);

   virtual bool check_stringcode(const STRING& in, STRING& out);

   //      

   virtual bool check_string_fullcompare(const STRING& in, 

                                         const STRING& filtertype = "all", 

                                         bool use_alltable = true);

   virtual STRING get_debugstring();



   //           

   virtual void openwindow(const STRING& name);

   virtual void closewindow(const STRING& name);

   virtual void togglewindow(const STRING& name);



   virtual bool has_inputfocus();



   //     (           )

   virtual bool add_chathistory_message(int32_t id,

                                        const char* windowname, 

                                        const char* message, 

                                        int32_t type = -1, 

                                        uint32_t disappeartime = 0);

   virtual void replacestring_usefilter(

       const STRING& in, 

       STRING& out, 

       vengine_ui::filtertype_enum filtertype = vengine_ui::kFilterTypeChat);

   virtual STRING check_stringvalid(const char* string);

   virtual bool reload_windowscript(const STRING& windowname);

   virtual void uirender_toggleshow();



 public:

   virtual void init(void*);

   virtual void release();

   virtual void tick();



 public:

   virtual bool is_ctrlinfo_enable();

   virtual void set_ctrlinfo_enable(bool enable);

 

 public: //action buttons

   vgui_icon::Manager* get_iconmanager();

   //      

   bool handle_action_dragdrop_started(const CEGUI::EventArgs& event);

   //    ,  super tooltip

   bool handle_actionbutton_mouseenter(const CEGUI::EventArgs& event);

   //    ,  super tooltip

   bool handle_actionbutton_mouseleave(const CEGUI::EventArgs& event);

   //     

   bool handle_actionbutton_parenthidden(const CEGUI::EventArgs& event);

   //mesh window    

   bool handle_meshwindow_shown(const CEGUI::EventArgs& event);

   //mesh window  

   bool handle_meshwindow_hiden(const CEGUI::EventArgs& event);



 public: //   

   bool handle_hyperlink_active(const CEGUI::EventArgs &event);

   bool handle_hyperlink_leftactive(const CEGUI::EventArgs &event);

   bool handle_hyperlink_rightactive(const CEGUI::EventArgs &event);

   bool handle_hyperlink_inactive(const CEGUI::EventArgs &event);



 public:

   //  itemelement     

   bool handle_elementdelete(const CEGUI::EventArgs &event);

   //chat history   infoelement   

   bool handle_chathistory_infoelement_click(const CEGUI::EventArgs& event);

   //chat history    infoelement   

   bool handle_chathistory_infoelement_movein(const CEGUI::EventArgs& event);

   bool handle_chathistory_infoelement_moveout(const CEGUI::EventArgs& event);

   //click sound            

   bool handle_pushbutton_clicksound(const CEGUI::EventArgs& event);



 protected:

   Ogre::Root* ogreroot_;

   CEGUI::System* cegui_system_;

   CEGUI::OgreCEGUIRenderer* cegui_render_;

   vgui_script::Base* script_;

   vgui_window::Manager* windowmanager_;

   vgui_icon::Manager* iconmanager_;

   vgui_string::System* stringsystem_;

   vgui_creature::head_board::System* creature_headboard_system_;

   CEGUI::String buttonname_indragging_; 

   bool is_dragend_;

   HCURSOR draggingcursor_;

   bool active_paopao_;

   bool is_ctrlinfo_enable_; //      Ctrl              

                             //

   

 protected:

   static System* self_;



 protected:

   void on_dragbegin(CEGUI::FalagardActionButton* dranggingbutton_);

   //    ,targetbutton   button    ,        

   void on_dragend(CEGUI::Window* targetwindow);



};



}; //namespace vgui_base



#endif //VGUI_BASE_SYSTEM_H_

説明する
この中のインタフェースを話す前に、私は園子にツッコミを入れなければならなくて、最近出した博文はすべて正常にトップページに入ることができなくて、中には図文が茂っている文章があっても、その程度はずっと博主に少しがっかりして怠け者だと感じさせました.まず、ブログを発表した理由は、みんなと知識を交流し、共有することであり、他の目的はあまりありません.ここ数日の園子管理の調整については、私も質問する気はありませんが、皆さんが進歩できる文章を共有し、園子の管理がこれらの文章を発見し、普及することができることを心から望んでいます.
以下、この部分の内容をお話ししますが、最近plain frameworkの参考マニュアルを書くのに忙しいので、これまでの知識を共有する暇がありません.そしてクライアントの部分は、これらの重要なインタフェースを皆さんにお見せしたいと思います.皆さんがよく知っていればデザイン面で十分だと思います.ソースコードについては、これらのインタフェースを説明してから出しますので、心配しません.
ベースシステムは、インタフェースの表示とインタフェースイベントの制御を含む比較的包括的なUI操作インタフェースを提供する.OGRE、CEGUI、CEGUI RENDER、SCRIPT、ウィンドウマネージャ、アイコンマネージャ、文字列マネージャ、ロールパネルマネージャなど、いくつかの重要なシステムに関連しています.
リンク
最近plain frameworkフレームワークのドキュメントの整理に追われていますが、文章はトップページから移動されています.興味のある方はhttp://www.cnblogs.com/lianyue/p/3972492.htmlを見てみてください.