[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13931] trunk/blender/source/gameengine/ GameLogic: random sensor fixed (patch 8414)

Benoit Bolsee benoit.bolsee at online.be
Sat Mar 1 19:46:23 CET 2008


Revision: 13931
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13931
Author:   ben2610
Date:     2008-03-01 19:46:23 +0100 (Sat, 01 Mar 2008)

Log Message:
-----------
random sensor fixed (patch 8414)

Modified Paths:
--------------
    trunk/blender/source/gameengine/GameLogic/SCA_RandomSensor.cpp
    trunk/blender/source/gameengine/GameLogic/SCA_RandomSensor.h

Modified: trunk/blender/source/gameengine/GameLogic/SCA_RandomSensor.cpp
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_RandomSensor.cpp	2008-03-01 18:41:32 UTC (rev 13930)
+++ trunk/blender/source/gameengine/GameLogic/SCA_RandomSensor.cpp	2008-03-01 18:46:23 UTC (rev 13931)
@@ -54,11 +54,15 @@
     : SCA_ISensor(gameobj,eventmgr, T)
 {
     m_iteration  = 0;
+	m_interval = 0;
 	m_lastdraw   = false;
 	
+	// m_basegenerator is never deleted => memory leak
 	m_basegenerator = new SCA_RandomNumberGenerator(startseed);
     m_currentDraw = m_basegenerator->Draw();
-	RegisterToManager();
+	//registration is done globally, don't do it here
+	//Note: it was probably done to work around a bug in Evaluate(). It is now fixed
+	//RegisterToManager();
 }
 
 
@@ -73,6 +77,7 @@
 CValue* SCA_RandomSensor::GetReplica()
 {
 	CValue* replica = new SCA_RandomSensor(*this);
+	// replication copies m_basegenerator pointer => share same generator
 	// this will copy properties and so on...
 	CValue::AddDataToReplica(replica);
 
@@ -98,20 +103,25 @@
     /* this is a reasonable way of generating bools. Check Knuth.            */
     /* Furthermore, we only draw each <delay>-eth frame.                     */
 
-    bool drawResult = false;
+	bool evaluateResult = false;
 
-	if (m_iteration > 31) {
-		m_currentDraw = m_basegenerator->Draw();
-		drawResult = (m_currentDraw & 0x1) == 0;
-		m_iteration = 1;
-	} else {
-		drawResult = ((m_currentDraw >> m_iteration) & 0x1) == 0;
-		m_iteration++;
+	if (++m_interval > m_pulse_frequency) {
+	    bool drawResult = false;
+		m_interval = 0;
+		if (m_iteration > 31) {
+			m_currentDraw = m_basegenerator->Draw();
+			drawResult = (m_currentDraw & 0x1) == 0;
+			m_iteration = 1;
+		} else {
+			drawResult = ((m_currentDraw >> m_iteration) & 0x1) == 0;
+			m_iteration++;
+		}
+		evaluateResult = drawResult != m_lastdraw;
+		m_lastdraw = drawResult;
 	}
     
     /* now pass this result to some controller */
-	m_lastdraw = drawResult;
-	return drawResult;
+	return evaluateResult;
 }
 
 /* ------------------------------------------------------------------------- */

Modified: trunk/blender/source/gameengine/GameLogic/SCA_RandomSensor.h
===================================================================
--- trunk/blender/source/gameengine/GameLogic/SCA_RandomSensor.h	2008-03-01 18:41:32 UTC (rev 13930)
+++ trunk/blender/source/gameengine/GameLogic/SCA_RandomSensor.h	2008-03-01 18:46:23 UTC (rev 13931)
@@ -45,6 +45,7 @@
 
 	unsigned int m_currentDraw;
 	int m_iteration;
+	int m_interval;
 	SCA_RandomNumberGenerator *m_basegenerator;
 	bool m_lastdraw;
 public:





More information about the Bf-blender-cvs mailing list