Advertisement
JJCUBER

BulletBehaviourObjectCustomEditor

Jul 1st, 2019
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.71 KB | None | 0 0
  1. /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*\
  2. |                                                               |
  3. |          Made by Jason Helman © Jason Tech And Games          |
  4. |   I do not condone the use of my work without my permission   |
  5. |                                                               |
  6. \*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
  7.  
  8. #if UNITY_EDITOR
  9.  
  10. using UnityEditor;
  11. using UnityEngine;
  12.  
  13. [CustomEditor(typeof(BulletBehaviourObject), true)]
  14. public class BulletBehaviourObjectCustomEditor : Editor
  15. {
  16.     private static readonly string[] variableNames = {"sprite", "size", "color", "particleTrail"};
  17.  
  18.     private BulletBehaviourObject bulletBehaviourObjectTarget;
  19.  
  20.     private BulletBehaviourObject previousBulletBehaviourObjectOverride;
  21.     private bool previousUseOverrideState = false;
  22.     private bool useOverrides = false;
  23.  
  24.     private void OnEnable()
  25.     {
  26.         bulletBehaviourObjectTarget = (BulletBehaviourObject) target;
  27.         previousBulletBehaviourObjectOverride = bulletBehaviourObjectTarget.previousBulletBehaviourObjectOverride;
  28.         previousUseOverrideState = bulletBehaviourObjectTarget.previousUseOverrideState;
  29.         useOverrides = bulletBehaviourObjectTarget.useOverrides;
  30.     }
  31.  
  32.     public override void OnInspectorGUI()
  33.     {
  34.         serializedObject.Update();
  35.  
  36.         bulletBehaviourObjectTarget.Store(true);
  37.  
  38.         EditorGUILayout.PropertyField(serializedObject.FindProperty("useOtherBulletBehaviourObject"));
  39.  
  40.         if (bulletBehaviourObjectTarget.useOtherBulletBehaviourObject)
  41.         {
  42.             EditorGUILayout.PropertyField(serializedObject.FindProperty("bulletBehaviourObjectOverride"));
  43.             useOverrides = EditorGUILayout.Toggle("Use Overrides", useOverrides);
  44.  
  45.             if (useOverrides)
  46.             {
  47.                 Rect rect = EditorGUILayout.BeginVertical();
  48.                 GUI.Box(rect, "");
  49.                 for (int i = 0; i < variableNames.Length; i++)
  50.                     EditorGUILayout.PropertyField(serializedObject.FindProperty(variableNames[i]));
  51.                 EditorGUILayout.EndVertical();
  52.             }
  53.         }
  54.  
  55.         if (previousUseOverrideState && !bulletBehaviourObjectTarget.useOtherBulletBehaviourObject) // was Overriding -> not Overriding
  56.         {
  57.             bulletBehaviourObjectTarget.Load();
  58.             serializedObject.ApplyModifiedProperties();
  59.         }
  60.         else if (!previousUseOverrideState && bulletBehaviourObjectTarget.useOtherBulletBehaviourObject) // wasn't Overriding -> Overriding
  61.         {
  62.             bulletBehaviourObjectTarget.Store();
  63.  
  64.             if (bulletBehaviourObjectTarget.bulletBehaviourObjectOverride != null)
  65.             {
  66.                 bulletBehaviourObjectTarget.sprite = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.sprite;
  67.                 bulletBehaviourObjectTarget.size = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.size;
  68.                 bulletBehaviourObjectTarget.color = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.color;
  69.                 bulletBehaviourObjectTarget.particleTrail = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.particleTrail;
  70.             }
  71.             else
  72.                 bulletBehaviourObjectTarget.Load();
  73.  
  74.             serializedObject.ApplyModifiedProperties();
  75.         }
  76.         else if (bulletBehaviourObjectTarget.useOtherBulletBehaviourObject)
  77.         {
  78.             // issue is that if it is itself it needs to access the stored data
  79.             // ^ fixed btw
  80.             if (bulletBehaviourObjectTarget.bulletBehaviourObjectOverride != null && previousBulletBehaviourObjectOverride != bulletBehaviourObjectTarget.bulletBehaviourObjectOverride)
  81.             {
  82.                 if (bulletBehaviourObjectTarget.bulletBehaviourObjectOverride == bulletBehaviourObjectTarget)
  83.                     bulletBehaviourObjectTarget.Load();
  84.                 else
  85.                 {
  86.                     bulletBehaviourObjectTarget.sprite = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.sprite;
  87.                     bulletBehaviourObjectTarget.size = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.size;
  88.                     bulletBehaviourObjectTarget.color = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.color;
  89.                     bulletBehaviourObjectTarget.particleTrail = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.particleTrail;
  90.                 }
  91.  
  92.                 serializedObject.ApplyModifiedProperties();
  93.             }
  94.             // else if (bulletBehaviourObjectTarget.bulletBehaviourObjectOverride == null)
  95.             //     bulletBehaviourObjectTarget.Load();
  96.         }
  97.  
  98.         using (new EditorGUI.DisabledScope(bulletBehaviourObjectTarget.useOtherBulletBehaviourObject))
  99.         {
  100.             if (bulletBehaviourObjectTarget.useOtherBulletBehaviourObject) // && bulletBehaviourObjectTarget.bulletBehaviourObjectOverride != null)
  101.             {
  102.                 // if (bulletBehaviourObjectTarget.bulletBehaviourObjectOverride == null || bulletBehaviourObjectTarget.bulletBehaviourObjectOverride == bulletBehaviourObjectTarget)
  103.                     // overrideSerializedObject = bulletBehaviourObjectTarget.GetStoredValuesSerializedObject();
  104.  
  105.                 SerializedObject overrideSerializedObject;
  106.                 if (bulletBehaviourObjectTarget.bulletBehaviourObjectOverride == null || bulletBehaviourObjectTarget.bulletBehaviourObjectOverride == bulletBehaviourObjectTarget)
  107.                     overrideSerializedObject = new SerializedObject(bulletBehaviourObjectTarget);
  108.                 else
  109.                     overrideSerializedObject = new SerializedObject(bulletBehaviourObjectTarget.bulletBehaviourObjectOverride);
  110.  
  111.                 for (int i = 0; i < variableNames.Length; i++)
  112.                     EditorGUILayout.PropertyField(overrideSerializedObject.FindProperty(variableNames[i]));
  113.             }
  114.             else
  115.             {
  116.                 for (int i = 0; i < variableNames.Length; i++)
  117.                     EditorGUILayout.PropertyField(serializedObject.FindProperty(variableNames[i]));
  118.             }
  119.         }
  120.  
  121.         previousBulletBehaviourObjectOverride = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride;
  122.         previousUseOverrideState = bulletBehaviourObjectTarget.useOtherBulletBehaviourObject;
  123.  
  124.         serializedObject.ApplyModifiedProperties();
  125.     }
  126.  
  127.     private void OnDisable()
  128.     {
  129.         bulletBehaviourObjectTarget.previousBulletBehaviourObjectOverride = previousBulletBehaviourObjectOverride;
  130.         bulletBehaviourObjectTarget.previousUseOverrideState = previousUseOverrideState;
  131.         bulletBehaviourObjectTarget.useOverrides = useOverrides;
  132.     }
  133. }
  134. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement