2025-06-04 22:49:37 +08:00
/ *
* @author Valentin Simonov / http : //va.lent.in/
* /
using TouchScript.Editor.EditorUI ;
using TouchScript.Layers ;
using UnityEditor ;
using UnityEngine ;
namespace TouchScript.Editor.Layers
{
[CustomEditor(typeof(StandardLayer), true)]
internal class StandardLayerEditor : UnityEditor . Editor
{
2025-08-24 18:59:40 +08:00
public static readonly GUIContent TEXT_ADVANCED_HEADER = new GUIContent ( "Advanced" , "Advanced properties." ) ;
public static readonly GUIContent TEXT_HIT_HEADER = new GUIContent ( "Hit test options" , "Options which control what types of objects this layer should search under pointers." ) ;
2025-06-04 22:49:37 +08:00
2025-08-24 18:59:40 +08:00
public static readonly GUIContent TEXT_NAME = new GUIContent ( "Name" , "Layer name." ) ;
public static readonly GUIContent TEXT_3D_OBJECTS = new GUIContent ( "Hit 3D Objects" , "Layer should raycast 3D objects." ) ;
public static readonly GUIContent TEXT_2D_OBJECTS = new GUIContent ( "Hit 2D Objects" , "Layer should raycast 2D objects." ) ;
public static readonly GUIContent TEXT_WORLD_UI = new GUIContent ( "Hit World UI" , "Layer should raycast World Space UI." ) ;
public static readonly GUIContent TEXT_SS_UI = new GUIContent ( "Hit Screen Space UI" , "Layer should raycast Screen Space UI." ) ;
public static readonly GUIContent TEXT_LAYER_MASK = new GUIContent ( "Layer Mask" , "Layer mask." ) ;
public static readonly GUIContent TEXT_HIT_FILTERS = new GUIContent ( "Use Hit FIlters" , "Layer should test for individual HitTest objects." ) ;
2025-06-04 22:49:37 +08:00
2025-08-24 18:59:40 +08:00
public static readonly GUIContent TEXT_HELP = new GUIContent ( "This component assigns target GameObjects in the scene for pressed pointers." ) ;
2025-06-04 22:49:37 +08:00
2025-08-24 18:59:40 +08:00
private SerializedProperty advancedProps , hitProps ;
private SerializedProperty layerName ;
2025-06-04 22:49:37 +08:00
private SerializedProperty basicEditor ;
private SerializedProperty hit3DObjects ;
private SerializedProperty hit2DObjects ;
private SerializedProperty hitWorldSpaceUI ;
private SerializedProperty hitScreenSpaceUI ;
private SerializedProperty layerMask ;
private SerializedProperty useHitFilters ;
protected virtual void OnEnable ( )
{
hideFlags = HideFlags . HideAndDontSave ;
advancedProps = serializedObject . FindProperty ( "advancedProps" ) ;
hitProps = serializedObject . FindProperty ( "hitProps" ) ;
2025-08-24 18:59:40 +08:00
layerName = serializedObject . FindProperty ( "layerName" ) ;
2025-06-04 22:49:37 +08:00
basicEditor = serializedObject . FindProperty ( "basicEditor" ) ;
hit3DObjects = serializedObject . FindProperty ( "hit3DObjects" ) ;
hit2DObjects = serializedObject . FindProperty ( "hit2DObjects" ) ;
hitWorldSpaceUI = serializedObject . FindProperty ( "hitWorldSpaceUI" ) ;
hitScreenSpaceUI = serializedObject . FindProperty ( "hitScreenSpaceUI" ) ;
layerMask = serializedObject . FindProperty ( "layerMask" ) ;
useHitFilters = serializedObject . FindProperty ( "useHitFilters" ) ;
}
public override void OnInspectorGUI ( )
{
#if UNITY_5_6_OR_NEWER
2025-08-24 18:59:40 +08:00
serializedObject . UpdateIfRequiredOrScript ( ) ;
2025-06-04 22:49:37 +08:00
# else
serializedObject . UpdateIfDirtyOrScript ( ) ;
# endif
GUILayout . Space ( 5 ) ;
2025-08-24 18:59:40 +08:00
if ( basicEditor . boolValue )
{
drawHit ( ) ;
if ( GUIElements . BasicHelpBox ( TEXT_HELP ) )
{
basicEditor . boolValue = false ;
Repaint ( ) ;
}
}
else
{
drawName ( ) ;
2025-06-04 22:49:37 +08:00
drawHit ( ) ;
drawAdvanced ( ) ;
2025-08-24 18:59:40 +08:00
}
2025-06-04 22:49:37 +08:00
serializedObject . ApplyModifiedProperties ( ) ;
}
private void drawHit ( )
{
2025-08-24 18:59:40 +08:00
var display = GUIElements . Header ( TEXT_HIT_HEADER , hitProps ) ;
if ( display )
{
EditorGUI . indentLevel + + ;
doDrawHit ( ) ;
EditorGUI . indentLevel - - ;
}
}
protected virtual void drawName ( )
{
EditorGUILayout . PropertyField ( layerName , TEXT_NAME ) ;
2025-06-04 22:49:37 +08:00
}
protected virtual void doDrawHit ( )
2025-08-24 18:59:40 +08:00
{
EditorGUILayout . PropertyField ( hitScreenSpaceUI , TEXT_SS_UI ) ;
EditorGUILayout . PropertyField ( hit3DObjects , TEXT_3D_OBJECTS ) ;
EditorGUILayout . PropertyField ( hit2DObjects , TEXT_2D_OBJECTS ) ;
EditorGUILayout . PropertyField ( hitWorldSpaceUI , TEXT_WORLD_UI ) ;
EditorGUILayout . PropertyField ( layerMask , TEXT_LAYER_MASK ) ;
}
2025-06-04 22:49:37 +08:00
private void drawAdvanced ( )
{
2025-08-24 18:59:40 +08:00
var display = GUIElements . Header ( TEXT_ADVANCED_HEADER , advancedProps ) ;
if ( display )
{
EditorGUI . indentLevel + + ;
doDrawAdvanced ( ) ;
EditorGUI . indentLevel - - ;
}
2025-06-04 22:49:37 +08:00
}
protected virtual void doDrawAdvanced ( )
{
EditorGUILayout . PropertyField ( useHitFilters , TEXT_HIT_FILTERS ) ;
}
}
2025-08-24 18:59:40 +08:00
}