Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Mar 21, 2019, 4:06:42 PM (5 years ago)
Author:
tkuonen
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc

    r12213 r12217  
    11#include "mouseapi.h"
    22
    3 MouseAPI::MouseAPI()
     3MouseAPI::MouseAPI(Camera& camera)
    44{
     5    cam = camera.getOgreCamera();
     6    state = InputManager::getInstance().createInputState("MouseAPI");
     7    state->setMouseExclusive(false);
     8    state->setMouseHandler(this);
     9    InputManager::getInstance().enterState("MouseAPI");
    510
    611}
    712
    8 MouseAPI::~MouseAPI(){}
     13MouseAPI::~MouseAPI(){
     14    //todo look at gslevel destructor and implement this one
     15}
    916
    10 virtual void MouseAPI::buttonPressed (MouseButtonCode::ByEnum button){}
    11 virtual void MouseAPI::mouseMoved    (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize){}
    12 virtual void MouseAPI::mouseScrolled (int abs, int rel){}
     17virtual void MouseAPI::buttonPressed (MouseButtonCode::ByEnum button)
     18{
     19    Ogre::Viewport vp = GraphicsManager::getInstance().getViewport();
     20    Ogre::Ray ray = getCameraToViewPortRay(mousePos.x/((float)vp.getActualWidth()),mousePos.y/((float)vp.getActualHeight()));
     21    for(auto event: clickEvents)
     22    {
     23        for(auto wantedButton:buttons){
     24            if(wantedButton == button && ray.intersects(Ogre::Sphere(event.position,radius)))
     25                (&(event.onClickedFunction))(button);
     26        }
     27    }
     28}
    1329
    14 void addClickableObject(const Vector3& position,float radius,const list<ClickEvent>& events,void (*onClickedFunction)())
     30virtual void MouseAPI::mouseMoved    (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize)
    1531{
    16     clickEvents.insert({position,radius,events,onClickedFunction});
     32    mousePos = abs;
    1733}
    18 void addScrollElement(const Vector3& position,float radius,void (*onScrolledFunction)(int abs,int rel,const IntVector2&  mousePos))
     34
     35virtual void MouseAPI::mouseScrolled (int abs, int rel)
     36{
     37    Ogre::Viewport vp = GraphicsManager::getInstance().getViewport();
     38    Ogre::Ray ray = getCameraToViewPortRay(mousePos.x/((float)vp.getActualWidth()),mousePos.y/((float)vp.getActualHeight()));
     39    for(auto event:scrollEvents){
     40        if(!event.considerPosition || ray.intersects(Ogre::Sphere(event.position,radius)))
     41            (*(event.onScrolledFunction))(abs,rel,mousePos);
     42    }
     43}
     44
     45void MouseAPI::addClickableObject(const Vector3& position,float radius,const list<MouseButtonCode::ByEnum>& buttons,void (*onClickedFunction)(MouseButtonCode::ByEnum button))
     46{
     47    clickEvents.insert({position,radius,buttons,onClickedFunction});
     48}
     49void MouseAPI::addScrollElement(const Vector3& position,float radius,void (*onScrolledFunction)(int abs,int rel,const IntVector2&  mousePos))
    1950{
    2051    scrollEvents.insert(position,radius,onScrolledFunction);
    2152}
    22 void addScrollElement(void (*onScrolledFunction)(int abs,int rel,const IntVector2&  mousePos))
     53void MouseAPI::addScrollElement(void (*onScrolledFunction)(int abs,int rel,const IntVector2&  mousePos))
    2354{
    2455    scrollEvents.insert(onScrolledFunction);
    2556}
     57
     58void MouseAPI::changeCamera(Camera& camera)
     59{
     60    cam = camera.getOgreCamera();
     61}
Note: See TracChangeset for help on using the changeset viewer.