void DrawGUI() { GUILayout.Label("Character Animation", EditorStyles.boldLabel); //*** TODO: // - Zoom with mouse wheel or enum 2x, 4x, 8x // - Anim frames // - Set Pivot or sprite offset // EditorGUI.BeginChangeCheck(); m_animCtrl.SpriteCharSet = (Sprite)EditorGUILayout.ObjectField("CharacterSet", m_animCtrl.SpriteCharSet, typeof(Sprite), false); if (EditorGUI.EndChangeCheck()) { m_animCtrl.CreateSpriteFrames(); } if (m_animCtrl.SpriteCharSet == null) { return; } GUIStyle styleFoldout = new GUIStyle(EditorStyles.foldout); styleFoldout.fontStyle = FontStyle.Bold; m_animCtrl.CharsetType = (CharAnimationController.eCharSetType)EditorGUILayout.EnumPopup("Charset Type", m_animCtrl.CharsetType); m_animCtrl.AnimSpeed = EditorGUILayout.FloatField("Anim Speed", m_animCtrl.AnimSpeed); m_animCtrl.IsPingPongAnim = EditorGUILayout.ToggleLeft("Ping-Pong Anim", m_animCtrl.IsPingPongAnim); GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) }); EditorGUI.BeginChangeCheck(); m_viewMode = (eCharAnimEditMode)EditorGUILayout.EnumPopup("View Mode", m_viewMode); if (EditorGUI.EndChangeCheck()) { m_vTrans = Vector2.zero; m_zoom = 1f; } EditorGUI.indentLevel += 1; if (m_viewMode == eCharAnimEditMode.EditPivot) { m_animCtrl.CurrentDir = (CharAnimationController.eDir)EditorGUILayout.EnumPopup("View Direction", m_animCtrl.CurrentDir); EditorGUI.BeginChangeCheck(); m_animCtrl.Pivot[(int)m_animCtrl.CurrentDir] = EditorGUILayout.Vector2Field("Sprite Pivot (" + m_animCtrl.CurrentDir + ")", m_animCtrl.Pivot[(int)m_animCtrl.CurrentDir]); if (EditorGUI.EndChangeCheck()) { m_animCtrl.CreateSpriteFrames(); } } else if (m_viewMode == eCharAnimEditMode.MoveInCircles) { m_walkSpeed = EditorGUILayout.FloatField("Walk Speed", m_walkSpeed); } EditorGUI.indentLevel -= 1; GUILayout.Label("View Zoom:" + m_zoom); m_showGrid = EditorGUILayout.Foldout(m_showGrid, "Grid Settings:", styleFoldout); if (m_showGrid) { m_gridColor0 = EditorGUILayout.ColorField("Grid Color0", m_gridColor0); m_gridColor1 = EditorGUILayout.ColorField("Grid Color1", m_gridColor1); m_gridSize = EditorGUILayout.FloatField("Grid Size", m_gridSize); } // +++ Draw Animation Grid +++ /// Rect r = GUILayoutUtility.GetRect(1, 1, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); GUI.BeginGroup(r, s_gridTex); if (Event.current.type == EventType.Repaint) { m_rGridView = r; } r.position = Vector2.zero; // Draw grid Rect rGrid = r; rGrid.position *= m_zoom; rGrid.width *= m_zoom; rGrid.height *= m_zoom; GUI.DrawTextureWithTexCoords(rGrid, s_gridTex, new Rect(0, 0, r.width / (m_gridSize * s_gridTex.width), r.height / (m_gridSize * s_gridTex.height))); float fWalkDistX = 2 * m_animCtrl.GetSpriteFrames()[0].rect.width; float fWalkDistY = 2 * m_animCtrl.GetSpriteFrames()[0].rect.height; float fWalkProg = (1 - m_walkAnimTimer); foreach (CharAnimationController.eDir dir in System.Enum.GetValues(typeof(CharAnimationController.eDir))) { Sprite sprFrame = m_animCtrl.GetCurrentSprite(dir); Rect r2 = new Rect(); if (m_viewMode == eCharAnimEditMode.EditPivot) { if (m_animCtrl.CurrentDir != dir) { continue; } r2 = new Rect(r.x, r.y, sprFrame.rect.width, sprFrame.rect.height); } else if (m_viewMode == eCharAnimEditMode.Row) { r2 = new Rect(r.x + (int)dir * sprFrame.rect.width * 1.2f, r.y, sprFrame.rect.width, sprFrame.rect.height); } else if (m_viewMode == eCharAnimEditMode.Column) { r2 = new Rect(r.x, r.y + (int)dir * sprFrame.rect.height * 1.2f, sprFrame.rect.width, sprFrame.rect.height); } else if (m_viewMode == eCharAnimEditMode.MoveInCircles) { switch (dir) { case CharAnimationController.eDir.DOWN: r2 = new Rect(r.x, r.y + fWalkProg * fWalkDistY, sprFrame.rect.width, sprFrame.rect.height); break; case CharAnimationController.eDir.LEFT: r2 = new Rect(r.x + (1 - fWalkProg) * fWalkDistX, r.y, sprFrame.rect.width, sprFrame.rect.height); break; case CharAnimationController.eDir.RIGHT: r2 = new Rect(r.x + fWalkProg * fWalkDistX, r.y + fWalkDistY, sprFrame.rect.width, sprFrame.rect.height); break; case CharAnimationController.eDir.UP: r2 = new Rect(r.x + fWalkDistX, r.y + (1f - fWalkProg) * fWalkDistY, sprFrame.rect.width, sprFrame.rect.height); break; } } DrawSprite(r2, sprFrame); // draw pivot if (m_viewMode == eCharAnimEditMode.EditPivot) { Vector2 pivot = m_animCtrl.Pivot[(int)m_animCtrl.CurrentDir]; Vector2 vPivotPos = r2.position + new Vector2(pivot.x * r2.width, r2.height - pivot.y * r2.height); DrawLine(new Vector2(vPivotPos.x, r2.yMin), new Vector2(vPivotPos.x, r2.yMax), Color.red); DrawLine(new Vector2(r2.xMin, vPivotPos.y), new Vector2(r2.xMax, vPivotPos.y), Color.green); } } GUI.matrix = Matrix4x4.identity; GUI.EndGroup(); EditorGUILayout.HelpBox("Use mouse scroll wheel to change the View Zoom level\nDrag mouse over grid to drag sprites", MessageType.Info); }
void DrawGUI() { GUILayout.Label("Character Animation", EditorStyles.boldLabel); //*** TODO: // - Zoom with mouse wheel or enum 2x, 4x, 8x // - Anim frames // - Set Pivot or sprite offset // EditorGUI.BeginChangeCheck(); m_animCtrl.SpriteCharSet = (Sprite)EditorGUILayout.ObjectField("CharacterSet", m_animCtrl.SpriteCharSet, typeof(Sprite), false); if (EditorGUI.EndChangeCheck()) { m_animCtrl.CreateSpriteFrames(); } if (m_animCtrl.SpriteCharSet == null) { return; } GUIStyle styleFoldout = new GUIStyle(EditorStyles.foldout); styleFoldout.fontStyle = FontStyle.Bold; m_animCtrl.CharsetType = (CharAnimationController.eCharSetType)EditorGUILayout.EnumPopup("Charset Type", m_animCtrl.CharsetType); m_animCtrl.AnimSpeed = EditorGUILayout.FloatField("Anim Speed", m_animCtrl.AnimSpeed); m_animCtrl.IsPingPongAnim = EditorGUILayout.ToggleLeft("Ping-Pong Anim", m_animCtrl.IsPingPongAnim); GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) }); EditorGUI.BeginChangeCheck(); m_viewMode = (eCharAnimEditMode)EditorGUILayout.EnumPopup("View Mode", m_viewMode); if(EditorGUI.EndChangeCheck()) { m_vTrans = Vector2.zero; m_zoom = 1f; } EditorGUI.indentLevel += 1; if (m_viewMode == eCharAnimEditMode.EditPivot) { m_animCtrl.CurrentDir = (CharAnimationController.eDir)EditorGUILayout.EnumPopup("View Direction", m_animCtrl.CurrentDir); EditorGUI.BeginChangeCheck(); m_animCtrl.Pivot[(int)m_animCtrl.CurrentDir] = EditorGUILayout.Vector2Field("Sprite Pivot (" + m_animCtrl.CurrentDir + ")", m_animCtrl.Pivot[(int)m_animCtrl.CurrentDir]); if (EditorGUI.EndChangeCheck()) { m_animCtrl.CreateSpriteFrames(); } } else if (m_viewMode == eCharAnimEditMode.MoveInCircles) { m_walkSpeed = EditorGUILayout.FloatField("Walk Speed", m_walkSpeed); } EditorGUI.indentLevel -= 1; GUILayout.Label("View Zoom:" + m_zoom); m_showGrid = EditorGUILayout.Foldout(m_showGrid, "Grid Settings:", styleFoldout); if (m_showGrid) { m_gridColor0 = EditorGUILayout.ColorField("Grid Color0", m_gridColor0); m_gridColor1 = EditorGUILayout.ColorField("Grid Color1", m_gridColor1); m_gridSize = EditorGUILayout.FloatField("Grid Size", m_gridSize); } // +++ Draw Animation Grid +++ /// Rect r = GUILayoutUtility.GetRect(1, 1, GUILayout.ExpandWidth(true), GUILayout.ExpandHeight(true)); GUI.BeginGroup(r, s_gridTex); if( Event.current.type == EventType.Repaint) { m_rGridView = r; } r.position = Vector2.zero; // Draw grid Rect rGrid = r; rGrid.position *= m_zoom; rGrid.width *= m_zoom; rGrid.height *= m_zoom; GUI.DrawTextureWithTexCoords(rGrid, s_gridTex, new Rect(0, 0, r.width / (m_gridSize * s_gridTex.width), r.height / (m_gridSize * s_gridTex.height))); float fWalkDistX = 2 * m_animCtrl.GetSpriteFrames()[0].rect.width; float fWalkDistY = 2 * m_animCtrl.GetSpriteFrames()[0].rect.height; float fWalkProg = (1 - m_walkAnimTimer); foreach (CharAnimationController.eDir dir in System.Enum.GetValues(typeof(CharAnimationController.eDir))) { Sprite sprFrame = m_animCtrl.GetCurrentSprite(dir); Rect r2 = new Rect(); if (m_viewMode == eCharAnimEditMode.EditPivot) { if (m_animCtrl.CurrentDir != dir) continue; r2 = new Rect(r.x, r.y, sprFrame.rect.width, sprFrame.rect.height); } else if (m_viewMode == eCharAnimEditMode.Row) { r2 = new Rect(r.x + (int)dir * sprFrame.rect.width * 1.2f, r.y, sprFrame.rect.width, sprFrame.rect.height); } else if (m_viewMode == eCharAnimEditMode.Column) { r2 = new Rect(r.x, r.y + (int)dir * sprFrame.rect.height * 1.2f, sprFrame.rect.width, sprFrame.rect.height); } else if (m_viewMode == eCharAnimEditMode.MoveInCircles) { switch (dir) { case CharAnimationController.eDir.DOWN: r2 = new Rect(r.x, r.y + fWalkProg * fWalkDistY, sprFrame.rect.width, sprFrame.rect.height); break; case CharAnimationController.eDir.LEFT: r2 = new Rect(r.x + (1 - fWalkProg) * fWalkDistX, r.y, sprFrame.rect.width, sprFrame.rect.height); break; case CharAnimationController.eDir.RIGHT: r2 = new Rect(r.x + fWalkProg * fWalkDistX, r.y + fWalkDistY, sprFrame.rect.width, sprFrame.rect.height); break; case CharAnimationController.eDir.UP: r2 = new Rect(r.x + fWalkDistX, r.y + (1f - fWalkProg) * fWalkDistY, sprFrame.rect.width, sprFrame.rect.height); break; } } DrawSprite(r2, sprFrame); // draw pivot if (m_viewMode == eCharAnimEditMode.EditPivot) { Vector2 pivot = m_animCtrl.Pivot[(int)m_animCtrl.CurrentDir]; Vector2 vPivotPos = r2.position + new Vector2(pivot.x * r2.width, r2.height - pivot.y * r2.height); DrawLine(new Vector2(vPivotPos.x, r2.yMin), new Vector2(vPivotPos.x, r2.yMax), Color.red); DrawLine(new Vector2(r2.xMin, vPivotPos.y), new Vector2(r2.xMax, vPivotPos.y), Color.green); } } GUI.matrix = Matrix4x4.identity; GUI.EndGroup(); EditorGUILayout.HelpBox("Use mouse scroll wheel to change the View Zoom level\nDrag mouse over grid to drag sprites", MessageType.Info); }