[Bf-blender-cvs] [0d36233] master: Fix for T41536: 2.71 getActionFrame no longer returns frames accurately

Mitchell Stokes noreply at git.blender.org
Wed Oct 7 07:23:00 CEST 2015


Commit: 0d36233dd81c92d98b2e665d04a8034e7b27aba0
Author: Mitchell Stokes
Date:   Tue Oct 6 22:16:22 2015 -0700
Branches: master
https://developer.blender.org/rB0d36233dd81c92d98b2e665d04a8034e7b27aba0

Fix for T41536: 2.71 getActionFrame no longer returns frames accurately

We now keep actions around when they are finished playing so scripts can
still get access to information such as the current frame. Playing a new
action in the same layer still overwrites the previous action as before this
commit. Using an explicit KX_GameObject.stopAction() will free the memory. The
action is also freed when the KX_GameObject is freed as before.

===================================================================

M	source/gameengine/Ketsji/BL_Action.cpp
M	source/gameengine/Ketsji/BL_Action.h
M	source/gameengine/Ketsji/BL_ActionManager.cpp
M	source/gameengine/Ketsji/BL_ActionManager.h

===================================================================

diff --git a/source/gameengine/Ketsji/BL_Action.cpp b/source/gameengine/Ketsji/BL_Action.cpp
index 12a1cae..507476d 100644
--- a/source/gameengine/Ketsji/BL_Action.cpp
+++ b/source/gameengine/Ketsji/BL_Action.cpp
@@ -268,11 +268,6 @@ bool BL_Action::Play(const char* name,
 	return true;
 }
 
-void BL_Action::Stop()
-{
-	m_done = true;
-}
-
 bool BL_Action::IsDone()
 {
 	return m_done;
diff --git a/source/gameengine/Ketsji/BL_Action.h b/source/gameengine/Ketsji/BL_Action.h
index 379dd52..7a40441 100644
--- a/source/gameengine/Ketsji/BL_Action.h
+++ b/source/gameengine/Ketsji/BL_Action.h
@@ -94,10 +94,6 @@ public:
 			float playback_speed,
 			short blend_mode);
 	/**
-	 * Stop playing the action
-	 */
-	void Stop();
-	/**
 	 * Whether or not the action is still playing
 	 */
 	bool IsDone();
diff --git a/source/gameengine/Ketsji/BL_ActionManager.cpp b/source/gameengine/Ketsji/BL_ActionManager.cpp
index 9e46905..4249db5 100644
--- a/source/gameengine/Ketsji/BL_ActionManager.cpp
+++ b/source/gameengine/Ketsji/BL_ActionManager.cpp
@@ -53,14 +53,6 @@ BL_Action *BL_ActionManager::GetAction(short layer)
 	return (it != m_layers.end()) ? it->second : 0;
 }
 
-BL_Action* BL_ActionManager::AddAction(short layer)
-{
-	BL_Action *action = new BL_Action(m_obj);
-	m_layers[layer] = action;
-
-	return action;
-}
-
 float BL_ActionManager::GetActionFrame(short layer)
 {
 	BL_Action *action = GetAction(layer);
@@ -116,8 +108,10 @@ bool BL_ActionManager::PlayAction(const char* name,
 {
 	// Only this method will create layer if non-existent
 	BL_Action *action = GetAction(layer);
-	if (!action)
-		action = AddAction(layer);
+	if (!action) {
+		action = new BL_Action(m_obj);
+		m_layers[layer] = action;
+	}
 
 	// Disable layer blending on the first layer
 	if (layer == 0) layer_weight = -1.f;
@@ -129,7 +123,10 @@ void BL_ActionManager::StopAction(short layer)
 {
 	BL_Action *action = GetAction(layer);
 
-	if (action) action->Stop();
+	if (action) {
+		m_layers.erase(layer);
+		delete action;
+	}
 }
 
 void BL_ActionManager::RemoveTaggedActions()
@@ -158,15 +155,10 @@ void BL_ActionManager::Update(float curtime)
 	m_prevUpdate = curtime;
 
 	BL_ActionMap::iterator it;
-	for (it = m_layers.begin(); it != m_layers.end(); )
+	for (it = m_layers.begin(); it != m_layers.end(); ++it)
 	{
-		if (it->second->IsDone()) {
-			delete it->second;
-			m_layers.erase(it++);
-		}
-		else {
+		if (!it->second->IsDone()) {
 			it->second->Update(curtime);
-			++it;
 		}
 	}
 }
diff --git a/source/gameengine/Ketsji/BL_ActionManager.h b/source/gameengine/Ketsji/BL_ActionManager.h
index 97d6d88..1292938 100644
--- a/source/gameengine/Ketsji/BL_ActionManager.h
+++ b/source/gameengine/Ketsji/BL_ActionManager.h
@@ -59,11 +59,6 @@ private:
 	 */
 	BL_Action* GetAction(short layer);
 
-	/**
-	 * Add new action with given layer
-	 */
-	BL_Action* AddAction(short layer);
-
 public:
 	BL_ActionManager(class KX_GameObject* obj);
 	~BL_ActionManager();




More information about the Bf-blender-cvs mailing list