[Orxonox-commit 7785] r12377 - in code/branches/MouseAPI_FS19: data/gui/layouts data/gui/scripts data/levels data/overlays src/modules/MouseAPI src/modules/MouseAPIExample
tkuonen at orxonox.net
tkuonen at orxonox.net
Thu May 16 14:27:40 CEST 2019
Author: tkuonen
Date: 2019-05-16 14:27:40 +0200 (Thu, 16 May 2019)
New Revision: 12377
Removed:
code/branches/MouseAPI_FS19/data/gui/layouts/MouseAPICursor.layout
code/branches/MouseAPI_FS19/data/gui/scripts/MouseAPICursor.lua
Modified:
code/branches/MouseAPI_FS19/data/levels/MouseAPIExample.oxw
code/branches/MouseAPI_FS19/data/overlays/MouseCursor.oxo
code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc
code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h
code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.cc
code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.h
code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.cc
code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.h
code/branches/MouseAPI_FS19/src/modules/MouseAPIExample/mouseapiexample.h
Log:
Improve MouseAPI
Add Comments
Cleanup
Deleted: code/branches/MouseAPI_FS19/data/gui/layouts/MouseAPICursor.layout
===================================================================
--- code/branches/MouseAPI_FS19/data/gui/layouts/MouseAPICursor.layout 2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/data/gui/layouts/MouseAPICursor.layout 2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,5 +0,0 @@
-<?xml version='1.0' encoding='utf-8'?>
-<GUILayout version="4">
- <Window name="MouseAPICursor" type="DefaultWindow">
- </Window>
-</GUILayout>
Deleted: code/branches/MouseAPI_FS19/data/gui/scripts/MouseAPICursor.lua
===================================================================
--- code/branches/MouseAPI_FS19/data/gui/scripts/MouseAPICursor.lua 2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/data/gui/scripts/MouseAPICursor.lua 2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,7 +0,0 @@
--- MouseAPICursor.lua
--- Display a Mouse Cursor by displaying a empty Menu
-
-local P = createMenuSheet("MouseAPICursor")
-
-return P
-
Modified: code/branches/MouseAPI_FS19/data/levels/MouseAPIExample.oxw
===================================================================
--- code/branches/MouseAPI_FS19/data/levels/MouseAPIExample.oxw 2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/data/levels/MouseAPIExample.oxw 2019-05-16 12:27:40 UTC (rev 12377)
@@ -9,19 +9,15 @@
include("stats.oxo")
include("HUDTemplates3.oxo")
include("MouseCursor.oxo")
- include("tetrisHUD.oxo")
include("templates/lodInformation.oxt")
?>
-<?lua
- include("templates/spaceshipEscort.oxt")
-?>
-
<Level gametype=MouseGametype>
<templates>
<Template link=lodtemplate_default />
</templates>
+ <!--<?lua include("includes/notifications.oxi") ?>-->
<Scene
ambientlight = "0.8, 0.8, 0.8"
@@ -50,8 +46,6 @@
</attached>
</MouseAPIExample>
-<!--<MouseAPICursor></MouseAPICursor>
-<MouseCursor></MouseCursor>-->
</Scene>
</Level>
Modified: code/branches/MouseAPI_FS19/data/overlays/MouseCursor.oxo
===================================================================
--- code/branches/MouseAPI_FS19/data/overlays/MouseCursor.oxo 2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/data/overlays/MouseCursor.oxo 2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,5 +1,5 @@
<Template name="MouseCursor">
<OverlayGroup name = "MouseCursorGroup" scale = "1, 1">
- <MouseAPICursor name="cursor" position = "0, 0" size="0.03, 0.03" cursorShape="cursor.png"></MouseAPICursor>
+ <MouseAPICursor name="cursor" position = "0, 0" size="0.03, 0.03" cursorShape="cursor.png" cursorColor="1,0,1"></MouseAPICursor>
</OverlayGroup>
</Template>
Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc 2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.cc 2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,15 +1,5 @@
#include "mouseapi.h"
-#if OGRE_VERSION >= 0x010900
-# include <Overlay/OgreOverlayManager.h>
-# include <Overlay/OgrePanelOverlayElement.h>
-#else
-# include <OgreOverlayManager.h>
-# include <OgrePanelOverlayElement.h>
-#endif
-
-#include "util/StringUtils.h"
-
namespace orxonox{
ManageScopedSingleton(MouseAPI, ScopeID::GRAPHICS, false);
@@ -26,26 +16,15 @@
active = true;
if(InputManager::exists())
{
- //cam = CameraManager::getInstance().getActiveCamera()->getOgreCamera();
state = InputManager::getInstance().createInputState("MouseAPI",true,true,99);
state->setMouseExclusive(false);//does this work
state->setMouseHandler(this);
+ gameInputActivated = false;
state->setKeyHandler(KeyBinderManager::getInstance().getDefaultAsHandler());
InputManager::getInstance().enterState("guiMouseOnly");
InputManager::getInstance().enterState("MouseAPI");
InputManager::getInstance().setMouseExclusive("game",false);
- //InputManager::getInstance().setMouseExclusive("guiMouseOnly",false);
- //InputManager::getInstance().getState("game")->
}
- //GUIManager::getInstance().showGUI("MouseAPICursor", true);//Display a mouse cursor by displaying a empty menu
- /*cursor = static_cast<Ogre::PanelOverlayElement*>(Ogre::OverlayManager::getSingleton()
- .createOverlayElement("Panel", "MouseAPI_cursor_" + getUniqueNumberString()));
- cursor->setMaterialName("Orxonox/RadarMarker");//todo: better material
- cursor->setPosition(0,0);
- cursor->setDimensions(0.1,0.1);
- Ogre::Overlay* overlay = Ogre::OverlayManager::getSingleton().create( "MouseAPI_cursor_" + getUniqueNumberString() );
- overlay->show();*/
- //this->overlay_->add2D(this->cursor);
}
}
@@ -54,7 +33,6 @@
{
if(active)
{
- GUIManager::getInstance().showGUI("MouseAPICursor", true);
active = false;
if(InputManager::exists())
{
@@ -65,6 +43,7 @@
}
clickEvents.clear();
scrollEvents.clear();
+ gameInputActivated=false;
}
}
@@ -75,7 +54,7 @@
void MouseAPI::buttonPressed(MouseButtonCode::ByEnum button)
{
- cam = CameraManager::getInstance().getActiveCamera()->getOgreCamera();//todo: trycatch
+ cam = CameraManager::getInstance().getActiveCamera()->getOgreCamera();
Ogre::Viewport *vp = GraphicsManager::getInstance().getViewport();
int mouseposX = InputManager::getInstance().getMousePosition().first;
int mouseposY = InputManager::getInstance().getMousePosition().second;
@@ -93,15 +72,13 @@
void MouseAPI::mouseMoved(IntVector2 abs, IntVector2 rel, IntVector2 clippingSize)
{
- //mousePos = abs;
}
void MouseAPI::tick(float dt)
{
- if(active)
+ if(active && !gameInputActivated)
{
- InputManager::getInstance().leaveState("game");//hack: todo: crate 2nd input state with prioritz 98 for cegui(cursor)
- //GUIManager::getInstance().showGUI("MouseAPICursor", false);//hack todo: only if gui not shown & evt better if not in mouse mooved
+ InputManager::getInstance().leaveState("game");
}
}
@@ -238,7 +215,6 @@
return 0;
}
-//returns relative Position of the Mouse
Vector2 MouseAPI::getMousePosition()
{
Ogre::Viewport *vp = GraphicsManager::getInstance().getViewport();
@@ -245,4 +221,16 @@
return Vector2(InputManager::getInstance().getMousePosition().first/((float)vp->getActualWidth()),InputManager::getInstance().getMousePosition().second/((float)vp->getActualHeight()));
}
+void MouseAPI::activateGameInput()
+{
+ gameInputActivated = true;
+ state->setKeyHandler(nullptr);
}
+
+void MouseAPI::deactivateGameInput()
+{
+ gameInputActivated = false;
+ state->setKeyHandler(KeyBinderManager::getInstance().getDefaultAsHandler());
+}
+
+}
Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h 2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapi.h 2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,9 +1,9 @@
#ifndef MOUSEAPI_H
#define MOUSEAPI_H
-#include "OrxonoxPrereqs.h"
-#include "util/OgreForwardRefs.h"
-#include "graphics/Camera.h"
+#include <OrxonoxPrereqs.h>
+#include <util/OgreForwardRefs.h>
+#include <graphics/Camera.h>
#include <util/Math.h>
#include <list>
#include <core/input/InputHandler.h>
@@ -12,12 +12,12 @@
#include <core/input/InputState.h>
#include <OgreCamera.h>
#include <OgreViewport.h>
-#include "CameraManager.h"
+#include <CameraManager.h>
#include <functional>
-#include "core/GUIManager.h"
-#include "core/input/KeyBinderManager.h"
-#include "tools/interfaces/Tickable.h"
-#include "core/singleton/ScopedSingletonIncludes.h"
+#include <core/GUIManager.h>
+#include <core/input/KeyBinderManager.h>
+#include <tools/interfaces/Tickable.h>
+#include <core/singleton/ScopedSingletonIncludes.h>
/* this class implements a basic mouse-api
* supported are mouse-clicks (left, right, mousewheel, ...) and scrolling
@@ -34,6 +34,11 @@
*
* to make it work, one has to add mouseapi in LINK_LIBRARIES in the file CMakeLists.txt of the level
* see CMakeLists.txt in MouseAPIExample
+ *
+ * MouseAPI: C++ API to access Mouse
+ * MouseGametype: Enable Mouse Cursor & Prevent that each click kills Player if no spaceship is used
+ * MouseAPICursor: Internal API which implements cursor. Usable from custom Gametype (not necessary if MouseGametype is used):
+ * add "this->setHUDTemplate("MouseCursor");" in constructor of Gametype. (Or by inheritance)
*/
namespace orxonox
@@ -95,8 +100,10 @@
// true => MouseAPI has been activated, false => MouseAPI has not been activated
bool active = false;
- Ogre::PanelOverlayElement* cursor;
+ //true => allow ship-controller to get mouse input; Default: false; Gets reset after each transition from deactivated to activated
+ bool gameInputActivated = false;
+
public:
MouseAPI();
@@ -239,6 +246,17 @@
* the function does nothing if MouseAPI is not active
*/
void deactivate();
+
+ /*
+ * allow ship-controller to get mouse input
+ */
+ void activateGameInput();
+
+ /*
+ * do not allow ship-controller to get mouse input
+ * This is the default. This gets set after each transition from deactivated to activated
+ */
+ void deactivateGameInput();
};
}
#endif // MOUSEAPI_H
Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.cc
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.cc 2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.cc 2019-05-16 12:27:40 UTC (rev 12377)
@@ -9,9 +9,7 @@
RegisterObject(MouseAPICursor);
cursor = static_cast<Ogre::PanelOverlayElement*>(Ogre::OverlayManager::getSingleton()
.createOverlayElement("Panel", "MouseAPI_cursor_" + getUniqueNumberString()));
- cursor->setMaterialName(TextureGenerator::getMaterialName(
- cursorname, Ogre::ColourValue::White));
-
+ updateCursor();
overlay_->add2D(this->cursor);
scale(Vector2(0.03,0.03));
setVisible(true);
@@ -21,6 +19,8 @@
{
if(running)
MouseAPI::getInstance().deactivate();
+ if(this->isInitialized())
+ Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->cursor);
}
void MouseAPICursor::XMLPort(ticpp::Element &xmlelement, XMLPort::Mode mode)
@@ -29,7 +29,7 @@
running = true;
SUPER(MouseAPICursor, XMLPort, xmlelement, mode);
XMLPortParam(MouseAPICursor, "cursorShape", setCursorName, getCursorName,xmlelement, mode);
- //XMLPortParam(MouseAPICursor, "cursorColor", setCursorColor, getCursorColor,xmlelement, mode);//TODO: ColoValue::setAsARGB()
+ XMLPortParam(MouseAPICursor, "cursorColor", setCursorColor, getCursorColor,xmlelement, mode);
}
void MouseAPICursor::tick(float dt)
Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.h
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.h 2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mouseapicursor.h 2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,13 +1,11 @@
#ifndef MOUSEAPICURSOR_H
#define MOUSEAPICURSOR_H
#include <overlays/OrxonoxOverlay.h>
-#include "core/CoreIncludes.h"
-#include "tools/interfaces/Tickable.h"
-#include "overlays/OverlayGroup.h"
+#include <core/CoreIncludes.h>
+#include <tools/interfaces/Tickable.h>
#include "mouseapi.h"
-#include "core/XMLPort.h"
+#include <core/XMLPort.h>
-
#if OGRE_VERSION >= 0x010900
# include <Overlay/OgreOverlayManager.h>
# include <Overlay/OgrePanelOverlayElement.h>
@@ -16,8 +14,8 @@
# include <OgrePanelOverlayElement.h>
#endif
-#include "tools/TextureGenerator.h"
-#include "util/StringUtils.h"
+#include <tools/TextureGenerator.h>
+#include <util/StringUtils.h>
namespace orxonox{
@@ -24,24 +22,44 @@
class MouseAPICursor: public OrxonoxOverlay, public Tickable
{
private:
+ //Pointer to the cursor overlay
Ogre::PanelOverlayElement* cursor;
+ //Is Cursor activated?
bool running = false;
+ //Name of the image-file used as the cursor shape
std::string cursorname = "cursor.png";
+ //Color of the cursor
+ Vector3 color = {1,1,1};
public:
MouseAPICursor(Context* context);
~MouseAPICursor();
+ //Update cursor position
virtual void tick(float dt) override;
+ //XMLPort: ability to set cursor shape & color
virtual void XMLPort(ticpp::Element &xmlelement, XMLPort::Mode mode) override;
+ //Update cursol look (shape & color)
+ inline void updateCursor(){
+ cursor->setMaterialName(TextureGenerator::getMaterialName(
+ cursorname, Ogre::ColourValue(color[0],color[1],color[2],1)));
+ }
inline void setCursorName(const std::string& name)
{
cursorname = name;
- cursor->setMaterialName(TextureGenerator::getMaterialName(
- cursorname, Ogre::ColourValue::White));
+ updateCursor();
}
inline std::string getCursorName(void) const
{
return cursorname;
}
+ inline void setCursorColor(const Vector3& cl)
+ {
+ color = cl;
+ updateCursor();
+ }
+ inline Vector3 getCursorColor(void) const
+ {
+ return color;
+ }
};
Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.cc
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.cc 2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.cc 2019-05-16 12:27:40 UTC (rev 12377)
@@ -7,6 +7,7 @@
RegisterObject(MouseGametype);
player_ =nullptr;
+ //Activate the Mouse Cursor
this->setHUDTemplate("MouseCursor");
}
@@ -13,15 +14,7 @@
void MouseGametype::start()
{
- bool temp = this->bForceSpawn_;
- this->bForceSpawn_ = true;
-
- // Call start for the parent class.
Gametype::start();
-
- // Reset the variable.
- this->bForceSpawn_ = temp;
-
}
void MouseGametype::spawnPlayersIfRequested()
@@ -36,7 +29,7 @@
void MouseGametype::spawnPlayer(PlayerInfo* player)
{
assert(player);
-
+ //Only Spawn once
if(this->player_ == nullptr)
{
this->player_ = player;
Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.h
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.h 2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPI/mousegametype.h 2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,10 +1,10 @@
#ifndef MOUSEGAMETYPE_H
#define MOUSEGAMETYPE_H
-#include "gametypes/Gametype.h"
-#include "core/CoreIncludes.h"
-#include "infos/PlayerInfo.h"
+#include <gametypes/Gametype.h>
+#include <core/CoreIncludes.h>
+#include <infos/PlayerInfo.h>
#include <core/input/InputState.h>
-#include "core/GUIManager.h"
+#include <core/GUIManager.h>
namespace orxonox
{
Modified: code/branches/MouseAPI_FS19/src/modules/MouseAPIExample/mouseapiexample.h
===================================================================
--- code/branches/MouseAPI_FS19/src/modules/MouseAPIExample/mouseapiexample.h 2019-05-16 12:20:38 UTC (rev 12376)
+++ code/branches/MouseAPI_FS19/src/modules/MouseAPIExample/mouseapiexample.h 2019-05-16 12:27:40 UTC (rev 12377)
@@ -1,10 +1,10 @@
#ifndef MOUSEAPIEXAMPLE_H
#define MOUSEAPIEXAMPLE_H
-#include "core/XMLPort.h"
-#include "MouseAPI/mouseapi.h"
-#include "core/CoreIncludes.h"
-#include "worldentities/ControllableEntity.h"
+#include <core/XMLPort.h>
+#include <MouseAPI/mouseapi.h>
+#include <core/CoreIncludes.h>
+#include <worldentities/ControllableEntity.h>
#include <list>
namespace orxonox
More information about the Orxonox-commit
mailing list