void OnDrawGizmos()
        {
            if (m_Animations == null ||
                m_CurrentAnimation >= m_Animations.Length ||
                m_Animations[m_CurrentAnimation].frameData == null ||
                m_CurrentFrame >= m_Animations[m_CurrentAnimation].frameData.Length)
            {
                return;
            }

            var framedata = m_Animations[m_CurrentAnimation].frameData[m_CurrentFrame];
            var collider  = framedata.collider;

            for (int i = 0; i < collider.Length; i++)
            {
                var color = HitboxSettings.COLOR(collider[i].type);
                color.a      = 0.75f;
                Gizmos.color = color;
                Rect rect = new Rect((collider[i].rect.x) * m_UPP,
                                     (collider[i].rect.y) * m_UPP,
                                     collider[i].rect.width * m_UPP,
                                     collider[i].rect.height * m_UPP);

                if (m_Renderer != null && m_Renderer.flipX)
                {
                    rect.x     *= -1;
                    rect.width *= -1;
                }

                Gizmos.DrawCube(new Vector3(transform.position.x + rect.x,
                                            transform.position.y + rect.y, transform.position.z),
                                new Vector3(rect.width * m_Scale.x, rect.height * m_Scale.y, 1));
            }
        }
Exemplo n.º 2
0
        void RefreshTypes()
        {
            var typeLabels = Enum.GetNames(typeof(HitboxType));
            var typeValues = Enum.GetValues(typeof(HitboxType));

            m_TypeEntries = new List <TypeEntry>();

            for (int i = 0; i < typeLabels.Length; i++)
            {
                m_TypeEntries.Add(new TypeEntry
                {
                    Label = typeLabels[i],
                    Color = HitboxSettings.COLOR((HitboxType)typeValues.GetValue(i)),
                    Value = (int)typeValues.GetValue(i)
                });
            }
        }
        /// <summary>
        /// コライダー描画
        /// </summary>
        /// <param name="pos"></param>
        /// <param name="pivot"></param>
        /// <param name="pan"></param>
        /// <param name="mouse"></param>
        /// <param name="scale"></param>
        public void DrawColliderRects(Vector2 pos, Vector2 pivot, Vector2 mouse, float scale)
        {
            UpdateSerializedObject();

            if (Animations == null || SelectedAnimation >= Animations.Length ||
                Animations[SelectedAnimation].frameData == null || SelectedFrame >= Animations[SelectedAnimation].frameData.Length)
            {
                return;
            }
            var framedata     = Animations[SelectedAnimation].frameData[SelectedFrame];
            var colliderArray = framedata.collider;
            var eventType     = Event.current.type;
            var eventButton   = Event.current.button;

            m_EditorScale   = scale;
            m_PreviewOrigin = pos;

            for (int i = 0; i < colliderArray.Length; i++)
            {
                var collider = colliderArray[i];
                var color    = HitboxSettings.COLOR(collider.type);

                color.a               = 0.75f;
                collider.rect.x      *= (int)scale;
                collider.rect.y      *= (int)scale;
                collider.rect.width  *= (int)scale;
                collider.rect.height *= (int)scale;

                Rect rect = new Rect(collider.rect.x - collider.rect.width / 2,
                                     collider.rect.y + collider.rect.height / 2,
                                     collider.rect.width,
                                     collider.rect.height);

                if (m_Renderer != null && m_Renderer.flipX)
                {
                    rect.x     *= -1;
                    rect.width *= -1;
                }

                var cRect = new Rect(pos.x + (rect.x), pos.y - (rect.y), rect.width, rect.height);

                if (i != SelectedCollider)
                {
                    if (m_MouseOverHandle == null && m_ActiveHandle == null && cRect.Contains(mouse))
                    {
                        color.a = 0.5f;

                        if (eventType == EventType.MouseDown)
                        {
                            if (eventButton < 2)
                            {
                                SelectedCollider = i;
                            }
                            if (eventButton == 1)
                            {
                                CreateColliderEditMenu(mouse);
                            }
                            else if (eventButton == 0)
                            {
                                m_isEditorMenuOpen = false;
                            }

                            return;
                        }
                    }
                    else
                    {
                        color.a = 0.25f;
                    }
                }

                if (eventType == EventType.Repaint)
                {
                    EditorGUI.DrawRect(cRect, color);
                }

                //If we are editing this collider we need to display the editor doo dads
                if (SelectedCollider == i)
                {
                    m_MouseOverHandle = null;

                    if (m_ColliderDragHandle[0].Draw(new Vector2(cRect.x, cRect.y), mouse, MouseCursor.ResizeUpLeft))
                    {
                        m_MouseOverHandle = m_ColliderDragHandle[0];
                    }

                    if (m_ColliderDragHandle[1].Draw(new Vector2(cRect.x + cRect.width / 2f, cRect.y), mouse, MouseCursor.ResizeVertical))
                    {
                        m_MouseOverHandle = m_ColliderDragHandle[1];
                    }

                    if (m_ColliderDragHandle[2].Draw(new Vector2(cRect.x + cRect.width, cRect.y), mouse, MouseCursor.ResizeUpRight))
                    {
                        m_MouseOverHandle = m_ColliderDragHandle[2];
                    }

                    if (m_ColliderDragHandle[3].Draw(new Vector2(cRect.x + cRect.width, cRect.y + cRect.height / 2f), mouse, MouseCursor.ResizeHorizontal))
                    {
                        m_MouseOverHandle = m_ColliderDragHandle[3];
                    }

                    if (m_ColliderDragHandle[4].Draw(new Vector2(cRect.x + cRect.width, cRect.y + cRect.height), mouse, MouseCursor.ResizeUpLeft))
                    {
                        m_MouseOverHandle = m_ColliderDragHandle[4];
                    }

                    if (m_ColliderDragHandle[5].Draw(new Vector2(cRect.x + cRect.width / 2f, cRect.y + cRect.height), mouse, MouseCursor.ResizeVertical))
                    {
                        m_MouseOverHandle = m_ColliderDragHandle[5];
                    }

                    if (m_ColliderDragHandle[6].Draw(new Vector2(cRect.x, cRect.y + cRect.height), mouse, MouseCursor.ResizeUpRight))
                    {
                        m_MouseOverHandle = m_ColliderDragHandle[6];
                    }

                    if (m_ColliderDragHandle[7].Draw(new Vector2(cRect.x, cRect.y + cRect.height / 2f), mouse, MouseCursor.ResizeHorizontal))
                    {
                        m_MouseOverHandle = m_ColliderDragHandle[7];
                    }

                    if (m_ColliderDragHandle[8].Draw(new Vector2(cRect.x + cRect.width / 2f, cRect.y + cRect.height / 2f), mouse, MouseCursor.Pan))
                    {
                        m_MouseOverHandle = m_ColliderDragHandle[8];
                    }

                    if (eventType == EventType.Repaint)
                    {
                        LabelDrawer.DrawLabel(collider.type.ToString(), new Vector2(cRect.x + 4, cRect.y + 4));
                        LabelDrawer.DrawLabel("X: " + colliderArray[i].rect.x, new Vector2(cRect.x + 4, cRect.y + 22), 10);
                        LabelDrawer.DrawLabel("Y: " + colliderArray[i].rect.y, new Vector2(cRect.x + 4, cRect.y + 34), 10);
                        LabelDrawer.DrawLabel("W: " + colliderArray[i].rect.width, new Vector2(cRect.x + 4, cRect.y + 46), 10);
                        LabelDrawer.DrawLabel("H: " + colliderArray[i].rect.height, new Vector2(cRect.x + 4, cRect.y + 58), 10);
                    }

                    if (eventType == EventType.MouseDown)
                    {
                        if (m_MouseOverHandle != null && eventButton == 0)
                        {
                            m_ActiveHandle = m_MouseOverHandle;
                        }
                        else if (m_isEditorMenuOpen == false && eventButton == 1 && cRect.Contains(mouse))
                        {
                            CreateColliderEditMenu(mouse);
                        }
                    }
                    else if (eventType == EventType.MouseUp && eventButton == 0)
                    {
                        m_ActiveHandle = null;
                    }
                    else if (eventType == EventType.MouseDrag && m_ActiveHandle != null)
                    {
                        var delta = m_ActiveHandle.GetDragRect(mouse) / scale;

                        colliderArray[SelectedCollider].rect.x      += Mathf.RoundToInt(delta.x);
                        colliderArray[SelectedCollider].rect.y      += Mathf.RoundToInt(delta.y);
                        colliderArray[SelectedCollider].rect.width  += Mathf.RoundToInt(delta.z);
                        colliderArray[SelectedCollider].rect.height += Mathf.RoundToInt(delta.w);
                    }
                }
            }

            if (m_isEditorMenuOpen == false && eventType == EventType.MouseDown && eventButton == 1)
            {
                CreateEditMenu(mouse);
            }

            ApplySerializedProperties();
        }