Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/makesdna/DNA_sensor_types.h1
-rw-r--r--source/blender/src/buttons_logic.c2
-rw-r--r--source/gameengine/Converter/KX_ConvertSensors.cpp8
-rw-r--r--source/gameengine/Ketsji/KX_MouseFocusSensor.cpp9
-rw-r--r--source/gameengine/Ketsji/KX_MouseFocusSensor.h9
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. */