svn merge -r 15392:15551 https://svn.blender.org/svnroot/bf-blender/trunk/blender
[blender.git] / source / gameengine / Ketsji / KX_RaySensor.cpp
index e847c59bae1a5917a6052eb884211f77be690e01..a416c8c9f89bd5d7cadcb8f148fe6938bcd2ceb3 100644 (file)
@@ -72,6 +72,7 @@ void KX_RaySensor::Init()
        m_bTriggered = (m_invert)?true:false;
        m_rayHit = false;
        m_hitObject = NULL;
+       m_reset = true;
 }
 
 KX_RaySensor::~KX_RaySensor() 
@@ -83,9 +84,10 @@ KX_RaySensor::~KX_RaySensor()
 
 CValue* KX_RaySensor::GetReplica()
 {
-       CValue* replica = new KX_RaySensor(*this);
+       KX_RaySensor* replica = new KX_RaySensor(*this);
        // this will copy properties and so on...
        CValue::AddDataToReplica(replica);
+       replica->Init();
 
        return replica;
 }
@@ -151,6 +153,7 @@ bool KX_RaySensor::RayHit(KX_ClientObjectInfo* client, MT_Point3& hit_point, MT_
 bool KX_RaySensor::Evaluate(CValue* event)
 {
        bool result = false;
+       bool reset = m_reset && m_level;
        m_rayHit = false; 
        m_hitObject = NULL;
        m_hitPosition = MT_Vector3(0,0,0);
@@ -162,6 +165,7 @@ bool KX_RaySensor::Evaluate(CValue* event)
        MT_Matrix3x3 invmat = matje.inverse();
        
        MT_Vector3 todir;
+       m_reset = false;
        switch (m_axis)
        {
        case 1: // X
@@ -263,7 +267,9 @@ bool KX_RaySensor::Evaluate(CValue* event)
                }
        
       }
-    
+    if (reset)
+               // force an event
+               result = true;
 
        return result;
 }