Ejemplo n.º 1
0
        public override void OnInspectorGUI()
        {
            if (Application.isPlaying)
            {
                EditorGUILayout.LabelField("Debug Information", EditorStyles.boldLabel);

                base.DrawDefaultInspector();
                return;
            }
            EditorGUI.BeginChangeCheck();

            if (leTarget == null)
            {
                leTarget = (LSBody)target;
            }

            if (leTarget.cachedTransform == null)
            {
                leTarget.cachedTransform = leTarget.GetComponent <Transform>();
            }
            if (leTarget.cachedGameObject == null)
            {
                leTarget.cachedGameObject = leTarget.GetComponent <GameObject>();
            }


            Vector3 transformPos = leTarget.cachedTransform.position;

            leTarget.Position.x = FixedMath.Create(transformPos.x);
            leTarget.Position.y = FixedMath.Create(transformPos.z);

            Vector3 transformRot = leTarget.cachedTransform.eulerAngles;

            leTarget.Rotation = Vector2d.up;
            leTarget.Rotation.Rotate(FixedMath.Create(Mathf.Sin(transformRot.y * Mathf.Deg2Rad)), FixedMath.Create(Mathf.Cos(transformRot.y * Mathf.Deg2Rad)));
            //leTarget.Interpolate = EditorGUILayout.Toggle ("Interpolate", leTarget.Interpolate);


            EditorGUILayout.Space();


            EditorGUILayout.LabelField("Collider Settings", EditorStyles.boldLabel);
            leTarget.Shape = (ColliderType)EditorGUILayout.EnumPopup("Shape", leTarget.Shape);
            if (leTarget.Shape == ColliderType.None)
            {
                return;
            }
            leTarget.IsTrigger = EditorGUILayout.Toggle("Is Trigger", leTarget.IsTrigger);


            if (!leTarget.IsTrigger)
            {
                GUIContent PriorityContent = new GUIContent("Priority", "The priority of this object in collisions. Objects of lower priority yield to objects of higher priority.");
                //leTarget.Priority = EditorGUILayout.IntField (PriorityContent, leTarget.Priority);
            }

            EditorGUILayout.Space();

            switch (leTarget.Shape)
            {
            case ColliderType.Circle:
                GUIContent ImmovableContent = new GUIContent("Immovable", "Is this object immovable, i.e. a wall. Note: non-immovable objects are not supported for any shape except circle.");
                leTarget.Immovable = EditorGUILayout.Toggle(ImmovableContent, leTarget.Immovable);
                EditorGUILayout.BeginHorizontal();
                LSEditorUtility.FixedNumberField("Radius", ref leTarget.Radius);
                EditorGUILayout.EndHorizontal();
                break;

            case ColliderType.AABox:
                leTarget.Immovable = true;
                EditorGUILayout.BeginHorizontal();
                LSEditorUtility.FixedNumberField("Half Width", ref leTarget.HalfWidth);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                LSEditorUtility.FixedNumberField("Half Height", ref leTarget.HalfHeight);
                EditorGUILayout.EndHorizontal();
                break;

            case ColliderType.Polygon:
                leTarget.Immovable = true;
                if (leTarget.Vertices == null || leTarget.Vertices.Length == 0)
                {
                    leTarget.Vertices    = new Vector2d[4];
                    leTarget.Vertices[0] = new Vector2d(FixedMath.Half, FixedMath.Half);
                    leTarget.Vertices[1] = new Vector2d(FixedMath.Half, -FixedMath.Half);
                    leTarget.Vertices[2] = new Vector2d(-FixedMath.Half, -FixedMath.Half);
                    leTarget.Vertices[3] = new Vector2d(-FixedMath.Half, FixedMath.Half);
                }

                EditorGUILayout.BeginHorizontal();
                int VerticesCount = EditorGUILayout.IntField("Vertices count", leTarget.Vertices.Length);
                EditorGUILayout.EndHorizontal();
                if (VerticesCount > leTarget.Vertices.Length)
                {
                    Vector2d[] NewVertices = new Vector2d[VerticesCount];
                    leTarget.Vertices.CopyTo(NewVertices, 0);
                    for (int i = leTarget.Vertices.Length; i < VerticesCount; i++)
                    {
                        NewVertices[i] = new Vector2d(-FixedMath.One, 0);
                    }
                    leTarget.Vertices = NewVertices;
                }
                else if (VerticesCount < leTarget.Vertices.Length)
                {
                    Vector2d[] NewVertices = new Vector2d[VerticesCount];
                    for (int i = 0; i < VerticesCount; i++)
                    {
                        NewVertices[i] = leTarget.Vertices[i];
                    }
                    leTarget.Vertices = NewVertices;
                }
                for (int i = 0; i < leTarget.Vertices.Length; i++)
                {
                    EditorGUILayout.BeginHorizontal();
                    LSEditorUtility.Vector2dField("V" + i.ToString() + ":", ref leTarget.Vertices[i]);
                    EditorGUILayout.EndHorizontal();
                }
                break;
            }


            SceneView.RepaintAll();
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RegisterCompleteObjectUndo(leTarget, "LSBody Change");
                EditorUtility.SetDirty(leTarget);
            }
        }
