FiE-Game/Assets/CircularGravityForce/Editor/CGF2D_Editor.cs
2023-07-25 00:52:50 +05:00

973 lines
No EOL
54 KiB
C#

/*******************************************************************************************
* Author: Lane Gresham, AKA LaneMax
* Websites: http://resurgamstudios.com
* Description: Used overwriting the Inspector GUI, and Scene GUI
*******************************************************************************************/
using UnityEditor;
using UnityEngine;
using System;
using System.Collections;
using CircularGravityForce;
namespace CircularGravityForce
{
[CustomEditor(typeof(CGF2D)), CanEditMultipleObjects]
public class CGF2D_Editor : Editor
{
private GUIStyle panelStyle;
private GUIStyle titleStyle;
private TitleImage titleImage;
private SerializedProperty enable_property;
private SerializedProperty shape_property;
private SerializedProperty forceType_property;
private SerializedProperty forceMode_property;
private SerializedProperty projectRight_property;
private SerializedProperty forcePower_property;
private SerializedProperty velocityDamping_property;
private SerializedProperty angularVelocityDamping_property;
private SerializedProperty size_property;
private SerializedProperty boxSize_property;
private SerializedProperty toggleTransformProperties;
private SerializedProperty transformProperties_overridePosition;
private SerializedProperty transformProperties_localPosition;
private SerializedProperty transformProperties_positionValue;
private SerializedProperty transformProperties_overrideRotation;
private SerializedProperty transformProperties_localRotation;
private SerializedProperty transformProperties_rotationValue;
private SerializedProperty toggleForcePositionProperties;
private SerializedProperty forcePositionProperties_forcePosition;
private SerializedProperty forcePositionProperties_closestColliders;
private SerializedProperty forcePositionProperties_useEffectedClosestPoint;
private SerializedProperty forcePositionProperties_heightOffset;
private SerializedProperty toggleEventProperties;
private SerializedProperty eventProperties_enableEvents;
private SerializedProperty eventProperties_enableSendMessage;
private SerializedProperty toggleMemoryProperties_property;
private SerializedProperty memoryProperties_colliderLayerMask_property;
private SerializedProperty memoryProperties_seeAffectedColliders_property;
private SerializedProperty memoryProperties_seeAffectedRaycastHits_property;
private SerializedProperty memoryProperties_nonAllocPhysics_property;
private SerializedProperty memoryProperties_colliderBuffer_property;
private SerializedProperty memoryProperties_raycastHitBuffer_property;
private SerializedProperty colliderListCount_property;
private SerializedProperty raycastHitListCount_property;
private CGF2D cgf;
private bool change = false;
private float spacing = 10f;
private Color redBar = new Color(1f, 0f, 0f, .4f);
private string helpText;
private MessageType messageType = MessageType.Info;
public void OnEnable()
{
//Title Image Resource
titleImage = new TitleImage("Assets/ResurgamStudios/CircularGravityForce Package/Gizmos/CGF Title.png");
enable_property = serializedObject.FindProperty("enable");
shape_property = serializedObject.FindProperty("shape2D");
forceType_property = serializedObject.FindProperty("forceType2D");
forceMode_property = serializedObject.FindProperty("forceMode2D");
projectRight_property = serializedObject.FindProperty("projectRight");
forcePower_property = serializedObject.FindProperty("forcePower");
velocityDamping_property = serializedObject.FindProperty("velocityDamping");
angularVelocityDamping_property = serializedObject.FindProperty("angularVelocityDamping");
size_property = serializedObject.FindProperty("size");
boxSize_property = serializedObject.FindProperty("boxSize");
toggleTransformProperties = serializedObject.FindProperty("transformProperties.toggleTransformProperties");
transformProperties_overridePosition = serializedObject.FindProperty("transformProperties.overridePosition");
transformProperties_localPosition = serializedObject.FindProperty("transformProperties.localPosition");
transformProperties_positionValue = serializedObject.FindProperty("transformProperties.positionValue");
transformProperties_overrideRotation = serializedObject.FindProperty("transformProperties.overrideRotation");
transformProperties_localRotation = serializedObject.FindProperty("transformProperties.localRotation");
transformProperties_rotationValue = serializedObject.FindProperty("transformProperties.rotationValue");
toggleForcePositionProperties = serializedObject.FindProperty("forcePositionProperties.toggleForcePositionProperties");
forcePositionProperties_forcePosition = serializedObject.FindProperty("forcePositionProperties.forcePosition");
forcePositionProperties_closestColliders = serializedObject.FindProperty("forcePositionProperties.closestColliders");
forcePositionProperties_useEffectedClosestPoint = serializedObject.FindProperty("forcePositionProperties.useEffectedClosestPoint");
forcePositionProperties_heightOffset = serializedObject.FindProperty("forcePositionProperties.heightOffset");
toggleEventProperties = serializedObject.FindProperty("eventProperties.toggleEventProperties");
eventProperties_enableEvents = serializedObject.FindProperty("eventProperties.enableEvents");
eventProperties_enableSendMessage = serializedObject.FindProperty("eventProperties.enableSendMessage");
toggleMemoryProperties_property = serializedObject.FindProperty("memoryProperties.toggleMemoryProperties");
memoryProperties_colliderLayerMask_property = serializedObject.FindProperty("memoryProperties.colliderLayerMask");
memoryProperties_seeAffectedColliders_property = serializedObject.FindProperty("memoryProperties.seeColliders");
memoryProperties_seeAffectedRaycastHits_property = serializedObject.FindProperty("memoryProperties.seeRaycastHits");
memoryProperties_nonAllocPhysics_property = serializedObject.FindProperty("memoryProperties.nonAllocPhysics");
memoryProperties_colliderBuffer_property = serializedObject.FindProperty("memoryProperties.colliderBuffer");
memoryProperties_raycastHitBuffer_property = serializedObject.FindProperty("memoryProperties.raycastHitBuffer");
colliderListCount_property = serializedObject.FindProperty("colliderListCount");
raycastHitListCount_property = serializedObject.FindProperty("raycastHitListCount");
}
public override void OnInspectorGUI()
{
serializedObject.Update();
panelStyle = new GUIStyle(GUI.skin.box);
panelStyle.padding = new RectOffset(panelStyle.padding.left + 10, panelStyle.padding.right, panelStyle.padding.top, panelStyle.padding.bottom);
EditorGUILayout.BeginVertical(panelStyle);
/*<----------------------------------------------------------------------------------------------------------*/
titleStyle = new GUIStyle(GUI.skin.label);
titleStyle.alignment = TextAnchor.UpperCenter;
GUILayout.BeginVertical();
GUILayout.Box(titleImage.content, titleStyle);
GUILayout.EndVertical();
/*<----------------------------------------------------------------------------------------------------------*/
#if (UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2)
if (shape_property.enumValueIndex == (int)CGF2D.Shape2D.Box)
EditorGUILayout.HelpBox(CGF.WarningMessageBoxUnity_5_3, MessageType.Warning, true);
#endif
/*<----------------------------------------------------------------------------------------------------------*/
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(enable_property, new GUIContent("Enable"));
if (EditorGUI.EndChangeCheck())
{
enable_property.boolValue = EditorGUILayout.Toggle(enable_property.boolValue);
change = true;
}
/*<----------------------------------------------------------------------------------------------------------*/
/*<----------------------------------------------------------------------------------------------------------*/
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(shape_property, new GUIContent("Shape"));
if (EditorGUI.EndChangeCheck())
{
shape_property.enumValueIndex = Convert.ToInt32(EditorGUILayout.EnumPopup((CGF2D.Shape2D)shape_property.enumValueIndex));
change = true;
}
/*<----------------------------------------------------------------------------------------------------------*/
/*<----------------------------------------------------------------------------------------------------------*/
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(forceType_property, new GUIContent("Force Type"));
if (EditorGUI.EndChangeCheck())
{
forceType_property.enumValueIndex = Convert.ToInt32(EditorGUILayout.EnumPopup((CGF.ForceType)forceType_property.enumValueIndex));
change = true;
}
/*<----------------------------------------------------------------------------------------------------------*/
if (helpText != string.Empty)
EditorGUILayout.HelpBox(helpText, messageType, true);
switch (forceType_property.enumValueIndex)
{
case (int)CGF2D.ForceType2D.ForceAtPosition:
helpText = "Applies force at position. As a result this will apply a torque and force on the objects.";
break;
case (int)CGF2D.ForceType2D.Force:
helpText = "Adds a force to the objects.";
break;
case (int)CGF2D.ForceType2D.Torque:
helpText = "Adds a torque to the objects.";
break;
case (int)CGF2D.ForceType2D.GravitationalAttraction:
helpText = "Adds gravitational attraction based off newtonian gravity.";
break;
}
/*<----------------------------------------------------------------------------------------------------------*/
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(forceMode_property, new GUIContent("Force Mode"));
if (EditorGUI.EndChangeCheck())
{
forceMode_property.enumValueIndex = Convert.ToInt32(EditorGUILayout.EnumPopup((ForceMode)forceMode_property.enumValueIndex));
change = true;
}
/*<----------------------------------------------------------------------------------------------------------*/
if (shape_property.enumValueIndex != (int)CGF2D.Shape2D.Raycast)
{
switch (forceType_property.enumValueIndex)
{
case (int)CGF2D.ForceType2D.ForceAtPosition:
case (int)CGF2D.ForceType2D.Force:
case (int)CGF2D.ForceType2D.GravitationalAttraction:
/*<----------------------------------------------------------------------------------------------------------*/
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(projectRight_property, new GUIContent("Project Right"));
if (EditorGUI.EndChangeCheck())
{
projectRight_property.boolValue = EditorGUILayout.Toggle(projectRight_property.boolValue);
change = true;
}
/*<----------------------------------------------------------------------------------------------------------*/
break;
}
}
switch (forceType_property.enumValueIndex)
{
case (int)CGF2D.ForceType2D.ForceAtPosition:
case (int)CGF2D.ForceType2D.Force:
case (int)CGF2D.ForceType2D.GravitationalAttraction:
/*<----------------------------------------------------------------------------------------------------------*/
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(velocityDamping_property, new GUIContent("Velocity Damping"));
if (EditorGUI.EndChangeCheck())
{
velocityDamping_property.floatValue = EditorGUILayout.FloatField(velocityDamping_property.floatValue);
change = true;
}
/*<----------------------------------------------------------------------------------------------------------*/
break;
case (int)CGF.ForceType.Torque:
/*<----------------------------------------------------------------------------------------------------------*/
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(angularVelocityDamping_property, new GUIContent("Angular Velocity Damping"));
if (EditorGUI.EndChangeCheck())
{
angularVelocityDamping_property.floatValue = EditorGUILayout.FloatField(angularVelocityDamping_property.floatValue);
change = true;
}
/*<----------------------------------------------------------------------------------------------------------*/
break;
}
/*<----------------------------------------------------------------------------------------------------------*/
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(forcePower_property, new GUIContent("Force Power"));
if (EditorGUI.EndChangeCheck())
{
forcePower_property.floatValue = EditorGUILayout.FloatField(forcePower_property.floatValue);
change = true;
}
/*<----------------------------------------------------------------------------------------------------------*/
if (shape_property.enumValueIndex == (int)CGF2D.Shape2D.Box)
{
/*<----------------------------------------------------------------------------------------------------------*/
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(boxSize_property, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
/*<----------------------------------------------------------------------------------------------------------*/
}
else
{
/*<----------------------------------------------------------------------------------------------------------*/
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(size_property, new GUIContent("Size"));
if (EditorGUI.EndChangeCheck())
{
if (size_property.floatValue >= 0)
{
size_property.floatValue = EditorGUILayout.FloatField(size_property.floatValue);
}
else
{
size_property.floatValue = 0;
}
change = true;
}
/*<----------------------------------------------------------------------------------------------------------*/
}
toggleTransformProperties.boolValue = EditorGUILayout.Foldout(toggleTransformProperties.boolValue, "Transform Properties");
if (toggleTransformProperties.boolValue)
{
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(transformProperties_overridePosition, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
if (transformProperties_overridePosition.boolValue)
{
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(transformProperties_localPosition, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(transformProperties_positionValue, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
}
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(transformProperties_overrideRotation, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
if (transformProperties_overrideRotation.boolValue)
{
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(transformProperties_localRotation, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(transformProperties_rotationValue, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
}
}
switch (forceType_property.enumValueIndex)
{
case (int)CGF2D.ForceType2D.ForceAtPosition:
case (int)CGF2D.ForceType2D.Force:
case (int)CGF2D.ForceType2D.GravitationalAttraction:
toggleForcePositionProperties.boolValue = EditorGUILayout.Foldout(toggleForcePositionProperties.boolValue, "Force Position Properties");
if (toggleForcePositionProperties.boolValue)
{
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(forcePositionProperties_forcePosition, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
if (forcePositionProperties_forcePosition.enumValueIndex == (int)CGF.ForcePosition.ClosestCollider)
{
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(forcePositionProperties_closestColliders, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(forcePositionProperties_useEffectedClosestPoint, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(forcePositionProperties_heightOffset, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
}
}
break;
}
/*<----------------------------------------------------------------------------------------------------------*/
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(serializedObject.FindProperty("filterProperties"), true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
/*<----------------------------------------------------------------------------------------------------------*/
toggleEventProperties.boolValue = EditorGUILayout.Foldout(toggleEventProperties.boolValue, "Event Properties");
if (toggleEventProperties.boolValue)
{
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(eventProperties_enableEvents, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
if (eventProperties_enableEvents.boolValue)
{
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.TextArea("//Enable Events Example:\n\nusing CircularGravityForce;\n\nvoid Awake()\n{\n CGF2D.OnApplyCGFEvent += CGF_OnApplyCGFEvent;\n}\n\nvoid OnDestroy()\n{\n CGF2D.OnApplyCGFEvent -= CGF_OnApplyCGFEvent;\n}\n\nprivate void CGF_OnApplyCGFEvent(CGF2D cgf, Rigidbody2D rigid, Collider2D coll)\n{\n Debug.Log(\"Hello World\");\n}", GUILayout.ExpandWidth(true), GUILayout.MinWidth(0));
GUILayout.EndHorizontal();
}
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(eventProperties_enableSendMessage, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
if (eventProperties_enableSendMessage.boolValue)
{
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.TextArea("//Enable Events Example:\n\nusing CircularGravityForce;\n\nprivate void OnApplyCGF(CGF2D cgf)\n{\n Debug.Log(\"Hello World\");\n}\n", GUILayout.ExpandWidth(true), GUILayout.MinWidth(0));
GUILayout.EndHorizontal();
}
}
/*<----------------------------------------------------------------------------------------------------------*/
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(serializedObject.FindProperty("drawGravityProperties"), true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
/*<----------------------------------------------------------------------------------------------------------*/
toggleMemoryProperties_property.boolValue = EditorGUILayout.Foldout(toggleMemoryProperties_property.boolValue, "Memory Properties");
if (toggleMemoryProperties_property.boolValue)
{
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(memoryProperties_colliderLayerMask_property, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
if (shape_property.enumValueIndex == (int)CGF.Shape.Sphere || shape_property.enumValueIndex == (int)CGF.Shape.Box)
{
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(memoryProperties_seeAffectedColliders_property, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
}
if (shape_property.enumValueIndex == (int)CGF.Shape.Capsule || shape_property.enumValueIndex == (int)CGF.Shape.Raycast)
{
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(memoryProperties_seeAffectedRaycastHits_property, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
}
if (Application.isPlaying)
GUI.enabled = false;
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(memoryProperties_nonAllocPhysics_property, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
serializedObject.ApplyModifiedProperties();
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
GUI.enabled = true;
if (memoryProperties_nonAllocPhysics_property.boolValue)
{
if (shape_property.enumValueIndex == (int)CGF2D.Shape2D.Sphere)
{
if (Application.isPlaying)
GUI.enabled = false;
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(memoryProperties_colliderBuffer_property, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
if (memoryProperties_colliderBuffer_property.intValue >= 1)
{
memoryProperties_colliderBuffer_property.intValue = EditorGUILayout.IntField(memoryProperties_colliderBuffer_property.intValue);
}
else
{
memoryProperties_colliderBuffer_property.intValue = 1;
}
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
GUI.enabled = true;
float collidersUsed = (float)colliderListCount_property.intValue;
float collidersNotUsed = (float)memoryProperties_colliderBuffer_property.intValue;
float collidersUsedPercent = collidersUsed / collidersNotUsed;
if (collidersUsedPercent == 1f)
GUI.backgroundColor = redBar;
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUI.ProgressBar(EditorGUILayout.BeginVertical(), collidersUsedPercent, string.Format("{0} : {1}", collidersUsed, collidersNotUsed));
GUILayout.Space(16);
EditorGUILayout.EndVertical();
GUILayout.EndHorizontal();
}
if (shape_property.enumValueIndex == (int)CGF2D.Shape2D.Raycast || shape_property.enumValueIndex == (int)CGF2D.Shape2D.Box)
{
if (Application.isPlaying)
GUI.enabled = false;
/*<----------------------------------------------------------------------------------------------------------*/
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(memoryProperties_raycastHitBuffer_property, true, GUILayout.ExpandWidth(true));
if (EditorGUI.EndChangeCheck())
{
if (memoryProperties_raycastHitBuffer_property.intValue >= 1)
{
memoryProperties_raycastHitBuffer_property.intValue = EditorGUILayout.IntField(memoryProperties_raycastHitBuffer_property.intValue);
}
else
{
memoryProperties_raycastHitBuffer_property.intValue = 1;
}
change = true;
}
GUILayout.EndHorizontal();
/*<----------------------------------------------------------------------------------------------------------*/
GUI.enabled = true;
float raycastHitsUsed = (float)raycastHitListCount_property.intValue;
float raycastHitsNotUsed = (float)memoryProperties_raycastHitBuffer_property.intValue;
float raycastHitsUsedPercent = raycastHitsUsed / raycastHitsNotUsed;
if (raycastHitsUsedPercent == 1f)
GUI.backgroundColor = redBar;
if (raycastHitsUsedPercent == 1f)
GUI.color = Color.magenta;
GUILayout.BeginHorizontal();
EditorGUILayout.LabelField("", GUILayout.Width(spacing));
EditorGUI.BeginChangeCheck();
EditorGUI.ProgressBar(EditorGUILayout.BeginVertical(), raycastHitsUsedPercent, string.Format("{0} : {1}", raycastHitsUsed, raycastHitsNotUsed));
GUILayout.Space(16);
EditorGUILayout.EndVertical();
GUILayout.EndHorizontal();
}
}
}
EditorGUILayout.EndVertical();
if (change)
{
change = false;
}
serializedObject.ApplyModifiedProperties();
}
void OnSceneGUI()
{
cgf = (CGF2D)target;
if (cgf._drawGravityProperties.DrawGizmo)
{
Color mainColor;
Color tranMainColor;
if (cgf.Enable)
{
if (cgf.ForcePower == 0)
{
mainColor = Color.white;
tranMainColor = Color.white;
}
else if (cgf.ForcePower > 0)
{
mainColor = Color.green;
tranMainColor = Color.green;
}
else
{
mainColor = Color.red;
tranMainColor = Color.red;
}
}
else
{
mainColor = Color.white;
tranMainColor = Color.white;
}
tranMainColor.a = .1f;
Handles.color = mainColor;
float gizmoSize = 0f;
float gizmoOffset = 0f;
if (mainColor == Color.green)
{
gizmoSize = (cgf.Size / 8f);
if (gizmoSize > .5f)
gizmoSize = .5f;
else if (gizmoSize < -.5f)
gizmoSize = -.5f;
gizmoOffset = -gizmoSize / 1.5f;
}
else if (mainColor == Color.red)
{
gizmoSize = -(cgf.Size / 8f);
if (gizmoSize > .5f)
gizmoSize = .5f;
else if (gizmoSize < -.5f)
gizmoSize = -.5f;
gizmoOffset = gizmoSize / 1.5f;
}
Quaternion qUp = cgf.transform.transform.rotation;
qUp.SetLookRotation(cgf.transform.rotation * Vector3.up);
Quaternion qDown = cgf.transform.transform.rotation;
qDown.SetLookRotation(cgf.transform.rotation * Vector3.down);
Quaternion qLeft = cgf.transform.transform.rotation;
qLeft.SetLookRotation(cgf.transform.rotation * Vector3.forward);
Quaternion qRight = cgf.transform.transform.rotation;
qRight.SetLookRotation(cgf.transform.rotation * Vector3.back);
Quaternion qForward = cgf.transform.transform.rotation;
qForward.SetLookRotation(cgf.transform.rotation * Vector3.right);
Quaternion qBack = cgf.transform.transform.rotation;
qBack.SetLookRotation(cgf.transform.rotation * Vector3.left);
float dotSpace = 10f;
float sizeValue = cgf.Size;
float sizeBoxValueX = cgf.BoxSize.x;
float sizeBoxValueY = cgf.BoxSize.y;
switch (cgf._shape2D)
{
case CGF2D.Shape2D.Sphere:
Handles.color = tranMainColor;
Handles.color = mainColor;
if ((cgf._forceType2D == CGF2D.ForceType2D.ForceAtPosition ||
cgf._forceType2D == CGF2D.ForceType2D.GravitationalAttraction ||
cgf._forceType2D == CGF2D.ForceType2D.Force) &&
!cgf._projectRight)
{
if (cgf._forcePositionProperties.ForcePosition == CGF.ForcePosition.ThisTransform)
{
DrawConeCap(GetVector(Vector3.up, cgf.Size + gizmoOffset, 1f), qUp, gizmoSize);
DrawConeCap(GetVector(Vector3.down, cgf.Size + gizmoOffset, 1f), qDown, gizmoSize);
DrawConeCap(GetVector(Vector3.left, cgf.Size + gizmoOffset, 1f), qBack, gizmoSize);
}
}
else if (cgf._forceType2D == CGF2D.ForceType2D.Torque)
{
DrawConeCap(GetVector(Vector3.up, cgf.Size + gizmoOffset, 1f), qForward, gizmoSize);
DrawConeCap(GetVector(Vector3.down, cgf.Size + gizmoOffset, 1f), qBack, gizmoSize);
DrawConeCap(GetVector(Vector3.right, cgf.Size + gizmoOffset, 1f), qDown, gizmoSize);
DrawConeCap(GetVector(Vector3.left, cgf.Size + gizmoOffset, 1f), qUp, gizmoSize);
}
else
{
if (cgf._forcePositionProperties.ForcePosition == CGF.ForcePosition.ThisTransform)
{
DrawConeCap(GetVector(Vector3.left, cgf.Size + gizmoOffset, 1f), qBack, -gizmoSize);
}
}
if (cgf._forceType2D != CGF2D.ForceType2D.Torque)
{
if (cgf._forcePositionProperties.ForcePosition == CGF.ForcePosition.ThisTransform)
{
DrawConeCap(GetVector(Vector3.right, cgf.Size + gizmoOffset, 1f), qForward, gizmoSize);
}
}
Handles.DrawDottedLine(GetVector(Vector3.up, cgf.Size, 1), cgf.transform.position, dotSpace);
Handles.DrawDottedLine(GetVector(Vector3.down, cgf.Size, 1), cgf.transform.position, dotSpace);
Handles.DrawDottedLine(GetVector(Vector3.left, cgf.Size, 1), cgf.transform.position, dotSpace);
Handles.DrawDottedLine(GetVector(Vector3.right, cgf.Size, 1), cgf.transform.position, dotSpace);
DrawCircleCap(cgf.transform.position, qLeft, cgf.Size);
Handles.color = mainColor;
sizeValue = cgf.Size;
sizeValue = DrawScaleValueHandle(sizeValue, GetVector(Vector3.up, cgf.Size, 1f), cgf.transform.rotation, gizmoSize);
sizeValue = DrawScaleValueHandle(sizeValue, GetVector(Vector3.down, cgf.Size, 1f), cgf.transform.rotation, gizmoSize);
sizeValue = DrawScaleValueHandle(sizeValue, GetVector(Vector3.left, cgf.Size, 1f), cgf.transform.rotation, gizmoSize);
sizeValue = DrawScaleValueHandle(sizeValue, GetVector(Vector3.right, cgf.Size, 1f), cgf.transform.rotation, gizmoSize);
if (sizeValue < 0)
cgf.Size = 0;
else
cgf.Size = sizeValue;
break;
case CGF2D.Shape2D.Raycast:
Handles.DrawDottedLine(cgf.transform.position + ((cgf.transform.rotation * Vector3.right) * cgf.Size), cgf.transform.position, dotSpace);
if (cgf._forceType2D != CGF2D.ForceType2D.Torque)
{
if (cgf._forcePositionProperties.ForcePosition == CGF.ForcePosition.ThisTransform)
{
DrawConeCap(GetVector(Vector3.right, cgf.Size + gizmoOffset, 1f), qForward, gizmoSize);
}
}
else
{
DrawConeCap(GetVector(Vector3.right, cgf.Size + gizmoOffset, 1f), qDown, gizmoSize);
}
Handles.color = mainColor;
sizeValue = cgf.Size;
sizeValue = DrawScaleValueHandle(sizeValue, GetVector(Vector3.right, cgf.Size, 1f), cgf.transform.rotation, gizmoSize);
if (sizeValue < 0)
cgf.Size = 0;
else
cgf.Size = sizeValue;
break;
case CGF2D.Shape2D.Box:
if ((cgf._forceType2D == CGF2D.ForceType2D.ForceAtPosition ||
cgf._forceType2D == CGF2D.ForceType2D.GravitationalAttraction ||
cgf._forceType2D == CGF2D.ForceType2D.Force) &&
!cgf._projectRight)
{
if (cgf._forcePositionProperties.ForcePosition == CGF.ForcePosition.ThisTransform)
{
DrawConeCap(GetVector(Vector3.up, CGF_Editor.GetArrowOffsetForBox(mainColor, cgf.BoxSize.y, gizmoSize), 1f), qUp, CGF_Editor.GetGismoSizeForBox(mainColor, gizmoSize, cgf.BoxSize.y));
DrawConeCap(GetVector(Vector3.down, CGF_Editor.GetArrowOffsetForBox(mainColor, cgf.BoxSize.y, gizmoSize), 1f), qDown, CGF_Editor.GetGismoSizeForBox(mainColor, gizmoSize, cgf.BoxSize.y));
DrawConeCap(GetVector(Vector3.left, CGF_Editor.GetArrowOffsetForBox(mainColor, cgf.BoxSize.x, gizmoSize), 1f), qBack, CGF_Editor.GetGismoSizeForBox(mainColor, gizmoSize, cgf.BoxSize.x));
}
}
else if (cgf._forceType2D == CGF2D.ForceType2D.Torque)
{
DrawConeCap(GetVector(Vector3.up, CGF_Editor.GetArrowOffsetForBox(mainColor, cgf.BoxSize.y, gizmoSize), 1f), qForward, CGF_Editor.GetGismoSizeForBox(mainColor, gizmoSize, cgf.BoxSize.y));
DrawConeCap(GetVector(Vector3.down, CGF_Editor.GetArrowOffsetForBox(mainColor, cgf.BoxSize.y, gizmoSize), 1f), qBack, CGF_Editor.GetGismoSizeForBox(mainColor, gizmoSize, cgf.BoxSize.y));
DrawConeCap(GetVector(Vector3.right, CGF_Editor.GetArrowOffsetForBox(mainColor, cgf.BoxSize.x, gizmoSize), 1f), qDown, CGF_Editor.GetGismoSizeForBox(mainColor, gizmoSize, cgf.BoxSize.x));
DrawConeCap(GetVector(Vector3.left, CGF_Editor.GetArrowOffsetForBox(mainColor, cgf.BoxSize.x, gizmoSize), 1f), qUp, CGF_Editor.GetGismoSizeForBox(mainColor, gizmoSize, cgf.BoxSize.x));
}
else
{
if (cgf._forcePositionProperties.ForcePosition == CGF.ForcePosition.ThisTransform)
{
DrawConeCap(GetVector(Vector3.left, CGF_Editor.GetArrowOffsetForBox(mainColor, cgf.BoxSize.x, gizmoSize), 1f), qBack, -CGF_Editor.GetGismoSizeForBox(mainColor, gizmoSize, cgf.BoxSize.x));
}
}
if (cgf._forceType2D != CGF2D.ForceType2D.Torque)
{
if (cgf._forcePositionProperties.ForcePosition == CGF.ForcePosition.ThisTransform)
{
DrawConeCap(GetVector(Vector3.right, CGF_Editor.GetArrowOffsetForBox(mainColor, cgf.BoxSize.x, gizmoSize), 1f), qForward, CGF_Editor.GetGismoSizeForBox(mainColor, gizmoSize, cgf.BoxSize.x));
}
}
Handles.DrawDottedLine(GetVector(Vector3.up, cgf.BoxSize.y, 1), cgf.transform.position, dotSpace);
Handles.DrawDottedLine(GetVector(Vector3.down, cgf.BoxSize.y, 1), cgf.transform.position, dotSpace);
Handles.DrawDottedLine(GetVector(Vector3.left, cgf.BoxSize.x, 1), cgf.transform.position, dotSpace);
Handles.DrawDottedLine(GetVector(Vector3.right, cgf.BoxSize.x, 1), cgf.transform.position, dotSpace);
Handles.color = mainColor;
sizeBoxValueX = cgf.BoxSize.x;
sizeBoxValueY = cgf.BoxSize.y;
sizeBoxValueY = DrawScaleValueHandle(sizeBoxValueY, GetVector(Vector3.up, cgf.BoxSize.y, 1f), cgf.transform.rotation, CGF_Editor.GetGismoSizeForBox(mainColor, gizmoSize, cgf.BoxSize.y));
sizeBoxValueY = DrawScaleValueHandle(sizeBoxValueY, GetVector(Vector3.down, cgf.BoxSize.y, 1f), cgf.transform.rotation, CGF_Editor.GetGismoSizeForBox(mainColor, gizmoSize, cgf.BoxSize.y));
sizeBoxValueX = DrawScaleValueHandle(sizeBoxValueX, GetVector(Vector3.left, cgf.BoxSize.x, 1f), cgf.transform.rotation, CGF_Editor.GetGismoSizeForBox(mainColor, gizmoSize, cgf.BoxSize.x));
sizeBoxValueX = DrawScaleValueHandle(sizeBoxValueX, GetVector(Vector3.right, cgf.BoxSize.x, 1f), cgf.transform.rotation, CGF_Editor.GetGismoSizeForBox(mainColor, gizmoSize, cgf.BoxSize.x));
if (sizeBoxValueX < 0)
cgf.BoxSize = new Vector3(0f, cgf.BoxSize.y);
else
cgf.BoxSize = new Vector3(sizeBoxValueX, cgf.BoxSize.y);
if (sizeBoxValueY < 0)
cgf.BoxSize = new Vector3(cgf.BoxSize.x, 0f);
else
cgf.BoxSize = new Vector3(cgf.BoxSize.x, sizeBoxValueY);
break;
}
if (cgf._forcePositionProperties.ForcePosition == CGF.ForcePosition.ThisTransform)
{
DrawSphereCap(cgf.transform.position, cgf.transform.rotation, gizmoSize / 2f);
}
}
if (GUI.changed)
{
EditorUtility.SetDirty(target);
}
}
Vector3 GetVector(Vector3 vector, float size, float times)
{
return cgf.transform.position + (((cgf.transform.rotation * vector) * size) / times);
}
void DrawConeCap(Vector3 position, Quaternion rotation, float gizmoSize)
{
#if (UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 || UNITY_5_3 || UNITY_5_4 || UNITY_5_5)
Handles.ConeCap(0, position, rotation, gizmoSize);
#else
if (Event.current.type == EventType.Repaint)
{
Handles.ConeHandleCap(0, position, rotation, gizmoSize, EventType.Repaint);
}
#endif
}
void DrawCircleCap(Vector3 position, Quaternion rotation, float gizmoSize)
{
#if (UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 || UNITY_5_3 || UNITY_5_4 || UNITY_5_5)
Handles.CircleCap(0, position, rotation, gizmoSize);
#else
if (Event.current.type == EventType.Repaint)
{
Handles.CircleHandleCap(0, position, rotation, gizmoSize, EventType.Repaint);
}
#endif
}
float DrawScaleValueHandle(float value, Vector3 position, Quaternion rotation, float gizmoSize)
{
#if (UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 || UNITY_5_3 || UNITY_5_4 || UNITY_5_5)
return Handles.ScaleValueHandle(value, position, rotation, gizmoSize, Handles.DotCap, .25f);
#else
return Handles.ScaleValueHandle(value, position, rotation, gizmoSize, Handles.DotHandleCap, .25f);
#endif
}
void DrawSphereCap(Vector3 position, Quaternion rotation, float gizmoSize)
{
#if (UNITY_4_6 || UNITY_4_7 || UNITY_4_8 || UNITY_4_9 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 || UNITY_5_3 || UNITY_5_4 || UNITY_5_5)
Handles.SphereCap(0, position, rotation, gizmoSize / 2f);
#else
if (Event.current.type == EventType.Repaint)
{
Handles.SphereHandleCap(0, position, rotation, gizmoSize / 2f, EventType.Repaint);
}
#endif
}
}
}