From 72d60d7b6371fa0b3426ea0db3aecb45b9ae7a4a Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Wed, 17 Aug 2005 14:29:58 +0000 Subject: added the "mouse over any", makes the sensor more useful --- source/blender/makesdna/DNA_sensor_types.h | 1 + source/blender/src/buttons_logic.c | 2 +- source/gameengine/Converter/KX_ConvertSensors.cpp | 8 ++++++-- source/gameengine/Ketsji/KX_MouseFocusSensor.cpp | 9 ++++----- source/gameengine/Ketsji/KX_MouseFocusSensor.h | 9 +++++---- 5 files changed, 17 insertions(+), 12 deletions(-) diff --git a/source/blender/makesdna/DNA_sensor_types.h b/source/blender/makesdna/DNA_sensor_types.h index 4df3ecb5a11..7fcb400d66e 100644 --- a/source/blender/makesdna/DNA_sensor_types.h +++ b/source/blender/makesdna/DNA_sensor_types.h @@ -233,6 +233,7 @@ typedef struct bJoystickSensor { #define BL_SENS_MOUSE_WHEEL_DOWN 6 #define BL_SENS_MOUSE_MOVEMENT 8 #define BL_SENS_MOUSE_MOUSEOVER 16 +#define BL_SENS_MOUSE_MOUSEOVER_ANY 32 #define SENS_JOY_BUTTON 0 #define SENS_JOY_BUTTON_PRESSED 0 diff --git a/source/blender/src/buttons_logic.c b/source/blender/src/buttons_logic.c index dd0b3082c58..33a64473a00 100644 --- a/source/blender/src/buttons_logic.c +++ b/source/blender/src/buttons_logic.c @@ -1219,7 +1219,7 @@ static short draw_sensorbuttons(bSensor *sens, uiBlock *block, short xco, short /* Line 2: type selection. The number are a bit mangled to get * proper compatibility with older .blend files. */ str= "Type %t|Left button %x1|Middle button %x2|" - "Right button %x4|Wheel Up %x5|Wheel Down %x6|Movement %x8|Mouse over %x16"; + "Right button %x4|Wheel Up %x5|Wheel Down %x6|Movement %x8|Mouse over %x16|Mouse over any%x32"; uiDefButS(block, MENU, B_REDR, str, xco+10, yco-44, width-20, 19, &ms->type, 0, 31, 0, 0, "Specify the type of event this mouse sensor should trigger on."); diff --git a/source/gameengine/Converter/KX_ConvertSensors.cpp b/source/gameengine/Converter/KX_ConvertSensors.cpp index 450f4c0b523..4bd1e3d5469 100644 --- a/source/gameengine/Converter/KX_ConvertSensors.cpp +++ b/source/gameengine/Converter/KX_ConvertSensors.cpp @@ -422,7 +422,7 @@ void BL_ConvertSensors(struct Object* blenderobject, case SENS_MOUSE: { int keytype = SCA_MouseSensor::KX_MOUSESENSORMODE_NODEF; - bool trackfocus = false; + int trackfocus = 0; bMouseSensor *bmouse = (bMouseSensor *)sens->data; /* There are two main types of mouse sensors. If there is @@ -455,8 +455,12 @@ void BL_ConvertSensors(struct Object* blenderobject, keytype = SCA_MouseSensor::KX_MOUSESENSORMODE_MOVEMENT; break; case BL_SENS_MOUSE_MOUSEOVER: - trackfocus = true; + trackfocus = 1; break; + case BL_SENS_MOUSE_MOUSEOVER_ANY: + trackfocus = 2; + break; + default: ; /* error */ } diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp index b42c66fc4f9..107e8ebc185 100644 --- a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp +++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp @@ -62,7 +62,7 @@ KX_MouseFocusSensor::KX_MouseFocusSensor(SCA_MouseManager* eventmgr, int startx, int starty, short int mousemode, - bool focusmode, + int focusmode, RAS_ICanvas* canvas, KX_Scene* kxscene, SCA_IObject* gameobj, @@ -72,8 +72,7 @@ KX_MouseFocusSensor::KX_MouseFocusSensor(SCA_MouseManager* eventmgr, m_gp_canvas(canvas), m_kxscene(kxscene) { - /* Or postpone? I think a sumo scene and kx scene go pretty much - * together, so it should be safe to do it here. */ + m_mouse_over_in_previous_frame = false; m_positive_event = false; m_hitObject = 0; @@ -134,7 +133,7 @@ bool KX_MouseFocusSensor::RayHit(KX_ClientObjectInfo* client_info, MT_Point3& hi * self-hits are excluded by setting the correct ignore-object.) * Hitspots now become valid. */ KX_GameObject* thisObj = (KX_GameObject*) GetParent(); - if (hitKXObj != thisObj) + if ((m_focusmode == 2) || hitKXObj == thisObj) { m_hitObject = hitKXObj; m_hitPosition = hit_point; @@ -150,7 +149,7 @@ bool KX_MouseFocusSensor::RayHit(KX_ClientObjectInfo* client_info, MT_Point3& hi bool KX_MouseFocusSensor::ParentObjectHasFocus(void) { - + m_hitObject = 0; m_hitPosition = MT_Vector3(0,0,0); m_hitNormal = MT_Vector3(1,0,0); MT_Point3 resultpoint; diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.h b/source/gameengine/Ketsji/KX_MouseFocusSensor.h index ff69c570d53..94b2fc72e6d 100644 --- a/source/gameengine/Ketsji/KX_MouseFocusSensor.h +++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.h @@ -54,7 +54,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor int startx, int starty, short int mousemode, - bool focusmode, + int focusmode, RAS_ICanvas* canvas, KX_Scene* kxscene, SCA_IObject* gameobj, @@ -98,9 +98,9 @@ class KX_MouseFocusSensor : public SCA_MouseSensor private: /** - * The focus mode. True for handling focus, false for not handling - * it. */ - bool m_focusmode; + * The focus mode. 1 for handling focus, 0 for not handling, 2 for focus on any object + */ + int m_focusmode; /** * Flags whether the previous test showed a mouse-over. @@ -146,6 +146,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor * scene. */ class KX_KetsjiEngine* m_engine; + /** * The active canvas. The size of this canvas determines a part of * the start position of the picking ray. */ -- cgit v1.2.3