Ejemplo n.º 2
0
        public override void OnInspectorGUI()
        {
            if (Application.isPlaying)
            {
                EditorGUILayout.LabelField("Debug Information", EditorStyles.boldLabel);

                base.DrawDefaultInspector();
                return;
            }
            EditorGUI.BeginChangeCheck();
            LSBody[] Bodies = GenerateTargets();
            LSBody   Body   = Bodies[0];

            if (Bodies.Length == 1)
            {
                Body._positionalTransform = (Transform)EditorGUILayout.ObjectField(
                    "Positional Transform",
                    Body._positionalTransform,
                    typeof(Transform),
                    true);
                Body._rotationalTransform = (Transform)EditorGUILayout.ObjectField(
                    "Rotational Transform",
                    Body._rotationalTransform,
                    typeof(Transform),
                    true);

                EditorGUILayout.Space();
            }
            Body.Layer = EditorGUILayout.LayerField("Layer", Body.Layer);

            for (int i = 0; i < Bodies.Length; i++)
            {
                LSBody    body         = Bodies[i];
                Transform posTransform = body._positionalTransform != null ? body._positionalTransform : body.transform;
                body.Position = new Vector2d(posTransform.position);
                Transform rotTransform = body._rotationalTransform != null ? body._rotationalTransform : body.transform;
                body.Rotation = new Vector2d(Mathf.Sin(rotTransform.rotation.x), Mathf.Cos(rotTransform.rotation.y));
            }

            EditorGUILayout.LabelField("Collider Settings", EditorStyles.boldLabel);
            Body.Shape = (ColliderType)EditorGUILayout.EnumPopup("Shape", Body.Shape);
            for (int i = 1; i < Bodies.Length; i++)
            {
                Bodies[i].Shape = Body.Shape;
            }
            if (Body.Shape == ColliderType.None)
            {
                return;
            }
            Body.IsTrigger = EditorGUILayout.Toggle("Is Trigger", Body.IsTrigger);

            if (!Body.IsTrigger && !Body.Immovable)
            {
                var PriorityContent   = new GUIContent("Priority", "The priority of this object in collisions. Objects of lower priority yield to objects of higher priority.");
                SerializedProperty sp = serializedObject.FindProperty("_priority");
                sp.intValue = EditorGUILayout.IntField(PriorityContent, sp.intValue);
            }

            switch (Body.Shape)
            {
            case ColliderType.Circle:
                var ImmovableContent = new GUIContent("Immovable", "Is this object immovable, i.e. a wall. Note: non-immovable objects are not supported for any shape except circle.");
                Body.Immovable = EditorGUILayout.Toggle(ImmovableContent, Body.Immovable);
                LSEditorUtility.FixedNumberField("Radius", ref Body.Radius);
                for (int i = 1; i < Bodies.Length; i++)
                {
                    Bodies[i].Radius = Body.Radius;
                }
                break;

            case ColliderType.AABox:
                LSEditorUtility.FixedNumberField("Half Width", ref Body.HalfWidth);
                LSEditorUtility.FixedNumberField("Half Height", ref Body.HalfHeight);
                for (int i = 1; i < Bodies.Length; i++)
                {
                    Bodies[i].HalfWidth  = Body.HalfWidth;
                    Bodies[i].HalfHeight = Body.HalfHeight;
                }
                break;

            case ColliderType.Polygon:
                if (Body.Vertices == null || Body.Vertices.Length == 0)
                {
                    Body.Vertices     = new Vector2d[4];
                    Body.Vertices [0] = new Vector2d(FixedMath.Half, FixedMath.Half);
                    Body.Vertices [1] = new Vector2d(FixedMath.Half, -FixedMath.Half);
                    Body.Vertices [2] = new Vector2d(-FixedMath.Half, -FixedMath.Half);
                    Body.Vertices [3] = new Vector2d(-FixedMath.Half, FixedMath.Half);
                }

                int VerticesCount = EditorGUILayout.IntField("Vertices count", Body.Vertices.Length);

                if (VerticesCount > Body.Vertices.Length)
                {
                    var NewVertices = new Vector2d[VerticesCount];
                    Body.Vertices.CopyTo(NewVertices, 0);
                    for (int i = Body.Vertices.Length; i < VerticesCount; i++)
                    {
                        NewVertices [i] = new Vector2d(-FixedMath.One, 0);
                    }
                    Body.Vertices = NewVertices;
                }
                else if (VerticesCount < Body.Vertices.Length)
                {
                    var NewVertices = new Vector2d[VerticesCount];
                    for (int i = 0; i < VerticesCount; i++)
                    {
                        NewVertices [i] = Body.Vertices [i];
                    }
                    Body.Vertices = NewVertices;
                }
                for (int i = 0; i < Body.Vertices.Length; i++)
                {
                    LSEditorUtility.Vector2dField("V" + i.ToString() + ":", ref Body.Vertices [i]);
                }
                for (int i = 1; i < Bodies.Length; i++)
                {
                    Bodies[i].Vertices = Body.Vertices;
                }
                break;
            }
            for (int i = 1; i < Bodies.Length; i++)
            {
                Bodies[i].IsTrigger = Body.IsTrigger;
                Bodies[i].Immovable = Body.Immovable;
                Bodies[i].IsTrigger = Body.IsTrigger;
            }
            if (EditorGUI.EndChangeCheck())
            {
                Undo.RegisterCompleteObjectUndo(Body, "LSBody Change");
                serializedObject.ApplyModifiedProperties();
                SceneView.RepaintAll();
            }
        }