Created
April 14, 2020 03:43
-
-
Save fanhexin/e7b3455392188627d9806eb444e7beae to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using HopTiles.GamePlay; | |
using UnityEditor; | |
using UnityEngine; | |
namespace HopTiles.Editor | |
{ | |
[CustomEditor(typeof(SlicedCube))] | |
public class SlicedCubeInspector : UnityEditor.Editor | |
{ | |
SerializedProperty _borderSize; | |
SerializedProperty _frontTop; | |
SerializedProperty _frontBottom; | |
SerializedProperty _frontLeft; | |
SerializedProperty _frontRight; | |
SerializedProperty _middleTopLeft; | |
SerializedProperty _middleTopRight; | |
SerializedProperty _middleBottomLeft; | |
SerializedProperty _middleBottomRight; | |
SerializedProperty _backTop; | |
SerializedProperty _backBottom; | |
SerializedProperty _backLeft; | |
SerializedProperty _backRight; | |
SerializedProperty _cornerFrontTopLeft; | |
SerializedProperty _cornerFrontTopRight; | |
SerializedProperty _cornerFrontBottomLeft; | |
SerializedProperty _cornerFrontBottomRight; | |
SerializedProperty _cornerBackTopLeft; | |
SerializedProperty _cornerBackTopRight; | |
SerializedProperty _cornerBackBottomLeft; | |
SerializedProperty _cornerBackBottomRight; | |
SlicedCube _target; | |
SerializedProperty _glowColor; | |
void OnEnable() | |
{ | |
_target = target as SlicedCube; | |
_glowColor = _target.EditorGetGlowColor(serializedObject); | |
_borderSize = _target.EditorGetBorderSize(serializedObject); | |
_frontTop = _target.EditorGetFrontTop(serializedObject); | |
_frontBottom = _target.EditorGetFrontBottom(serializedObject); | |
_frontLeft = _target.EditorGetFrontLeft(serializedObject); | |
_frontRight = _target.EditorGetFrontRight(serializedObject); | |
_middleTopLeft = _target.EditorGetMiddleTopLeft(serializedObject); | |
_middleTopRight = _target.EditorGetMiddleTopRight(serializedObject); | |
_middleBottomLeft = _target.EditorGetMiddleBottomLeft(serializedObject); | |
_middleBottomRight = _target.EditorGetMiddleBottomRight(serializedObject); | |
_backTop = _target.EditorGetBackTop(serializedObject); | |
_backBottom = _target.EditorGetBackBottom(serializedObject); | |
_backLeft = _target.EditorGetBackLeft(serializedObject); | |
_backRight = _target.EditorGetBackRight(serializedObject); | |
_cornerFrontTopLeft = _target.EditorGetCornerFrontTopLeft(serializedObject); | |
_cornerFrontTopRight = _target.EditorGetCornerFrontTopRight(serializedObject); | |
_cornerFrontBottomLeft = _target.EditorGetCornerFrontBottomLeft(serializedObject); | |
_cornerFrontBottomRight = _target.EditorGetCornerFrontBottomRight(serializedObject); | |
_cornerBackTopLeft = _target.EditorGetCornerBackTopLeft(serializedObject); | |
_cornerBackTopRight = _target.EditorGetCornerBackTopRight(serializedObject); | |
_cornerBackBottomLeft = _target.EditorGetCornerBackBottomLeft(serializedObject); | |
_cornerBackBottomRight = _target.EditorGetCornerBackBottomRight(serializedObject); | |
} | |
public override void OnInspectorGUI() | |
{ | |
using (var cc = new EditorGUI.ChangeCheckScope()) | |
{ | |
EditorGUILayout.PropertyField(_borderSize); | |
EditorGUILayout.PropertyField(_glowColor); | |
if (_frontTop.objectReferenceValue == null && GUILayout.Button("Create")) | |
{ | |
CreateBorder(); | |
} | |
using (new EditorGUI.DisabledScope(true)) | |
{ | |
RenderSideRef(_frontTop); | |
RenderSideRef(_frontBottom); | |
RenderSideRef(_frontLeft); | |
RenderSideRef(_frontRight); | |
RenderSideRef(_middleTopLeft); | |
RenderSideRef(_middleTopRight); | |
RenderSideRef(_middleBottomLeft); | |
RenderSideRef(_middleBottomRight); | |
RenderSideRef(_backTop); | |
RenderSideRef(_backBottom); | |
RenderSideRef(_backLeft); | |
RenderSideRef(_backRight); | |
RenderSideRef(_cornerFrontTopLeft); | |
RenderSideRef(_cornerFrontTopRight); | |
RenderSideRef(_cornerFrontBottomLeft); | |
RenderSideRef(_cornerFrontBottomRight); | |
RenderSideRef(_cornerBackTopLeft); | |
RenderSideRef(_cornerBackTopRight); | |
RenderSideRef(_cornerBackBottomLeft); | |
RenderSideRef(_cornerBackBottomRight); | |
} | |
if (cc.changed) | |
{ | |
serializedObject.ApplyModifiedProperties(); | |
_target.SetSize(1, 1, 1); | |
} | |
} | |
} | |
void CreateAndAssignCube(SerializedProperty sp) | |
{ | |
var cube = GameObject.CreatePrimitive(PrimitiveType.Cube); | |
cube.name = sp.name; | |
cube.transform.localScale = Vector3.one * _borderSize.floatValue; | |
cube.transform.SetParent(_target.transform); | |
sp.objectReferenceValue = cube.transform; | |
} | |
void CreateBorder() | |
{ | |
CreateAndAssignCube(_frontTop); | |
CreateAndAssignCube(_frontBottom); | |
CreateAndAssignCube(_frontLeft); | |
CreateAndAssignCube(_frontRight); | |
CreateAndAssignCube(_middleTopLeft); | |
CreateAndAssignCube(_middleTopRight); | |
CreateAndAssignCube(_middleBottomLeft); | |
CreateAndAssignCube(_middleBottomRight); | |
CreateAndAssignCube(_backTop); | |
CreateAndAssignCube(_backBottom); | |
CreateAndAssignCube(_backLeft); | |
CreateAndAssignCube(_backRight); | |
CreateAndAssignCube(_cornerFrontTopLeft); | |
CreateAndAssignCube(_cornerFrontTopRight); | |
CreateAndAssignCube(_cornerFrontBottomLeft); | |
CreateAndAssignCube(_cornerFrontBottomRight); | |
CreateAndAssignCube(_cornerBackTopLeft); | |
CreateAndAssignCube(_cornerBackTopRight); | |
CreateAndAssignCube(_cornerBackBottomLeft); | |
CreateAndAssignCube(_cornerBackBottomRight); | |
} | |
void RenderSideRef(SerializedProperty sp) | |
{ | |
if (sp.objectReferenceValue == null) | |
{ | |
return; | |
} | |
EditorGUILayout.PropertyField(sp); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment