1 #pragma once 2 #include <OgreRenderTargetListener.h> 3 #include <list> 4 5 class SETTINGS; 6 namespace Ogre { class SceneNode; class Root; class SceneManager; class RenderWindow; class Viewport; } 7 8 /* 9 * SplitScreenManager can be used to split up the screen into 2 - 4 areas. 10 * This is useful for "Hotseat" game mode (Multiple players driving against each other on the same PC) 11 * 12 * For every player a viewport and a camera will be created. 13 * Also there is one transparent fullscreen viewport on top of the others, for the GUI. 14 * 15 * One instance of SplitScreenManager is created when the game is started, 16 * and it will be destroyed when game quits. 17 */ 18 19 class SplitScr : public Ogre::RenderTargetListener 20 { 21 public: 22 // Constructor, only assign members 23 SplitScr(Ogre::SceneManager* sceneMgr, Ogre::RenderWindow* window, SETTINGS* set); 24 ~SplitScr(); 25 26 // Number of viewports / cameras 27 int mNumViewports; 28 29 // Lists for player viewports & cameras 30 std::list<Ogre::Viewport*> mViewports; 31 std::list<Ogre::Camera*> mCameras; 32 33 // Gui viewport & scene manager 34 Ogre::SceneManager* mGuiSceneMgr; 35 Ogre::Viewport* mGuiViewport; 36 37 // This method should always be called after mNumPlayers is changed. 38 // It will create new viewports and cameras and arrange them. 39 void Align(); 40 41 // dimensions for the viewport of each player [4] 42 struct VPDims 43 { Ogre::Real top,left, width,height, right,bottom, avgsize; DefaultVPDims44 void Default() { top=0.f; left=0.f; width=1.f; height=1.f; right=1.f; bottom=1.f; avgsize=1.f; } VPDimsVPDims45 VPDims() { Default(); } 46 } mDims[4]; 47 48 // Destroy viewports & cameras 49 void CleanUp(); 50 51 // Adjust viewport size / camera aspect ratio 52 // Should be called whenever the window size changes 53 void AdjustRatio(); 54 55 // Set background color for all viewports 56 void SetBackground(const Ogre::ColourValue& color); 57 58 // Update the view distance for all cameras. 59 // This will be called when the view distance slider in gui is changed. 60 void UpdateCamDist(); 61 62 void preViewportUpdate(const Ogre::RenderTargetViewportEvent& evt); 63 void postViewportUpdate(const Ogre::RenderTargetViewportEvent& evt); 64 65 class App* pApp; 66 private: 67 SETTINGS* pSet; 68 69 // Scene manager to use 70 Ogre::SceneManager* mSceneMgr; 71 72 // Render window to use 73 Ogre::RenderWindow* mWindow; 74 }; 75