[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