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);
            }
        }