Advertisement
JJCUBER

CustomEditor

Jun 30th, 2019
240
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.64 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. using UnityEditor;
  9.  
  10. [CustomEditor(typeof(BulletBehaviourObject), true)]
  11. public class BulletBehaviourObjectCustomEditor : Editor
  12. {
  13.     private static readonly string[] variableNames = {"sprite", "size", "color", "particleTrail"};
  14.  
  15.     private BulletBehaviourObject previousBulletBehaviourObjectOverride;
  16.     private bool previousUseOverrideState = false;
  17.  
  18.     private bool useOverrides = false;
  19.  
  20.  
  21.     public override void OnInspectorGUI()
  22.     {
  23.         serializedObject.Update();
  24.  
  25.         BulletBehaviourObject bulletBehaviourObjectTarget = (BulletBehaviourObject) target;
  26.         bulletBehaviourObjectTarget.Store(true);
  27.  
  28.         EditorGUILayout.PropertyField(serializedObject.FindProperty("useOtherBulletBehaviourObject"));
  29.  
  30.         if (bulletBehaviourObjectTarget.useOtherBulletBehaviourObject)
  31.         {
  32.             EditorGUILayout.PropertyField(serializedObject.FindProperty("bulletBehaviourObjectOverride"));
  33.             useOverrides = EditorGUILayout.Toggle("Use Overrides", useOverrides);
  34.  
  35.             if (useOverrides)
  36.             {
  37.                 for (int i = 0; i < variableNames.Length; i++)
  38.                 {
  39.                     EditorGUILayout.PropertyField(serializedObject.FindProperty(variableNames[i]));
  40.                 }
  41.             }
  42.         }
  43.  
  44.         if (previousUseOverrideState && !bulletBehaviourObjectTarget.useOtherBulletBehaviourObject) // was Overriding -> not Overriding
  45.             bulletBehaviourObjectTarget.Load();
  46.         else if (!previousUseOverrideState && bulletBehaviourObjectTarget.useOtherBulletBehaviourObject) // wasn't Overriding -> Overriding
  47.         {
  48.             bulletBehaviourObjectTarget.Store();
  49.  
  50.             if (bulletBehaviourObjectTarget.bulletBehaviourObjectOverride != null)
  51.             {
  52.                 bulletBehaviourObjectTarget.sprite = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.sprite;
  53.                 bulletBehaviourObjectTarget.size = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.size;
  54.                 bulletBehaviourObjectTarget.color = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.color;
  55.                 bulletBehaviourObjectTarget.particleTrail = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.particleTrail;
  56.             }
  57.             else
  58.                 bulletBehaviourObjectTarget.Load();
  59.  
  60.             serializedObject.ApplyModifiedProperties();
  61.         }
  62.         else if (bulletBehaviourObjectTarget.useOtherBulletBehaviourObject)
  63.         {
  64.             // issue is that if it is itself it needs to access the stored data
  65.             // ^ fixed btw
  66.             if (bulletBehaviourObjectTarget.bulletBehaviourObjectOverride != null && previousBulletBehaviourObjectOverride != bulletBehaviourObjectTarget.bulletBehaviourObjectOverride)
  67.             {
  68.                 if (bulletBehaviourObjectTarget.bulletBehaviourObjectOverride == bulletBehaviourObjectTarget)
  69.                     bulletBehaviourObjectTarget.Load();
  70.                 else
  71.                 {
  72.                     bulletBehaviourObjectTarget.sprite = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.sprite;
  73.                     bulletBehaviourObjectTarget.size = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.size;
  74.                     bulletBehaviourObjectTarget.color = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.color;
  75.                     bulletBehaviourObjectTarget.particleTrail = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride.particleTrail;
  76.                 }
  77.  
  78.                 serializedObject.ApplyModifiedProperties();
  79.             }
  80.             else if (bulletBehaviourObjectTarget.bulletBehaviourObjectOverride == null)
  81.                 bulletBehaviourObjectTarget.Load();
  82.         }
  83.  
  84.         using (new EditorGUI.DisabledScope(bulletBehaviourObjectTarget.useOtherBulletBehaviourObject))
  85.         {
  86.             for (int i = 0; i < variableNames.Length; i++)
  87.                 EditorGUILayout.PropertyField(serializedObject.FindProperty(variableNames[i]));
  88.         }
  89.  
  90.         previousBulletBehaviourObjectOverride = bulletBehaviourObjectTarget.bulletBehaviourObjectOverride;
  91.         previousUseOverrideState = bulletBehaviourObjectTarget.useOtherBulletBehaviourObject;
  92.  
  93.         serializedObject.ApplyModifiedProperties();
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement