예제 #1
0
    public override void OnInspectorGUI()
    {
        GravityAffecter gravityObject = (GravityAffecter)target;

        string[] options = new string[] { "Player", "Gravity Objects" };

        //Will always Show
        EditorGUILayout.BeginVertical("box");

        #region Title

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Gravity Control", EditorStyles.boldLabel);   //Name of editor
        EditorGUILayout.LabelField("Affected Layers", GUILayout.Width(100));
        gravityObject.layers = (GravityAffecter.AffectedLayers)EditorGUILayout.EnumPopup(gravityObject.layers, GUILayout.Width(110));
        EditorGUILayout.EndHorizontal();
        #endregion

        EditorGUILayout.Space(5f);

        #region Min / Max (Text, Value, Slider)

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Min", GUILayout.Width(50));
        EditorGUILayout.LabelField("Max", GUILayout.Width(50));
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        gravityObject.minForce = EditorGUILayout.FloatField(gravityObject.minForce, GUILayout.Width(50));
        gravityObject.maxForce = EditorGUILayout.FloatField(gravityObject.maxForce, GUILayout.Width(50));
        EditorGUILayout.EndHorizontal();

        gravityObject.force = EditorGUILayout.Slider(gravityObject.force, gravityObject.minForce, gravityObject.maxForce);
        #endregion

        EditorGUILayout.Space(5f);

        #region Reverse Gravity (Text, Toggle)

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Revese Gravity", GUILayout.Width(100));   //Name of editor
        gravityObject.negativeForce = EditorGUILayout.Toggle(gravityObject.negativeForce);
        EditorGUILayout.EndHorizontal();

        switch (gravityObject.layers)
        {
        case GravityAffecter.AffectedLayers.Player:
        {
            gravityObject.detectionLayers = 1024;
            break;
        }

        case GravityAffecter.AffectedLayers.GravityObject:
        {
            gravityObject.detectionLayers = 2048;
            break;
        }
        }

        #endregion

        EditorGUILayout.Space(10f);

        #region Gizmo Color (Color, Bool)

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Draw Gizmos", GUILayout.Width(100));
        gravityObject.drawGizmos = EditorGUILayout.Toggle(gravityObject.drawGizmos);
        EditorGUILayout.EndHorizontal();

        if (gravityObject.drawGizmos)
        {
            EditorGUILayout.BeginHorizontal();
            gravityObject.gizmoColors = EditorGUILayout.ColorField(gravityObject.gizmoColors);
            gravityObject.enableColor = EditorGUILayout.Toggle(gravityObject.enableColor);
            EditorGUILayout.EndHorizontal();
        }

        else
        {
            gravityObject.enableColor = false;
        }
        #endregion

        EditorGUILayout.EndVertical();

        EditorGUILayout.Space(10f);

        switch (gravityObject.forceType)
        {
            #region Circle Inspector

        case GravityAffecter.Force.Circle:
        {
            GUILayout.BeginVertical("box");

            #region Title (Text)

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Force Type", EditorStyles.boldLabel);
            gravityObject.forceType = (GravityAffecter.Force)EditorGUILayout.EnumPopup(gravityObject.forceType);
            EditorGUILayout.EndHorizontal();
            #endregion

            EditorGUILayout.Space(5f);

            #region Min/Max (Text, Value)

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Min", GUILayout.Width(50));
            EditorGUILayout.LabelField("Max", GUILayout.Width(50));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            gravityObject.minRadius = EditorGUILayout.FloatField(gravityObject.minRadius, GUILayout.Width(50));
            gravityObject.maxRadius = EditorGUILayout.FloatField(gravityObject.maxRadius, GUILayout.Width(50));
            EditorGUILayout.EndHorizontal();
            #endregion

            EditorGUILayout.Space(5f);

            #region Inner Radius (Slider, text)

            EditorGUILayout.LabelField("Inner Radius", GUILayout.Width(90));
            gravityObject.radius =
                EditorGUILayout.Slider(gravityObject.radius, gravityObject.minRadius, gravityObject.maxRadius);
            #endregion

            #region Outer Radius (Slider, text)

            EditorGUILayout.LabelField("Outer Radius", GUILayout.Width(90));
            gravityObject.transitionRadius =
                EditorGUILayout.Slider(gravityObject.transitionRadius, gravityObject.minRadius, gravityObject.maxRadius);
            #endregion

            GUILayout.EndVertical();

            break;
        }
            #endregion

            #region Square Inspector

        case GravityAffecter.Force.Square:
        {
            GUILayout.BeginVertical("box");

            #region Title (Text)

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Force Type", EditorStyles.boldLabel);
            gravityObject.forceType = (GravityAffecter.Force)EditorGUILayout.EnumPopup(gravityObject.forceType);
            EditorGUILayout.EndHorizontal();
            #endregion

            EditorGUILayout.Space(5f);

            #region Min/Max (Text, Value)

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Min", GUILayout.Width(50));
            EditorGUILayout.LabelField("Max", GUILayout.Width(50));
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            gravityObject.minSize = EditorGUILayout.FloatField(gravityObject.minSize, GUILayout.Width(50));
            gravityObject.maxSize = EditorGUILayout.FloatField(gravityObject.maxSize, GUILayout.Width(50));
            EditorGUILayout.LabelField("Size", GUILayout.Width(50));
            EditorGUILayout.EndHorizontal();

            #endregion

            EditorGUILayout.Space(5f);

            #region X Value (Slider, text)

            EditorGUILayout.LabelField("X - Value", GUILayout.Width(55));
            gravityObject.centerSize.x =
                EditorGUILayout.Slider(gravityObject.centerSize.x, gravityObject.minSize, gravityObject.maxSize);
            #endregion

            #region Y Value (Slider, Text)

            EditorGUILayout.LabelField("Y - Value", GUILayout.Width(55));
            gravityObject.centerSize.y =
                EditorGUILayout.Slider(gravityObject.centerSize.y, gravityObject.minSize, gravityObject.maxSize);
            #endregion

            #region Angle (Slider, Text)

            EditorGUILayout.LabelField("Force Direction", GUILayout.Width(100));
            gravityObject.forceDirection =
                EditorGUILayout.Slider(gravityObject.forceDirection, -90, 90);
            #endregion

            GUILayout.EndVertical();

            break;
        }
            #endregion
        }
        //base.OnInspectorGUI();
    }
