Browse Source

Made Initialize safe to call at any time.

NathanSweet 12 years ago
parent
commit
fc4934708f

+ 3 - 1
spine-tk2d/Assets/Spine/SkeletonAnimation.cs

@@ -60,7 +60,9 @@ public class SkeletonAnimation : SkeletonComponent {
 	}
 	
 	override public void Initialize () {
-		base.Initialize(); // Call overridden method to initialize the skeleton.
+		if (Initialized) return;
+
+		base.Initialize();
 		
 		state = new Spine.AnimationState(skeletonDataAsset.GetAnimationStateData());
 		if (_animationName != null && _animationName.Length > 0) state.SetAnimation(0, _animationName, loop);

+ 12 - 0
spine-tk2d/Assets/Spine/SkeletonComponent.cs

@@ -58,6 +58,16 @@ public class SkeletonComponent : MonoBehaviour {
 	private List<Material> submeshMaterials = new List<Material>();
 	private List<Submesh> submeshes = new List<Submesh>();
 
+	/// <summary>False if Initialize needs to be called.</summary>
+	public bool Initialized {
+		get {
+			if (skeletonDataAsset == null) return true;
+			SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(false);
+			if (skeletonData == null) return true;
+			return skeleton != null && skeleton.Data == skeletonData;
+		}
+	}
+
 	public virtual void Clear () {
 		meshFilter.sharedMesh = null;
 		DestroyImmediate(mesh);
@@ -69,6 +79,8 @@ public class SkeletonComponent : MonoBehaviour {
 	}
 
 	public virtual void Initialize () {
+		if (Initialized) return;
+
 		meshFilter = GetComponent<MeshFilter>();
 		mesh1 = newMesh();
 		mesh2 = newMesh();

+ 4 - 2
spine-unity/Assets/Spine/SkeletonAnimation.cs

@@ -60,8 +60,10 @@ public class SkeletonAnimation : SkeletonComponent {
 	}
 
 	override public void Initialize () {
-		base.Initialize(); // Call overridden method to initialize the skeleton.
-		
+		if (Initialized) return;
+
+		base.Initialize();
+
 		state = new Spine.AnimationState(skeletonDataAsset.GetAnimationStateData());
 		if (_animationName != null && _animationName.Length > 0) state.SetAnimation(0, _animationName, loop);
 	}

+ 12 - 0
spine-unity/Assets/Spine/SkeletonComponent.cs

@@ -57,6 +57,16 @@ public class SkeletonComponent : MonoBehaviour {
 	private Material[] sharedMaterials = new Material[0];
 	private List<Material> submeshMaterials = new List<Material>();
 	private List<Submesh> submeshes = new List<Submesh>();
+	
+	/// <summary>False if Initialize needs to be called.</summary>
+	public bool Initialized {
+		get {
+			if (skeletonDataAsset == null) return true;
+			SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(false);
+			if (skeletonData == null) return true;
+			return skeleton != null && skeleton.Data == skeletonData;
+		}
+	}
 
 	public virtual void Clear () {
 		meshFilter.sharedMesh = null;
@@ -69,6 +79,8 @@ public class SkeletonComponent : MonoBehaviour {
 	}
 
 	public virtual void Initialize () {
+		if (Initialized) return;
+
 		meshFilter = GetComponent<MeshFilter>();
 		mesh1 = newMesh();
 		mesh2 = newMesh();