CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 1 of 1
  1. #1
    Join Date
    Dec 2010
    Posts
    907

    Type casting problem

    Code:
    class BaseApplication : public Ogre::FrameListener, public Ogre::WindowEventListener, public OIS::KeyListener, public OIS::MouseListener, OgreBites::SdkTrayListener
    {
    public:
        BaseApplication(void);
        virtual ~BaseApplication(void);
    
        virtual void go(void);
    
        /**
          * Set to true to prevent the application from locking/grabbing the mouse when stopping at breakpoints using
          * a debugger. Probably only useful on linux and MAX OS.
          **/
        static bool DISABLE_MOUSE_GRAB;
    
        /**
          * Set to true to restore config from ogre.cfg if it is found. Set to false to always pop up the configuration window.
          **/
        static bool RESTORE_CONFIG;
    	
    protected:
        virtual bool setup();
        virtual bool configure(void);
        virtual void chooseSceneManager(void);
        virtual void createCamera(void);
        virtual void createFrameListener(void);
        virtual void createScene(void) = 0; // Override me!
        virtual void destroyScene(void);
        virtual void createViewports(void);
        virtual void setupResources(void);
        virtual void createResourceListener(void);
        virtual void loadResources(void);
    
        // Ogre::FrameListener
        virtual bool frameRenderingQueued(const Ogre::FrameEvent& evt);
    
        // OIS::KeyListener
        virtual bool keyPressed( const OIS::KeyEvent &arg );
        virtual bool keyReleased( const OIS::KeyEvent &arg );
        // OIS::MouseListener
        virtual bool mouseMoved( const OIS::MouseEvent &arg );
        virtual bool mousePressed( const OIS::MouseEvent &arg, OIS::MouseButtonID id );
        virtual bool mouseReleased( const OIS::MouseEvent &arg, OIS::MouseButtonID id );
    
        // Ogre::WindowEventListener
        //Adjust mouse clipping area
        virtual void windowResized(Ogre::RenderWindow* rw);
        //Unattach OIS before window shutdown (very important under Linux)
        virtual void windowClosed(Ogre::RenderWindow* rw);
    
        Ogre::Root *mRoot;
        Ogre::Camera* mCamera;
        Ogre::SceneManager* mSceneMgr;
        Ogre::RenderWindow* mWindow;
        Ogre::String mResourcesCfg;
        Ogre::String mPluginsCfg;
    
        // OgreBites
        OgreBites::SdkTrayManager* mTrayMgr;
        OgreBites::SdkCameraMan* mCameraMan;       // basic camera controller
        OgreBites::ParamsPanel* mDetailsPanel;     // sample details panel
        bool mCursorWasVisible;                    // was cursor visible before dialog appeared
        bool mShutDown;
    
        //OIS Input devices
        OIS::InputManager* mInputManager;
        OIS::Mouse*    mMouse;
        OIS::Keyboard* mKeyboard;
    };
    Code:
    /*
    -----------------------------------------------------------------------------
    Filename:    BaseApplication.cpp
    -----------------------------------------------------------------------------
    
    This source file is part of the
       ___                 __    __ _ _    _ 
      /___\__ _ _ __ ___  / / /\ \ (_) | _(_)
     //  // _` | '__/ _ \ \ \/  \/ / | |/ / |
    / \_// (_| | | |  __/  \  /\  /| |   <| |
    \___/ \__, |_|  \___|   \/  \/ |_|_|\_\_|
          |___/                              
          Tutorial Framework
          http://www.ogre3d.org/tikiwiki/
    -----------------------------------------------------------------------------
    */
    #include "BaseApplication.h"
     
    
    
    // Set to true to avoid application grabbing the mouse when debugging
    bool BaseApplication::DISABLE_MOUSE_GRAB = false;
    
    // Set to true to reload a previously saved ogre.cfg file if it is found.
    // Set to false to always show the config dialog.
    bool BaseApplication::RESTORE_CONFIG = true;
    
    
    //-------------------------------------------------------------------------------------
    BaseApplication::BaseApplication(void)
        : mRoot(0),
        mCamera(0),
        mSceneMgr(0),
        mWindow(0),
        mResourcesCfg(Ogre::StringUtil::BLANK),
        mPluginsCfg(Ogre::StringUtil::BLANK),
        mTrayMgr(0),
        mCameraMan(0),
        mDetailsPanel(0),
        mCursorWasVisible(false),
        mShutDown(false),
        mInputManager(0),
        mMouse(0),
        mKeyboard(0)
    {
    }
    
    //-------------------------------------------------------------------------------------
    BaseApplication::~BaseApplication(void)
    {
        if (mTrayMgr) delete mTrayMgr;
        if (mCameraMan) delete mCameraMan;
    
        //Remove ourself as a Window listener
        Ogre::WindowEventUtilities::removeWindowEventListener(mWindow, this);
        windowClosed(mWindow);
        delete mRoot;
    }
    
    //-------------------------------------------------------------------------------------
    bool BaseApplication::configure(void)
    {
        // Show the configuration dialog and initialise the system
        // You can skip this and use root.restoreConfig() to load configuration
        // settings if you were sure there are valid ones saved in ogre.cfg
        if(RESTORE_CONFIG && mRoot->restoreConfig() || mRoot->showConfigDialog())
        {
            // If returned true, user clicked OK so initialise
            // Here we choose to let the system create a default rendering window by passing 'true'
            mWindow = mRoot->initialise(true, "OgreRecast Demo");
    
            return true;
        }
        else
        {
            return false;
        }
    }
    //-------------------------------------------------------------------------------------
    void BaseApplication::chooseSceneManager(void)
    {
        // Get the SceneManager, in this case a generic one
        mSceneMgr = mRoot->createSceneManager(Ogre::ST_GENERIC);
    }
    //-------------------------------------------------------------------------------------
    void BaseApplication::createCamera(void)
    {
        // Create the camera
        mCamera = mSceneMgr->createCamera("PlayerCam");
    
        // Position it at 500 in Z direction
        mCamera->setPosition(Ogre::Vector3(0,0,80));
        // Look back along -Z
        mCamera->lookAt(Ogre::Vector3(0,0,-300));
        mCamera->setNearClipDistance(0.1);
    
        mCameraMan = new OgreBites::SdkCameraMan(mCamera);   // create a default camera controller
    }
    //-------------------------------------------------------------------------------------
    void BaseApplication::createFrameListener(void)
    {
        Ogre::LogManager::getSingletonPtr()->logMessage("*** Initializing OIS ***");
        OIS::ParamList pl;
        size_t windowHnd = 0;
        std::ostringstream windowHndStr;
    
        mWindow->getCustomAttribute("WINDOW", &windowHnd);
        windowHndStr << windowHnd;
        pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
    
    
        if(BaseApplication::DISABLE_MOUSE_GRAB)
        {
            // Fix OIS locking the mouse in render window. Especially useful when debugging
            //      http://www.ogre3d.org/forums/viewtopic.php?f=5&t=61988
            #if defined OIS_WIN32_PLATFORM
               pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_FOREGROUND" )));
               pl.insert(std::make_pair(std::string("w32_mouse"), std::string("DISCL_NONEXCLUSIVE")));
               pl.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_FOREGROUND")));
               pl.insert(std::make_pair(std::string("w32_keyboard"), std::string("DISCL_NONEXCLUSIVE")));
            #elif defined OIS_LINUX_PLATFORM
               pl.insert(std::make_pair(std::string("x11_mouse_grab"), std::string("false")));
               pl.insert(std::make_pair(std::string("x11_keyboard_grab"), std::string("false")));
            #endif
        }
    
    
        mInputManager = OIS::InputManager::createInputSystem( pl );
    
        mKeyboard = static_cast<OIS::Keyboard*>(mInputManager->createInputObject( OIS::OISKeyboard, true ));
        mMouse = static_cast<OIS::Mouse*>(mInputManager->createInputObject( OIS::OISMouse, true ));
    
        mMouse->setEventCallback(this);
        mKeyboard->setEventCallback(this);
    
        //Set initial mouse clipping size
        windowResized(mWindow);
    
        //Register as a Window listener
        Ogre::WindowEventUtilities::addWindowEventListener(mWindow, this);
    
        mTrayMgr = new OgreBites::SdkTrayManager(Ogre::String("InterfaceName"), mWindow, 
                mMouse, (SdkTrayListener*) this);
    //...
    The mingw32 compiler was complaining about this
    Code:
    ogrerecast/Samples/src/BaseApplication.cpp: In member function 'virtual void BaseApplication::createFrameListener()':
    ogrerecast/Samples/src/BaseApplication.cpp:142:44: error: no matching function for call to 'OgreBites::SdkTrayManager::SdkTrayManager(Ogre::String, Ogre::RenderWindow*&, OIS::Mouse*&, OgreBites::SdkTrayListener*)'
                 mMouse, (SdkTrayListener*) this);
    This code was remained intact since it was downloaded, OIS::Mouse* can't be OgreBite::InputContext
    But they are related, Mouse is derived from InputContext, how should I feed the variables into the
    constructor of SdkTrayManager properly and correctly?
    Oh, my bad InputContext and Mouse aren't related, but I don't know if the interfaces have changed,
    which seem very confusing...
    Thanks
    Jack
    Last edited by lucky6969b; May 5th, 2014 at 01:34 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured