Changeset 1293 for code/trunk/src
- Timestamp:
- May 15, 2008, 5:44:55 PM (17 years ago)
- Location:
- code/trunk/src
- Files:
-
- 44 edited
- 40 copied
Legend:
- Unmodified
- Added
- Removed
-
code/trunk/src/core/BaseObject.cc
r1209 r1293 45 45 @brief Constructor: Registers the object in the BaseObject-list. 46 46 */ 47 BaseObject::BaseObject() 47 BaseObject::BaseObject() : 48 bActive_(true), 49 bVisible_(true), 50 level_(0), 51 namespace_(0) 48 52 { 49 53 RegisterRootObject(BaseObject); 50 51 this->bActive_ = true;52 this->bVisible_ = true;53 this->level_ = 0;54 this->namespace_ = 0;55 54 } 56 55 -
code/trunk/src/core/CommandExecutor.h
r1214 r1293 89 89 inline std::string getAdditionalParameter() const 90 90 { return (this->additionalParameter_ != "") ? (" " + this->additionalParameter_) : ""; } 91 inline std::string getCommandString() const { return this->processedCommand_; } 91 92 92 93 void setEvaluatedParameter(unsigned int index, MultiTypeMath param); -
code/trunk/src/core/CoreIncludes.h
r1062 r1293 59 59 if (orxonox::Identifier::isCreatingHierarchy() && this->getParents()) \ 60 60 this->getParents()->insert(this->getParents()->end(), this->getIdentifier()); \ 61 orxonox::ClassManager<ClassName>::getIdentifier()->addObject(this) 61 orxonox::ClassManager<ClassName>::getIdentifier()->addObject(this); \ 62 if (orxonox::Identifier::isCreatingHierarchy()) \ 63 return 62 64 63 65 /** -
code/trunk/src/core/CorePrereqs.h
r1219 r1293 144 144 145 145 // input 146 //class GUIInputHandler; 146 147 class InputBuffer; 147 148 class InputBufferListener; 148 149 class InputManager; 150 class JoyStickHandler; 149 151 class KeyBinder; 150 class GUIInputHandler;151 152 class KeyHandler; 152 153 class MouseHandler; 153 class JoyStickHandler;154 154 155 155 } -
code/trunk/src/core/Debug.h
r1219 r1293 273 273 #define CCOUT_EXEC(x) \ 274 274 orxonox::OutputHandler::getOutStream().setOutputLevel(x) \ 275 << "*** " <<this->getIdentifier()->getName() << ": "275 << this->getIdentifier()->getName() << ": " 276 276 277 277 #ifndef CCOUT -
code/trunk/src/core/Error.cc
r1062 r1293 37 37 namespace orxonox 38 38 { 39 Error::Error()40 {41 Error(0,"");42 }43 44 39 Error::Error(std::string errorMsg, int errorCode) 45 {46 Error(errorCode, errorMsg);47 }48 49 Error::Error(int errorCode, std::string errorMsg)50 40 { 51 41 COUT(1) << "############################ "<< std::endl -
code/trunk/src/core/Error.h
r1062 r1293 44 44 { 45 45 public: 46 Error(); 47 Error(std::string errorMsg, int errorCode = 0); 48 Error(int errorCode, std::string errorMsg = ""); 46 Error(std::string errorMsg = "", int errorCode = 0); 49 47 private: 50 48 -
code/trunk/src/core/InputBuffer.cc
r1220 r1293 23 23 * Fabian 'x3n' Landau 24 24 * Co-authors: 25 * ...25 * Reto Grieder 26 26 * 27 27 */ … … 32 32 33 33 #include "util/Clipboard.h" 34 #include "InputManager.h" 34 #include "CoreIncludes.h" 35 #include "ConfigValueIncludes.h" 35 36 36 37 namespace orxonox 37 38 { 38 InputBuffer::InputBuffer() 39 { 40 //this->bActivated_ = false; 41 this->allowedChars_ = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZäöüÄÖÜ0123456789 \\\"(){}[]<>.:,;_-+*/=!?|$&%^"; 42 this->keyboard_ = InputManager::getKeyboard(); 43 this->buffer_ = ""; 44 45 //this->keyboard_->setEventCallback(this); 46 } 47 48 InputBuffer::InputBuffer(const std::string allowedChars) 49 { 50 //this->bActivated_ = false; 51 this->allowedChars_ = allowedChars; 52 this->keyboard_ = InputManager::getKeyboard(); 53 this->buffer_ = ""; 54 } 55 /* 56 void InputBuffer::registerListener(InputBufferListener* listener, void (InputBufferListener::*function)(), bool bOnlySingleInput) 57 { 58 struct InputBufferListenerTuple newListener = {listener, function, true, bOnlySingleInput, ' '}; 59 this->listeners_.insert(this->listeners_.end(), newListener); 60 } 61 62 void InputBuffer::registerListener(InputBufferListener* listener, void (InputBufferListener::*function)(), char char_, bool bOnlySingleInput) 63 { 64 struct InputBufferListenerTuple newListener = {listener, function, false, bOnlySingleInput, char_}; 65 this->listeners_.insert(this->listeners_.end(), newListener); 66 } 67 */ 68 void InputBuffer::set(const std::string& input) 69 { 70 this->buffer_ = ""; 71 this->append(input); 72 } 73 74 void InputBuffer::append(const std::string& input) 75 { 76 for (unsigned int i = 0; i < input.size(); i++) 77 { 78 if (this->charIsAllowed(input[i])) 79 this->buffer_ += input[i]; 80 81 this->updated(input[i], false); 82 } 83 this->updated(); 84 } 85 86 void InputBuffer::append(const char& input) 87 { 88 if (this->charIsAllowed(input)) 89 this->buffer_ += input; 90 91 this->updated(input, true); 92 } 93 94 void InputBuffer::clear() 95 { 96 this->buffer_ = ""; 97 this->updated(); 98 } 99 100 void InputBuffer::removeLast() 101 { 102 this->buffer_ = this->buffer_.substr(0, this->buffer_.size() - 1); 103 this->updated(); 104 } 105 106 void InputBuffer::updated() 107 { 108 for (std::list<InputBufferListenerTuple>::iterator it = this->listeners_.begin(); it != this->listeners_.end(); ++it) 109 { 110 if ((*it).bListenToAllChanges_) 111 (*(*it).listener_.*(*it).function_)(); 112 } 113 } 114 115 void InputBuffer::updated(const char& update, bool bSingleInput) 116 { 117 for (std::list<InputBufferListenerTuple>::iterator it = this->listeners_.begin(); it != this->listeners_.end(); ++it) 118 { 119 if (((*it).bListenToAllChanges_ || ((*it).char_ == update)) && (!(*it).bOnlySingleInput_ || bSingleInput)) 120 (*(*it).listener_.*(*it).function_)(); 121 } 122 } 123 124 /*void InputBuffer::activityChanged() const 125 { 126 }*/ 127 128 bool InputBuffer::charIsAllowed(const char& input) 129 { 130 if (this->allowedChars_ == "") 131 return true; 132 else 133 return (this->allowedChars_.find(input) != std::string::npos); 134 } 135 136 bool InputBuffer::keyPressed(const OIS::KeyEvent &e) 137 { 138 /*if (e.key == OIS::KC_NUMPADENTER) 139 { 140 this->setActivated(!this->isActivated()); 141 this->clear(); 142 return true; 143 }*/ 144 145 if (this->keyboard_->isModifierDown(OIS::Keyboard::Ctrl)) 146 { 147 if (e.key == OIS::KC_V) 148 { 149 this->append(fromClipboard()); 150 return true; 151 } 152 else if (e.key == OIS::KC_C) 153 { 154 toClipboard(this->buffer_); 155 return true; 156 } 157 else if (e.key == OIS::KC_X) 158 { 159 toClipboard(this->buffer_); 160 this->clear(); 161 return true; 162 } 163 } 164 else if (this->keyboard_->isModifierDown(OIS::Keyboard::Shift)) 165 { 166 if (e.key == OIS::KC_INSERT) 167 { 168 this->append(fromClipboard()); 169 return true; 170 } 171 else if (e.key == OIS::KC_DELETE) 172 { 173 toClipboard(this->buffer_); 174 this->clear(); 175 return true; 176 } 177 } 178 179 //std::cout << this->keyboard_->getAsString(e.key) << " / " << (char)e.text << std::endl; 180 181 std::string input = this->keyboard_->getAsString(e.key); 182 /*if (input.size() >= 1) 183 this->append(input[0]);*/ 184 185 this->append((char)e.text); 186 return true; 187 } 188 189 bool InputBuffer::keyReleased(const OIS::KeyEvent &e) 190 { 191 return true; 192 } 39 InputBuffer::InputBuffer(const std::string allowedChars) : 40 buffer_(""), 41 allowedChars_(allowedChars), 42 lastKey_(KeyCode::Unassigned), 43 timeSinceKeyPressed_(0.0f), 44 timeSinceKeyRepeated_(0.0f), 45 keysToRepeat_(0) 46 { 47 RegisterObject(InputBuffer); 48 setConfigValues(); 49 } 50 51 void InputBuffer::setConfigValues() 52 { 53 SetConfigValue(keyRepeatDeleay_, 0.4).description("Key repeat deleay of the input buffer"); 54 SetConfigValue(keyRepeatTime_, 0.022).description("Key repeat time of the input buffer"); 55 if (keyRepeatDeleay_ < 0.0) 56 { 57 ResetConfigValue(keyRepeatDeleay_); 58 } 59 if (keyRepeatTime_ < 0.0) 60 { 61 ResetConfigValue(keyRepeatTime_); 62 } 63 } 64 /* 65 void InputBuffer::registerListener(InputBufferListener* listener, void (InputBufferListener::*function)(), bool bOnlySingleInput) 66 { 67 struct InputBufferListenerTuple newListener = {listener, function, true, bOnlySingleInput, ' '}; 68 listeners_.insert(listeners_.end(), newListener); 69 } 70 71 void InputBuffer::registerListener(InputBufferListener* listener, void (InputBufferListener::*function)(), char char_, bool bOnlySingleInput) 72 { 73 struct InputBufferListenerTuple newListener = {listener, function, false, bOnlySingleInput, char_}; 74 listeners_.insert(listeners_.end(), newListener); 75 } 76 */ 77 void InputBuffer::set(const std::string& input) 78 { 79 buffer_ = ""; 80 append(input); 81 } 82 83 void InputBuffer::append(const std::string& input) 84 { 85 for (unsigned int i = 0; i < input.size(); i++) 86 { 87 if (charIsAllowed(input[i])) 88 buffer_ += input[i]; 89 90 updated(input[i], false); 91 } 92 updated(); 93 } 94 95 void InputBuffer::append(const char& input) 96 { 97 if (charIsAllowed(input)) 98 buffer_ += input; 99 100 updated(input, true); 101 } 102 103 void InputBuffer::clear() 104 { 105 buffer_ = ""; 106 updated(); 107 } 108 109 void InputBuffer::removeLast() 110 { 111 buffer_ = buffer_.substr(0, buffer_.size() - 1); 112 updated(); 113 } 114 115 void InputBuffer::updated() 116 { 117 for (std::list<InputBufferListenerTuple>::iterator it = listeners_.begin(); it != listeners_.end(); ++it) 118 { 119 if ((*it).bListenToAllChanges_) 120 (*(*it).listener_.*(*it).function_)(); 121 } 122 } 123 124 void InputBuffer::updated(const char& update, bool bSingleInput) 125 { 126 for (std::list<InputBufferListenerTuple>::iterator it = listeners_.begin(); it != listeners_.end(); ++it) 127 { 128 if (((*it).bListenToAllChanges_ || ((*it).char_ == update)) && (!(*it).bOnlySingleInput_ || bSingleInput)) 129 (*(*it).listener_.*(*it).function_)(); 130 } 131 } 132 133 bool InputBuffer::charIsAllowed(const char& input) 134 { 135 if (allowedChars_ == "") 136 return true; 137 else 138 return (allowedChars_.find(input) != std::string::npos); 139 } 140 141 142 void InputBuffer::processKey(const KeyEvent &evt) 143 { 144 if (evt.isModifierDown(KeyboardModifier::Ctrl)) 145 { 146 if (evt.key == KeyCode::V) 147 append(fromClipboard()); 148 else if (evt.key == KeyCode::C) 149 toClipboard(buffer_); 150 else if (evt.key == KeyCode::X) 151 { 152 toClipboard(buffer_); 153 clear(); 154 } 155 } 156 else if (evt.isModifierDown(KeyboardModifier::Shift)) 157 { 158 if (evt.key == KeyCode::Insert) 159 { 160 append(fromClipboard()); 161 } 162 else if (evt.key == KeyCode::Delete) 163 { 164 toClipboard(buffer_); 165 clear(); 166 } 167 } 168 //std::string input = keyboard_->getAsString(e.key); 169 /*if (input.size() >= 1) 170 append(input[0]);*/ 171 172 append((char)evt.text); 173 } 174 175 void InputBuffer::tick(float dt) 176 { 177 timeSinceKeyPressed_ += dt; 178 if (keysToRepeat_ < 10 && timeSinceKeyPressed_ > keyRepeatDeleay_) 179 { 180 // initial time out has gone by, start repeating keys 181 while (timeSinceKeyPressed_ - timeSinceKeyRepeated_ > keyRepeatTime_) 182 { 183 timeSinceKeyRepeated_ += keyRepeatTime_; 184 keysToRepeat_++; 185 } 186 } 187 } 188 189 bool InputBuffer::keyPressed(const KeyEvent &evt) 190 { 191 lastKey_ = evt.key; 192 timeSinceKeyPressed_ = 0.0; 193 timeSinceKeyRepeated_ = keyRepeatDeleay_; 194 keysToRepeat_ = 0; 195 196 processKey(evt); 197 return true; 198 } 199 200 bool InputBuffer::keyHeld(const KeyEvent& evt) 201 { 202 if (evt.key == lastKey_) 203 { 204 while (keysToRepeat_) 205 { 206 processKey(evt); 207 keysToRepeat_--; 208 } 209 } 210 return true; 211 } 212 193 213 } -
code/trunk/src/core/InputBuffer.h
r1219 r1293 23 23 * Fabian 'x3n' Landau 24 24 * Co-authors: 25 * ...25 * Reto Grieder 26 26 * 27 27 */ … … 35 35 #include <list> 36 36 37 #include " ois/OISKeyboard.h"38 #include " InputHandler.h"37 #include "InputInterfaces.h" 38 #include "Tickable.h" 39 39 40 40 namespace orxonox 41 41 { 42 43 42 class _CoreExport InputBufferListener 43 {}; 44 44 45 class _CoreExport InputBuffer : public KeyHandler 45 class _CoreExport InputBuffer : public KeyHandler, public TickableReal 46 { 47 struct InputBufferListenerTuple 46 48 { 47 struct InputBufferListenerTuple 48 { 49 InputBufferListener* listener_; 50 void (InputBufferListener::*function_)(); 51 bool bListenToAllChanges_; 52 bool bOnlySingleInput_; 53 char char_; 54 }; 49 InputBufferListener* listener_; 50 void (InputBufferListener::*function_)(); 51 bool bListenToAllChanges_; 52 bool bOnlySingleInput_; 53 char char_; 54 }; 55 55 56 57 InputBuffer();58 InputBuffer(const std::string allowedChars);56 public: 57 InputBuffer(const std::string allowedChars = 58 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZäöüÄÖÜ0123456789 \\\"(){}[]<>.:,;_-+*/=!?|$&%^"); 59 59 60 template <class T> 61 void registerListener(T* listener, void (T::*function)(), bool bOnlySingleInput) 62 { 63 struct InputBufferListenerTuple newListener = {listener, (void (InputBufferListener::*)())function, true, bOnlySingleInput, ' '}; 64 this->listeners_.insert(this->listeners_.end(), newListener); 65 } 66 template <class T> 67 void registerListener(T* listener, void (T::*function)() const, bool bOnlySingleInput) 68 { 69 struct InputBufferListenerTuple newListener = {listener, (void (InputBufferListener::*)())function, true, bOnlySingleInput, ' '}; 70 this->listeners_.insert(this->listeners_.end(), newListener); 71 } 60 void setConfigValues(); 72 61 73 74 void registerListener(T* listener, void (T::*function)(), char char_, bool bOnlySingleInput)75 76 struct InputBufferListenerTuple newListener = {listener, (void (InputBufferListener::*)())function, false, bOnlySingleInput, char_};77 78 79 80 void registerListener(T* listener, void (T::*function)() const, char char_, bool bOnlySingleInput)81 82 struct InputBufferListenerTuple newListener = {listener, (void (InputBufferListener::*)())function, false, bOnlySingleInput, char_};83 84 62 template <class T> 63 void registerListener(T* listener, void (T::*function)(), bool bOnlySingleInput) 64 { 65 struct InputBufferListenerTuple newListener = {listener, (void (InputBufferListener::*)())function, true, bOnlySingleInput, ' '}; 66 this->listeners_.insert(this->listeners_.end(), newListener); 67 } 68 template <class T> 69 void registerListener(T* listener, void (T::*function)() const, bool bOnlySingleInput) 70 { 71 struct InputBufferListenerTuple newListener = {listener, (void (InputBufferListener::*)())function, true, bOnlySingleInput, ' '}; 72 this->listeners_.insert(this->listeners_.end(), newListener); 73 } 85 74 86 void set(const std::string& input); 87 void append(const std::string& input); 88 void append(const char& input); 89 void removeLast(); 90 void clear(); 75 template <class T> 76 void registerListener(T* listener, void (T::*function)(), char char_, bool bOnlySingleInput) 77 { 78 struct InputBufferListenerTuple newListener = {listener, (void (InputBufferListener::*)())function, false, bOnlySingleInput, char_}; 79 this->listeners_.insert(this->listeners_.end(), newListener); 80 } 81 template <class T> 82 void registerListener(T* listener, void (T::*function)() const, char char_, bool bOnlySingleInput) 83 { 84 struct InputBufferListenerTuple newListener = {listener, (void (InputBufferListener::*)())function, false, bOnlySingleInput, char_}; 85 this->listeners_.insert(this->listeners_.end(), newListener); 86 } 91 87 92 void updated(); 93 void updated(const char& update, bool bSingleInput); 88 void set(const std::string& input); 89 void append(const std::string& input); 90 void append(const char& input); 91 void removeLast(); 92 void clear(); 94 93 95 inline std::string get() const96 { return this->buffer_; }94 void updated(); 95 void updated(const char& update, bool bSingleInput); 97 96 98 /*inline void activate() 99 { this->setActivated(true); } 100 inline void deactivate() 101 { this->setActivated(false); } 102 inline void setActivated(bool bActivated) 103 { if (this->bActivated_ != bActivated) { this->bActivated_ = bActivated; this->activityChanged(); } else { this->bActivated_ = bActivated; } } 104 inline bool isActivated() const 105 { return this->bActivated_; } 97 inline std::string get() const 98 { return this->buffer_; } 106 99 107 void activityChanged() const;*/ 100 private: // functions 101 bool charIsAllowed(const char& input); 108 102 109 private: 110 bool charIsAllowed(const char& input); 103 bool keyPressed (const KeyEvent& evt); 104 bool keyReleased(const KeyEvent& evt) { return true; } 105 bool keyHeld (const KeyEvent& evt); 106 void processKey (const KeyEvent &e); 111 107 112 bool keyPressed(const OIS::KeyEvent &e); 113 bool keyReleased(const OIS::KeyEvent &e); 114 bool keyHeld(const OIS::KeyEvent &e) { return true; } 108 void tick(float dt); 115 109 116 OIS::Keyboard* keyboard_; 117 //bool bActivated_; 118 std::string buffer_; 119 std::list<InputBufferListenerTuple> listeners_; 120 std::string allowedChars_; 121 }; 110 private: // variables 111 std::string buffer_; 112 std::list<InputBufferListenerTuple> listeners_; 113 std::string allowedChars_; 114 115 KeyCode::Enum lastKey_; 116 float timeSinceKeyPressed_; 117 float timeSinceKeyRepeated_; 118 int keysToRepeat_; 119 120 // configured values 121 float keyRepeatDeleay_; 122 float keyRepeatTime_; 123 }; 122 124 } 123 125 -
code/trunk/src/core/InputHandler.cc
r1219 r1293 33 33 34 34 #include "InputHandler.h" 35 #include "util/Convert.h" 35 36 #include "Debug.h" 36 37 #include "ConfigValueIncludes.h" 37 38 #include "CoreIncludes.h" 38 #include "util/Convert.h" 39 #include "core/CommandExecutor.h" 39 #include "CommandExecutor.h" 40 40 41 41 namespace orxonox … … 55 55 std::string keyNames[] = { 56 56 "UNASSIGNED", 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 57 "ESCAPE", 58 "1", 59 "2", 60 "3", 61 "4", 62 "5", 63 "6", 64 "7", 65 "8", 66 "9", 67 "0", 68 "MINUS", 69 "EQUALS", 70 "BACK", 71 "TAB", 72 "Q", 73 "W", 74 "E", 75 "R", 76 "T", 77 "Y", 78 "U", 79 "I", 80 "O", 81 "P", 82 "LBRACKET", 83 "RBRACKET", 84 "RETURN", 85 "LCONTROL", 86 "A", 87 "S", 88 "D", 89 "F", 90 "G", 91 "H", 92 "J", 93 "K", 94 "L", 95 "SEMICOLON", 96 "APOSTROPHE", 97 "GRAVE", 98 "LSHIFT", 99 "BACKSLASH", 100 "Z", 101 "X", 102 "C", 103 "V", 104 "B", 105 "N", 106 "M", 107 "COMMA", 108 "PERIOD", 109 "SLASH", 110 "RSHIFT", 111 "MULTIPLY", 112 "LMENU", 113 "SPACE", 114 "CAPITAL", 115 "F1", 116 "F2", 117 "F3", 118 "F4", 119 "F5", 120 "F6", 121 "F7", 122 "F8", 123 "F9", 124 "F10", 125 "NUMLOCK", 126 "SCROLL", 127 "NUMPAD7", 128 "NUMPAD8", 129 "NUMPAD9", 130 "SUBTRACT", 131 "NUMPAD4", 132 "NUMPAD5", 133 "NUMPAD6", 134 "ADD", 135 "NUMPAD1", 136 "NUMPAD2", 137 "NUMPAD3", 138 "NUMPAD0", 139 "DECIMAL", 140 140 "","", 141 142 143 141 "OEM_102", 142 "F11", 143 "F12", 144 144 "","","","","","","","","","","", 145 146 147 145 "F13", 146 "F14", 147 "F15", 148 148 "","","","","","","","","","", 149 149 "KANA", 150 150 "","", 151 151 "ABNT_C1", 152 152 "","","","","", 153 154 "", 155 156 "", 157 158 153 "CONVERT", 154 "", 155 "NOCONVERT", 156 "", 157 "YEN", 158 "ABNT_C2", 159 159 "","","","","","","","","","","","","","", 160 160 "NUMPADEQUALS", 161 161 "","", 162 163 164 165 166 167 168 169 170 162 "PREVTRACK", 163 "AT", 164 "COLON", 165 "UNDERLINE", 166 "KANJI", 167 "STOP", 168 "AX", 169 "UNLABELED", 170 "NEXTTRACK", 171 171 "","", 172 173 172 "NUMPADENTER", 173 "RCONTROL", 174 174 "","", 175 176 177 178 "", 179 175 "MUTE", 176 "CALCULATOR", 177 "PLAYPAUSE", 178 "", 179 "MEDIASTOP", 180 180 "","","","","","","","","", 181 182 "", 183 184 "", 185 186 187 "", 188 189 "", 190 191 181 "VOLUMEDOWN", 182 "", 183 "VOLUMEUP", 184 "", 185 "WEBHOME", 186 "NUMPADCOMMA", 187 "", 188 "DIVIDE", 189 "", 190 "SYSRQ", 191 "RMENU", 192 192 "","","","","","","","","","","","", 193 194 "", 195 196 197 198 "", 199 200 "", 201 202 "", 203 204 205 206 207 193 "PAUSE", 194 "", 195 "HOME", 196 "UP", 197 "PGUP", 198 "", 199 "LEFT", 200 "", 201 "RIGHT", 202 "", 203 "END", 204 "DOWN", 205 "PGDOWN", 206 "INSERT", 207 "DELETE", 208 208 "","","","","","","", 209 210 211 212 213 209 "LWIN", 210 "RWIN", 211 "APPS", 212 "POWER", 213 "SLEEP", 214 214 "","","", 215 216 "", 217 218 219 220 221 222 223 224 225 215 "WAKE", 216 "", 217 "WEBSEARCH", 218 "WEBFAVORITES", 219 "WEBREFRESH", 220 "WEBSTOP", 221 "WEBFORWARD", 222 "WEBBACK", 223 "MYCOMPUTER", 224 "MAIL", 225 "MEDIASELECT" 226 226 }; 227 227 for (int i = 0; i < numberOfKeys_s; i++) … … 229 229 230 230 std::string mouseButtonNames[] = { 231 "MouseLeft", "MouseRight", "MouseMiddle",232 "MouseButton3", "MouseButton4", "MouseButton5",233 "MouseButton6", "MouseButton7" };231 "MouseLeft", "MouseRight", "MouseMiddle", 232 "MouseButton3", "MouseButton4", "MouseButton5", 233 "MouseButton6", "MouseButton7" }; 234 234 for (int i = 0; i < numberOfMouseButtons_s; i++) 235 235 mouseButtonNames_[i] = mouseButtonNames[i]; … … 267 267 switch (j) 268 268 { 269 // note: the first element in the struct is the string, so the following pointer270 // arithmetic works.271 269 case 0: 272 270 cont->getValue(&bindingsKeyPress_[i].commandStr); 273 271 break; 274 272 case 1: 275 cont->getValue( bindingsKeyRelease_ + i);273 cont->getValue(&bindingsKeyRelease_[i].commandStr); 276 274 break; 277 275 case 2: 278 cont->getValue( bindingsKeyHold_ + i);276 cont->getValue(&bindingsKeyHold_[i].commandStr); 279 277 } 280 278 } … … 295 293 { 296 294 case 0: 297 cont->getValue( bindingsMouseButtonPress_ + i);295 cont->getValue(&bindingsMouseButtonPress_[i].commandStr); 298 296 break; 299 297 case 1: 300 cont->getValue( bindingsMouseButtonRelease_ + i);298 cont->getValue(&bindingsMouseButtonRelease_[i].commandStr); 301 299 break; 302 300 case 2: 303 cont->getValue( bindingsMouseButtonHold_ + i);301 cont->getValue(&bindingsMouseButtonHold_[i].commandStr); 304 302 } 305 303 } … … 320 318 { 321 319 case 0: 322 cont->getValue( bindingsJoyStickButtonPress_ + i);320 cont->getValue(&bindingsJoyStickButtonPress_[i].commandStr); 323 321 break; 324 322 case 1: 325 cont->getValue( bindingsJoyStickButtonRelease_ + i);323 cont->getValue(&bindingsJoyStickButtonRelease_[i].commandStr); 326 324 break; 327 325 case 2: 328 cont->getValue( bindingsJoyStickButtonHold_ + i);326 cont->getValue(&bindingsJoyStickButtonHold_[i].commandStr); 329 327 } 330 328 } … … 345 343 for (int i = 0; i < numberOfMouseButtons_s; i++) 346 344 { 347 bindingsMouseButtonPress_ [i] = "";348 bindingsMouseButtonRelease_[i] = "";349 bindingsMouseButtonHold_ [i] = "";345 bindingsMouseButtonPress_ [i].commandStr = ""; 346 bindingsMouseButtonRelease_[i].commandStr = ""; 347 bindingsMouseButtonHold_ [i].commandStr = ""; 350 348 } 351 349 for (int i = 0; i < numberOfJoyStickButtons_s; i++) 352 350 { 353 bindingsJoyStickButtonPress_ [i] = "";354 bindingsJoyStickButtonRelease_[i] = "";355 bindingsJoyStickButtonHold_ [i] = "";351 bindingsJoyStickButtonPress_ [i].commandStr = ""; 352 bindingsJoyStickButtonRelease_[i].commandStr = ""; 353 bindingsJoyStickButtonHold_ [i].commandStr = ""; 356 354 } 357 355 } … … 370 368 // evaluate the key bindings 371 369 // TODO: what if binding is invalid? 372 //for (int i = 0; i < numberOfKeys_s; i++)373 //{374 //if (bindingsKeyPress_[i].commandStr != "")375 //{376 //bindingsKeyPress_[i].evaluation = CommandExecutor::evaluate(bindingsKeyPress_[i].commandStr);377 //bindingsKeyPress_[i].commandStr = bindingsKeyPress_[i].evaluation.getCommandString();378 //}379 //}370 for (int i = 0; i < numberOfKeys_s; i++) 371 { 372 if (bindingsKeyPress_[i].commandStr != "") 373 { 374 bindingsKeyPress_[i].evaluation = CommandExecutor::evaluate(bindingsKeyPress_[i].commandStr); 375 bindingsKeyPress_[i].commandStr = bindingsKeyPress_[i].evaluation.getCommandString(); 376 } 377 } 380 378 381 379 COUT(ORX_DEBUG) << "KeyBinder: Loading key bindings done." << std::endl; … … 383 381 } 384 382 385 bool KeyBinder::execute Binding(KeyBinding& binding)383 bool KeyBinder::executeSimpleBinding(KeyBinding& binding) 386 384 { 387 385 if (binding.commandStr != "") 388 386 { 389 //if (binding.commandStr != binding.evaluation.getCommandString())390 //{391 //// key binding has changed, reevaluate the command string.392 //binding.evaluation = CommandExecutor::evaluate(binding.commandStr);393 //binding.commandStr = binding.evaluation.getCommandString();394 //}395 COUT( 3) << "Executing command: " << binding.commandStr << std::endl;387 if (binding.commandStr != binding.evaluation.getCommandString()) 388 { 389 // key binding has changed, reevaluate the command string. 390 binding.evaluation = CommandExecutor::evaluate(binding.commandStr); 391 binding.commandStr = binding.evaluation.getCommandString(); 392 } 393 COUT(ORX_DEBUG) << "Keybinding: Executing command: " << binding.commandStr << std::endl; 396 394 CommandExecutor::execute(binding.commandStr); 397 395 } … … 405 403 @param e Event information 406 404 */ 407 bool KeyBinder::keyPressed(const OIS::KeyEvent &e) 408 { 409 COUT(3) << "Key: " << e.key << std::endl; 410 // find the appropriate key binding 411 executeBinding(bindingsKeyPress_[int(e.key)]); 412 405 bool KeyBinder::keyPressed(const KeyEvent& evt) 406 { 407 // find the appropriate key binding 408 executeSimpleBinding(bindingsKeyPress_[int(evt.key)]); 409 413 410 return true; 414 411 } … … 418 415 @param e Event information 419 416 */ 420 bool KeyBinder::keyReleased(const OIS::KeyEvent &e)421 { 422 // find the appropriate key binding 423 execute Binding(bindingsKeyRelease_[int(e.key)]);417 bool KeyBinder::keyReleased(const KeyEvent& evt) 418 { 419 // find the appropriate key binding 420 executeSimpleBinding(bindingsKeyRelease_[int(evt.key)]); 424 421 425 422 return true; … … 428 425 /** 429 426 @brief Event handler for the keyHeld Event. 430 @param e Eventinformation431 */ 432 bool KeyBinder::keyHeld(const OIS::KeyEvent &e)433 { 434 // find the appropriate key binding 435 execute Binding(bindingsKeyHold_[int(e.key)]);427 @param e Mouse state information 428 */ 429 bool KeyBinder::keyHeld(const KeyEvent& evt) 430 { 431 // find the appropriate key binding 432 executeSimpleBinding(bindingsKeyHold_[int(evt.key)]); 436 433 437 434 return true; … … 440 437 /** 441 438 @brief Event handler for the mouseMoved Event. 442 @param e Event information 443 */ 444 bool KeyBinder::mouseMoved(const OIS::MouseEvent &e) 439 @param e Mouse state information 440 */ 441 bool KeyBinder::mouseMoved(const MouseState &evt) 442 { 443 /*if (bindingMouseMoved_.commandStr != "") 444 { 445 if (bindingMouseMoved_.commandStr != bindingMouseMoved_.evaluation.getCommandString()) 446 { 447 // key binding has changed, reevaluate the command string. 448 bindingMouseMoved_.evaluation = CommandExecutor::evaluate(bindingMouseMoved_.commandStr); 449 bindingMouseMoved_.commandStr = bindingMouseMoved_.evaluation.getCommandString(); 450 } 451 COUT(3) << "Executing command: " << bindingMouseMoved_.commandStr << std::endl; 452 453 bindingMouseMoved_.evaluation.setEvaluatedParameter( 454 CommandExecutor::execute(bindingMouseMoved_.commandStr); 455 }*/ 456 457 return true; 458 } 459 460 /** 461 @brief Event handler for the mouseScrolled Event. 462 @param e Mouse state information 463 */ 464 bool KeyBinder::mouseScrolled(const MouseState &evt) 445 465 { 446 466 return true; … … 452 472 @param id The ID of the mouse button 453 473 */ 454 bool KeyBinder::mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id) 455 { 456 // find the appropriate key binding 457 std::string cmdStr = bindingsMouseButtonPress_[int(id)]; 458 if (cmdStr != "") 459 { 460 CommandExecutor::execute(cmdStr); 461 COUT(3) << "Executing command: " << cmdStr << std::endl; 462 } 474 bool KeyBinder::mouseButtonPressed(const MouseState& state, MouseButton::Enum id) 475 { 476 // find the appropriate key binding 477 executeSimpleBinding(bindingsMouseButtonPress_[int(id)]); 463 478 464 479 return true; … … 470 485 @param id The ID of the mouse button 471 486 */ 472 bool KeyBinder::mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id) 473 { 474 // find the appropriate key binding 475 std::string cmdStr = bindingsMouseButtonRelease_[int(id)]; 476 if (cmdStr != "") 477 { 478 CommandExecutor::execute(cmdStr); 479 COUT(3) << "Executing command: " << cmdStr << std::endl; 480 } 487 bool KeyBinder::mouseButtonReleased(const MouseState& state, MouseButton::Enum id) 488 { 489 // find the appropriate key binding 490 executeSimpleBinding(bindingsMouseButtonRelease_[int(id)]); 481 491 482 492 return true; … … 488 498 @param id The ID of the mouse button 489 499 */ 490 bool KeyBinder::mouseHeld(const OIS::MouseEvent &e, OIS::MouseButtonID id) 491 { 492 // find the appropriate key binding 493 std::string cmdStr = bindingsMouseButtonHold_[int(id)]; 494 if (cmdStr != "") 495 { 496 CommandExecutor::execute(cmdStr); 497 COUT(3) << "Executing command: " << cmdStr << std::endl; 498 } 499 500 return true; 501 } 502 503 bool KeyBinder::buttonPressed(int joyStickID, const OIS::JoyStickEvent &arg, int button) 504 { 505 // find the appropriate key binding 506 std::string cmdStr = bindingsJoyStickButtonPress_[button]; 507 if (cmdStr != "") 508 { 509 CommandExecutor::execute(cmdStr); 510 COUT(3) << "Executing command: " << cmdStr << std::endl; 511 } 512 513 return true; 514 } 515 516 bool KeyBinder::buttonReleased(int joyStickID, const OIS::JoyStickEvent &arg, int button) 517 { 518 // find the appropriate key binding 519 std::string cmdStr = bindingsJoyStickButtonRelease_[button]; 520 if (cmdStr != "") 521 { 522 CommandExecutor::execute(cmdStr); 523 COUT(3) << "Executing command: " << cmdStr << std::endl; 524 } 525 526 return true; 527 } 528 529 bool KeyBinder::buttonHeld(int joyStickID, const OIS::JoyStickEvent &arg, int button) 530 { 531 // find the appropriate key binding 532 std::string cmdStr = bindingsJoyStickButtonHold_[button]; 533 if (cmdStr != "") 534 { 535 CommandExecutor::execute(cmdStr); 536 COUT(3) << "Executing command: " << cmdStr << std::endl; 537 } 538 539 return true; 540 } 541 542 bool KeyBinder::axisMoved(int joyStickID, const OIS::JoyStickEvent &arg, int axis) 543 { 544 return true; 545 } 546 547 bool KeyBinder::sliderMoved(int joyStickID, const OIS::JoyStickEvent &arg, int id) 548 { 549 return true; 550 } 551 552 bool KeyBinder::povMoved(int joyStickID, const OIS::JoyStickEvent &arg, int id) 553 { 554 return true; 555 } 556 557 bool KeyBinder::vector3Moved(int joyStickID, const OIS::JoyStickEvent &arg, int id) 500 bool KeyBinder::mouseButtonHeld(const MouseState& state, MouseButton::Enum id) 501 { 502 // find the appropriate key binding 503 executeSimpleBinding(bindingsMouseButtonHold_[int(id)]); 504 505 return true; 506 } 507 508 bool KeyBinder::joyStickButtonPressed(const JoyStickState& state, int button) 509 { 510 // find the appropriate key binding 511 executeSimpleBinding(bindingsJoyStickButtonPress_[button]); 512 513 return true; 514 } 515 516 bool KeyBinder::joyStickButtonReleased(const JoyStickState& state, int button) 517 { 518 // find the appropriate key binding 519 executeSimpleBinding(bindingsJoyStickButtonRelease_[button]); 520 521 return true; 522 } 523 524 bool KeyBinder::joyStickButtonHeld(const JoyStickState& state, int button) 525 { 526 // find the appropriate key binding 527 executeSimpleBinding(bindingsJoyStickButtonHold_[button]); 528 529 return true; 530 } 531 532 bool KeyBinder::joyStickAxisMoved(const JoyStickState& state, int axis) 533 { 534 return true; 535 } 536 537 bool KeyBinder::joyStickSliderMoved(const JoyStickState& state, int index) 538 { 539 return true; 540 } 541 542 bool KeyBinder::joyStickPovMoved(const JoyStickState& state, int index) 543 { 544 return true; 545 } 546 547 bool KeyBinder::joyStickVector3Moved(const JoyStickState& state, int index) 558 548 { 559 549 return true; … … 586 576 //bool GUIInputHandler::keyPressed(const OIS::KeyEvent &e) 587 577 //{ 588 589 578 ////CEGUI::System::getSingleton().injectKeyDown( arg.key ); 579 ////CEGUI::System::getSingleton().injectChar( arg.text ); 590 580 // return true; 591 581 //} … … 597 587 //bool GUIInputHandler::keyReleased(const OIS::KeyEvent &e) 598 588 //{ 599 589 ////CEGUI::System::getSingleton().injectKeyUp( arg.key ); 600 590 // return true; 601 591 //} … … 607 597 //bool GUIInputHandler::mouseMoved(const OIS::MouseEvent &e) 608 598 //{ 609 599 ////CEGUI::System::getSingleton().injectMouseMove( arg.state.X.rel, arg.state.Y.rel ); 610 600 // return true; 611 601 //} … … 616 606 // @param id The ID of the mouse button 617 607 //*/ 618 //bool GUIInputHandler::mousePressed(const OIS::MouseEvent &e, OIS::MouseButton IDid)608 //bool GUIInputHandler::mousePressed(const OIS::MouseEvent &e, OIS::MouseButton id) 619 609 //{ 620 610 ////CEGUI::System::getSingleton().injectMouseButtonDown(convertOISMouseButtonToCegui(id)); 621 611 // return true; 622 612 //} … … 627 617 // @param id The ID of the mouse button 628 618 //*/ 629 //bool GUIInputHandler::mouseReleased(const OIS::MouseEvent &e, OIS::MouseButton IDid)619 //bool GUIInputHandler::mouseReleased(const OIS::MouseEvent &e, OIS::MouseButton id) 630 620 //{ 631 621 ////CEGUI::System::getSingleton().injectMouseButtonUp(convertOISMouseButtonToCegui(id)); 632 622 // return true; 633 623 //} -
code/trunk/src/core/InputHandler.h
r1219 r1293 38 38 39 39 #include <string> 40 40 41 #include "ois/OIS.h" 41 42 #include "OrxonoxClass.h" 42 43 #include "CommandExecutor.h" 44 #include "InputInterfaces.h" 43 45 44 46 namespace orxonox … … 54 56 }; 55 57 } 56 57 /**58 @brief Interface class used for key input listeners.59 */60 class _CoreExport KeyHandler : public OIS::KeyListener61 {62 public:63 virtual ~KeyHandler() { }64 virtual bool keyHeld(const OIS::KeyEvent &arg) = 0;65 };66 67 /**68 @brief Interface class used for mouse input listeners.69 */70 class _CoreExport MouseHandler : public OIS::MouseListener71 {72 public:73 virtual ~MouseHandler() { }74 virtual bool mouseHeld(const OIS::MouseEvent &arg, OIS::MouseButtonID id) = 0;75 };76 77 /**78 @brief Interface class used for joy stick input listeners.79 */80 class _CoreExport JoyStickHandler81 {82 public:83 virtual ~JoyStickHandler() { }84 virtual bool buttonPressed (int joyStickID, const OIS::JoyStickEvent &arg, int button) = 0;85 virtual bool buttonReleased(int joyStickID, const OIS::JoyStickEvent &arg, int button) = 0;86 virtual bool buttonHeld (int joyStickID, const OIS::JoyStickEvent &arg, int button) = 0;87 virtual bool axisMoved (int joyStickID, const OIS::JoyStickEvent &arg, int axis) = 0;88 virtual bool sliderMoved (int joyStickID, const OIS::JoyStickEvent &arg, int index) {return true;}89 virtual bool povMoved (int joyStickID, const OIS::JoyStickEvent &arg, int index) {return true;}90 virtual bool vector3Moved (int joyStickID, const OIS::JoyStickEvent &arg, int index) {return true;}91 };92 58 93 59 struct _CoreExport KeyBinding … … 113 79 void setConfigValues(); 114 80 115 std::string testtest;116 117 81 private: // functions 118 82 119 bool execute Binding(KeyBinding &binding);83 bool executeSimpleBinding(KeyBinding &binding); 120 84 121 bool keyPressed (const OIS::KeyEvent &arg);122 bool keyReleased (const OIS::KeyEvent &arg);123 bool keyHeld (const OIS::KeyEvent &arg);85 bool keyPressed (const KeyEvent& evt); 86 bool keyReleased(const KeyEvent& evt); 87 bool keyHeld (const KeyEvent& evt); 124 88 125 bool mousePressed (const OIS::MouseEvent &arg, OIS::MouseButtonID id); 126 bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id); 127 bool mouseHeld (const OIS::MouseEvent &arg, OIS::MouseButtonID id); 128 bool mouseMoved (const OIS::MouseEvent &arg); 89 bool mouseButtonPressed (const MouseState& state, MouseButton::Enum id); 90 bool mouseButtonReleased(const MouseState& state, MouseButton::Enum id); 91 bool mouseButtonHeld (const MouseState& state, MouseButton::Enum id); 92 bool mouseMoved (const MouseState& state); 93 bool mouseScrolled (const MouseState& state); 129 94 130 bool buttonPressed (int joyStickID, const OIS::JoyStickEvent &arg, int button);131 bool buttonReleased(int joyStickID, const OIS::JoyStickEvent &arg, int button);132 bool buttonHeld (int joyStickID, const OIS::JoyStickEvent &arg, int button);133 bool axisMoved (int joyStickID, const OIS::JoyStickEvent &arg, int axis);134 bool sliderMoved (int joyStickID, const OIS::JoyStickEvent &arg, int id);135 bool povMoved (int joyStickID, const OIS::JoyStickEvent &arg, int id);136 bool vector3Moved (int joyStickID, const OIS::JoyStickEvent &arg, int id);95 bool joyStickButtonPressed (const JoyStickState& state, int button); 96 bool joyStickButtonReleased(const JoyStickState& state, int button); 97 bool joyStickButtonHeld (const JoyStickState& state, int button); 98 bool joyStickAxisMoved (const JoyStickState& state, int axis) ; 99 bool joyStickSliderMoved (const JoyStickState& state, int index) ; 100 bool joyStickPovMoved (const JoyStickState& state, int index) ; 101 bool joyStickVector3Moved (const JoyStickState& state, int index) ; 137 102 138 103 private: // variables … … 152 117 static const int numberOfMouseButtons_s = 8; 153 118 //! Array of input events for every pressed mouse button 154 std::string bindingsMouseButtonPress_ [numberOfMouseButtons_s];119 KeyBinding bindingsMouseButtonPress_ [numberOfMouseButtons_s]; 155 120 //! Array of input events for every released mouse button 156 std::string bindingsMouseButtonRelease_[numberOfMouseButtons_s];121 KeyBinding bindingsMouseButtonRelease_[numberOfMouseButtons_s]; 157 122 //! Array of input events for every held mouse button 158 std::string bindingsMouseButtonHold_ [numberOfMouseButtons_s]; 123 KeyBinding bindingsMouseButtonHold_ [numberOfMouseButtons_s]; 124 //! Key binding for mouse moved event 125 KeyBinding bindingMouseMoved_; 126 //! Key binding for mouse scrolled event 127 KeyBinding bindingMouseScrolled_; 159 128 //! Names of the mouse buttons as strings 160 129 std::string mouseButtonNames_[numberOfMouseButtons_s]; … … 163 132 static const int numberOfJoyStickButtons_s = 32; 164 133 //! Array of input events for every pressed joy stick button 165 std::string bindingsJoyStickButtonPress_ [numberOfJoyStickButtons_s];134 KeyBinding bindingsJoyStickButtonPress_ [numberOfJoyStickButtons_s]; 166 135 //! Array of input events for every released joy stick button 167 std::string bindingsJoyStickButtonRelease_[numberOfJoyStickButtons_s];136 KeyBinding bindingsJoyStickButtonRelease_[numberOfJoyStickButtons_s]; 168 137 //! Array of input events for every held joy stick button 169 std::string bindingsJoyStickButtonHold_ [numberOfJoyStickButtons_s];138 KeyBinding bindingsJoyStickButtonHold_ [numberOfJoyStickButtons_s]; 170 139 //! Names of the joy stick buttons as strings 171 140 std::string joyStickButtonNames_[numberOfJoyStickButtons_s]; … … 186 155 //private: 187 156 // // input events 188 189 190 157 //bool keyPressed (const OIS::KeyEvent &arg); 158 //bool keyReleased (const OIS::KeyEvent &arg); 159 //bool keyHeld (const OIS::KeyEvent &arg); 191 160 192 // bool mousePressed (const OIS::MouseEvent &arg, OIS::MouseButton IDid);193 //bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonIDid);194 //bool mouseHeld (const OIS::MouseEvent &arg, OIS::MouseButtonIDid);161 // bool mousePressed (const OIS::MouseEvent &arg, OIS::MouseButton id); 162 //bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButton id); 163 //bool mouseHeld (const OIS::MouseEvent &arg, OIS::MouseButton id); 195 164 // bool mouseMoved (const OIS::MouseEvent &arg); 196 165 197 198 199 200 201 202 166 //bool buttonPressed (const OIS::JoyStickEvent &arg, int button); 167 //bool buttonReleased(const OIS::JoyStickEvent &arg, int button); 168 //bool buttonHeld (const OIS::JoyStickEvent &arg, int button); 169 //bool axisMoved (const OIS::JoyStickEvent &arg, int axis); 170 //bool sliderMoved (const OIS::JoyStickEvent &arg, int id); 171 //bool povMoved (const OIS::JoyStickEvent &arg, int id); 203 172 //}; 204 173 -
code/trunk/src/core/InputManager.cc
r1219 r1293 30 30 @file 31 31 @brief Implementation of the InputManager that captures all the input from OIS 32 and redirects it to handlers if necessary.32 and redirects it to handlers. 33 33 */ 34 34 … … 52 52 InputManager::InputManager() : 53 53 inputSystem_(0), keyboard_(0), mouse_(0), 54 state_(IS_UNINIT), stateRequest_(IS_UNINIT) 54 joySticksSize_(0), 55 state_(IS_UNINIT), stateRequest_(IS_UNINIT), 56 keyboardModifiers_(0) 55 57 { 56 58 RegisterObject(InputManager); 57 58 this->joySticks_.reserve(5);59 //this->activeJoyStickHandlers_.reserve(10);60 this->activeKeyHandlers_.reserve(10);61 this->activeMouseHandlers_.reserve(10);62 59 } 63 60 … … 87 84 @param windowHeight The height of the render window 88 85 */ 89 bool InputManager::_initialise(const size_t windowHnd, const int windowWidth, constint windowHeight,90 const bool createKeyboard, const bool createMouse, constbool createJoySticks)86 bool InputManager::_initialise(const size_t windowHnd, int windowWidth, int windowHeight, 87 bool createKeyboard, bool createMouse, bool createJoySticks) 91 88 { 92 89 if (state_ == IS_UNINIT) 93 90 { 91 CCOUT(3) << "Initialising Input System..." << std::endl; 94 92 CCOUT(ORX_DEBUG) << "Initialising OIS components..." << std::endl; 95 93 … … 145 143 addKeyHandler(binder, "keybinder"); 146 144 addMouseHandler(binder, "keybinder"); 145 addJoyStickHandler(binder, "keybinder"); 147 146 148 147 // Read all the key bindings and assign them … … 234 233 bool InputManager::_initialiseJoySticks() 235 234 { 236 if (joySticks _.size()> 0)235 if (joySticksSize_ > 0) 237 236 { 238 237 CCOUT(2) << "Warning: Joy sticks already initialised, skipping." << std::endl; … … 265 264 return false; 266 265 } 266 joySticksSize_ = joySticks_.size(); 267 activeJoyStickHandlers_.resize(joySticksSize_); 268 joyStickButtonsDown_.resize(joySticksSize_); 267 269 return success; 268 270 } … … 273 275 void InputManager::_destroy() 274 276 { 275 CCOUT(ORX_DEBUG) << "Destroying ..." << std::endl;276 277 277 if (state_ != IS_UNINIT) 278 278 { 279 CCOUT(ORX_DEBUG) << "Destroying ..." << std::endl; 280 279 281 if (keyHandlers_.find("buffer") != keyHandlers_.end()) 280 282 delete keyHandlers_["buffer"]; … … 296 298 297 299 state_ = IS_UNINIT; 298 } 299 else 300 CCOUT(ORX_WARNING) << "Warning: Cannot be destroyed, since not initialised." << std::endl; 301 302 CCOUT(ORX_DEBUG) << "Destroying done." << std::endl; 300 CCOUT(ORX_DEBUG) << "Destroying done." << std::endl; 301 } 303 302 } 304 303 … … 336 335 void InputManager::_destroyJoySticks() 337 336 { 338 if (joySticks _.size()> 0)337 if (joySticksSize_ > 0) 339 338 { 340 339 // note: inputSystem_ can never be 0, or else the code is mistaken 341 for (unsigned int i = 0; i < joySticks _.size(); i++)340 for (unsigned int i = 0; i < joySticksSize_; i++) 342 341 if (joySticks_[i] != 0) 343 342 inputSystem_->destroyInputObject(joySticks_[i]); 344 343 345 344 joySticks_.clear(); 345 joySticksSize_ = 0; 346 346 activeJoyStickHandlers_.clear(); 347 347 joyStickButtonsDown_.clear(); … … 372 372 activeKeyHandlers_.clear(); 373 373 activeMouseHandlers_.clear(); 374 activeJoyStickHandlers_.clear(); 374 for (unsigned int i = 0; i < joySticksSize_; i++) 375 activeJoyStickHandlers_[i].clear(); 375 376 376 377 switch (stateRequest_) … … 381 382 activeKeyHandlers_.push_back(keyHandlers_["keybinder"]); 382 383 activeMouseHandlers_.push_back(mouseHandlers_["keybinder"]); 383 activeMouseHandlers_.push_back(mouseHandlers_["SpaceShip"]);384 for (std::vector<OIS::JoyStick*>::const_iterator it = joySticks_.begin();385 it != joySticks_.end(); it++)386 activeJoyStickHandlers_[ *it].push_back(joyStickHandlers_["keybinder"]);384 if (getMouseHandler("SpaceShip")) 385 activeMouseHandlers_.push_back(mouseHandlers_["SpaceShip"]); 386 for (unsigned int i = 0; i < joySticksSize_; i++) 387 activeJoyStickHandlers_[i].push_back(joyStickHandlers_["keybinder"]); 387 388 break; 388 389 … … 393 394 case IS_CONSOLE: 394 395 activeMouseHandlers_.push_back(mouseHandlers_["keybinder"]); 395 for (std::vector<OIS::JoyStick*>::const_iterator it = joySticks_.begin(); 396 it != joySticks_.end(); it++) 397 activeJoyStickHandlers_[*it].push_back(joyStickHandlers_["keybinder"]); 396 if (getMouseHandler("SpaceShip")) 397 activeMouseHandlers_.push_back(mouseHandlers_["SpaceShip"]); 398 for (unsigned int i = 0; i < joySticksSize_; i++) 399 activeJoyStickHandlers_[i].push_back(joyStickHandlers_["keybinder"]); 398 400 399 401 activeKeyHandlers_.push_back(keyHandlers_["buffer"]); … … 412 414 if (keyboard_) 413 415 keyboard_->capture(); 416 for (unsigned int i = 0; i < joySticksSize_; i++) 417 joySticks_[i]->capture(); 414 418 415 419 416 420 // call all the handlers for the held key events 417 for (std::list<OIS::KeyCode>::const_iterator itKey = keysDown_.begin(); 418 itKey != keysDown_.end(); itKey++) 419 { 420 OIS::KeyEvent keyArg(keyboard_, *itKey, 0); 421 for (unsigned int i = 0; i < activeKeyHandlers_.size(); i++) 422 activeKeyHandlers_[i]->keyHeld(keyArg); 423 } 421 for (unsigned int iKey = 0; iKey < keysDown_.size(); iKey++) 422 for (unsigned int iHandler = 0; iHandler < activeKeyHandlers_.size(); iHandler++) 423 activeKeyHandlers_[iHandler]->keyHeld(KeyEvent(keysDown_[iKey], keyboardModifiers_)); 424 424 425 425 // call all the handlers for the held mouse button events 426 for (std::list<OIS::MouseButtonID>::const_iterator itMouseButton = mouseButtonsDown_.begin(); 427 itMouseButton != mouseButtonsDown_.end(); itMouseButton++) 428 { 429 OIS::MouseEvent mouseButtonArg(mouse_, mouse_->getMouseState()); 430 for (unsigned int i = 0; i < activeMouseHandlers_.size(); i++) 431 activeMouseHandlers_[i]->mouseHeld(mouseButtonArg, *itMouseButton); 432 } 426 for (unsigned int iButton = 0; iButton < mouseButtonsDown_.size(); iButton++) 427 for (unsigned int iHandler = 0; iHandler < activeMouseHandlers_.size(); iHandler++) 428 activeMouseHandlers_[iHandler]->mouseButtonHeld(mouse_->getMouseState(), mouseButtonsDown_[iButton]); 433 429 434 430 // call all the handlers for the held joy stick button events 435 for (std::map< OIS::JoyStick*, std::list <int> >::const_iterator itJoyStick = joyStickButtonsDown_.begin(); 436 itJoyStick != joyStickButtonsDown_.end(); itJoyStick++) 437 { 438 OIS::JoyStick* joyStick = (*itJoyStick).first; 439 for (std::list<int>::const_iterator itJoyStickButton = (*itJoyStick).second.begin(); 440 itJoyStickButton != (*itJoyStick).second.end(); itJoyStickButton++) 441 { 442 OIS::JoyStickEvent joyStickButtonArg(joyStick, joyStick->getJoyStickState()); 443 for (unsigned int i = 0; i < activeJoyStickHandlers_[joyStick].size(); i++) 444 activeJoyStickHandlers_[joyStick][i]->buttonHeld(i, joyStickButtonArg, *itJoyStickButton); 445 } 446 } 447 } 448 431 for (unsigned int iJoyStick = 0; iJoyStick < joySticksSize_; iJoyStick++) 432 for (unsigned int iButton = 0; iButton < joyStickButtonsDown_[iJoyStick].size(); iButton++) 433 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 434 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickButtonHeld( 435 JoyStickState(joySticks_[iJoyStick]->getJoyStickState(), iJoyStick), joyStickButtonsDown_[iJoyStick][iButton]); 436 } 449 437 450 438 // ###### Key Events ###### … … 457 445 { 458 446 // check whether the key already is in the list (can happen when focus was lost) 459 for (std::list<OIS::KeyCode>::iterator it = keysDown_.begin(); it != keysDown_.end(); it++) 460 { 461 if (*it == e.key) 462 { 463 keysDown_.erase(it); 464 break; 465 } 466 } 467 keysDown_.push_back(e.key); 447 unsigned int iKey = 0; 448 while (iKey < keysDown_.size() && keysDown_[iKey].key != (KeyCode::Enum)e.key) 449 iKey++; 450 if (iKey == keysDown_.size()) 451 keysDown_.push_back(Key(e)); 452 453 // update modifiers 454 if(e.key == OIS::KC_RMENU || e.key == OIS::KC_LMENU) 455 keyboardModifiers_ |= KeyboardModifier::Alt; // alt key 456 if(e.key == OIS::KC_RCONTROL || e.key == OIS::KC_LCONTROL) 457 keyboardModifiers_ |= KeyboardModifier::Ctrl; // ctrl key 458 if(e.key == OIS::KC_RSHIFT || e.key == OIS::KC_LSHIFT) 459 keyboardModifiers_ |= KeyboardModifier::Shift; // shift key 468 460 469 461 for (unsigned int i = 0; i < activeKeyHandlers_.size(); i++) 470 activeKeyHandlers_[i]->keyPressed( e);462 activeKeyHandlers_[i]->keyPressed(KeyEvent(e, keyboardModifiers_)); 471 463 472 464 return true; … … 480 472 { 481 473 // remove the key from the keysDown_ list 482 for ( std::list<OIS::KeyCode>::iterator it = keysDown_.begin(); it != keysDown_.end(); it++)483 { 484 if ( *it ==e.key)485 { 486 keysDown_.erase( it);474 for (unsigned int iKey = 0; iKey < keysDown_.size(); iKey++) 475 { 476 if (keysDown_[iKey].key == (KeyCode::Enum)e.key) 477 { 478 keysDown_.erase(keysDown_.begin() + iKey); 487 479 break; 488 480 } 489 481 } 490 482 483 // update modifiers 484 if(e.key == OIS::KC_RMENU || e.key == OIS::KC_LMENU) 485 keyboardModifiers_ &= ~KeyboardModifier::Alt; // alt key 486 if(e.key == OIS::KC_RCONTROL || e.key == OIS::KC_LCONTROL) 487 keyboardModifiers_ &= ~KeyboardModifier::Ctrl; // ctrl key 488 if(e.key == OIS::KC_RSHIFT || e.key == OIS::KC_LSHIFT) 489 keyboardModifiers_ &= ~KeyboardModifier::Shift; // shift key 490 491 491 for (unsigned int i = 0; i < activeKeyHandlers_.size(); i++) 492 activeKeyHandlers_[i]->keyReleased( e);492 activeKeyHandlers_[i]->keyReleased(KeyEvent(e, keyboardModifiers_)); 493 493 494 494 return true; … … 504 504 bool InputManager::mouseMoved(const OIS::MouseEvent &e) 505 505 { 506 for (unsigned int i = 0; i < activeMouseHandlers_.size(); i++) 507 activeMouseHandlers_[i]->mouseMoved(e); 506 // check for actual moved event 507 if (e.state.X.rel != 0 || e.state.Y.rel != 0) 508 { 509 for (unsigned int i = 0; i < activeMouseHandlers_.size(); i++) 510 activeMouseHandlers_[i]->mouseMoved(e.state); 511 } 512 513 // check for mouse scrolled event 514 if (e.state.Z.rel != 0) 515 { 516 for (unsigned int i = 0; i < activeMouseHandlers_.size(); i++) 517 activeMouseHandlers_[i]->mouseScrolled(e.state); 518 } 508 519 509 520 return true; … … 518 529 { 519 530 // check whether the button already is in the list (can happen when focus was lost) 520 for (std::list<OIS::MouseButtonID>::iterator it = mouseButtonsDown_.begin(); it != mouseButtonsDown_.end(); it++) 521 { 522 if (*it == id) 523 { 524 mouseButtonsDown_.erase(it); 525 break; 526 } 527 } 528 mouseButtonsDown_.push_back(id); 531 unsigned int iButton = 0; 532 while (iButton < mouseButtonsDown_.size() && mouseButtonsDown_[iButton] != (MouseButton::Enum)id) 533 iButton++; 534 if (iButton == mouseButtonsDown_.size()) 535 mouseButtonsDown_.push_back((MouseButton::Enum)id); 529 536 530 537 for (unsigned int i = 0; i < activeMouseHandlers_.size(); i++) 531 activeMouseHandlers_[i]->mouse Pressed(e,id);538 activeMouseHandlers_[i]->mouseButtonPressed(e.state, (MouseButton::Enum)id); 532 539 533 540 return true; … … 542 549 { 543 550 // remove the button from the keysDown_ list 544 for ( std::list<OIS::MouseButtonID>::iterator it = mouseButtonsDown_.begin(); it != mouseButtonsDown_.end(); it++)545 { 546 if ( *it ==id)547 { 548 mouseButtonsDown_.erase( it);551 for (unsigned int iButton = 0; iButton < mouseButtonsDown_.size(); iButton++) 552 { 553 if (mouseButtonsDown_[iButton] == (MouseButton::Enum)id) 554 { 555 mouseButtonsDown_.erase(mouseButtonsDown_.begin() + iButton); 549 556 break; 550 557 } … … 552 559 553 560 for (unsigned int i = 0; i < activeMouseHandlers_.size(); i++) 554 activeMouseHandlers_[i]->mouse Released(e,id);561 activeMouseHandlers_[i]->mouseButtonReleased(e.state, (MouseButton::Enum)id); 555 562 556 563 return true; … … 562 569 bool InputManager::buttonPressed(const OIS::JoyStickEvent &arg, int button) 563 570 { 571 // use the device to identify which one called the method 564 572 OIS::JoyStick* joyStick = (OIS::JoyStick*)arg.device; 573 unsigned int iJoyStick = 0; 574 while (joySticks_[iJoyStick] != joyStick) 575 iJoyStick++; 565 576 566 577 // check whether the button already is in the list (can happen when focus was lost) 567 std::list<int>& buttonsDownList = joyStickButtonsDown_[joyStick]; 568 for (std::list<int>::iterator it = buttonsDownList.begin(); it != buttonsDownList.end(); it++) 569 { 570 if (*it == button) 571 { 572 buttonsDownList.erase(it); 578 std::vector<int> buttonsDown = joyStickButtonsDown_[iJoyStick]; 579 unsigned int iButton = 0; 580 while (iButton < buttonsDown.size() && buttonsDown[iButton] != button) 581 iButton++; 582 if (iButton == buttonsDown.size()) 583 buttonsDown.push_back(button); 584 585 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 586 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickButtonPressed(JoyStickState(arg.state, iJoyStick), button); 587 588 return true; 589 } 590 591 bool InputManager::buttonReleased(const OIS::JoyStickEvent &arg, int button) 592 { 593 // use the device to identify which one called the method 594 OIS::JoyStick* joyStick = (OIS::JoyStick*)arg.device; 595 unsigned int iJoyStick = 0; 596 while (joySticks_[iJoyStick] != joyStick) 597 iJoyStick++; 598 599 // remove the button from the joyStickButtonsDown_ list 600 std::vector<int> buttonsDown = joyStickButtonsDown_[iJoyStick]; 601 for (unsigned int iButton = 0; iButton < buttonsDown.size(); iButton++) 602 { 603 if (buttonsDown[iButton] == button) 604 { 605 buttonsDown.erase(buttonsDown.begin() + iButton); 573 606 break; 574 607 } 575 608 } 576 joyStickButtonsDown_[joyStick].push_back(button); 577 578 for (unsigned int i = 0; i < activeJoyStickHandlers_[joyStick].size(); i++)579 activeJoyStickHandlers_[joyStick][i]->buttonPressed(i, arg, button); 580 581 return true;582 } 583 584 bool InputManager::buttonReleased(const OIS::JoyStickEvent &arg, int button)585 {609 610 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 611 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickButtonReleased(JoyStickState(arg.state, iJoyStick), button); 612 613 return true; 614 } 615 616 bool InputManager::axisMoved(const OIS::JoyStickEvent &arg, int axis) 617 { 618 // use the device to identify which one called the method 586 619 OIS::JoyStick* joyStick = (OIS::JoyStick*)arg.device; 587 588 // remove the button from the joyStickButtonsDown_ list 589 std::list<int>& buttonsDownList = joyStickButtonsDown_[joyStick]; 590 for (std::list<int>::iterator it = buttonsDownList.begin(); it != buttonsDownList.end(); it++) 591 { 592 if (*it == button) 593 { 594 buttonsDownList.erase(it); 595 break; 596 } 597 } 598 599 for (unsigned int i = 0; i < activeJoyStickHandlers_[joyStick].size(); i++) 600 activeJoyStickHandlers_[joyStick][i]->buttonReleased(i, arg, button); 601 602 return true; 603 } 604 605 bool InputManager::axisMoved(const OIS::JoyStickEvent &arg, int axis) 606 { 620 unsigned int iJoyStick = 0; 621 while (joySticks_[iJoyStick] != joyStick) 622 iJoyStick++; 623 624 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 625 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickAxisMoved(JoyStickState(arg.state, iJoyStick), axis); 626 627 return true; 628 } 629 630 bool InputManager::sliderMoved(const OIS::JoyStickEvent &arg, int id) 631 { 632 // use the device to identify which one called the method 607 633 OIS::JoyStick* joyStick = (OIS::JoyStick*)arg.device; 608 for (unsigned int i = 0; i < activeJoyStickHandlers_[joyStick].size(); i++) 609 activeJoyStickHandlers_[joyStick][i]->axisMoved(i, arg, axis); 610 611 return true; 612 } 613 614 bool InputManager::sliderMoved(const OIS::JoyStickEvent &arg, int id) 615 { 634 unsigned int iJoyStick = 0; 635 while (joySticks_[iJoyStick] != joyStick) 636 iJoyStick++; 637 638 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 639 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickSliderMoved(JoyStickState(arg.state, iJoyStick), id); 640 641 return true; 642 } 643 644 bool InputManager::povMoved(const OIS::JoyStickEvent &arg, int id) 645 { 646 // use the device to identify which one called the method 616 647 OIS::JoyStick* joyStick = (OIS::JoyStick*)arg.device; 617 for (unsigned int i = 0; i < activeJoyStickHandlers_[joyStick].size(); i++) 618 activeJoyStickHandlers_[joyStick][i]->sliderMoved(i, arg, id); 619 620 return true; 621 } 622 623 bool InputManager::povMoved(const OIS::JoyStickEvent &arg, int id) 624 { 648 unsigned int iJoyStick = 0; 649 while (joySticks_[iJoyStick] != joyStick) 650 iJoyStick++; 651 652 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 653 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickPovMoved(JoyStickState(arg.state, iJoyStick), id); 654 655 return true; 656 } 657 658 bool InputManager::vector3Moved(const OIS::JoyStickEvent &arg, int id) 659 { 660 // use the device to identify which one called the method 625 661 OIS::JoyStick* joyStick = (OIS::JoyStick*)arg.device; 626 for (unsigned int i = 0; i < activeJoyStickHandlers_[joyStick].size(); i++) 627 activeJoyStickHandlers_[joyStick][i]->povMoved(i, arg, id); 628 629 return true; 630 } 631 632 bool InputManager::vector3Moved(const OIS::JoyStickEvent &arg, int id) 633 { 634 OIS::JoyStick* joyStick = (OIS::JoyStick*)arg.device; 635 for (unsigned int i = 0; i < activeJoyStickHandlers_[joyStick].size(); i++) 636 activeJoyStickHandlers_[joyStick][i]->vector3Moved(i, arg, id); 662 unsigned int iJoyStick = 0; 663 while (joySticks_[iJoyStick] != joyStick) 664 iJoyStick++; 665 666 for (unsigned int iHandler = 0; iHandler < activeJoyStickHandlers_[iJoyStick].size(); iHandler++) 667 activeJoyStickHandlers_[iJoyStick][iHandler]->joyStickVector3Moved(JoyStickState(arg.state, iJoyStick), id); 637 668 638 669 return true; … … 645 676 // ################################ 646 677 647 bool InputManager::initialise(const size_t windowHnd, const int windowWidth, constint windowHeight,648 const bool createKeyboard, const bool createMouse, constbool createJoySticks)678 bool InputManager::initialise(const size_t windowHnd, int windowWidth, int windowHeight, 679 bool createKeyboard, bool createMouse, bool createJoySticks) 649 680 { 650 681 return _getSingleton()._initialise(windowHnd, windowWidth, windowHeight, … … 685 716 int InputManager::numberOfJoySticks() 686 717 { 687 return _getSingleton().joySticks_.size(); 718 return _getSingleton().joySticksSize_; 719 } 720 721 bool InputManager::isKeyDown(KeyCode::Enum key) 722 { 723 if (_getSingleton().keyboard_) 724 return _getSingleton().keyboard_->isKeyDown((OIS::KeyCode)key); 725 else 726 return false; 727 } 728 729 bool InputManager::isModifierDown(KeyboardModifier::Enum modifier) 730 { 731 if (_getSingleton().keyboard_) 732 return isModifierDown(modifier); 733 else 734 return false; 735 } 736 737 const MouseState InputManager::getMouseState() 738 { 739 if (_getSingleton().mouse_) 740 return _getSingleton().mouse_->getMouseState(); 741 else 742 return MouseState(); 743 } 744 745 const JoyStickState InputManager::getJoyStickState(unsigned int ID) 746 { 747 if (ID < _getSingleton().joySticksSize_) 748 return JoyStickState(_getSingleton().joySticks_[ID]->getJoyStickState(), ID); 749 else 750 return JoyStickState(); 688 751 } 689 752 … … 757 820 bool InputManager::addKeyHandler(KeyHandler* handler, const std::string& name) 758 821 { 822 if (!handler) 823 return false; 759 824 if (_getSingleton().keyHandlers_.find(name) == _getSingleton().keyHandlers_.end()) 760 825 { … … 883 948 bool InputManager::addMouseHandler(MouseHandler* handler, const std::string& name) 884 949 { 950 if (!handler) 951 return false; 885 952 if (_getSingleton().mouseHandlers_.find(name) == _getSingleton().mouseHandlers_.end()) 886 953 { … … 1010 1077 bool InputManager::addJoyStickHandler(JoyStickHandler* handler, const std::string& name) 1011 1078 { 1079 if (!handler) 1080 return false; 1012 1081 if (_getSingleton().joyStickHandlers_.find(name) == _getSingleton().joyStickHandlers_.end()) 1013 1082 { … … 1061 1130 @return False if name or id was not found, true otherwise. 1062 1131 */ 1063 bool InputManager::enableJoyStickHandler(const std::string& name, constint ID)1132 bool InputManager::enableJoyStickHandler(const std::string& name, unsigned int ID) 1064 1133 { 1065 1134 // get handler pointer from the map with all stored handlers … … 1069 1138 1070 1139 // check for existence of the ID 1071 if ((unsigned int)ID >= _getSingleton().joySticks_.size()) 1072 return false; 1073 OIS::JoyStick* joyStick = _getSingleton().joySticks_[ID]; 1140 if (ID >= _getSingleton().joySticksSize_) 1141 return false; 1074 1142 1075 1143 // see whether the handler already is in the list 1076 for (std::vector<JoyStickHandler*>::iterator it = _getSingleton().activeJoyStickHandlers_[ joyStick].begin();1077 it != _getSingleton().activeJoyStickHandlers_[ joyStick].end(); it++)1144 for (std::vector<JoyStickHandler*>::iterator it = _getSingleton().activeJoyStickHandlers_[ID].begin(); 1145 it != _getSingleton().activeJoyStickHandlers_[ID].end(); it++) 1078 1146 { 1079 1147 if ((*it) == (*handlerIt).second) … … 1083 1151 } 1084 1152 } 1085 _getSingleton().activeJoyStickHandlers_[ joyStick].push_back((*handlerIt).second);1153 _getSingleton().activeJoyStickHandlers_[ID].push_back((*handlerIt).second); 1086 1154 _getSingleton().stateRequest_ = IS_CUSTOM; 1087 1155 return true; … … 1093 1161 @return False if name or id was not found, true otherwise. 1094 1162 */ 1095 bool InputManager::disableJoyStickHandler(const std::string &name, int ID)1163 bool InputManager::disableJoyStickHandler(const std::string &name, unsigned int ID) 1096 1164 { 1097 1165 // get handler pointer from the map with all stored handlers … … 1101 1169 1102 1170 // check for existence of the ID 1103 if ((unsigned int)ID >= _getSingleton().joySticks_.size()) 1104 return false; 1105 OIS::JoyStick* joyStick = _getSingleton().joySticks_[ID]; 1171 if (ID >= _getSingleton().joySticksSize_) 1172 return false; 1106 1173 1107 1174 // look for the handler in the list 1108 for (std::vector<JoyStickHandler*>::iterator it = _getSingleton().activeJoyStickHandlers_[ joyStick].begin();1109 it != _getSingleton().activeJoyStickHandlers_[ joyStick].end(); it++)1175 for (std::vector<JoyStickHandler*>::iterator it = _getSingleton().activeJoyStickHandlers_[ID].begin(); 1176 it != _getSingleton().activeJoyStickHandlers_[ID].end(); it++) 1110 1177 { 1111 1178 if ((*it) == (*handlerIt).second) 1112 1179 { 1113 _getSingleton().activeJoyStickHandlers_[ joyStick].erase(it);1180 _getSingleton().activeJoyStickHandlers_[ID].erase(it); 1114 1181 _getSingleton().stateRequest_ = IS_CUSTOM; 1115 1182 return true; … … 1124 1191 @return False if key handler is not active or doesn't exist, true otherwise. 1125 1192 */ 1126 bool InputManager::isJoyStickHandlerActive(const std::string& name, constint ID)1193 bool InputManager::isJoyStickHandlerActive(const std::string& name, unsigned int ID) 1127 1194 { 1128 1195 // get handler pointer from the map with all stored handlers … … 1132 1199 1133 1200 // check for existence of the ID 1134 if ((unsigned int)ID >= _getSingleton().joySticks_.size()) 1135 return false; 1136 OIS::JoyStick* joyStick = _getSingleton().joySticks_[ID]; 1201 if (ID >= _getSingleton().joySticksSize_) 1202 return false; 1137 1203 1138 1204 // see whether the handler already is in the list 1139 for (std::vector<JoyStickHandler*>::iterator it = _getSingleton().activeJoyStickHandlers_[ joyStick].begin();1140 it != _getSingleton().activeJoyStickHandlers_[ joyStick].end(); it++)1205 for (std::vector<JoyStickHandler*>::iterator it = _getSingleton().activeJoyStickHandlers_[ID].begin(); 1206 it != _getSingleton().activeJoyStickHandlers_[ID].end(); it++) 1141 1207 { 1142 1208 if ((*it) == (*handlerIt).second) -
code/trunk/src/core/InputManager.h
r1219 r1293 39 39 40 40 #include <map> 41 #include < list>41 #include <vector> 42 42 43 43 #include "ois/OIS.h" 44 44 #include "Tickable.h" 45 #include "InputInterfaces.h" 45 46 46 47 namespace orxonox 47 48 { 48 class Mouse : public OIS::Mouse49 {50 };51 52 49 /** 53 50 @brief Captures and distributes mouse and keyboard input. 54 51 */ 55 52 class _CoreExport InputManager 56 : public Tickable ,53 : public TickableReal, 57 54 public OIS::KeyListener, public OIS::MouseListener, public OIS::JoyStickListener 58 55 { … … 72 69 73 70 public: // static functions 74 static bool initialise(const size_t windowHnd, const int windowWidth, constint windowHeight,75 const bool createKeyboard = true, const bool createMouse = true, constbool createJoySticks = false);71 static bool initialise(const size_t windowHnd, int windowWidth, int windowHeight, 72 bool createKeyboard = true, bool createMouse = true, bool createJoySticks = false); 76 73 static bool initialiseKeyboard(); 77 74 static bool initialiseMouse(); … … 85 82 static void destroyMouse(); 86 83 static void destroyJoySticks(); 84 85 static bool isModifierDown(KeyboardModifier::Enum modifier); 86 static bool isKeyDown(KeyCode::Enum key); 87 static const MouseState getMouseState(); 88 static const JoyStickState getJoyStickState(unsigned int ID); 87 89 88 90 static void setWindowExtents(const int width, const int height); … … 108 110 static bool removeJoyStickHandler (const std::string& name); 109 111 static JoyStickHandler* getJoyStickHandler(const std::string& name); 110 static bool enableJoyStickHandler (const std::string& name, const int id); 111 static bool disableJoyStickHandler (const std::string& name, const int id); 112 static bool isJoyStickHandlerActive (const std::string& name, const int id); 113 114 // Temporary solutions. Will be removed soon! 115 static OIS::Mouse* getMouse() { return _getSingleton().mouse_ ; } 116 static OIS::Keyboard* getKeyboard() { return _getSingleton().keyboard_; } 112 static bool enableJoyStickHandler (const std::string& name, unsigned int id); 113 static bool disableJoyStickHandler (const std::string& name, unsigned int id); 114 static bool isJoyStickHandlerActive (const std::string& name, unsigned int id); 117 115 118 116 private: // functions … … 123 121 124 122 // Intenal methods 125 bool _initialise(const size_t, const int, const int, const bool, const bool, constbool);123 bool _initialise(const size_t, int, int, bool, bool, bool); 126 124 bool _initialiseKeyboard(); 127 125 bool _initialiseMouse(); … … 133 131 void _destroyJoySticks(); 134 132 135 //void _setNumberOfJoysticks(int size);136 137 133 void tick(float dt); 138 134 139 135 // input events 140 141 136 bool mousePressed (const OIS::MouseEvent &arg, OIS::MouseButtonID id); 137 bool mouseReleased (const OIS::MouseEvent &arg, OIS::MouseButtonID id); 142 138 bool mouseMoved (const OIS::MouseEvent &arg); 143 144 145 146 147 148 149 150 139 bool keyPressed (const OIS::KeyEvent &arg); 140 bool keyReleased (const OIS::KeyEvent &arg); 141 bool buttonPressed (const OIS::JoyStickEvent &arg, int button); 142 bool buttonReleased(const OIS::JoyStickEvent &arg, int button); 143 bool axisMoved (const OIS::JoyStickEvent &arg, int axis); 144 bool sliderMoved (const OIS::JoyStickEvent &arg, int id); 145 bool povMoved (const OIS::JoyStickEvent &arg, int id); 146 bool vector3Moved (const OIS::JoyStickEvent &arg, int id); 151 147 152 148 static InputManager& _getSingleton(); … … 158 154 OIS::Mouse* mouse_; //!< OIS keyboard 159 155 std::vector<OIS::JoyStick*> joySticks_; //!< OIS joy sticks 156 unsigned int joySticksSize_; 160 157 161 158 InputState state_; 162 159 InputState stateRequest_; 160 unsigned int keyboardModifiers_; 163 161 164 162 std::map<std::string, KeyHandler*> keyHandlers_; … … 168 166 std::vector<KeyHandler*> activeKeyHandlers_; 169 167 std::vector<MouseHandler*> activeMouseHandlers_; 170 std:: map< OIS::JoyStick*,std::vector<JoyStickHandler*> > activeJoyStickHandlers_;168 std::vector<std::vector<JoyStickHandler*> > activeJoyStickHandlers_; 171 169 172 std:: list<OIS::KeyCode>keysDown_;173 std:: list<OIS::MouseButtonID>mouseButtonsDown_;174 std:: map< OIS::JoyStick*, std::list<int> >joyStickButtonsDown_;170 std::vector<Key> keysDown_; 171 std::vector<MouseButton::Enum> mouseButtonsDown_; 172 std::vector<std::vector<int> > joyStickButtonsDown_; 175 173 176 174 }; 175 177 176 } 178 177 -
code/trunk/src/core/Namespace.cc
r1062 r1293 37 37 CreateFactory(Namespace); 38 38 39 Namespace::Namespace() 39 Namespace::Namespace() : 40 bAutogeneratedFileRootNamespace_(false), 41 bRoot_(false), 42 operator_("or") 40 43 { 41 44 RegisterObject(Namespace); 42 43 this->bAutogeneratedFileRootNamespace_ = false;44 this->bRoot_ = false;45 this->operator_ = "or";46 45 } 47 46 -
code/trunk/src/core/OrxonoxClass.cc
r1056 r1293 37 37 { 38 38 /** @brief Constructor: Sets the default values. */ 39 OrxonoxClass::OrxonoxClass() 39 OrxonoxClass::OrxonoxClass() : 40 identifier_(0), 41 parents_(0) 40 42 { 41 43 this->setConfigValues(); 42 43 this->identifier_ = 0;44 this->parents_ = 0;45 44 } 46 45 -
code/trunk/src/core/SignalHandler.cc
r1062 r1293 35 35 36 36 #include <assert.h> 37 #include <iostream> 37 38 38 39 #include "Debug.h" … … 43 44 44 45 #include <wait.h> 46 #include <X11/Xlib.h> 47 #include <X11/Xutil.h> 48 #include <X11/keysym.h> 49 50 bool SignalHandler::bXAutoKeyRepeatOn_ = false; 45 51 46 52 SignalHandler::SignalHandler() … … 58 64 this->fileName = fileName; 59 65 66 // prepare for restoring XAutoKeyRepeat 67 Display* display; 68 if ((display = XOpenDisplay(0))) 69 { 70 XKeyboardState oldState; 71 XGetKeyboardControl(display, &oldState); 72 if (oldState.global_auto_repeat == AutoRepeatModeOn) 73 bXAutoKeyRepeatOn_ = true; 74 else 75 bXAutoKeyRepeatOn_ = false; 76 XCloseDisplay(display); 77 } 78 else 79 { 80 std::cout << "Warning: couldn't open X display to restore XAutoKeyRepeat." << std::endl; 81 bXAutoKeyRepeatOn_ = false; 82 } 83 84 60 85 // make sure doCatch is only called once without calling dontCatch 61 86 assert( sigRecList.size() == 0 ); … … 120 145 sigName = "SIGILL"; 121 146 break; 147 } 148 149 if (bXAutoKeyRepeatOn_) 150 { 151 std::cout << "Trying to restore XAutoKeyRepeat" << std::endl; 152 Display* display; 153 if ((display = XOpenDisplay(0))) 154 { 155 XAutoRepeatOn(display); 156 XCloseDisplay(display); 157 } 122 158 } 123 159 -
code/trunk/src/core/SignalHandler.h
r1062 r1293 86 86 std::string appName; 87 87 std::string fileName; 88 89 // used to turn on KeyAutoRepeat if OIS crashes 90 static bool bXAutoKeyRepeatOn_; 88 91 }; 89 92 -
code/trunk/src/core/Tickable.cc
r1062 r1293 40 40 RegisterRootObject(Tickable); 41 41 } 42 43 /** 44 @brief Constructor: Registers the object in the TickableReal-list 45 */ 46 TickableReal::TickableReal() 47 { 48 RegisterRootObject(TickableReal); 49 } 42 50 } -
code/trunk/src/core/Tickable.h
r1062 r1293 62 62 }; 63 63 64 //! The Tickable interface provides a tick(dt) function, that gets called every frame. 65 class _CoreExport TickableReal : virtual public OrxonoxClass 66 { 67 public: 68 /** 69 @brief Gets called every frame. 70 @param dt The time since the last frame in seconds 71 */ 72 virtual void tick(float dt) = 0; 73 74 protected: 75 TickableReal(); 76 }; 77 64 78 } 65 79 -
code/trunk/src/orxonox/CMakeLists.txt
r1224 r1293 16 16 objects/Ambient.cc 17 17 objects/Camera.cc 18 objects/CameraHandler.cc 18 19 objects/Explosion.cc 19 20 objects/Model.cc … … 42 43 ADD_EXECUTABLE( orxonox ${ORXONOX_SRC_FILES} ) 43 44 45 IF(NETWORKTRAFFIC_TESTING_ENABLED) 46 47 SET( ORXONOXS_SRC_FILES 48 GraphicsEngine.cc 49 objects/Ambient.cc 50 objects/Camera.cc 51 objects/CameraHandler.cc 52 objects/Explosion.cc 53 objects/Model.cc 54 objects/NPC.cc 55 objects/Projectile.cc 56 objects/Skybox.cc 57 objects/SpaceShip.cc 58 objects/WorldEntity.cc 59 ) 60 61 ADD_LIBRARY(orxonoxs SHARED ${ORXONOX_SRC_FILES}) 62 ENDIF(NETWORKTRAFFIC_TESTING_ENABLED) 63 44 64 TARGET_LINK_LIBRARIES( orxonox 45 65 ${OGRE_LIBRARIES} -
code/trunk/src/orxonox/GraphicsEngine.cc
r1220 r1293 9 9 * modify it under the terms of the GNU General Public License 10 10 * as published by the Free Software Foundation; either version 2 11 * of the License, or (at your option) any later version.12 * 11 * of the License, or (atl your option) any later version. 12 *lo 13 13 * This program is distributed in the hope that it will be useful, 14 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of … … 44 44 #include "core/ConfigValueIncludes.h" 45 45 #include "core/Debug.h" 46 #include "core/ TclBind.h"46 #include "core/CommandExecutor.h" 47 47 48 48 … … 53 53 @return The only instance of GraphicsEngine. 54 54 */ 55 GraphicsEngine& GraphicsEngine::getSingleton()55 /*static*/ GraphicsEngine& GraphicsEngine::getSingleton() 56 56 { 57 57 static GraphicsEngine theOnlyInstance; … … 62 62 @brief Only use constructor to initialise variables and pointers! 63 63 */ 64 GraphicsEngine::GraphicsEngine() 64 GraphicsEngine::GraphicsEngine() : 65 root_(0), 66 scene_(0), 67 renderWindow_(0), 68 //configPath_(""), 69 dataPath_(""), 70 ogreLogfile_("") 65 71 { 66 72 RegisterObject(GraphicsEngine); 67 //this->bOverwritePath_ = false; 73 68 74 this->setConfigValues(); 69 // set to standard values 70 this->configPath_ = ""; 71 this->root_ = 0; 72 this->scene_ = 0; 73 this->renderWindow_ = 0; 74 COUT(4) << "*** GraphicsEngine: Constructed" << std::endl; 75 CCOUT(4) << "Constructed" << std::endl; 76 } 77 78 void GraphicsEngine::setConfigValues() 79 { 80 SetConfigValue(dataPath_, "../../Media/").description("relative path to media data"); 81 SetConfigValue(ogreLogfile_, "ogre.log").description("Logfile for messages from Ogre. Use \"\" to suppress log file creation."); 82 SetConfigValue(ogreLogLevelTrivial_ , 5).description("Corresponding orxonox debug level for ogre Trivial"); 83 SetConfigValue(ogreLogLevelNormal_ , 4).description("Corresponding orxonox debug level for ogre Normal"); 84 SetConfigValue(ogreLogLevelCritical_, 2).description("Corresponding orxonox debug level for ogre Critical"); 75 85 } 76 86 … … 89 99 void GraphicsEngine::destroy() 90 100 { 91 C OUT(4) << "*** GraphicsEngine:Destroying objects..." << std::endl;101 CCOUT(4) << "Destroying objects..." << std::endl; 92 102 Ogre::WindowEventUtilities::removeWindowEventListener(this->renderWindow_, this); 93 103 if (this->root_) … … 103 113 delete Ogre::LogManager::getSingletonPtr(); 104 114 } 105 COUT(4) << "*** GraphicsEngine: Destroying objects done" << std::endl; 106 } 107 108 void GraphicsEngine::setConfigValues() 109 { 110 SetConfigValue(dataPath_, "../../Media/").description("relative path to media data"); 111 SetConfigValue(ogreLogfile_, "ogre.log").description("Logfile for messages from Ogre. Use \"\" to suppress log file creation."); 112 SetConfigValue(ogreLogLevelTrivial_ , 5).description("Corresponding orxonox debug level for ogre Trivial"); 113 SetConfigValue(ogreLogLevelNormal_ , 4).description("Corresponding orxonox debug level for ogre Normal"); 114 SetConfigValue(ogreLogLevelCritical_, 2).description("Corresponding orxonox debug level for ogre Critical"); 115 116 TclBind::getInstance().setDataPath(this->dataPath_); 115 CCOUT(4) << "Destroying objects done" << std::endl; 117 116 } 118 117 … … 120 119 @brief Creates the Ogre Root object and sets up the ogre log. 121 120 */ 122 void GraphicsEngine::setup() 123 { 121 bool GraphicsEngine::setup(std::string& dataPath) 122 { 123 CCOUT(3) << "Setting up..." << std::endl; 124 // temporary overwrite of dataPath, change ini file for permanent change 125 if (dataPath != "") 126 dataPath_ = dataPath; 127 if (dataPath_ == "") 128 return false; 129 if (dataPath_[dataPath_.size() - 1] != '/') 130 dataPath_ += "/"; 131 124 132 //TODO: Check if file exists (maybe not here) 125 /*#ifndef OGRE_STATIC_LIB126 root_ = new Ogre::Root(configPath_ + "plugins.cfg", configPath_ + "ogre.cfg",127 configPath_ + "Ogre.log");128 #else129 root_ = new Ogre::Root(NULL, configPath_ + "ogre.cfg", configPath_ + "Ogre.log");130 #endif*/131 133 #if ORXONOX_COMPILER == ORXONOX_COMPILER_MSVC && defined(_DEBUG) 132 134 std::string plugin_filename = "plugins_d.cfg"; … … 135 137 #endif 136 138 137 // create a logManager 138 Ogre::LogManager *logger; 139 if (Ogre::LogManager::getSingletonPtr() == 0) 140 logger = new Ogre::LogManager(); 141 else 142 logger = Ogre::LogManager::getSingletonPtr(); 143 COUT(4) << "*** GraphicsEngine: Ogre LogManager created/assigned" << std::endl; 139 /* // create a logManager 140 // note: If there's already a logManager, Ogre will complain by a failed assertation. 141 // but that shouldn't happen, since this is the first time to create a logManager.. 142 Ogre::LogManager* logger = new Ogre::LogManager(); 143 CCOUT(4) << "Ogre LogManager created" << std::endl; 144 144 145 145 // create our own log that we can listen to … … 148 148 myLog = logger->createLog("ogre.log", true, false, true); 149 149 else 150 myLog = logger->createLog(this->ogreLogfile_, true, false, false);151 C OUT(4) << "*** GraphicsEngine:Ogre Log created" << std::endl;150 myLog = logger->createLog(this->ogreLogfile_, true, false, false); 151 CCOUT(4) << "Ogre Log created" << std::endl; 152 152 153 153 myLog->setLogDetail(Ogre::LL_BOREME); 154 myLog->addListener(this); 154 myLog->addListener(this);*/ 155 155 156 156 // Root will detect that we've already created a Log 157 C OUT(4) << "*** GraphicsEngine:Creating Ogre Root..." << std::endl;157 CCOUT(4) << "Creating Ogre Root..." << std::endl; 158 158 root_ = new Ogre::Root(plugin_filename); 159 COUT(4) << "*** GraphicsEngine: Creating Ogre Root done" << std::endl; 160 } 161 162 /** 163 * @return scene manager 164 */ 165 Ogre::SceneManager* GraphicsEngine::getSceneManager() 166 { 167 if(!scene_) 168 { 169 scene_ = root_->createSceneManager(Ogre::ST_GENERIC, "Default SceneManager"); 170 COUT(3) << "Info: Created SceneMan: " << scene_ << std::endl; 171 } 172 return scene_; 173 } 174 175 bool GraphicsEngine::load(std::string dataPath) 176 { 177 // temporary overwrite of dataPath, change ini file for permanent change 178 if( dataPath != "" ) 179 dataPath_ = dataPath + "/"; 180 loadRessourceLocations(this->dataPath_); 181 if (!root_->restoreConfig() && !root_->showConfigDialog()) 182 return false; 159 CCOUT(4) << "Creating Ogre Root done" << std::endl; 160 161 // specify where Ogre has to look for resources. This call doesn't parse anything yet! 162 declareRessourceLocations(); 163 164 CCOUT(3) << "Set up done." << std::endl; 183 165 return true; 184 166 } 185 167 186 void GraphicsEngine::initialise() 187 { 188 this->renderWindow_ = root_->initialise(true, "OrxonoxV2"); 189 Ogre::WindowEventUtilities::addWindowEventListener(this->renderWindow_, this); 190 Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5); 191 //TODO: Do NOT load all the groups, why are we doing that? And do we really do that? initialise != load... 192 Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); 193 } 194 195 void GraphicsEngine::loadRessourceLocations(std::string dataPath) 196 { 168 void GraphicsEngine::declareRessourceLocations() 169 { 170 CCOUT(4) << "Declaring Resources" << std::endl; 197 171 //TODO: Specify layout of data file and maybe use xml-loader 198 172 //TODO: Work with ressource groups (should be generated by a special loader) 199 173 // Load resource paths from data file using configfile ressource type 200 174 Ogre::ConfigFile cf; 201 cf.load(dataPath + "resources.cfg");175 cf.load(dataPath_ + "resources.cfg"); 202 176 203 177 // Go through all sections & settings in the file … … 216 190 217 191 Ogre::ResourceGroupManager::getSingleton().addResourceLocation( 218 std::string(dataPath + archName),192 std::string(dataPath_ + archName), 219 193 typeName, secName); 220 194 } 221 195 } 196 } 197 198 bool GraphicsEngine::loadRenderer() 199 { 200 CCOUT(4) << "Configuring Renderer" << std::endl; 201 if (!root_->restoreConfig() && !root_->showConfigDialog()) 202 return false; 203 204 CCOUT(4) << "Creating render window" << std::endl; 205 this->renderWindow_ = root_->initialise(true, "OrxonoxV2"); 206 if (!root_->isInitialised()) 207 { 208 CCOUT(2) << "Error: Creating Ogre root object failed" << std::endl; 209 return false; 210 } 211 Ogre::WindowEventUtilities::addWindowEventListener(this->renderWindow_, this); 212 Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5); 213 return true; 214 } 215 216 bool GraphicsEngine::initialiseResources() 217 { 218 CCOUT(4) << "Initialising resources" << std::endl; 219 //TODO: Do NOT load all the groups, why are we doing that? And do we really do that? initialise != load... 220 try 221 { 222 Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); 223 /*Ogre::StringVector str = Ogre::ResourceGroupManager::getSingleton().getResourceGroups(); 224 for (unsigned int i = 0; i < str.size(); i++) 225 { 226 Ogre::ResourceGroupManager::getSingleton().loadResourceGroup(str[i]); 227 }*/ 228 } 229 catch (Ogre::Exception e) 230 { 231 CCOUT(2) << "Error: There was an Error when initialising the resources." << std::endl; 232 CCOUT(2) << "ErrorMessage: " << e.getFullDescription() << std::endl; 233 return false; 234 } 235 return true; 236 } 237 238 /** 239 * @brief Creates the SceneManager 240 */ 241 bool GraphicsEngine::createNewScene() 242 { 243 CCOUT(4) << "Creating new SceneManager" << std::endl; 244 if (scene_) 245 { 246 CCOUT(2) << "SceneManager already exists! Skipping." << std::endl; 247 return false; 248 } 249 scene_ = root_->createSceneManager(Ogre::ST_GENERIC, "Default SceneManager"); 250 CCOUT(3) << "Created SceneManager: " << scene_ << std::endl; 251 return true; 222 252 } 223 253 … … 291 321 } 292 322 OutputHandler::getOutStream().setOutputLevel(orxonoxLevel) 293 << "*** Ogre: " << message << std::endl; 294 } 295 296 void GraphicsEngine::windowMoved(Ogre::RenderWindow *rw){ 297 int w = rw->getWidth(); 298 int h = rw->getHeight(); 299 InputManager::setWindowExtents(w, h); 300 } 301 302 void GraphicsEngine::windowResized(Ogre::RenderWindow *rw){ 303 int w = rw->getWidth(); 304 int h = rw->getHeight(); 305 InputManager::setWindowExtents(w, h); 306 } 307 308 void GraphicsEngine::windowFocusChanged(Ogre::RenderWindow *rw){ 309 int w = rw->getWidth(); 310 int h = rw->getHeight(); 311 InputManager::setWindowExtents(w, h); 312 } 323 << "Ogre: " << message << std::endl; 324 } 325 326 /** 327 * Window has resized. 328 * @param rw The render window it occured in 329 */ 330 void GraphicsEngine::windowMoved(Ogre::RenderWindow *rw) 331 { 332 // note: this doesn't change the window extents 333 } 334 335 /** 336 * Window has resized. 337 * @param rw The render window it occured in 338 * @note GraphicsEngine has a render window stored itself. This is the same 339 * as rw. But we have to be careful when using multiple render windows! 340 */ 341 void GraphicsEngine::windowResized(Ogre::RenderWindow *rw) 342 { 343 // change the mouse clipping size for absolute mouse movements 344 int w = rw->getWidth(); 345 int h = rw->getHeight(); 346 InputManager::setWindowExtents(w, h); 347 } 348 349 /** 350 * Window has resized. 351 * @param rw The render window it occured in 352 */ 353 void GraphicsEngine::windowFocusChanged(Ogre::RenderWindow *rw) 354 { 355 // note: this doesn't change the window extents 356 } 357 358 /** 359 * Window has resized. 360 * @param rw The render window it occured in 361 */ 362 void GraphicsEngine::windowClosed(Ogre::RenderWindow *rw) 363 { 364 // using CommandExecutor in order to avoid depending on Orxonox class. 365 CommandExecutor::execute("exit", false); 366 } 313 367 } -
code/trunk/src/orxonox/GraphicsEngine.h
r1214 r1293 52 52 @brief Graphics engine manager class 53 53 */ 54 class _OrxonoxExport GraphicsEngine : public Ogre::WindowEventListener, public O rxonoxClass, public Ogre::LogListener54 class _OrxonoxExport GraphicsEngine : public Ogre::WindowEventListener, public Ogre::LogListener, public OrxonoxClass 55 55 { 56 friend class ClassIdentifier<GraphicsEngine>;57 56 public: 58 void setConfigPath(std::string path) { this->configPath_ = path; };59 57 void setConfigValues(); 60 void setup(); 61 bool load(std::string path); 62 void loadRessourceLocations(std::string path); 63 Ogre::SceneManager* getSceneManager(); 64 void initialise(); 58 bool setup(std::string& dataPath); 59 void declareRessourceLocations(); 60 bool loadRenderer(); 61 bool initialiseResources(); 62 bool createNewScene(); 63 65 64 void destroy(); 65 66 Ogre::SceneManager* getSceneManager() { return scene_; } 67 std::string& getDataPath() { return dataPath_; } 66 68 67 69 // several window properties … … 71 73 int getWindowHeight() const; 72 74 75 void windowMoved (Ogre::RenderWindow* rw); 76 void windowResized (Ogre::RenderWindow* rw); 77 void windowFocusChanged(Ogre::RenderWindow* rw); 78 void windowClosed (Ogre::RenderWindow* rw); 79 73 80 static GraphicsEngine& getSingleton(); 74 81 static GraphicsEngine* getSingletonPtr() { return &getSingleton(); } 75 76 void windowMoved(Ogre::RenderWindow* rw);77 void windowResized(Ogre::RenderWindow* rw);78 void windowFocusChanged(Ogre::RenderWindow* rw);79 82 80 83 private: … … 92 95 Ogre::RenderWindow* renderWindow_;//!< the current render window 93 96 //bool bOverwritePath_; //!< overwrites path 94 std::string configPath_; //!< path to config file97 //std::string configPath_; //!< path to config file 95 98 std::string dataPath_; //!< path to data file 96 99 std::string ogreLogfile_; //!< log file name for Ogre log messages -
code/trunk/src/orxonox/Main.cc
r1214 r1293 78 78 Orxonox* orx = Orxonox::getSingleton(); 79 79 80 bool res = false; 80 81 #if ORXONOX_PLATFORM == ORXONOX_PLATFORM_APPLE 81 orx->init(argc, argv, macBundlePath());82 res = orx->init(argc, argv, macBundlePath()); 82 83 #else 83 orx->init(argc, argv, "");84 res = orx->init(argc, argv, ""); 84 85 #endif 85 86 86 orx->start(); 87 if (res) 88 orx->start(); 87 89 orx->destroySingleton(); 88 90 /*} -
code/trunk/src/orxonox/Orxonox.cc
r1219 r1293 37 37 38 38 //****** STD ******* 39 //#include <iostream>40 //#include <exception>41 39 #include <deque> 42 40 43 41 //****** OGRE ****** 44 //#include <OgreException.h>45 42 #include <OgreFrameListener.h> 46 43 #include <OgreOverlay.h> … … 65 62 #include "core/InputBuffer.h" 66 63 #include "core/InputManager.h" 64 #include "core/TclBind.h" 67 65 68 66 // audio … … 158 156 159 157 /** 160 * create a new instance of Orxonox 161 */ 162 Orxonox::Orxonox() 163 { 164 this->mode_ = STANDALONE; 165 this->serverIp_ = ""; 166 this->ogre_ = &GraphicsEngine::getSingleton(); 167 this->timer_ = 0; 168 this->dataPath_ = ""; 169 this->auMan_ = 0; 170 this->orxonoxHUD_ = 0; 171 this->inputHandler_ = 0; 158 * Create a new instance of Orxonox. Avoid doing any actual work here. 159 */ 160 Orxonox::Orxonox() : 161 ogre_(0), 162 //auMan_(0), 163 timer_(0), 172 164 // turn on frame smoothing by setting a value different from 0 173 this->frameSmoothingTime_ = 0.0f; 174 this->bAbort_ = false; 175 this->timefactor_ = 1.0f; 176 } 177 178 /** 179 * destruct Orxonox 165 frameSmoothingTime_(0.0f), 166 orxonoxConsole_(0), 167 orxonoxHUD_(0), 168 bAbort_(false), 169 timefactor_(1.0f), 170 mode_(STANDALONE), 171 serverIp_("") 172 { 173 } 174 175 /** 176 * Destruct Orxonox. 180 177 */ 181 178 Orxonox::~Orxonox() … … 186 183 Loader::close(); 187 184 InputManager::destroy(); 188 if (this->auMan_)189 delete this->auMan_;185 //if (this->auMan_) 186 // delete this->auMan_; 190 187 if (this->timer_) 191 188 delete this->timer_; 192 189 GraphicsEngine::getSingleton().destroy(); 193 190 194 if ( client_g)195 delete client_g;191 if (network::Client::getSingleton()) 192 network::Client::destroySingleton(); 196 193 if (server_g) 197 194 delete server_g; 198 195 } 199 196 200 /**201 @brief Immediately deletes the orxonox object.202 Never use if you can help it while rendering!203 */204 void Orxonox::abortImmediateForce()205 {206 COUT(1) << "*** Orxonox Error: Orxonox object was unexpectedly destroyed." << std::endl;207 delete this;208 }209 197 210 198 /** … … 213 201 void Orxonox::abortRequest() 214 202 { 215 COUT(3) << " ***Orxonox: Abort requested." << std::endl;203 COUT(3) << "Orxonox: Abort requested." << std::endl; 216 204 bAbort_ = true; 217 205 } 218 206 219 207 /** 220 * @return singleton object208 * @return singleton reference 221 209 */ 222 210 Orxonox* Orxonox::getSingleton() … … 243 231 * @param path path to config (in home dir or something) 244 232 */ 245 voidOrxonox::init(int argc, char **argv, std::string path)233 bool Orxonox::init(int argc, char **argv, std::string path) 246 234 { 247 235 //TODO: find config file (assuming executable directory) … … 249 237 //TODO: give config file to Ogre 250 238 std::string mode; 239 std::string dataPath; 251 240 252 241 ArgReader ar(argc, argv); 253 242 ar.checkArgument("mode", mode, false); 254 ar.checkArgument("data", this->dataPath_, false);243 ar.checkArgument("data", dataPath, false); 255 244 ar.checkArgument("ip", serverIp_, false); 256 if(ar.errorHandling()) abortImmediateForce(); 257 if(mode == std::string("client")) 245 if(ar.errorHandling()) 246 return false; 247 248 if (mode == "client") 249 mode_ = CLIENT; 250 else if (mode == "server") 251 mode_ = SERVER; 252 else 258 253 { 259 mode _ = CLIENT;260 clientInit(path);254 mode = "standalone"; 255 mode_ = STANDALONE; 261 256 } 262 else if(mode== std::string("server")){ 263 mode_ = SERVER; 264 serverInit(path); 265 } 266 else{ 267 mode_ = STANDALONE; 268 standaloneInit(path); 269 } 270 } 271 272 void Orxonox::serverInit(std::string path) 273 { 274 COUT(2) << "initialising server" << std::endl; 275 276 ogre_->setConfigPath(path); 277 ogre_->setup(); 278 //root_ = ogre_->getRoot(); 279 if(!ogre_->load(this->dataPath_)) abortImmediateForce(/* unable to load */); 280 281 server_g = new network::Server(); 282 } 283 284 void Orxonox::clientInit(std::string path) 285 { 286 COUT(2) << "initialising client" << std::endl;\ 287 288 ogre_->setConfigPath(path); 289 ogre_->setup(); 290 if(serverIp_.compare("")==0) 291 client_g = new network::Client(); 292 else 293 client_g = new network::Client(serverIp_, NETWORK_PORT); 294 if(!ogre_->load(this->dataPath_)) abortImmediateForce(/* unable to load */); 295 } 296 297 void Orxonox::standaloneInit(std::string path) 298 { 299 COUT(2) << "initialising standalone mode" << std::endl; 300 301 ogre_->setConfigPath(path); 302 ogre_->setup(); 303 if(!ogre_->load(this->dataPath_)) abortImmediateForce(/* unable to load */); 257 COUT(3) << "Orxonox: Mode is " << mode << "." << std::endl; 258 259 //if (mode_ == DEDICATED) 260 // TODO: decide what to do here 261 //else 262 263 // for playable server, client and standalone, the startup 264 // procedure until the GUI is identical 265 266 TclBind::getInstance().setDataPath(dataPath); 267 ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox.ini"); 268 Factory::createClassHierarchy(); 269 270 ogre_ = &GraphicsEngine::getSingleton(); 271 if (!ogre_->setup(path)) // creates ogre root and other essentials 272 return false; 273 274 return true; 304 275 } 305 276 … … 307 278 * start modules 308 279 */ 309 void Orxonox::start() 310 { 311 switch(mode_){ 280 bool Orxonox::start() 281 { 282 //if (mode == DEDICATED) 283 // do something else 284 //else 285 286 if (!ogre_->loadRenderer()) // creates the render window 287 return false; 288 289 // Calls the InputManager which sets up the input devices. 290 // The render window width and height are used to set up the mouse movement. 291 if (!InputManager::initialise(ogre_->getWindowHandle(), 292 ogre_->getWindowWidth(), ogre_->getWindowHeight(), true, true, true)) 293 return false; 294 295 // TODO: Spread this so that this call only initialises things needed for the GUI 296 if (!ogre_->initialiseResources()) 297 return false; 298 299 // TOOD: load the GUI here 300 // set InputManager to GUI mode 301 InputManager::setInputState(InputManager::IS_GUI); 302 // TODO: run GUI here 303 304 // The following lines depend very much on the GUI output, so they're probably misplaced here.. 305 306 InputManager::setInputState(InputManager::IS_NONE); 307 308 if (!loadPlayground()) 309 return false; 310 311 switch (mode_) 312 { 313 case SERVER: 314 if (!serverLoad()) 315 return false; 316 break; 312 317 case CLIENT: 313 clientStart(); 314 break; 315 case SERVER: 316 serverStart(); 318 if (!clientLoad()) 319 return false; 317 320 break; 318 321 default: 319 standaloneStart(); 322 if (!standaloneLoad()) 323 return false; 320 324 } 321 } 322 323 void Orxonox::clientStart(){ 324 ogre_->initialise(); 325 ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox.ini"); 326 Factory::createClassHierarchy(); 327 328 329 auMan_ = new audio::AudioManager(); 330 325 326 InputManager::setInputState(InputManager::IS_NORMAL); 327 328 return startRenderLoop(); 329 } 330 331 /** 332 * Loads everything in the scene except for the actual objects. 333 * This includes HUD, Console.. 334 */ 335 bool Orxonox::loadPlayground() 336 { 337 ogre_->createNewScene(); 338 339 // Init audio 340 //auMan_ = new audio::AudioManager(); 341 //auMan_->ambientAdd("a1"); 342 //auMan_->ambientAdd("a2"); 343 //auMan_->ambientAdd("a3"); 344 //auMan->ambientAdd("ambient1"); 345 //auMan_->ambientStart(); 346 347 // Load the HUD 348 COUT(3) << "Orxonox: Loading HUD..." << std::endl; 331 349 Ogre::Overlay* hudOverlay = Ogre::OverlayManager::getSingleton().getByName("Orxonox/HUD1.2"); 332 350 orxonoxHUD_ = new HUD(); … … 335 353 hudOverlay->show(); 336 354 337 client_g->establishConnection(); 338 client_g->tick(0); 339 340 341 //setupInputSystem(); 342 343 startRenderLoop(); 344 } 345 346 void Orxonox::serverStart(){ 347 //TODO: start modules 348 ogre_->initialise(); 349 //TODO: run engine 350 ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox.ini"); 351 Factory::createClassHierarchy(); 352 createScene(); 353 setupInputSystem(); 354 355 server_g->open(); 356 357 startRenderLoop(); 358 } 359 360 void Orxonox::standaloneStart(){ 361 //TODO: start modules 362 ogre_->initialise(); 363 //TODO: run engine 364 ConfigFileManager::getSingleton()->setFile(CFT_Settings, "orxonox.ini"); 365 Factory::createClassHierarchy(); 366 createScene(); 367 setupInputSystem(); 368 369 startRenderLoop(); 370 } 371 372 void Orxonox::createScene(void) 373 { 374 // Init audio 375 auMan_ = new audio::AudioManager(); 376 377 // load this file from config 378 Level* startlevel = new Level("levels/sample.oxw"); 379 Loader::open(startlevel); 380 381 Ogre::Overlay* hudOverlay = Ogre::OverlayManager::getSingleton().getByName("Orxonox/HUD1.2"); 382 orxonoxHUD_ = new HUD(); 383 orxonoxHUD_->setEnergyValue(20); 384 orxonoxHUD_->setEnergyDistr(20,20,60); 385 hudOverlay->show(); 386 387 /* 388 auMan_->ambientAdd("a1"); 389 auMan_->ambientAdd("a2"); 390 auMan_->ambientAdd("a3"); 391 //auMan->ambientAdd("ambient1"); 392 auMan_->ambientStart(); 393 */ 394 } 395 396 /** 397 @brief Calls the InputHandler which sets up the input devices. 398 The render window width and height are used to set up the mouse movement. 399 */ 400 void Orxonox::setupInputSystem() 401 { 402 if (!InputManager::initialise(ogre_->getWindowHandle(), 403 ogre_->getWindowWidth(), ogre_->getWindowHeight())) 404 abortImmediateForce(); 405 InputManager::setInputState(InputManager::IS_NORMAL); 406 } 407 408 /** 409 Main loop of the orxonox game. 410 This is a new solution, using the ogre engine instead of being used by it. 411 An alternative solution would be to simply use the timer of the Root object, 412 but that implies using Ogre in any case. There would be no way to test 413 our code without the help of the root object. 414 There's even a chance that we can dispose of the root object entirely 415 in server mode. 416 About the loop: The design is almost exactly like the one in ogre, so that 417 if any part of ogre registers a framelisteners, it will still behave 418 correctly. Furthermore the time smoothing feature from ogre has been 419 implemented too. If turned on (see orxonox constructor), it will calculate 420 the dt_n by means of the recent most dt_n-1, dt_n-2, etc. 421 */ 422 void Orxonox::startRenderLoop() 423 { 355 COUT(3) << "Orxonox: Loading Console..." << std::endl; 424 356 InputBuffer* ib = dynamic_cast<InputBuffer*>(InputManager::getKeyHandler("buffer")); 425 357 /* … … 432 364 ib->registerListener(console, &Testconsole::exit, (char)0x1B, true); 433 365 */ 434 435 366 orxonoxConsole_ = new InGameConsole(ib); 436 367 ib->registerListener(orxonoxConsole_, &InGameConsole::listen, true); … … 441 372 ib->registerListener(orxonoxConsole_, &InGameConsole::exit, (char)0x1B, true); 442 373 374 return true; 375 } 376 377 /** 378 * Level loading method for server mode. 379 */ 380 bool Orxonox::serverLoad() 381 { 382 COUT(2) << "Loading level in server mode" << std::endl; 383 384 server_g = new network::Server(); 385 386 if (!loadScene()) 387 return false; 388 389 server_g->open(); 390 391 return true; 392 } 393 394 /** 395 * Level loading method for client mode. 396 */ 397 bool Orxonox::clientLoad() 398 { 399 COUT(2) << "Loading level in client mode" << std::endl;\ 400 401 if (serverIp_.compare("") == 0) 402 client_g = network::Client::createSingleton(); 403 else 404 client_g = network::Client::createSingleton(serverIp_, NETWORK_PORT); 405 406 client_g->establishConnection(); 407 client_g->tick(0); 408 409 return true; 410 } 411 412 /** 413 * Level loading method for standalone mode. 414 */ 415 bool Orxonox::standaloneLoad() 416 { 417 COUT(2) << "Loading level in standalone mode" << std::endl; 418 419 if (!loadScene()) 420 return false; 421 422 return true; 423 } 424 425 /** 426 * Helper method to load a level. 427 */ 428 bool Orxonox::loadScene() 429 { 430 Level* startlevel = new Level("levels/sample.oxw"); 431 Loader::open(startlevel); 432 433 return true; 434 } 435 436 437 /** 438 Main loop of the orxonox game. 439 About the loop: The design is almost exactly like the one in ogre, so that 440 if any part of ogre registers a framelisteners, it will still behave 441 correctly. Furthermore the time smoothing feature from ogre has been 442 implemented too. If turned on (see orxonox constructor), it will calculate 443 the dt_n by means of the recent most dt_n-1, dt_n-2, etc. 444 */ 445 bool Orxonox::startRenderLoop() 446 { 443 447 // first check whether ogre root object has been created 444 448 if (Ogre::Root::getSingletonPtr() == 0) 445 449 { 446 COUT(2) << " ***Orxonox Error: Could not start rendering. No Ogre root object found" << std::endl;447 return ;450 COUT(2) << "Orxonox Error: Could not start rendering. No Ogre root object found" << std::endl; 451 return false; 448 452 } 449 453 Ogre::Root& ogreRoot = Ogre::Root::getSingleton(); … … 465 469 timer_->reset(); 466 470 471 COUT(3) << "Orxonox: Starting the main loop." << std::endl; 467 472 while (!bAbort_) 468 473 { … … 490 495 for (Iterator<Tickable> it = ObjectList<Tickable>::start(); it; ++it) 491 496 it->tick((float)evt.timeSinceLastFrame * this->timefactor_); 492 orxonoxConsole_->tick((float)evt.timeSinceLastFrame * this->timefactor_); 497 // Iterate through all TickableReals and call their tick(dt) function 498 for (Iterator<TickableReal> it = ObjectList<TickableReal>::start(); it; ++it) 499 it->tick((float)evt.timeSinceLastFrame); 500 orxonoxConsole_->tick((float)evt.timeSinceLastFrame); 493 501 494 502 // don't forget to call _fireFrameStarted in ogre to make sure … … 510 518 ogreRoot._fireFrameEnded(evt); 511 519 } 520 521 if(mode_==CLIENT) 522 network::Client::getSingleton()->closeConnection(); 523 else if(mode_==SERVER) 524 server_g->close(); 525 return true; 512 526 } 513 527 … … 550 564 } 551 565 566 /** 567 * Static function that shows the console in game mode. 568 */ 552 569 void Orxonox::activateConsole() 553 570 { 571 // currently, the console shows itself when feeded with input. 554 572 InputManager::setInputState(InputManager::IS_CONSOLE); 555 573 } -
code/trunk/src/orxonox/Orxonox.h
r1219 r1293 57 57 { 58 58 public: 59 voidinit(int argc, char **argv, std::string path);60 voidstart();61 void abortImmediateForce(); 59 bool init(int argc, char **argv, std::string path); 60 bool start(); 61 62 62 void abortRequest(); 63 inline audio::AudioManager* getAudioManagerPointer() { return auMan_; };63 //inline audio::AudioManager* getAudioManagerPointer() { return auMan_; }; 64 64 65 65 static Orxonox* getSingleton(); … … 79 79 ~Orxonox(); 80 80 81 // init functions 82 void serverInit(std::string path); 83 void clientInit(std::string path); 84 void standaloneInit(std::string path); 81 bool loadPlayground(); 85 82 86 // run functions 87 void serverStart(); 88 void clientStart(); 89 void standaloneStart(); 83 bool serverLoad(); 84 bool clientLoad(); 85 bool standaloneLoad(); 90 86 91 void createScene(); 92 void setupInputSystem(); 93 void startRenderLoop(); 87 bool loadScene(); 88 89 bool startRenderLoop(); 90 94 91 float calculateEventTime(unsigned long, std::deque<unsigned long>&); 95 92 96 93 private: 97 94 GraphicsEngine* ogre_; //!< our dearest graphics engine <3 98 std::string dataPath_; //!< path to data 99 audio::AudioManager* auMan_; //!< audio manager 100 InputManager* inputHandler_; //!< Handles input with key bindings 95 //audio::AudioManager* auMan_; //!< audio manager 101 96 Ogre::Timer* timer_; //!< Main loop timer 102 97 // TODO: make this a config-value by creating a config class for orxonox -
code/trunk/src/orxonox/OrxonoxPlatform.h
r1064 r1293 21 21 * 22 22 * Author: 23 * An unknown man from the Ogre development crew23 * ... 24 24 * Co-authors: 25 25 * Reto Grieder -
code/trunk/src/orxonox/console/InGameConsole.cc
r1223 r1293 54 54 const float BLINK = 0.25; 55 55 56 InGameConsole::InGameConsole(InputBuffer* ib){ 56 InGameConsole::InGameConsole(InputBuffer* ib) : 57 windowW(0), windowH(0), 58 scroll(0), scrollTimer(0.0f), 59 cursor(0.0f), 60 active(false), 61 ib_(ib), 62 om(0), 63 consoleOverlay(0), 64 consoleOverlayContainer(0), 65 consoleOverlayNoise(0), 66 consoleOverlayBorder(0), 67 consoleOverlayTextAreas(0) 68 { 57 69 //RegisterObject(InGameConsole); 58 ib_ = ib;59 active = false;60 cursor = 0.0;61 70 init(); 62 71 } -
code/trunk/src/orxonox/objects/Ambient.cc
r1209 r1293 57 57 RegisterObject(Ambient); 58 58 Ambient::instance_s = this; 59 registerAllVariables(); 59 60 } 60 61 … … 63 64 } 64 65 66 bool Ambient::create(){ 67 GraphicsEngine::getSingleton().getSceneManager()->setAmbientLight(ambientLight_); 68 return true; 69 } 70 71 void Ambient::registerAllVariables(){ 72 registerVar(&ambientLight_, sizeof(ColourValue), network::DATA); 73 74 } 75 65 76 void Ambient::loadParams(TiXmlElement* xmlElem) 66 77 { … … 83 94 { 84 95 GraphicsEngine::getSingleton().getSceneManager()->setAmbientLight(colour); 96 ambientLight_=colour; 85 97 } 86 98 … … 96 108 97 109 XMLPortParamLoadOnly(Ambient, "colourvalue", setAmbientLight, xmlelement, mode); 110 create(); 98 111 } 99 112 } -
code/trunk/src/orxonox/objects/Ambient.h
r1056 r1293 34 34 #include "util/Math.h" 35 35 #include "core/BaseObject.h" 36 #include "network/Synchronisable.h" 36 37 37 38 namespace orxonox 38 39 { 39 class _OrxonoxExport Ambient : public BaseObject 40 class _OrxonoxExport Ambient : public BaseObject, network::Synchronisable 40 41 { 41 42 public: … … 46 47 virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); 47 48 void setAmbientLight(const ColourValue& colour); 49 bool create(); 50 void registerAllVariables(); 48 51 49 52 static void setAmbientLightTest(const ColourValue& colour) … … 52 55 private: 53 56 static Ambient* instance_s; 57 ColourValue ambientLight_; 54 58 55 59 }; -
code/trunk/src/orxonox/objects/Camera.cc
r1209 r1293 23 23 * Fabian 'x3n' Landau 24 24 * Co-authors: 25 * ...25 * Benjamin Knecht 26 26 * 27 27 */ … … 29 29 #include "OrxonoxStableHeaders.h" 30 30 #include "Camera.h" 31 #include "CameraHandler.h" 31 32 32 33 #include <string> … … 47 48 namespace orxonox 48 49 { 49 CreateFactory(Camera);50 50 51 Camera::Camera() 51 Camera::Camera(Ogre::SceneNode* node) 52 { 53 this->bHasFocus_ = false; 54 this->cameraNode_ = GraphicsEngine::getSingleton().getSceneManager()->getRootSceneNode()->createChildSceneNode(node->getName() + "Camera"); 55 if( node != NULL ) 56 this->setPositionNode(node); 57 } 58 59 Camera::~Camera() 60 { 61 CameraHandler::getInstance()->releaseFocus(this); 62 } 63 64 void Camera::setPositionNode(Ogre::SceneNode* node) 65 { 66 this->positionNode_ = node; 67 // set camera to node values according to camera mode 68 } 69 70 void Camera::setTargetNode(Ogre::SceneNode* obj) 71 { 72 this->targetNode_ = obj; 73 } 74 75 void Camera::tick(float dt) 76 { 77 if(this->positionNode_ != NULL) { 78 // this stuff here may need some adjustments 79 Vector3 offset = this->positionNode_->getWorldPosition() - this->cameraNode_->getPosition(); 80 this->cameraNode_->translate(15*dt*offset); 81 82 this->cameraNode_->setOrientation(Quaternion::Slerp(0.7, this->positionNode_->getWorldOrientation(), this->cameraNode_->getWorldOrientation(), false)); 83 } 84 } 85 86 /** 87 don't move anything before here! here the Ogre camera is set to values of this camera 88 always call update after changes 89 */ 90 void Camera::update() 91 { 92 if(this->positionNode_ != NULL) 52 93 { 53 RegisterObject(Camera); 94 this->cameraNode_->setPosition(this->positionNode_->getWorldPosition()); 95 this->cameraNode_->setOrientation(this->positionNode_->getWorldOrientation()); 54 96 } 97 } 55 98 56 Camera::~Camera() 57 { 58 } 99 /** 100 what to do when camera loses focus (do not request focus in this function!!) 101 this is called by the CameraHandler singleton class to notify the camera 102 */ 103 void Camera::removeFocus() 104 { 105 this->bHasFocus_ = false; 106 this->cameraNode_->detachObject(this->cam_); 107 } 59 108 60 void Camera::loadParams(TiXmlElement* xmlElem) 61 { 62 Ogre::SceneManager* mgr = GraphicsEngine::getSingleton().getSceneManager(); 63 64 if (xmlElem->Attribute("name") && xmlElem->Attribute("pos") && xmlElem->Attribute("lookat") && xmlElem->Attribute("node")) 65 { 66 // <Camera name="Camera" pos="0,0,-250" lookat="0,0,0" /> 67 68 std::string name = xmlElem->Attribute("name"); 69 std::string pos = xmlElem->Attribute("pos"); 70 std::string lookat = xmlElem->Attribute("lookat"); 71 72 Ogre::Camera *cam = mgr->createCamera(name); 73 74 float x, y, z; 75 SubString posVec(xmlElem->Attribute("pos"), ','); 76 convertValue<std::string, float>(&x, posVec[0]); 77 convertValue<std::string, float>(&y, posVec[1]); 78 convertValue<std::string, float>(&z, posVec[2]); 79 80 cam->setPosition(Vector3(x,y,z)); 81 82 posVec = SubString(xmlElem->Attribute("lookat"), ','); 83 convertValue<std::string, float>(&x, posVec[0]); 84 convertValue<std::string, float>(&y, posVec[1]); 85 convertValue<std::string, float>(&z, posVec[2]); 86 87 cam->lookAt(Vector3(x,y,z)); 88 89 std::string node = xmlElem->Attribute("node"); 90 91 Ogre::SceneNode* sceneNode = (Ogre::SceneNode*)mgr->getRootSceneNode()->createChildSceneNode(node); //getChild(node); 92 sceneNode->attachObject((Ogre::MovableObject*)cam); 93 94 // FIXME: unused var 95 //Ogre::Viewport* vp = 96 GraphicsEngine::getSingleton().getRenderWindow()->addViewport(cam); 97 98 99 COUT(4) << "Loader: Created camera "<< name << std::endl << std::endl; 100 } 101 } 109 void Camera::setFocus(Ogre::Camera* ogreCam) 110 { 111 this->bHasFocus_ = true; 112 this->cam_ = ogreCam; 113 this->cam_->setOrientation(this->cameraNode_->getWorldOrientation()); 114 this->cameraNode_->attachObject(this->cam_); 115 } 102 116 } -
code/trunk/src/orxonox/objects/Camera.h
r1056 r1293 23 23 * Fabian 'x3n' Landau 24 24 * Co-authors: 25 * ...25 * Benjamin Knecht 26 26 * 27 27 */ … … 30 30 #define _Camera_H__ 31 31 32 #include <OgrePrerequisites.h> 33 #include <OgreSceneNode.h> 34 #include <OgreCamera.h> 35 32 36 #include "OrxonoxPrereqs.h" 33 34 #include "core/BaseObject.h"35 37 36 38 namespace orxonox 37 39 { 38 class _OrxonoxExport Camera : public BaseObject40 class _OrxonoxExport Camera 39 41 { 40 public: 41 Camera(); 42 virtual ~Camera(); 42 friend class CameraHandler; 43 public: 44 Camera(Ogre::SceneNode* node = NULL); 45 virtual ~Camera(); 43 46 47 void setPositionNode(Ogre::SceneNode* node); 48 inline Ogre::SceneNode* getCameraNode() { return this->positionNode_; } 49 // maybe also BaseObject 50 void setTargetNode(Ogre::SceneNode* obj); 44 51 45 void loadParams(TiXmlElement* xmlElem); 52 void tick(float dt); 53 void update(); 54 inline bool hasFocus() { return this->bHasFocus_; } 46 55 47 private: 56 private: 57 void removeFocus(); 58 void setFocus(Ogre::Camera* ogreCam); 48 59 49 60 private: 61 Ogre::SceneNode* targetNode_; 62 Ogre::SceneNode* positionNode_; 63 Ogre::SceneNode* cameraNode_; 64 Ogre::Vector3 oldPos; 65 Ogre::Camera* cam_; 66 bool bHasFocus_; 50 67 }; 51 68 } -
code/trunk/src/orxonox/objects/Explosion.cc
r1056 r1293 45 45 CreateFactory(Explosion); 46 46 47 Explosion::Explosion(WorldEntity* owner) 47 Explosion::Explosion(WorldEntity* owner) : 48 lifetime_(0.4), 49 particle_(0) 48 50 { 49 51 RegisterObject(Explosion); 50 51 this->particle_ = 0;52 this->lifetime_ = 0.4;53 52 54 53 if (owner) -
code/trunk/src/orxonox/objects/Model.cc
r1209 r1293 49 49 } 50 50 51 void Model::loadParams(TiXmlElement* xmlElem)52 {53 WorldEntity::loadParams(xmlElem);54 55 if (xmlElem->Attribute("mesh"))56 {57 meshSrc_ = xmlElem->Attribute("mesh");58 }59 create();60 }61 62 51 /** 63 52 @brief XML loading and saving. … … 73 62 XMLPortParamLoadOnly(Model, "mesh", setMesh, xmlelement, mode); 74 63 75 create();64 Model::create(); 76 65 } 77 66 … … 82 71 83 72 bool Model::create(){ 84 WorldEntity::create(); 73 if(!WorldEntity::create()) 74 return false; 85 75 if ((this->meshSrc_ != "") && (this->meshSrc_.size() > 0)) 86 76 { 87 77 this->mesh_.setMesh(meshSrc_); 88 78 this->attachObject(this->mesh_.getEntity()); 89 COUT(4) << "Loader : Created model" << std::endl;79 COUT(4) << "Loader (Model.cc): Created model" << std::endl; 90 80 } 91 81 return true; … … 93 83 94 84 void Model::registerAllVariables(){ 95 WorldEntity::registerAllVariables(); 85 // WorldEntity::registerAllVariables(); 86 COUT(5) << "Model.cc:registering new meshsrc with size: " << meshSrc_.length()+1 << " this: " << this << std::endl; 96 87 registerVar(&meshSrc_, meshSrc_.length() + 1, network::STRING); 97 88 } -
code/trunk/src/orxonox/objects/Model.h
r1056 r1293 43 43 Model(); 44 44 virtual ~Model(); 45 virtual void loadParams(TiXmlElement* xmlElem);46 45 virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); 47 46 void setMesh(const std::string& meshname); -
code/trunk/src/orxonox/objects/NPC.cc
r1056 r1293 36 36 CreateFactory(NPC); 37 37 38 NPC::NPC() 38 NPC::NPC() : 39 movable_(true) 39 40 { 40 41 RegisterObject(NPC); 41 movable_ = true;42 registerAllVariables(); 42 43 } 43 44 … … 59 60 this->translate(location); 60 61 movable_ = movable; 62 } 63 64 void NPC::registerAllVariables(){ 65 Model::registerAllVariables(); 66 registerVar(&movable_, sizeof(movable_), network::DATA); 67 } 68 69 bool NPC::create(){ 70 Model::create(); 71 return true; 61 72 } 62 73 -
code/trunk/src/orxonox/objects/NPC.h
r1056 r1293 52 52 void update(); 53 53 void setValues(Vector3 location, Vector3 speed, Vector3 acceleration, bool movable); 54 void registerAllVariables(); 55 bool create(); 54 56 55 57 private: -
code/trunk/src/orxonox/objects/Projectile.cc
r1056 r1293 42 42 CreateFactory(Projectile); 43 43 44 Projectile::Projectile(SpaceShip* owner) 44 Projectile::Projectile(SpaceShip* owner) : 45 owner_(owner) 45 46 { 46 47 RegisterObject(Projectile); 47 48 48 49 this->setConfigValues(); 49 50 this->owner_ = owner;51 50 52 51 this->billboard_.setBillboardSet("Examples/Flare", ColourValue(1.0, 1.0, 0.5), 1); -
code/trunk/src/orxonox/objects/Skybox.cc
r1209 r1293 47 47 { 48 48 RegisterObject(Skybox); 49 registerAllVariables(); 49 50 } 50 51 … … 57 58 if (xmlElem->Attribute("src")) 58 59 { 59 s td::string skyboxSrc= xmlElem->Attribute("src");60 this->setSkybox(skyboxSrc);60 skyboxSrc_ = xmlElem->Attribute("src"); 61 this->create(); 61 62 62 COUT(4) << "Loader: Set skybox: "<< skyboxSrc << std::endl << std::endl;63 COUT(4) << "Loader: Set skybox: "<< skyboxSrc_ << std::endl << std::endl; 63 64 } 64 65 } … … 69 70 } 70 71 72 void Skybox::setSkyboxSrc(const std::string& src){ 73 skyboxSrc_ = src; 74 } 75 71 76 /** 72 77 @brief XML loading and saving. … … 79 84 BaseObject::XMLPort(xmlelement, mode); 80 85 81 XMLPortParamLoadOnly(Skybox, "src", setSkybox, xmlelement, mode); 86 XMLPortParamLoadOnly(Skybox, "src", setSkyboxSrc, xmlelement, mode); 87 create(); 82 88 } 89 90 bool Skybox::create(){ 91 this->setSkybox(skyboxSrc_); 92 return true; 93 } 94 95 void Skybox::registerAllVariables(){ 96 registerVar(&skyboxSrc_, skyboxSrc_.length()+1 ,network::STRING); 97 } 98 83 99 } -
code/trunk/src/orxonox/objects/Skybox.h
r1056 r1293 33 33 34 34 #include "core/BaseObject.h" 35 #include "network/Synchronisable.h" 35 36 36 37 namespace orxonox 37 38 { 38 class _OrxonoxExport Skybox : public BaseObject 39 class _OrxonoxExport Skybox : public BaseObject, public network::Synchronisable 39 40 { 40 41 public: … … 45 46 virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); 46 47 void setSkybox(const std::string& skyboxname); 48 49 bool create(); 50 void registerAllVariables(); 51 void setSkyboxSrc(const std::string &src); 47 52 48 53 private: 54 std::string skyboxSrc_; 49 55 50 56 -
code/trunk/src/orxonox/objects/SpaceShip.cc
r1219 r1293 23 23 * Fabian 'x3n' Landau 24 24 * Co-authors: 25 * ...25 * Benjamin Knecht 26 26 * 27 27 */ … … 37 37 #include <OgreSceneNode.h> 38 38 39 #include "CameraHandler.h" 39 40 #include "tinyxml/tinyxml.h" 40 41 #include "ois/OIS.h" … … 50 51 #include "core/XMLPort.h" 51 52 #include "core/ConsoleCommand.h" 53 #include "network/Client.h" 52 54 53 55 namespace orxonox … … 62 64 SpaceShip* SpaceShip::instance_s; 63 65 64 SpaceShip::SpaceShip() 66 SpaceShip::SpaceShip() : 67 //testvector_(0,0,0), 68 //bInvertYAxis_(false), 69 setMouseEventCallback_(false), 70 bLMousePressed_(false), 71 bRMousePressed_(false), 72 camNode_(0), 73 cam_(0), 74 camName_("CamNode"), 75 tt_(0), 76 redNode_(0), 77 greenNode_(0), 78 blinkTime_(0.0f), 79 chNearNode_(0), 80 chFarNode_(0), 81 timeToReload_(0.0f), 82 //reloadTime_(0.0f), 83 maxSideAndBackSpeed_(0.0f), 84 maxSpeed_(0.0f), 85 maxRotation_(0.0f), 86 translationAcceleration_(0.0f), 87 rotationAcceleration_(0.0f), 88 translationDamping_(0.0f), 89 rotationDamping_(0.0f), 90 maxRotationRadian_(0), 91 rotationAccelerationRadian_(0), 92 rotationDampingRadian_(0), 93 zeroRadian_(0), 94 mouseXRotation_(0), 95 mouseYRotation_(0), 96 mouseX_(0.0f), 97 mouseY_(0.0f), 98 emitterRate_(0.0f), 99 server_(false) 65 100 { 66 101 RegisterObject(SpaceShip); … … 71 106 this->setConfigValues(); 72 107 73 this->setMouseEventCallback_ = false;74 this->bLMousePressed_ = false;75 this->bRMousePressed_ = false;76 this->mouseX_ = 0;77 this->mouseY_ = 0;78 79 this->camNode_ = 0;80 81 this->tt_ = 0;82 this->redNode_ = 0;83 this->greenNode_ = 0;84 this->blinkTime_ = 0;85 86 this->timeToReload_ = 0;87 88 this->maxSpeed_ = 0;89 this->maxSideAndBackSpeed_ = 0;90 this->maxRotation_ = 0;91 this->translationAcceleration_ = 0;92 this->rotationAcceleration_ = 0;93 this->translationDamping_ = 0;94 this->rotationDamping_ = 0;95 96 this->maxRotationRadian_ = 0;97 this->rotationAccelerationRadian_ = 0;98 this->rotationDampingRadian_ = 0;99 this->zeroRadian_ = Radian(0);100 108 101 109 this->setRotationAxis(1, 0, 0); 102 110 this->setStatic(false); 103 /*104 this->moveForward_ = 0;105 this->rotateUp_ = 0;106 this->rotateDown_ = 0;107 this->rotateRight_ = 0;108 this->rotateLeft_ = 0;109 this->loopRight_ = 0;110 this->loopLeft_ = 0;111 this->brakeForward_ = 0;112 this->brakeRotate_ = 0;113 this->brakeLoop_ = 0;114 this->speedForward_ = 0;115 this->speedRotateUpDown_ = 0;116 this->speedRotateRightLeft_ = 0;117 this->speedLoopRightLeft_ = 0;118 this->maxSpeedForward_ = 0;119 this->maxSpeedRotateUpDown_ = 0;120 this->maxSpeedRotateRightLeft_ = 0;121 this->maxSpeedLoopRightLeft_ = 0;122 this->accelerationForward_ = 0;123 this->accelerationRotateUpDown_ = 0;124 this->accelerationRotateRightLeft_ = 0;125 this->accelerationLoopRightLeft_ = 0;126 127 this->speed = 250;128 this->loop = 100;129 this->rotate = 10;130 this->mouseX = 0;131 this->mouseY = 0;132 this->maxMouseX = 0;133 this->minMouseX = 0;134 this->moved = false;135 136 this->brakeRotate(rotate*10);137 this->brakeLoop(loop);138 */139 // this->create();140 141 111 142 112 COUT(3) << "Info: SpaceShip was loaded" << std::endl; … … 147 117 if (this->tt_) 148 118 delete this->tt_; 119 if(setMouseEventCallback_) 120 InputManager::removeMouseHandler("SpaceShip"); 121 if (this->cam_) 122 delete this->cam_; 149 123 } 150 124 … … 158 132 159 133 void SpaceShip::registerAllVariables(){ 160 Model::registerAllVariables(); 161 162 134 registerVar( &camName_, camName_.length()+1, network::STRING, 0x1); 135 registerVar( &maxSpeed_, sizeof(maxSpeed_), network::DATA, 0x1); 136 registerVar( &maxSideAndBackSpeed_, sizeof(maxSideAndBackSpeed_), network::DATA, 0x1); 137 registerVar( &maxRotation_, sizeof(maxRotation_), network::DATA, 0x1); 138 registerVar( &translationAcceleration_, sizeof(translationAcceleration_), network::DATA, 0x1); 139 registerVar( &rotationAcceleration_, sizeof(rotationAcceleration_), network::DATA, 0x1); 140 registerVar( &rotationAccelerationRadian_, sizeof(rotationAccelerationRadian_), network::DATA, 0x1); 141 registerVar( &translationDamping_, sizeof(translationDamping_), network::DATA, 0x1); 142 registerVar( &rotationDamping_, sizeof(rotationDamping_), network::DATA, 0x1); 143 registerVar( &rotationDampingRadian_, sizeof(rotationDampingRadian_), network::DATA, 0x1); 163 144 164 145 } … … 166 147 void SpaceShip::init() 167 148 { 149 if ((server_ || ( network::Client::getSingleton() && network::Client::getSingleton()->getShipID()==objectID ) )) 150 { 151 if (!setMouseEventCallback_) 152 { 153 InputManager::addMouseHandler(this, "SpaceShip"); 154 setMouseEventCallback_ = true; 155 } 156 } 157 168 158 // START CREATING THRUSTER 169 159 this->tt_ = new ParticleInterface(GraphicsEngine::getSingleton().getSceneManager(),"twinthruster" + this->getName(),"Orxonox/engineglow"); … … 191 181 this->greenBillboard_.setBillboardSet("Examples/Flare", ColourValue(0.0, 1.0, 0.0), 1); 192 182 193 this->redNode_ = this->getNode()->createChildSceneNode(this->getName() + "red", Vector3(0.3, 4. 7, -0.3));183 this->redNode_ = this->getNode()->createChildSceneNode(this->getName() + "red", Vector3(0.3, 4.0, -0.3)); 194 184 this->redNode_->setInheritScale(false); 195 this->greenNode_ = this->getNode()->createChildSceneNode(this->getName() + "green", Vector3(0.3, -4. 7, -0.3));185 this->greenNode_ = this->getNode()->createChildSceneNode(this->getName() + "green", Vector3(0.3, -4.0, -0.3)); 196 186 this->greenNode_->setInheritScale(false); 197 187 … … 218 208 this->chFarNode_->setScale(0.4, 0.4, 0.4); 219 209 210 createCamera(); 220 211 // END of testing crosshair 221 212 } … … 232 223 Model::loadParams(xmlElem); 233 224 this->create(); 225 this->getFocus(); 234 226 /* 235 227 if (xmlElem->Attribute("forward") && xmlElem->Attribute("rotateupdown") && xmlElem->Attribute("rotaterightleft") && xmlElem->Attribute("looprightleft")) … … 246 238 247 239 COUT(4) << "Loader: Initialized spaceship steering with values " << maxSpeedForward_ << " " << maxSpeedRotateUpDown_ << " " << maxSpeedRotateRightLeft_ << " " << maxSpeedLoopRightLeft_ << " " << std::endl; 248 240 } 249 241 */ 250 242 if (xmlElem->Attribute("maxSpeed") && xmlElem->Attribute("maxSideAndBackSpeed") && xmlElem->Attribute("maxRotation") && xmlElem->Attribute("transAcc") && xmlElem->Attribute("rotAcc") && xmlElem->Attribute("transDamp") && xmlElem->Attribute("rotDamp")) … … 272 264 273 265 COUT(4) << "Loader: Initialized SpaceShip" << std::endl; 274 275 276 277 278 279 266 } 267 268 if (xmlElem->Attribute("camera")) 269 { 270 this->setCamera(); 271 } 280 272 } 281 273 282 274 void SpaceShip::setCamera(const std::string& camera) 283 275 { 284 Ogre::Camera *cam = GraphicsEngine::getSingleton().getSceneManager()->createCamera("ShipCam"); 285 this->camNode_ = this->getNode()->createChildSceneNode("CamNode"); 286 /* 287 // node->setInheritOrientation(false); 288 cam->setPosition(Vector3(0,50,-150)); 289 cam->lookAt(Vector3(0,20,0)); 290 cam->roll(Degree(0)); 291 */ 292 293 cam->setPosition(Vector3(-200,0,35)); 276 camName_=camera; 277 // change camera attributes here, if you want to ;) 278 } 279 280 void SpaceShip::getFocus(){ 281 COUT(4) << "requesting focus" << std::endl; 282 if(network::Client::getSingleton()==0 || network::Client::getSingleton()->getShipID()==objectID) 283 CameraHandler::getInstance()->requestFocus(cam_); 284 285 } 286 287 void SpaceShip::createCamera(){ 288 // COUT(4) << "begin camera creation" << std::endl; 289 this->camNode_ = this->getNode()->createChildSceneNode(camName_); 290 COUT(4) << "position: (this)" << this->getNode()->getPosition() << std::endl; 291 this->camNode_->setPosition(Vector3(-50,0,10)); 292 Quaternion q1 = Quaternion(Radian(Degree(90)),Vector3(0,-1,0)); 293 Quaternion q2 = Quaternion(Radian(Degree(90)),Vector3(0,0,-1)); 294 camNode_->setOrientation(q1*q2); 295 COUT(4) << "position: (cam)" << this->camNode_->getPosition() << std::endl; 296 cam_ = new Camera(this->camNode_); 297 298 cam_->setTargetNode(this->getNode()); 294 299 // cam->setPosition(Vector3(0,-350,0)); 295 cam->lookAt(Vector3(0,0,35));296 cam->roll(Degree(-90));297 298 this->camNode_->attachObject(cam);299 GraphicsEngine::getSingleton().getRenderWindow()->addViewport(cam); 300 if(network::Client::getSingleton()!=0 && network::Client::getSingleton()->getShipID()==objectID){ 301 this->setBacksync(true); 302 CameraHandler::getInstance()->requestFocus(cam_); 303 } 304 300 305 } 301 306 … … 333 338 XMLPortParamLoadOnly(SpaceShip, "transDamp", setTransDamp, xmlelement, mode); 334 339 XMLPortParamLoadOnly(SpaceShip, "rotDamp", setRotDamp, xmlelement, mode); 340 server_=true; // TODO: this is only a hack 341 SpaceShip::create(); 342 getFocus(); 335 343 } 336 344 … … 343 351 } 344 352 345 bool SpaceShip::mouseMoved(const OIS::MouseEvent &e)353 bool SpaceShip::mouseMoved(const MouseState& state) 346 354 { 347 355 /* … … 360 368 if (this->bRMousePressed_) 361 369 { 362 this->camNode_->roll(Degree(- e.state.X.rel * 0.10));363 this->camNode_->yaw(Degree( e.state.Y.rel * 0.10));364 } 365 else 366 { 367 float minDimension = e.state.height;368 if ( e.state.width < minDimension)369 minDimension = e.state.width;370 371 this->mouseX_ += e.state.X.rel;370 this->camNode_->roll(Degree(-state.X.rel * 0.10)); 371 this->camNode_->yaw(Degree(state.Y.rel * 0.10)); 372 } 373 else 374 { 375 float minDimension = state.height; 376 if (state.width < minDimension) 377 minDimension = state.width; 378 379 this->mouseX_ += state.X.rel; 372 380 if (this->mouseX_ < -minDimension) 373 381 this->mouseX_ = -minDimension; … … 375 383 this->mouseX_ = minDimension; 376 384 377 this->mouseY_ += e.state.Y.rel;385 this->mouseY_ += state.Y.rel; 378 386 if (this->mouseY_ < -minDimension) 379 387 this->mouseY_ = -minDimension; … … 403 411 } 404 412 405 bool SpaceShip::mouse Pressed(const OIS::MouseEvent &e, OIS::MouseButtonIDid)406 { 407 if (id == OIS::MB_Left)413 bool SpaceShip::mouseButtonPressed(const MouseState& state, MouseButton::Enum id) 414 { 415 if (id == MouseButton::Left) 408 416 this->bLMousePressed_ = true; 409 else if (id == OIS::MB_Right)417 else if (id == MouseButton::Right) 410 418 this->bRMousePressed_ = true; 411 419 … … 413 421 } 414 422 415 bool SpaceShip::mouse Released(const OIS::MouseEvent &e, OIS::MouseButtonIDid)416 { 417 if (id == OIS::MB_Left)423 bool SpaceShip::mouseButtonReleased(const MouseState& state, MouseButton::Enum id) 424 { 425 if (id == MouseButton::Left) 418 426 this->bLMousePressed_ = false; 419 else if (id == OIS::MB_Right)427 else if (id == MouseButton::Right) 420 428 { 421 429 this->bRMousePressed_ = false; … … 428 436 void SpaceShip::tick(float dt) 429 437 { 430 if (!setMouseEventCallback_) 431 { 432 InputManager::addMouseHandler(this, "SpaceShip"); 433 setMouseEventCallback_ = true; 434 } 438 if (this->cam_) 439 this->cam_->tick(dt); 435 440 436 441 if (this->redNode_ && this->greenNode_) … … 450 455 if (this->bLMousePressed_ && this->timeToReload_ <= 0) 451 456 { 452 new Projectile(this); 457 Projectile *p = new Projectile(this); 458 p->setBacksync(true); 453 459 this->timeToReload_ = this->reloadTime_; 454 460 } 455 456 OIS::Keyboard* mKeyboard = InputManager::getKeyboard();457 461 458 462 … … 522 526 } 523 527 524 if (mKeyboard->isKeyDown(OIS::KC_UP) || mKeyboard->isKeyDown(OIS::KC_W)) 528 if( (network::Client::getSingleton() && network::Client::getSingleton()->getShipID() == objectID) || server_ ) 529 { 530 COUT(4) << "steering our ship: " << objectID << std::endl; 531 if (InputManager::isKeyDown(KeyCode::Up) || InputManager::isKeyDown(KeyCode::W)) 525 532 this->acceleration_.x = this->translationAcceleration_; 526 else if(mKeyboard->isKeyDown(OIS::KC_DOWN) || mKeyboard->isKeyDown(OIS::KC_S))533 else if(InputManager::isKeyDown(KeyCode::Down) || InputManager::isKeyDown(KeyCode::S)) 527 534 this->acceleration_.x = -this->translationAcceleration_; 528 else535 else 529 536 this->acceleration_.x = 0; 530 537 531 if (mKeyboard->isKeyDown(OIS::KC_RIGHT) || mKeyboard->isKeyDown(OIS::KC_D))538 if (InputManager::isKeyDown(KeyCode::Right) || InputManager::isKeyDown(KeyCode::D)) 532 539 this->acceleration_.y = -this->translationAcceleration_; 533 else if (mKeyboard->isKeyDown(OIS::KC_LEFT) || mKeyboard->isKeyDown(OIS::KC_A))540 else if (InputManager::isKeyDown(KeyCode::Left) || InputManager::isKeyDown(KeyCode::A)) 534 541 this->acceleration_.y = this->translationAcceleration_; 535 else542 else 536 543 this->acceleration_.y = 0; 537 544 538 if (mKeyboard->isKeyDown(OIS::KC_DELETE) || mKeyboard->isKeyDown(OIS::KC_Q))545 if (InputManager::isKeyDown(KeyCode::Delete) || InputManager::isKeyDown(KeyCode::Q)) 539 546 this->momentum_ = Radian(-this->rotationAccelerationRadian_); 540 else if (mKeyboard->isKeyDown(OIS::KC_PGDOWN) || mKeyboard->isKeyDown(OIS::KC_E))547 else if (InputManager::isKeyDown(KeyCode::PageDown) || InputManager::isKeyDown(KeyCode::E)) 541 548 this->momentum_ = Radian(this->rotationAccelerationRadian_); 542 else549 else 543 550 this->momentum_ = 0; 551 }/*else 552 COUT(4) << "not steering ship: " << objectID << " our ship: " << network::Client::getSingleton()->getShipID() << std::endl;*/ 544 553 545 554 WorldEntity::tick(dt); -
code/trunk/src/orxonox/objects/SpaceShip.h
r1219 r1293 23 23 * Fabian 'x3n' Landau 24 24 * Co-authors: 25 * ...25 * Benjamin Knecht 26 26 * 27 27 */ … … 34 34 #include <OgrePrerequisites.h> 35 35 36 #include "core/InputHandler.h" 36 #include "core/InputInterfaces.h" 37 #include "Camera.h" 37 38 #include "Model.h" 38 39 #include "../tools/BillboardSet.h" … … 62 63 void setRotDamp(float value); 63 64 65 void getFocus(); 66 64 67 static void setMaxSpeedTest(float value) 65 68 { SpaceShip::instance_s->setMaxSpeed(value); } 66 69 67 bool mouseMoved(const OIS::MouseEvent &e); 68 bool mousePressed(const OIS::MouseEvent &e, OIS::MouseButtonID id); 69 bool mouseReleased(const OIS::MouseEvent &e, OIS::MouseButtonID id); 70 bool mouseHeld(const OIS::MouseEvent &e, OIS::MouseButtonID id) { return true; } 70 bool mouseButtonPressed (const MouseState& state, MouseButton::Enum id); 71 bool mouseButtonReleased(const MouseState& state, MouseButton::Enum id); 72 bool mouseButtonHeld (const MouseState& state, MouseButton::Enum id) { return true; } 73 bool mouseMoved (const MouseState& state); 74 bool mouseScrolled (const MouseState& state) { return true; } 71 75 72 76 73 77 private: 78 void createCamera(); 74 79 static SpaceShip* instance_s; 75 80 … … 81 86 82 87 Ogre::SceneNode* camNode_; 88 Camera* cam_; 89 std::string camName_; 90 83 91 84 92 ParticleInterface* tt_; … … 117 125 118 126 float emitterRate_; 127 bool server_; 119 128 }; 120 129 } -
code/trunk/src/orxonox/objects/WorldEntity.cc
r1209 r1293 45 45 unsigned int WorldEntity::worldEntityCounter_s = 0; 46 46 47 WorldEntity::WorldEntity() 47 WorldEntity::WorldEntity() : 48 velocity_ (0, 0, 0), 49 acceleration_(0, 0, 0), 50 rotationAxis_(0, 1, 0), 51 rotationRate_(0), 52 momentum_ (0), 53 node_ (0), 54 bStatic_ (true) 48 55 { 49 56 RegisterObject(WorldEntity); 50 51 //create();52 53 this->bStatic_ = true;54 this->velocity_ = Vector3(0, 0, 0);55 this->acceleration_ = Vector3(0, 0, 0);56 this->rotationAxis_ = Vector3(0, 1, 0);57 this->rotationRate_ = 0;58 this->momentum_ = 0;59 57 60 58 if (GraphicsEngine::getSingleton().getSceneManager()) … … 67 65 registerAllVariables(); 68 66 } 69 else70 {71 this->node_ = 0;72 }73 67 } 68 74 69 75 70 WorldEntity::~WorldEntity() 76 71 { 72 // just to make sure we clean out all scene nodes 73 if(this->getNode()) 74 this->getNode()->removeAndDestroyAllChildren(); 77 75 } 78 76 … … 81 79 if (!this->bStatic_) 82 80 { 81 // COUT(4) << "acceleration: " << this->acceleration_ << " velocity: " << this->velocity_ << std::endl; 83 82 this->velocity_ += (dt * this->acceleration_); 84 83 this->translate(dt * this->velocity_, Ogre::Node::TS_LOCAL); … … 94 93 BaseObject::loadParams(xmlElem); 95 94 create(); 96 /*97 if (xmlElem->Attribute("position"))98 {99 std::vector<std::string> pos = tokenize(xmlElem->Attribute("position"),",");100 float x, y, z;101 String2Number<float>(x, pos[0]);102 String2Number<float>(y, pos[1]);103 String2Number<float>(z, pos[2]);104 this->setPosition(x, y, z);105 }106 107 if (xmlElem->Attribute("direction"))108 {109 std::vector<std::string> pos = tokenize(xmlElem->Attribute("direction"),",");110 float x, y, z;111 String2Number<float>(x, pos[0]);112 String2Number<float>(y, pos[1]);113 String2Number<float>(z, pos[2]);114 this->setDirection(x, y, z);115 }116 117 if (xmlElem->Attribute("yaw") || xmlElem->Attribute("pitch") || xmlElem->Attribute("roll"))118 {119 float yaw = 0.0, pitch = 0.0, roll = 0.0;120 if (xmlElem->Attribute("yaw"))121 String2Number<float>(yaw,xmlElem->Attribute("yaw"));122 123 if (xmlElem->Attribute("pitch"))124 String2Number<float>(pitch,xmlElem->Attribute("pitch"));125 126 if (xmlElem->Attribute("roll"))127 String2Number<float>(roll,xmlElem->Attribute("roll"));128 129 this->yaw(Degree(yaw));130 this->pitch(Degree(pitch));131 this->roll(Degree(roll));132 }133 134 if (xmlElem->Attribute("scale"))135 {136 std::string scaleStr = xmlElem->Attribute("scale");137 float scale;138 String2Number<float>(scale, scaleStr);139 this->setScale(scale);140 }141 142 if (xmlElem->Attribute("rotationAxis"))143 {144 std::vector<std::string> pos = tokenize(xmlElem->Attribute("rotationAxis"),",");145 float x, y, z;146 String2Number<float>(x, pos[0]);147 String2Number<float>(y, pos[1]);148 String2Number<float>(z, pos[2]);149 this->setRotationAxis(x, y, z);150 }151 152 if (xmlElem->Attribute("rotationRate"))153 {154 float rotationRate;155 String2Number<float>(rotationRate, xmlElem->Attribute("rotationRate"));156 this->setRotationRate(Degree(rotationRate));157 if (rotationRate != 0)158 this->setStatic(false);159 }160 161 create();162 */163 95 } 96 164 97 165 98 void WorldEntity::setYawPitchRoll(const Degree& yaw, const Degree& pitch, const Degree& roll) … … 188 121 189 122 XMLPortObject(WorldEntity, WorldEntity, "attached", attachWorldEntity, getAttachedWorldEntity, xmlelement, mode, false, true); 123 124 WorldEntity::create(); 190 125 } 191 126 … … 194 129 { 195 130 // register coordinates 196 registerVar( (void*) &(this->getPosition().x), sizeof(this->getPosition().x), network::DATA );197 registerVar( (void*) &(this->getPosition().y), sizeof(this->getPosition().y), network::DATA );198 registerVar( (void*) &(this->getPosition().z), sizeof(this->getPosition().z), network::DATA );131 registerVar( (void*) &(this->getPosition().x), sizeof(this->getPosition().x), network::DATA, 0x3); 132 registerVar( (void*) &(this->getPosition().y), sizeof(this->getPosition().y), network::DATA, 0x3); 133 registerVar( (void*) &(this->getPosition().z), sizeof(this->getPosition().z), network::DATA, 0x3); 199 134 // register orientation 200 registerVar( (void*) &(this->getOrientation().w), sizeof(this->getOrientation().w), network::DATA); 201 registerVar( (void*) &(this->getOrientation().x), sizeof(this->getOrientation().x), network::DATA); 202 registerVar( (void*) &(this->getOrientation().y), sizeof(this->getOrientation().y), network::DATA); 203 registerVar( (void*) &(this->getOrientation().z), sizeof(this->getOrientation().z), network::DATA); 204 // not needed at the moment, because we don't have prediction yet 135 registerVar( (void*) &(this->getOrientation().w), sizeof(this->getOrientation().w), network::DATA, 0x3); 136 registerVar( (void*) &(this->getOrientation().x), sizeof(this->getOrientation().x), network::DATA, 0x3); 137 registerVar( (void*) &(this->getOrientation().y), sizeof(this->getOrientation().y), network::DATA, 0x3); 138 registerVar( (void*) &(this->getOrientation().z), sizeof(this->getOrientation().z), network::DATA, 0x3); 205 139 // register velocity_ 206 registerVar( (void*) &(this->getVelocity().x), sizeof(this->getVelocity().x), network::DATA); 207 registerVar( (void*) &(this->getVelocity().y), sizeof(this->getVelocity().y), network::DATA); 208 registerVar( (void*) &(this->getVelocity().z), sizeof(this->getVelocity().z), network::DATA); 209 // register rotationAxis/rate 210 registerVar( (void*) &(this->getRotationRate()), sizeof(this->getRotationRate()), network::DATA); 211 registerVar( (void*) &(this->getRotationAxis().x), sizeof(this->getRotationAxis().x), network::DATA); 212 registerVar( (void*) &(this->getRotationAxis().y), sizeof(this->getRotationAxis().y), network::DATA); 213 registerVar( (void*) &(this->getRotationAxis().z), sizeof(this->getRotationAxis().z), network::DATA); 140 // registerVar( (void*) &(this->getVelocity().x), sizeof(this->getVelocity().x), network::DATA, 0x3); 141 // registerVar( (void*) &(this->getVelocity().y), sizeof(this->getVelocity().y), network::DATA, 0x3); 142 // registerVar( (void*) &(this->getVelocity().z), sizeof(this->getVelocity().z), network::DATA, 0x3); 143 // // register rotationAxis/rate 144 // registerVar( (void*) &(this->getRotationRate()), sizeof(this->getRotationRate()), network::DATA, 0x3); 145 // registerVar( (void*) &(this->getRotationAxis().x), sizeof(this->getRotationAxis().x), network::DATA, 0x3); 146 // registerVar( (void*) &(this->getRotationAxis().y), sizeof(this->getRotationAxis().y), network::DATA, 0x3); 147 // registerVar( (void*) &(this->getRotationAxis().z), sizeof(this->getRotationAxis().z), network::DATA, 0x3); 148 // register scale of node 149 registerVar( (void*) &(this->getScale().x), sizeof(this->getScale().x), network::DATA, 0x3); 150 registerVar( (void*) &(this->getScale().y), sizeof(this->getScale().y), network::DATA, 0x3); 151 registerVar( (void*) &(this->getScale().z), sizeof(this->getScale().z), network::DATA, 0x3); 152 //register staticity 153 registerVar( (void*) &(this->bStatic_), sizeof(this->bStatic_), network::DATA, 0x3); 154 //register acceleration 155 // register velocity_ 156 // registerVar( (void*) &(this->getAcceleration().x), sizeof(this->getAcceleration().x), network::DATA, 0x3); 157 // registerVar( (void*) &(this->getAcceleration().y), sizeof(this->getAcceleration().y), network::DATA, 0x3); 158 // registerVar( (void*) &(this->getAcceleration().z), sizeof(this->getAcceleration().z), network::DATA, 0x3); 214 159 } 215 160 -
code/trunk/src/orxonox/particle/ParticleInterface.cc
r1039 r1293 63 63 ParticleInterface::~ParticleInterface(void) 64 64 { 65 while(particleSystem_->getNumEmitters()>0) 66 particleSystem_->removeEmitter(particleSystem_->getNumEmitters()-1); 65 67 sceneManager_->destroyParticleSystem(particleSystem_); 66 68 } -
code/trunk/src/orxonox/tools/Timer.cc
r1063 r1293 68 68 TimerBase::TimerBase() 69 69 { 70 RegisterRootObject(TimerBase);71 72 70 this->executor_ = 0; 73 71 this->interval_ = 0; … … 76 74 77 75 this->time_ = 0; 76 77 RegisterRootObject(TimerBase); 78 78 } 79 79 … … 83 83 TimerBase::~TimerBase() 84 84 { 85 delete this->executor_; 85 if (this->executor_) 86 delete this->executor_; 86 87 } 87 88
Note: See TracChangeset
for help on using the changeset viewer.