예제 #2
0
    private void OnSceneGUI()
    {
        GravityAffecter gravityObject = (GravityAffecter)target;

        gravityObject.arrowDirection = new Vector2(gravityObject.forceDirection, 90);

        switch (gravityObject.forceType)
        {
        case GravityAffecter.Force.Circle:
        {
            if (gravityObject.enableColor)
            {
                //Center Area
                Handles.color = new Color(gravityObject.gizmoColors.r, gravityObject.gizmoColors.g, gravityObject.gizmoColors.b, 0.2f);
                Handles.DrawSolidDisc(gravityObject.transform.position, gravityObject.transform.forward, gravityObject.radius);

                //Outer Area
                Handles.color = new Color(gravityObject.gizmoColors.r, gravityObject.gizmoColors.g, gravityObject.gizmoColors.b, 0.1f);
                Handles.DrawSolidDisc(gravityObject.transform.position, gravityObject.transform.forward, (gravityObject.transitionRadius + 1) * gravityObject.radius);
            }

            //Outlines
            Handles.color = new Color(1f, 1f, 1f, 1f);
            Handles.DrawWireDisc(gravityObject.transform.position, gravityObject.transform.forward, gravityObject.radius);
            Handles.DrawWireDisc(gravityObject.transform.position, gravityObject.transform.forward, (gravityObject.transitionRadius + 1) * gravityObject.radius);

            #region Handles Arrows
            Handles.color = Color.white;

            if (gravityObject.negativeForce)
            {
                //Top-Right Arrow
                Handles.ArrowHandleCap(1, gravityObject.transform.position + new Vector3(3, -3, 0),
                                       Quaternion.Euler(-45, -90, 0f), 3f, EventType.Repaint);

                //Top-Left Arrow
                Handles.ArrowHandleCap(0, gravityObject.transform.position + new Vector3(-3, 3, 0),
                                       Quaternion.Euler(45f, 90, 0f), 3f, EventType.Repaint);

                //Bottom-Left Arrow
                Handles.ArrowHandleCap(0, gravityObject.transform.position + new Vector3(-3, -3, 0),
                                       Quaternion.Euler(-45f, 90, 0f), 3f, EventType.Repaint);

                //Bottom-Right Arrow
                Handles.ArrowHandleCap(0, gravityObject.transform.position + new Vector3(3, 3, 0),
                                       Quaternion.Euler(45f, -90, 0f), 3f, EventType.Repaint);
            }

            else
            {
                Handles.ArrowHandleCap(0, gravityObject.transform.position,
                                       Quaternion.Euler(45f, 90, 0f), 3f, EventType.Repaint);

                Handles.ArrowHandleCap(0, gravityObject.transform.position,
                                       Quaternion.Euler(-45f, -90, 0f), 3f, EventType.Repaint);

                Handles.ArrowHandleCap(0, gravityObject.transform.position,
                                       Quaternion.Euler(45f, -90, 0f), 3f, EventType.Repaint);

                Handles.ArrowHandleCap(0, gravityObject.transform.position,
                                       Quaternion.Euler(-45f, 90, 0f), 3f, EventType.Repaint);
            }
            #endregion

            break;
        }

        case GravityAffecter.Force.Square:
        {
            if (gravityObject.negativeForce)
            {
                Handles.ArrowHandleCap(0, gravityObject.transform.position,
                                       Quaternion.Euler(new Vector2(gravityObject.forceDirection + 90, 90f)), 3f, EventType.Repaint);
            }

            else
            {
                Handles.ArrowHandleCap(0, gravityObject.transform.position,
                                       Quaternion.Euler(new Vector2(gravityObject.forceDirection - 90, 90f)), 3f, EventType.Repaint);
            }

            Handles.color = new Color(1f, 1f, 1f, 0.4f);
            Handles.DrawWireCube(gravityObject.transform.position, gravityObject.centerSize);
            break;
        }
        }
    }