spine-unity, made compatible with Unity 4.3.4.

This commit is contained in:
NathanSweet 2014-07-26 00:45:40 +02:00
parent a64d74b728
commit e30a267c19
3 changed files with 431 additions and 404 deletions

View File

@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: e6712a5a0c05f9f4092f9a3197925e99
folderAsset: yes
DefaultImporter:
userData:

View File

@ -31,7 +31,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEditor; using UnityEditor;
#if !UNITY_4_3
using UnityEditor.AnimatedValues; using UnityEditor.AnimatedValues;
#endif
using UnityEngine; using UnityEngine;
using Spine; using Spine;
@ -39,7 +41,12 @@ using Spine;
public class SkeletonDataAssetInspector : Editor { public class SkeletonDataAssetInspector : Editor {
private SerializedProperty atlasAsset, skeletonJSON, scale, fromAnimation, toAnimation, duration, defaultMix; private SerializedProperty atlasAsset, skeletonJSON, scale, fromAnimation, toAnimation, duration, defaultMix;
private bool showAnimationStateData = true; private bool showAnimationStateData = true;
#if UNITY_4_3
private bool m_showAnimationList = true;
#else
private AnimBool m_showAnimationList = new AnimBool(true); private AnimBool m_showAnimationList = new AnimBool(true);
#endif
private bool m_initialized = false; private bool m_initialized = false;
private SkeletonDataAsset m_skeletonDataAsset; private SkeletonDataAsset m_skeletonDataAsset;
@ -129,349 +136,360 @@ public class SkeletonDataAssetInspector : Editor {
m_requireRefresh = true; m_requireRefresh = true;
} }
m_showAnimationList.target = EditorGUILayout.Foldout(m_showAnimationList.target, new GUIContent("Animations", SpineEditorUtilities.Icons.animationRoot)); #if UNITY_4_3
m_showAnimationList = EditorGUILayout.Foldout(m_showAnimationList, new GUIContent("Animations", SpineEditorUtilities.Icons.animationRoot));
if(m_showAnimationList){
#else
m_showAnimationList.target = EditorGUILayout.Foldout(m_showAnimationList.target, new GUIContent("Animations", SpineEditorUtilities.Icons.animationRoot));
if(EditorGUILayout.BeginFadeGroup(m_showAnimationList.faded)){
#endif
if(EditorGUILayout.BeginFadeGroup(m_showAnimationList.faded)){
EditorGUILayout.LabelField("Name", "Duration");
foreach(Spine.Animation a in skeletonData.Animations){
GUILayout.BeginHorizontal();
if(m_skeletonAnimation != null && m_skeletonAnimation.state != null){
if(m_skeletonAnimation.state.GetCurrent(0) != null && m_skeletonAnimation.state.GetCurrent(0).Animation == a){ EditorGUILayout.LabelField("Name", "Duration");
GUI.contentColor = Color.black; foreach(Spine.Animation a in skeletonData.Animations){
if(GUILayout.Button("\u25BA", GUILayout.Width(24))){ GUILayout.BeginHorizontal();
StopAnimation();
if(m_skeletonAnimation != null && m_skeletonAnimation.state != null){
if(m_skeletonAnimation.state.GetCurrent(0) != null && m_skeletonAnimation.state.GetCurrent(0).Animation == a){
GUI.contentColor = Color.black;
if(GUILayout.Button("\u25BA", GUILayout.Width(24))){
StopAnimation();
}
GUI.contentColor = Color.white;
}
else{
if(GUILayout.Button("\u25BA", GUILayout.Width(24))){
PlayAnimation(a.Name, true);
}
} }
GUI.contentColor = Color.white;
} }
else{ else{
if(GUILayout.Button("\u25BA", GUILayout.Width(24))){ GUILayout.Label("?", GUILayout.Width(24));
PlayAnimation(a.Name, true);
}
} }
EditorGUILayout.LabelField(new GUIContent(a.Name, SpineEditorUtilities.Icons.animation), new GUIContent(a.Duration.ToString("f3") + "s" + ("(" + (Mathf.RoundToInt(a.Duration * 30)) + ")").PadLeft(12, ' ')));
GUILayout.EndHorizontal();
} }
else{ }
GUILayout.Label("?", GUILayout.Width(24)); #if !UNITY_4_3
} EditorGUILayout.EndFadeGroup();
EditorGUILayout.LabelField(new GUIContent(a.Name, SpineEditorUtilities.Icons.animation), new GUIContent(a.Duration.ToString("f3") + "s" + ("(" + (Mathf.RoundToInt(a.Duration * 30)) + ")").PadLeft(12, ' '))); #endif
GUILayout.EndHorizontal(); }
if (!Application.isPlaying) {
if (serializedObject.ApplyModifiedProperties() ||
(UnityEngine.Event.current.type == EventType.ValidateCommand && UnityEngine.Event.current.commandName == "UndoRedoPerformed")
) {
asset.Reset();
} }
} }
EditorGUILayout.EndFadeGroup();
} }
if (!Application.isPlaying) { //preview window stuff
if (serializedObject.ApplyModifiedProperties() || private PreviewRenderUtility m_previewUtility;
(UnityEngine.Event.current.type == EventType.ValidateCommand && UnityEngine.Event.current.commandName == "UndoRedoPerformed") private GameObject m_previewInstance;
) { private Vector2 previewDir;
asset.Reset(); private SkeletonAnimation m_skeletonAnimation;
} private SkeletonData m_skeletonData;
private static int sliderHash = "Slider".GetHashCode();
private float m_lastTime;
private bool m_playing;
private bool m_requireRefresh;
private Color m_originColor = new Color(0.3f,0.3f,0.3f, 1);
private void StopAnimation(){
m_skeletonAnimation.state.ClearTrack(0);
m_playing = false;
} }
}
//preview window stuff
private PreviewRenderUtility m_previewUtility;
private GameObject m_previewInstance;
private Vector2 previewDir;
private SkeletonAnimation m_skeletonAnimation;
private SkeletonData m_skeletonData;
private static int sliderHash = "Slider".GetHashCode();
private float m_lastTime;
private bool m_playing;
private bool m_requireRefresh;
private Color m_originColor = new Color(0.3f,0.3f,0.3f, 1);
private void StopAnimation(){
m_skeletonAnimation.state.ClearTrack(0);
m_playing = false;
}
List<Spine.Event> m_animEvents = new List<Spine.Event>(); List<Spine.Event> m_animEvents = new List<Spine.Event>();
List<float> m_animEventFrames = new List<float>(); List<float> m_animEventFrames = new List<float>();
private void PlayAnimation(string animName, bool loop){ private void PlayAnimation(string animName, bool loop){
m_animEvents.Clear(); m_animEvents.Clear();
m_animEventFrames.Clear(); m_animEventFrames.Clear();
m_skeletonAnimation.state.SetAnimation(0, animName, loop); m_skeletonAnimation.state.SetAnimation(0, animName, loop);
Spine.Animation a = m_skeletonAnimation.state.GetCurrent(0).Animation; Spine.Animation a = m_skeletonAnimation.state.GetCurrent(0).Animation;
foreach(Timeline t in a.Timelines){ foreach(Timeline t in a.Timelines){
if(t.GetType() == typeof(EventTimeline)){ if(t.GetType() == typeof(EventTimeline)){
EventTimeline et = (EventTimeline)t; EventTimeline et = (EventTimeline)t;
for(int i = 0; i < et.Events.Length; i++){
m_animEvents.Add(et.Events[i]);
m_animEventFrames.Add(et.Frames[i]);
}
for(int i = 0; i < et.Events.Length; i++){
m_animEvents.Add(et.Events[i]);
m_animEventFrames.Add(et.Frames[i]);
} }
} }
m_playing = true;
} }
m_playing = true; private void InitPreview()
}
private void InitPreview()
{
if (this.m_previewUtility == null)
{ {
this.m_lastTime = Time.realtimeSinceStartup; if (this.m_previewUtility == null)
this.m_previewUtility = new PreviewRenderUtility(true); {
this.m_previewUtility.m_Camera.isOrthoGraphic = true; this.m_lastTime = Time.realtimeSinceStartup;
this.m_previewUtility.m_Camera.orthographicSize = 1; this.m_previewUtility = new PreviewRenderUtility(true);
this.m_previewUtility.m_Camera.cullingMask = -2147483648; this.m_previewUtility.m_Camera.isOrthoGraphic = true;
this.CreatePreviewInstances(); this.m_previewUtility.m_Camera.orthographicSize = 1;
this.m_previewUtility.m_Camera.cullingMask = -2147483648;
this.CreatePreviewInstances();
}
} }
}
private void CreatePreviewInstances() private void CreatePreviewInstances()
{
this.DestroyPreviewInstances();
if (this.m_previewInstance == null)
{ {
string skinName = EditorPrefs.GetString(m_skeletonDataAssetGUID + "_lastSkin", ""); this.DestroyPreviewInstances();
if (this.m_previewInstance == null)
{
string skinName = EditorPrefs.GetString(m_skeletonDataAssetGUID + "_lastSkin", "");
m_previewInstance = SpineEditorUtilities.SpawnAnimatedSkeleton( (SkeletonDataAsset)target, skinName ).gameObject; m_previewInstance = SpineEditorUtilities.SpawnAnimatedSkeleton( (SkeletonDataAsset)target, skinName ).gameObject;
m_previewInstance.hideFlags = HideFlags.HideAndDontSave; m_previewInstance.hideFlags = HideFlags.HideAndDontSave;
m_previewInstance.layer = 0x1f; m_previewInstance.layer = 0x1f;
m_skeletonAnimation = m_previewInstance.GetComponent<SkeletonAnimation>(); m_skeletonAnimation = m_previewInstance.GetComponent<SkeletonAnimation>();
m_skeletonAnimation.initialSkinName = skinName; m_skeletonAnimation.initialSkinName = skinName;
m_skeletonAnimation.LateUpdate();
m_skeletonData = m_skeletonAnimation.skeletonDataAsset.GetSkeletonData(true);
m_previewInstance.renderer.enabled = false;
m_initialized = true;
AdjustCameraGoals(true);
}
}
private void DestroyPreviewInstances()
{
if (this.m_previewInstance != null)
{
DestroyImmediate(this.m_previewInstance);
m_previewInstance = null;
}
m_initialized = false;
}
public override bool HasPreviewGUI ()
{
//TODO: validate json data
return skeletonJSON.objectReferenceValue != null;
}
Texture m_previewTex = new Texture();
public override void OnInteractivePreviewGUI(Rect r, GUIStyle background)
{
this.InitPreview();
if (UnityEngine.Event.current.type == EventType.Repaint)
{
if(m_requireRefresh){
this.m_previewUtility.BeginPreview(r, background);
this.DoRenderPreview(true);
this.m_previewTex = this.m_previewUtility.EndPreview();
m_requireRefresh = false;
}
if(this.m_previewTex != null)
GUI.DrawTexture(r, m_previewTex, ScaleMode.StretchToFill, false);
}
DrawSkinToolbar(r);
NormalizedTimeBar(r);
//TODO: implement panning
// this.previewDir = Drag2D(this.previewDir, r);
MouseScroll(r);
}
float m_orthoGoal = 1;
Vector3 m_posGoal = new Vector3(0,0,-10);
double m_adjustFrameEndTime = 0;
private void AdjustCameraGoals(bool calculateMixTime){
if(calculateMixTime){
if(m_skeletonAnimation.state.GetCurrent(0) != null){
m_adjustFrameEndTime = EditorApplication.timeSinceStartup + m_skeletonAnimation.state.GetCurrent(0).Mix;
}
}
GameObject go = this.m_previewInstance;
Bounds bounds = go.renderer.bounds;
m_orthoGoal = bounds.size.y;
m_posGoal = bounds.center + new Vector3(0,0,-10);
}
private void AdjustCameraGoals(){
AdjustCameraGoals(false);
}
private void AdjustCamera(){
if(m_previewUtility == null)
return;
if(EditorApplication.timeSinceStartup < m_adjustFrameEndTime){
AdjustCameraGoals();
}
float orthoSet = Mathf.Lerp(this.m_previewUtility.m_Camera.orthographicSize, m_orthoGoal, 0.1f);
this.m_previewUtility.m_Camera.orthographicSize = orthoSet;
float dist = Vector3.Distance(m_previewUtility.m_Camera.transform.position, m_posGoal);
if(dist > 60f * ((SkeletonDataAsset)target).scale){
Vector3 pos = Vector3.Lerp(this.m_previewUtility.m_Camera.transform.position, m_posGoal, 0.1f);
pos.x = 0;
this.m_previewUtility.m_Camera.transform.position = pos;
this.m_previewUtility.m_Camera.transform.rotation = Quaternion.identity;
m_requireRefresh = true;
}
}
private void DoRenderPreview(bool drawHandles)
{
GameObject go = this.m_previewInstance;
if(m_requireRefresh){
go.renderer.enabled = true;
if(EditorApplication.isPlaying){
//do nothing
}
else{
m_skeletonAnimation.Update((Time.realtimeSinceStartup - m_lastTime));
}
m_lastTime = Time.realtimeSinceStartup;
if(!EditorApplication.isPlaying)
m_skeletonAnimation.LateUpdate(); m_skeletonAnimation.LateUpdate();
if(drawHandles){ m_skeletonData = m_skeletonAnimation.skeletonDataAsset.GetSkeletonData(true);
Handles.SetCamera(m_previewUtility.m_Camera);
Handles.color = m_originColor;
Handles.DrawLine(new Vector3(-1000 * m_skeletonDataAsset.scale,0,0), new Vector3(1000 * m_skeletonDataAsset.scale,0,0)); m_previewInstance.renderer.enabled = false;
Handles.DrawLine(new Vector3(0,1000 * m_skeletonDataAsset.scale,0), new Vector3(0,-1000 * m_skeletonDataAsset.scale,0));
m_initialized = true;
AdjustCameraGoals(true);
}
}
private void DestroyPreviewInstances()
{
if (this.m_previewInstance != null)
{
DestroyImmediate(this.m_previewInstance);
m_previewInstance = null;
}
m_initialized = false;
}
public override bool HasPreviewGUI ()
{
//TODO: validate json data
return skeletonJSON.objectReferenceValue != null;
}
Texture m_previewTex = new Texture();
public override void OnInteractivePreviewGUI(Rect r, GUIStyle background)
{
this.InitPreview();
if (UnityEngine.Event.current.type == EventType.Repaint)
{
if(m_requireRefresh){
this.m_previewUtility.BeginPreview(r, background);
this.DoRenderPreview(true);
this.m_previewTex = this.m_previewUtility.EndPreview();
m_requireRefresh = false;
}
if(this.m_previewTex != null)
GUI.DrawTexture(r, m_previewTex, ScaleMode.StretchToFill, false);
} }
this.m_previewUtility.m_Camera.Render(); DrawSkinToolbar(r);
go.renderer.enabled = false; NormalizedTimeBar(r);
//TODO: implement panning
// this.previewDir = Drag2D(this.previewDir, r);
MouseScroll(r);
} }
float m_orthoGoal = 1;
Vector3 m_posGoal = new Vector3(0,0,-10);
double m_adjustFrameEndTime = 0;
private void AdjustCameraGoals(bool calculateMixTime){
if(calculateMixTime){
if(m_skeletonAnimation.state.GetCurrent(0) != null){
m_adjustFrameEndTime = EditorApplication.timeSinceStartup + m_skeletonAnimation.state.GetCurrent(0).Mix;
}
}
}
void Update(){ GameObject go = this.m_previewInstance;
AdjustCamera(); Bounds bounds = go.renderer.bounds;
m_orthoGoal = bounds.size.y;
if (m_playing) { m_posGoal = bounds.center + new Vector3(0,0,-10);
m_requireRefresh = true;
Repaint();
} }
else if (m_requireRefresh) {
Repaint (); private void AdjustCameraGoals(){
AdjustCameraGoals(false);
} }
else{
if(m_showAnimationList.isAnimating) private void AdjustCamera(){
if(m_previewUtility == null)
return;
if(EditorApplication.timeSinceStartup < m_adjustFrameEndTime){
AdjustCameraGoals();
}
float orthoSet = Mathf.Lerp(this.m_previewUtility.m_Camera.orthographicSize, m_orthoGoal, 0.1f);
this.m_previewUtility.m_Camera.orthographicSize = orthoSet;
float dist = Vector3.Distance(m_previewUtility.m_Camera.transform.position, m_posGoal);
if(dist > 60f * ((SkeletonDataAsset)target).scale){
Vector3 pos = Vector3.Lerp(this.m_previewUtility.m_Camera.transform.position, m_posGoal, 0.1f);
pos.x = 0;
this.m_previewUtility.m_Camera.transform.position = pos;
this.m_previewUtility.m_Camera.transform.rotation = Quaternion.identity;
m_requireRefresh = true;
}
}
private void DoRenderPreview(bool drawHandles)
{
GameObject go = this.m_previewInstance;
if(m_requireRefresh){
go.renderer.enabled = true;
if(EditorApplication.isPlaying){
//do nothing
}
else{
m_skeletonAnimation.Update((Time.realtimeSinceStartup - m_lastTime));
}
m_lastTime = Time.realtimeSinceStartup;
if(!EditorApplication.isPlaying)
m_skeletonAnimation.LateUpdate();
if(drawHandles){
Handles.SetCamera(m_previewUtility.m_Camera);
Handles.color = m_originColor;
Handles.DrawLine(new Vector3(-1000 * m_skeletonDataAsset.scale,0,0), new Vector3(1000 * m_skeletonDataAsset.scale,0,0));
Handles.DrawLine(new Vector3(0,1000 * m_skeletonDataAsset.scale,0), new Vector3(0,-1000 * m_skeletonDataAsset.scale,0));
}
this.m_previewUtility.m_Camera.Render();
go.renderer.enabled = false;
}
}
void Update(){
AdjustCamera();
if (m_playing) {
m_requireRefresh = true;
Repaint(); Repaint();
} }
} else if (m_requireRefresh) {
Repaint ();
void DrawSkinToolbar(Rect r){ }
if(m_skeletonAnimation == null) else{
return; #if !UNITY_4_3
if(m_showAnimationList.isAnimating)
if(m_skeletonAnimation.skeleton != null){ Repaint();
string label = (m_skeletonAnimation.skeleton != null && m_skeletonAnimation.skeleton.Skin != null) ? m_skeletonAnimation.skeleton.Skin.Name : "default"; #endif
Rect popRect = new Rect(r);
popRect.y += 32;
popRect.x += 4;
popRect.height = 24;
popRect.width = 40;
EditorGUI.DropShadowLabel(popRect, new GUIContent("Skin", SpineEditorUtilities.Icons.skinsRoot));
popRect.y += 11;
popRect.width = 150;
popRect.x += 44;
if(GUI.Button( popRect, label, EditorStyles.popup)){
SelectSkinContext();
} }
} }
}
void SelectSkinContext(){ void DrawSkinToolbar(Rect r){
GenericMenu menu = new GenericMenu(); if(m_skeletonAnimation == null)
return;
foreach(Skin s in m_skeletonData.Skins){ if(m_skeletonAnimation.skeleton != null){
menu.AddItem( new GUIContent(s.Name), this.m_skeletonAnimation.skeleton.Skin == s, SetSkin, (object)s); string label = (m_skeletonAnimation.skeleton != null && m_skeletonAnimation.skeleton.Skin != null) ? m_skeletonAnimation.skeleton.Skin.Name : "default";
Rect popRect = new Rect(r);
popRect.y += 32;
popRect.x += 4;
popRect.height = 24;
popRect.width = 40;
EditorGUI.DropShadowLabel(popRect, new GUIContent("Skin", SpineEditorUtilities.Icons.skinsRoot));
popRect.y += 11;
popRect.width = 150;
popRect.x += 44;
if(GUI.Button( popRect, label, EditorStyles.popup)){
SelectSkinContext();
}
}
} }
menu.ShowAsContext(); void SelectSkinContext(){
} GenericMenu menu = new GenericMenu();
void SetSkin(object o){ foreach(Skin s in m_skeletonData.Skins){
Skin skin = (Skin)o; menu.AddItem( new GUIContent(s.Name), this.m_skeletonAnimation.skeleton.Skin == s, SetSkin, (object)s);
}
m_skeletonAnimation.initialSkinName = skin.Name; menu.ShowAsContext();
m_skeletonAnimation.Reset(); }
m_requireRefresh = true;
EditorPrefs.SetString(m_skeletonDataAssetGUID + "_lastSkin", skin.Name); void SetSkin(object o){
} Skin skin = (Skin)o;
void NormalizedTimeBar(Rect r){ m_skeletonAnimation.initialSkinName = skin.Name;
Rect barRect = new Rect(r); m_skeletonAnimation.Reset();
barRect.height = 32; m_requireRefresh = true;
barRect.x += 4;
barRect.width -=4;
GUI.Box(barRect, ""); EditorPrefs.SetString(m_skeletonDataAssetGUID + "_lastSkin", skin.Name);
}
Rect lineRect = new Rect(barRect); void NormalizedTimeBar(Rect r){
float width = lineRect.width; Rect barRect = new Rect(r);
TrackEntry t = m_skeletonAnimation.state.GetCurrent(0); barRect.height = 32;
barRect.x += 4;
barRect.width -=4;
if(t != null){ GUI.Box(barRect, "");
int loopCount = (int)(t.Time / t.EndTime);
float currentTime = t.Time - (t.EndTime * loopCount);
float normalizedTime = currentTime / t.Animation.Duration; Rect lineRect = new Rect(barRect);
float width = lineRect.width;
TrackEntry t = m_skeletonAnimation.state.GetCurrent(0);
lineRect.x = barRect.x + (width * normalizedTime) - 0.5f; if(t != null){
lineRect.width = 2; int loopCount = (int)(t.Time / t.EndTime);
float currentTime = t.Time - (t.EndTime * loopCount);
GUI.color = Color.red; float normalizedTime = currentTime / t.Animation.Duration;
GUI.DrawTexture(lineRect, EditorGUIUtility.whiteTexture);
GUI.color = Color.white;
for(int i = 0; i < m_animEvents.Count; i++){ lineRect.x = barRect.x + (width * normalizedTime) - 0.5f;
//TODO: Tooltip lineRect.width = 2;
//Spine.Event spev = animEvents[i];
float fr = m_animEventFrames[i]; GUI.color = Color.red;
GUI.DrawTexture(lineRect, EditorGUIUtility.whiteTexture);
GUI.color = Color.white;
Rect evRect = new Rect(barRect); for(int i = 0; i < m_animEvents.Count; i++){
evRect.x = Mathf.Clamp(((fr / t.Animation.Duration) * width) - (SpineEditorUtilities.Icons._event.width/2), barRect.x, float.MaxValue); //TODO: Tooltip
evRect.width = SpineEditorUtilities.Icons._event.width; //Spine.Event spev = animEvents[i];
evRect.height = SpineEditorUtilities.Icons._event.height;
evRect.y += SpineEditorUtilities.Icons._event.height; float fr = m_animEventFrames[i];
GUI.DrawTexture(evRect, SpineEditorUtilities.Icons._event);
Rect evRect = new Rect(barRect);
evRect.x = Mathf.Clamp(((fr / t.Animation.Duration) * width) - (SpineEditorUtilities.Icons._event.width/2), barRect.x, float.MaxValue);
evRect.width = SpineEditorUtilities.Icons._event.width;
evRect.height = SpineEditorUtilities.Icons._event.height;
evRect.y += SpineEditorUtilities.Icons._event.height;
GUI.DrawTexture(evRect, SpineEditorUtilities.Icons._event);
//TODO: Tooltip //TODO: Tooltip
/* /*
UnityEngine.Event ev = UnityEngine.Event.current; UnityEngine.Event ev = UnityEngine.Event.current;
if(ev.isMouse){ if(ev.isMouse){
if(evRect.Contains(ev.mousePosition)){ if(evRect.Contains(ev.mousePosition)){
@ -483,29 +501,29 @@ public class SkeletonDataAssetInspector : Editor {
} }
} }
*/ */
}
} }
} }
}
void MouseScroll(Rect position){ void MouseScroll(Rect position){
UnityEngine.Event current = UnityEngine.Event.current; UnityEngine.Event current = UnityEngine.Event.current;
int controlID = GUIUtility.GetControlID(sliderHash, FocusType.Passive); int controlID = GUIUtility.GetControlID(sliderHash, FocusType.Passive);
switch(current.GetTypeForControl(controlID)){ switch(current.GetTypeForControl(controlID)){
case EventType.ScrollWheel: case EventType.ScrollWheel:
if(position.Contains(current.mousePosition)){ if(position.Contains(current.mousePosition)){
m_orthoGoal += current.delta.y * ((SkeletonDataAsset)target).scale * 10; m_orthoGoal += current.delta.y * ((SkeletonDataAsset)target).scale * 10;
GUIUtility.hotControl = controlID; GUIUtility.hotControl = controlID;
current.Use(); current.Use();
}
break;
} }
break;
} }
} //TODO: Implement preview panning
/*
//TODO: Implement preview panning
/*
static Vector2 Drag2D(Vector2 scrollPosition, Rect position) static Vector2 Drag2D(Vector2 scrollPosition, Rect position)
{ {
int controlID = GUIUtility.GetControlID(sliderHash, FocusType.Passive); int controlID = GUIUtility.GetControlID(sliderHash, FocusType.Passive);
@ -546,38 +564,38 @@ public class SkeletonDataAssetInspector : Editor {
} }
*/ */
public override GUIContent GetPreviewTitle () public override GUIContent GetPreviewTitle ()
{ {
return new GUIContent ("Preview"); return new GUIContent ("Preview");
}
public override void OnPreviewSettings ()
{
if(!m_initialized){
GUILayout.HorizontalSlider(0,0,2, GUILayout.MaxWidth(64));
} }
else{
float speed = GUILayout.HorizontalSlider( m_skeletonAnimation.timeScale, 0, 2, GUILayout.MaxWidth(64));
//snap to nearest 0.25 public override void OnPreviewSettings ()
float y = speed / 0.25f; {
int q = Mathf.RoundToInt(y); if(!m_initialized){
speed = q * 0.25f; GUILayout.HorizontalSlider(0,0,2, GUILayout.MaxWidth(64));
}
else{
float speed = GUILayout.HorizontalSlider( m_skeletonAnimation.timeScale, 0, 2, GUILayout.MaxWidth(64));
m_skeletonAnimation.timeScale = speed; //snap to nearest 0.25
float y = speed / 0.25f;
int q = Mathf.RoundToInt(y);
speed = q * 0.25f;
m_skeletonAnimation.timeScale = speed;
}
} }
}
//TODO: Fix first-import error //TODO: Fix first-import error
//TODO: Update preview without thumbnail //TODO: Update preview without thumbnail
public override Texture2D RenderStaticPreview (string assetPath, UnityEngine.Object[] subAssets, int width, int height) public override Texture2D RenderStaticPreview (string assetPath, UnityEngine.Object[] subAssets, int width, int height)
{ {
Texture2D tex = new Texture2D(width, height, TextureFormat.ARGB32, false); Texture2D tex = new Texture2D(width, height, TextureFormat.ARGB32, false);
this.InitPreview(); this.InitPreview();
if(this.m_previewUtility.m_Camera == null) if(this.m_previewUtility.m_Camera == null)
return null; return null;
m_requireRefresh = true; m_requireRefresh = true;
this.DoRenderPreview(false); this.DoRenderPreview(false);
@ -588,14 +606,14 @@ public class SkeletonDataAssetInspector : Editor {
this.m_previewUtility.BeginStaticPreview(new Rect(0,0,width,height)); this.m_previewUtility.BeginStaticPreview(new Rect(0,0,width,height));
this.DoRenderPreview(false); this.DoRenderPreview(false);
//TODO: Figure out why this is throwing errors on first attempt //TODO: Figure out why this is throwing errors on first attempt
// if(m_previewUtility != null){ // if(m_previewUtility != null){
// Handles.SetCamera(this.m_previewUtility.m_Camera); // Handles.SetCamera(this.m_previewUtility.m_Camera);
// Handles.BeginGUI(); // Handles.BeginGUI();
// GUI.DrawTexture(new Rect(40,60,width,height), SpineEditorUtilities.Icons.spine, ScaleMode.StretchToFill); // GUI.DrawTexture(new Rect(40,60,width,height), SpineEditorUtilities.Icons.spine, ScaleMode.StretchToFill);
// Handles.EndGUI(); // Handles.EndGUI();
// } // }
tex = this.m_previewUtility.EndStaticPreview(); tex = this.m_previewUtility.EndStaticPreview();
return tex; return tex;
}
} }
}

View File

@ -0,0 +1,4 @@
fileFormatVersion: 2
guid: 46fcc9a83c504b54ea65c12fc11d52ab
DefaultImporter:
userData: