00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "stdafx.h"
00024 #include "MouseSenderAgent.h"
00025 #include "ReachinMicoleApplication.h"
00026 #include <MicoleStringStream.h>
00027
00028 #include <Shape.h>
00029 #include <Appearance.h>
00030 #include <Material.h>
00031 #include <Box.h>
00032
00033
00034 MouseSenderAgent::MouseSenderAgent(int interval):
00035 MicoleAgentThread("MouseSenderAgent","SenderAgent"),
00036 _mouseMoveListener(new MouseMoveListener),
00037 _leftMouseButtonListener(new MouseButtonListener("BT1_")),
00038 _rightMouseButtonListener(new MouseButtonListener("BT2_")),
00039 _mouse(new Mouse()),
00040 mouse_coordinates(new SFVec3f())
00041 {
00042 _mouseMoveListener->_mssa=this;
00043 _leftMouseButtonListener->_mssa=this;
00044 _rightMouseButtonListener->_mssa=this;
00045 _mouse->position->route(_mouseMoveListener);
00046 _mouse->left_button->route(_leftMouseButtonListener);
00047 _mouse->right_button->route(_rightMouseButtonListener);
00048 _mouseMoveListener->route(_leftMouseButtonListener->mouse_coordinates);
00049 _mouseMoveListener->route(_rightMouseButtonListener->mouse_coordinates);
00050 sendMessage("MOUSE INPUT CREATED");
00051
00052
00053 _coordUpdInterval=interval;
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077 start();
00078 }
00079
00080 MouseSenderAgent::~MouseSenderAgent()
00081 {
00082
00083 }
00084
00085
00086 MouseSenderAgent::MouseMoveListener::MouseMoveListener()
00087 {
00088 }
00089
00090 void MouseSenderAgent::run()
00091 {
00092 MicoleStringStream ss;
00093 Vec2f p;
00094
00095 while(getState() == ACTIVE)
00096 {
00097 if(_coordUpdInterval > 0)
00098 {
00099 p = _mouseMoveListener->get();
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111 ss << "IN MSE : pos=(";
00112 ss << p.x << ", " << p.y << ");";
00113
00114 sendMessage(ss.str().c_str());
00115
00116 ss.flush();
00117
00118 ::Sleep(_coordUpdInterval);
00119 }
00120 else
00121 ::Sleep(50);
00122 }
00123 }
00124
00125 void MouseSenderAgent::setCoordinateUpdateInterval(int interval)
00126 {
00127 _coordUpdInterval=interval;
00128 }
00129
00130
00131 void MouseSenderAgent::MouseMoveListener::evaluate(SFVec2f *coord)
00132 {
00133 MicoleStringStream ss;
00134 Vec2f in = coord->get();
00135
00136 if(in.x < -0.15)
00137 in.x = -0.15;
00138 else if (in.x > 0.15)
00139 in.x = 0.15;
00140
00141 if(in.y < -0.11)
00142 in.y = -0.11;
00143 else if (in.y > 0.11)
00144 in.y = 0.11;
00145
00146 value = Vec2f(in.x, in.y);
00147 _mssa->mouse_coordinates->set(Vec3f(in.x, in.y, 0));
00148 _mssa->mouse_coordinates->touch();
00149
00150
00151
00152
00153
00154
00155 }
00156
00157 MouseSenderAgent::MouseButtonListener::MouseButtonListener(string button)
00158 :m_button(new SFBool()), mouse_coordinates(new SFVec2f())
00159 {
00160 m_strButton=button;
00161 }
00162
00163 void MouseSenderAgent::MouseButtonListener::evaluate(SFBool *mbutton)
00164 {
00165 value = mbutton;
00166 m_button->set(value);
00167 if(mbutton->get()==true)
00168 sendCoordinates(m_strButton + "PRESSED");
00169 else
00170 sendCoordinates(m_strButton + "RELEASED");
00171 m_button->touch();
00172 }
00173
00177 void MouseSenderAgent::MouseButtonListener::sendCoordinates(string state)
00178 {
00179 MicoleStringStream ss;
00180 ss << "IN MSE : pos=(";
00181 ss << mouse_coordinates->get().x << ", " << mouse_coordinates->get().y << ");";
00182 ss << " evt=(" << state << ");";
00183 _mssa->sendMessage(ss.str().c_str());
00184 }