4 #include "../enduser.h"
5 #include "viewframelistener.h"
8 #include <CEGUI/CEGUI.h>
10 #include <OgreCEGUIRenderer.h>
14 class View
: public WindowEventListener
, public EndUser
17 View() : mRoot(0), mKeyboard(0), mMouse(0), mInputManager(0),
18 mRenderer(0), mSystem(0), mListener(0), mBoardWidth(0),
19 mBoardHeight(0), mRound(0), mPast(false)
23 virtual void init(const Board
* board
, Middleman
*middleman
) {
24 EndUser::init(board
, middleman
);
31 initializeResourceGroups();
35 createFrameListener();
40 createInitialExplosion();
42 } catch( Exception
& e
) {
43 fprintf(stderr
, "An exception has occurred: %s\n", e
.what());
44 } catch (std::exception
& e
) {
45 std::cerr
<< "An exception has occured: " << e
.what() << std::endl
;
49 virtual void setBoard(const Board
* const board
, unsigned int round
)
51 mListener
->getAnimationManager().finishAnimations();
52 mSceneMgr
->getRootSceneNode()->removeAndDestroyAllChildren();
53 mSceneMgr
->destroyAllEntities();
60 virtual void move(int fromX
, int fromY
, int toX
, int toY
,
61 bool continuous
= false)
63 mListener
->move(fromX
, fromY
, toX
, toY
, continuous
);
70 virtual void promoteMove(int fromX
, int fromY
, int toX
, int toY
,
71 unsigned int promoteTo
)
73 mListener
->move(fromX
, fromY
, toX
, toY
, true, 0);
74 mListener
->move(toX
, toY
, toX
, toY
, true, promoteTo
);
78 virtual void setControl(bool white
, bool black
) { }
80 virtual int getBoardWidth() const { return mBoardWidth
; }
81 virtual int getBoardHeight() const { return mBoardHeight
; }
82 virtual bool isWhiteTurn() const { return mRound
% 2 == 0; }
84 virtual void convertPosition(const Vector3
& position
, int* x
, int* y
) const;
85 virtual Vector3
convertPosition(double x
, double y
) const;
86 void createGround(bool visible
);
87 virtual SceneNode
* createPiece(char type
, const std::string
& modelName
, const Vector3
& location
, SceneNode
* parent
= 0);
88 std::string
getMeshName(char symbol
) const;
89 CEGUI::Window
* createGUIComponent(const std::string
& text
, double x
, double y
,
90 double sizeX
, double sizeY
, const std::string
& type
= "Button", bool setText
= true, bool visible
= true);
91 virtual void setPromotionMove(int fromX
, int fromY
, int toX
, int toY
);
92 void setChooseButtonsVisibility(bool visible
);
93 virtual void windowClosed(RenderWindow
* rw
);
94 void ensureLatestState();
95 virtual void recreateDeadPieces();
100 OIS::Keyboard
* mKeyboard
;
102 OIS::InputManager
* mInputManager
;
103 CEGUI::OgreCEGUIRenderer
* mRenderer
;
104 CEGUI::System
* mSystem
;
105 ViewFrameListener
* mListener
;
106 SceneManager
* mSceneMgr
;
108 RenderWindow
* mWindow
;
109 std::size_t mBoardWidth
;
110 std::size_t mBoardHeight
;
112 std::vector
<int> promotionMove
;
116 void defineResources();
117 void setupRenderSystem();
118 void createRenderWindow();
119 void initializeResourceGroups();
121 void setupInputSystem();
123 void createFrameListener();
124 void startRenderLoop();
125 virtual void createCamera();
126 virtual void createViewports();
127 virtual void createInitialExplosion();
128 virtual Entity
* loadEntity(const std::string
& entityName
, const std::string
& modelName
);
129 virtual void recreateLog();
133 void createBoard(const Board
* board
);
135 bool undo(const CEGUI::EventArgs
& e
);
136 bool restart(const CEGUI::EventArgs
& e
);
137 bool visitSelectedLog(const CEGUI::EventArgs
& e
);
138 bool chooseQueen(const CEGUI::EventArgs
& e
);
139 bool chooseRook(const CEGUI::EventArgs
& e
);
140 bool chooseKnight(const CEGUI::EventArgs
& e
);
141 bool chooseBishop(const CEGUI::EventArgs
& e
);
142 void sendPromotionMove(unsigned int promoteTo
);
145 #endif // _NALCG_VIEW_H_