Skip to content

Instantly share code, notes, and snippets.

@fanhexin
Created April 14, 2020 03:43
Show Gist options
  • Save fanhexin/e7b3455392188627d9806eb444e7beae to your computer and use it in GitHub Desktop.
Save fanhexin/e7b3455392188627d9806eb444e7beae to your computer and use it in GitHub Desktop.
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