#include "mouseapi.h" MouseAPI::MouseAPI(Camera& camera) { cam = camera.getOgreCamera(); state = InputManager::getInstance().createInputState("MouseAPI"); state->setMouseExclusive(false);//does this work state->setMouseHandler(this); InputManager::getInstance().enterState("MouseAPI"); } MouseAPI::~MouseAPI(){ //todo look at gslevel destructor and implement this one } virtual void MouseAPI::buttonPressed (MouseButtonCode::ByEnum button) { Ogre::Viewport vp = GraphicsManager::getInstance().getViewport(); Ogre::Ray ray = getCameraToViewPortRay(mousePos.x/((float)vp.getActualWidth()),mousePos.y/((float)vp.getActualHeight())); for(auto event: clickEvents) { for(auto wantedButton:buttons){ if(wantedButton == button && ray.intersects(Ogre::Sphere(event.position,radius))) (&(event.onClickedFunction))(button); } } } virtual void MouseAPI::mouseMoved (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) { mousePos = abs; } virtual void MouseAPI::mouseScrolled (int abs, int rel) { Ogre::Viewport vp = GraphicsManager::getInstance().getViewport(); Ogre::Ray ray = getCameraToViewPortRay(mousePos.x/((float)vp.getActualWidth()),mousePos.y/((float)vp.getActualHeight())); for(auto event:scrollEvents){ if(!event.considerPosition || ray.intersects(Ogre::Sphere(event.position,radius))) (*(event.onScrolledFunction))(abs,rel,mousePos); } } void MouseAPI::addClickableObject(const Vector3& position,float radius,const list& buttons,void (*onClickedFunction)(MouseButtonCode::ByEnum button)) { clickEvents.insert({position,radius,buttons,onClickedFunction}); } void MouseAPI::addScrollElement(const Vector3& position,float radius,void (*onScrolledFunction)(int abs,int rel,const IntVector2& mousePos)) { scrollEvents.insert(position,radius,onScrolledFunction); } void MouseAPI::addScrollElement(void (*onScrolledFunction)(int abs,int rel,const IntVector2& mousePos)) { scrollEvents.insert(onScrolledFunction); } void MouseAPI::changeCamera(Camera& camera) { cam = camera.getOgreCamera(); }