void OnEnable () { lastActiveTool = Tools.current; // Playground Particles playgroundParticlesScriptReference = target as PlaygroundParticlesC; playgroundParticles = new SerializedObject(playgroundParticlesScriptReference); shurikenRenderer = playgroundParticlesScriptReference.particleSystemGameObject.particleSystem.renderer as ParticleSystemRenderer; manipulators = playgroundParticles.FindProperty("manipulators"); events = playgroundParticles.FindProperty("events"); snapshots = playgroundParticles.FindProperty("snapshots"); source = playgroundParticles.FindProperty("source"); sorting = playgroundParticles.FindProperty("sorting"); lifetimeSorting = playgroundParticles.FindProperty("lifetimeSorting"); nearestNeighborOrigin = playgroundParticles.FindProperty("nearestNeighborOrigin"); activeState = playgroundParticles.FindProperty("activeState"); particleCount = playgroundParticles.FindProperty("particleCount"); emissionRate = playgroundParticles.FindProperty("emissionRate"); updateRate = playgroundParticles.FindProperty("updateRate"); emit = playgroundParticles.FindProperty("emit"); loop = playgroundParticles.FindProperty("loop"); disableOnDone = playgroundParticles.FindProperty("disableOnDone"); calculate = playgroundParticles.FindProperty("calculate"); deltaMovementStrength = playgroundParticles.FindProperty("deltaMovementStrength"); particleTimescale = playgroundParticles.FindProperty("particleTimescale"); sizeMin = playgroundParticles.FindProperty("sizeMin"); sizeMax = playgroundParticles.FindProperty("sizeMax"); overflowOffset = playgroundParticles.FindProperty("overflowOffset"); overflowMode = playgroundParticles.FindProperty("overflowMode"); lifetime = playgroundParticles.FindProperty("lifetime"); lifetimeSize = playgroundParticles.FindProperty("lifetimeSize"); turbulenceLifetimeStrength = playgroundParticles.FindProperty("turbulenceLifetimeStrength"); lifetimeVelocity = playgroundParticles.FindProperty("lifetimeVelocity"); initialVelocityShape = playgroundParticles.FindProperty("initialVelocityShape"); initialVelocityMin = playgroundParticles.FindProperty("initialVelocityMin"); initialVelocityMax = playgroundParticles.FindProperty("initialVelocityMax"); initialLocalVelocityMin = playgroundParticles.FindProperty("initialLocalVelocityMin"); initialLocalVelocityMax = playgroundParticles.FindProperty("initialLocalVelocityMax"); lifetimeColor = playgroundParticles.FindProperty("lifetimeColor"); lifetimeColors = playgroundParticles.FindProperty ("lifetimeColors"); colorSource = playgroundParticles.FindProperty("colorSource"); collision = playgroundParticles.FindProperty("collision"); affectRigidbodies = playgroundParticles.FindProperty("affectRigidbodies"); mass = playgroundParticles.FindProperty("mass"); collisionRadius = playgroundParticles.FindProperty("collisionRadius"); collisionMask = playgroundParticles.FindProperty("collisionMask"); collisionType = playgroundParticles.FindProperty("collisionType"); bounciness = playgroundParticles.FindProperty("bounciness"); states = playgroundParticles.FindProperty("states"); worldObject = playgroundParticles.FindProperty("worldObject"); skinnedWorldObject = playgroundParticles.FindProperty("skinnedWorldObject"); sourceTransform = playgroundParticles.FindProperty("sourceTransform"); worldObjectUpdateVertices = playgroundParticles.FindProperty ("worldObjectUpdateVertices"); worldObjectUpdateNormals = playgroundParticles.FindProperty("worldObjectUpdateNormals"); sourcePaint = playgroundParticles.FindProperty("paint"); sourceProjection = playgroundParticles.FindProperty("projection"); lifetimeStretching = playgroundParticles.FindProperty("stretchLifetime"); playgroundParticlesScriptReference.shurikenParticleSystem = playgroundParticlesScriptReference.GetComponent<ParticleSystem>(); playgroundParticlesScriptReference.particleSystemRenderer = playgroundParticlesScriptReference.shurikenParticleSystem.renderer; particleMaterial = playgroundParticlesScriptReference.particleSystemRenderer.sharedMaterial; onlySourcePositioning = playgroundParticles.FindProperty("onlySourcePositioning"); applyLifetimeVelocity = playgroundParticles.FindProperty("applyLifetimeVelocity"); lifeTimeVelocityX = lifetimeVelocity.FindPropertyRelative("x"); lifeTimeVelocityY = lifetimeVelocity.FindPropertyRelative("y"); lifeTimeVelocityZ = lifetimeVelocity.FindPropertyRelative("z"); initialVelocityShapeX = initialVelocityShape.FindPropertyRelative("x"); initialVelocityShapeY = initialVelocityShape.FindPropertyRelative("y"); initialVelocityShapeZ = initialVelocityShape.FindPropertyRelative("z"); applyInitialVelocity = playgroundParticles.FindProperty("applyInitialVelocity"); applyInitialLocalVelocity = playgroundParticles.FindProperty("applyInitialLocalVelocity"); applyVelocityBending = playgroundParticles.FindProperty("applyVelocityBending"); velocityBendingType = playgroundParticles.FindProperty("velocityBendingType"); movementCompensationLifetimeStrength = playgroundParticles.FindProperty ("movementCompensationLifetimeStrength"); worldObjectGameObject = worldObject.FindPropertyRelative("gameObject"); skinnedWorldObjectGameObject = skinnedWorldObject.FindPropertyRelative("gameObject"); // Lifetime colors if (playgroundParticlesScriptReference.lifetimeColors==null) playgroundParticlesScriptReference.lifetimeColors = new List<PlaygroundGradientC>(); // Sorting prevLifetimeSortingKeys = playgroundParticlesScriptReference.lifetimeSorting.keys; // Manipulator list manipulatorListFoldout = new List<bool>(); manipulatorListFoldout.AddRange(new bool[playgroundParticlesScriptReference.manipulators.Count]); // Events list eventListFoldout = new List<bool>(); eventListFoldout.AddRange(new bool[playgroundParticlesScriptReference.events.Count]); // States foldout statesListFoldout = new List<bool>(); statesListFoldout.AddRange(new bool[playgroundParticlesScriptReference.states.Count]); previousSource = playgroundParticlesScriptReference.source; // Playground playgroundScriptReference = FindObjectOfType<PlaygroundC>(); // Create a manager if no existing instance is in the scene if (!playgroundScriptReference && Selection.activeTransform!=null) { PlaygroundC.ResourceInstantiate("Playground Manager"); playgroundScriptReference = FindObjectOfType<PlaygroundC>(); } if (playgroundScriptReference!=null) { PlaygroundC.reference = playgroundScriptReference; // Serialize Playground playground = new SerializedObject(playgroundScriptReference); PlaygroundInspectorC.Initialize(playgroundScriptReference); // Add this PlaygroundParticles if not existing in Playground list if (!playgroundParticlesScriptReference.isSnapshot && !playgroundScriptReference.particleSystems.Contains(playgroundParticlesScriptReference) && Selection.activeTransform!=null) playgroundScriptReference.particleSystems.Add(playgroundParticlesScriptReference); // Cache components playgroundParticlesScriptReference.particleSystemGameObject = playgroundParticlesScriptReference.gameObject; playgroundParticlesScriptReference.particleSystemTransform = playgroundParticlesScriptReference.transform; playgroundParticlesScriptReference.particleSystemRenderer = playgroundParticlesScriptReference.renderer; playgroundParticlesScriptReference.shurikenParticleSystem = playgroundParticlesScriptReference.particleSystemGameObject.GetComponent<ParticleSystem>(); playgroundParticlesScriptReference.particleSystemRenderer2 = playgroundParticlesScriptReference.particleSystemGameObject.particleSystem.renderer as ParticleSystemRenderer; // Set manager as parent if (PlaygroundC.reference.autoGroup && playgroundParticlesScriptReference.particleSystemTransform!=null && playgroundParticlesScriptReference.particleSystemTransform.parent == null && Selection.activeTransform!=null) playgroundParticlesScriptReference.particleSystemTransform.parent = PlaygroundC.referenceTransform; // Issue a quick refresh if (!EditorApplication.isPlaying) foreach (PlaygroundParticlesC p in PlaygroundC.reference.particleSystems) p.Start(); } selectedSort = sorting.intValue; // State initial values if (addStateTransform==null) addStateTransform = (Transform)playgroundParticlesScriptReference.particleSystemTransform; // Visiblity of Shuriken component in Inspector if (!playgroundScriptReference || playgroundScriptReference && !playgroundScriptReference.showShuriken) playgroundParticlesScriptReference.shurikenParticleSystem.hideFlags = HideFlags.HideInInspector; else playgroundParticlesScriptReference.shurikenParticleSystem.hideFlags = HideFlags.None; SetWireframeVisibility(); // Set paint init paintLayerMask = sourcePaint.FindPropertyRelative("layerMask"); paintCollisionType = sourcePaint.FindPropertyRelative("collisionType"); LoadBrushes(); // Set projection init projectionMask = sourceProjection.FindPropertyRelative("projectionMask"); projectionCollisionType = sourceProjection.FindPropertyRelative("collisionType"); // Snapshots if (playgroundParticlesScriptReference.snapshots.Count>0) { if (playgroundParticlesScriptReference.snapshots.Count>0) { for (int i = 0; i<playgroundParticlesScriptReference.snapshots.Count; i++) if (playgroundParticlesScriptReference.snapshots[i].settings==null) playgroundParticlesScriptReference.snapshots.RemoveAt(i); } saveName += " "+(playgroundParticlesScriptReference.snapshots.Count+1).ToString(); } }
void OnEnable () { lastActiveTool = Tools.current; isEditingInHierarchy = Selection.activeTransform!=null; // Load settings playgroundSettings = PlaygroundSettingsC.GetReference(); // Load language playgroundLanguage = PlaygroundSettingsC.GetLanguage(); // Playground Particles playgroundParticlesScriptReference = target as PlaygroundParticlesC; if (playgroundParticlesScriptReference==null) return; playgroundParticles = new SerializedObject(playgroundParticlesScriptReference); shurikenRenderer = playgroundParticlesScriptReference.particleSystemGameObject.GetComponent<ParticleSystem>().GetComponent<Renderer>() as ParticleSystemRenderer; // Sorting layers Type internalEditorUtilityType = typeof(InternalEditorUtility); PropertyInfo sortingLayersProperty = internalEditorUtilityType.GetProperty("sortingLayerNames", BindingFlags.Static | BindingFlags.NonPublic); rendererSortingLayers = (string[])sortingLayersProperty.GetValue(null, new object[0]); for (int i = 0; i<rendererSortingLayers.Length; i++) { if (shurikenRenderer.sortingLayerName == rendererSortingLayers[i]) selectedSortingLayer = i; } // UV Module (Texture Sheet Animation) shuriken = new SerializedObject(playgroundParticlesScriptReference.shurikenParticleSystem); uvModule = shuriken.FindProperty("UVModule"); uvModule_enabled = uvModule.FindPropertyRelative("enabled"); uvModule_frameOverTime_scalar = uvModule.FindPropertyRelative("frameOverTime.scalar"); uvModule_frameOverTime_minCurve = uvModule.FindPropertyRelative("frameOverTime.minCurve"); uvModule_frameOverTime_maxCurve = uvModule.FindPropertyRelative("frameOverTime.maxCurve"); uvModule_frameOverTime_minMaxState = uvModule.FindPropertyRelative("frameOverTime.minMaxState"); uvModule_tilesX = uvModule.FindPropertyRelative("tilesX"); uvModule_tilesY = uvModule.FindPropertyRelative("tilesY"); uvModule_animationType = uvModule.FindPropertyRelative("animationType"); uvModule_rowIndex = uvModule.FindPropertyRelative("rowIndex"); uvModule_cycles = uvModule.FindPropertyRelative("cycles"); uvModule_randomRow = uvModule.FindPropertyRelative("randomRow"); uv_animationType = (AnimationType)uvModule_animationType.intValue; uv_minMaxState = (MinMaxState)uvModule_frameOverTime_minMaxState.intValue; shurikenRendererSO = new SerializedObject(shurikenRenderer); sortingMode = shurikenRendererSO.FindProperty("m_SortMode"); sortingFudge = shurikenRendererSO.FindProperty("m_SortingFudge"); sortMode = (SortMode)sortingMode.intValue; manipulators = playgroundParticles.FindProperty("manipulators"); events = playgroundParticles.FindProperty("events"); snapshots = playgroundParticles.FindProperty("snapshots"); source = playgroundParticles.FindProperty("source"); sorting = playgroundParticles.FindProperty("sorting"); lifetimeSorting = playgroundParticles.FindProperty("lifetimeSorting"); activeState = playgroundParticles.FindProperty("activeState"); particleCount = playgroundParticles.FindProperty("particleCount"); emissionRate = playgroundParticles.FindProperty("emissionRate"); updateRate = playgroundParticles.FindProperty("updateRate"); emit = playgroundParticles.FindProperty("emit"); loop = playgroundParticles.FindProperty("loop"); disableOnDone = playgroundParticles.FindProperty("disableOnDone"); disableOnDoneRoutine = playgroundParticles.FindProperty("disableOnDoneRoutine"); calculate = playgroundParticles.FindProperty("calculate"); deltaMovementStrength = playgroundParticles.FindProperty("deltaMovementStrength"); particleTimescale = playgroundParticles.FindProperty("particleTimescale"); sizeMin = playgroundParticles.FindProperty("sizeMin"); sizeMax = playgroundParticles.FindProperty("sizeMax"); overflowOffset = playgroundParticles.FindProperty("overflowOffset"); overflowMode = playgroundParticles.FindProperty("overflowMode"); lifetime = playgroundParticles.FindProperty("lifetime"); lifetimeSize = playgroundParticles.FindProperty("lifetimeSize"); arraySize = playgroundParticles.FindProperty("particleArraySize"); turbulenceLifetimeStrength = playgroundParticles.FindProperty("turbulenceLifetimeStrength"); lifetimeVelocity = playgroundParticles.FindProperty("lifetimeVelocity"); initialVelocityShape = playgroundParticles.FindProperty("initialVelocityShape"); initialVelocityMin = playgroundParticles.FindProperty("initialVelocityMin"); initialVelocityMax = playgroundParticles.FindProperty("initialVelocityMax"); initialLocalVelocityMin = playgroundParticles.FindProperty("initialLocalVelocityMin"); initialLocalVelocityMax = playgroundParticles.FindProperty("initialLocalVelocityMax"); lifetimeColor = playgroundParticles.FindProperty("lifetimeColor"); lifetimeColors = playgroundParticles.FindProperty ("lifetimeColors"); arrayColor = playgroundParticles.FindProperty("arrayColorAlpha"); colorSource = playgroundParticles.FindProperty("colorSource"); collision = playgroundParticles.FindProperty("collision"); affectRigidbodies = playgroundParticles.FindProperty("affectRigidbodies"); mass = playgroundParticles.FindProperty("mass"); collisionRadius = playgroundParticles.FindProperty("collisionRadius"); collisionMask = playgroundParticles.FindProperty("collisionMask"); collisionType = playgroundParticles.FindProperty("collisionType"); bounciness = playgroundParticles.FindProperty("bounciness"); states = playgroundParticles.FindProperty("states"); worldObject = playgroundParticles.FindProperty("worldObject"); skinnedWorldObject = playgroundParticles.FindProperty("skinnedWorldObject"); forceSkinnedMeshUpdateOnMainThread = playgroundParticles.FindProperty ("forceSkinnedMeshUpdateOnMainThread"); sourceTransform = playgroundParticles.FindProperty("sourceTransform"); worldObjectUpdateVertices = playgroundParticles.FindProperty ("worldObjectUpdateVertices"); worldObjectUpdateNormals = playgroundParticles.FindProperty("worldObjectUpdateNormals"); sourcePaint = playgroundParticles.FindProperty("paint"); sourceProjection = playgroundParticles.FindProperty("projection"); sourceSplines = playgroundParticles.FindProperty("splines"); sourceTransforms = playgroundParticles.FindProperty("sourceTransforms"); lifetimeStretching = playgroundParticles.FindProperty("stretchLifetime"); threadMethod = playgroundParticles.FindProperty("threadMethod"); playgroundParticlesScriptReference.shurikenParticleSystem = playgroundParticlesScriptReference.GetComponent<ParticleSystem>(); playgroundParticlesScriptReference.particleSystemRenderer = playgroundParticlesScriptReference.shurikenParticleSystem.GetComponent<Renderer>(); particleMaterial = playgroundParticlesScriptReference.particleSystemRenderer.sharedMaterial; onlySourcePositioning = playgroundParticles.FindProperty("onlySourcePositioning"); lifetimePositioning = playgroundParticles.FindProperty("lifetimePositioning"); lifetimePositioningX = lifetimePositioning.FindPropertyRelative("x"); lifetimePositioningY = lifetimePositioning.FindPropertyRelative("y"); lifetimePositioningZ = lifetimePositioning.FindPropertyRelative("z"); lifetimePositioningTimeScale = playgroundParticles.FindProperty ("lifetimePositioningTimeScale"); lifetimePositioningPositionScale = playgroundParticles.FindProperty ("lifetimePositioningPositionScale"); applyLifetimeVelocity = playgroundParticles.FindProperty("applyLifetimeVelocity"); lifeTimeVelocityX = lifetimeVelocity.FindPropertyRelative("x"); lifeTimeVelocityY = lifetimeVelocity.FindPropertyRelative("y"); lifeTimeVelocityZ = lifetimeVelocity.FindPropertyRelative("z"); initialVelocityShapeX = initialVelocityShape.FindPropertyRelative("x"); initialVelocityShapeY = initialVelocityShape.FindPropertyRelative("y"); initialVelocityShapeZ = initialVelocityShape.FindPropertyRelative("z"); applyInitialVelocity = playgroundParticles.FindProperty("applyInitialVelocity"); applyInitialLocalVelocity = playgroundParticles.FindProperty("applyInitialLocalVelocity"); applyVelocityBending = playgroundParticles.FindProperty("applyVelocityBending"); velocityBendingType = playgroundParticles.FindProperty("velocityBendingType"); movementCompensationLifetimeStrength = playgroundParticles.FindProperty ("movementCompensationLifetimeStrength"); worldObjectGameObject = worldObject.FindPropertyRelative("gameObject"); skinnedWorldObjectGameObject = skinnedWorldObject.FindPropertyRelative("gameObject"); // Lifetime colors if (playgroundParticlesScriptReference.lifetimeColors==null) playgroundParticlesScriptReference.lifetimeColors = new List<PlaygroundGradientC>(); // Sorting prevLifetimeSortingKeys = playgroundParticlesScriptReference.lifetimeSorting.keys; // Events list eventListFoldout = new List<bool>(); eventListFoldout.AddRange(new bool[playgroundParticlesScriptReference.events.Count]); // States foldout statesListFoldout = new List<bool>(); statesListFoldout.AddRange(new bool[playgroundParticlesScriptReference.states.Count]); previousSource = playgroundParticlesScriptReference.source; // Playground playgroundScriptReference = FindObjectOfType<PlaygroundC>(); // Create a manager if no existing instance is in the scene if (!playgroundScriptReference && Selection.activeTransform!=null) { PlaygroundC.ResourceInstantiate("Playground Manager"); playgroundScriptReference = FindObjectOfType<PlaygroundC>(); } if (playgroundScriptReference!=null) { PlaygroundC.reference = playgroundScriptReference; // Serialize Playground playground = new SerializedObject(playgroundScriptReference); PlaygroundInspectorC.Initialize(playgroundScriptReference); // Add this PlaygroundParticles if not existing in Playground list if (!playgroundParticlesScriptReference.isSnapshot && !playgroundScriptReference.particleSystems.Contains(playgroundParticlesScriptReference) && Selection.activeTransform!=null) playgroundScriptReference.particleSystems.Add(playgroundParticlesScriptReference); // Cache components playgroundParticlesScriptReference.particleSystemGameObject = playgroundParticlesScriptReference.gameObject; playgroundParticlesScriptReference.particleSystemTransform = playgroundParticlesScriptReference.transform; playgroundParticlesScriptReference.particleSystemRenderer = playgroundParticlesScriptReference.GetComponent<Renderer>(); playgroundParticlesScriptReference.shurikenParticleSystem = playgroundParticlesScriptReference.particleSystemGameObject.GetComponent<ParticleSystem>(); playgroundParticlesScriptReference.particleSystemRenderer2 = playgroundParticlesScriptReference.particleSystemGameObject.GetComponent<ParticleSystem>().GetComponent<Renderer>() as ParticleSystemRenderer; // Set manager as parent //if (PlaygroundC.reference.autoGroup && playgroundParticlesScriptReference.particleSystemTransform!=null && playgroundParticlesScriptReference.particleSystemTransform.parent == null && Selection.activeTransform!=null) // playgroundParticlesScriptReference.particleSystemTransform.parent = PlaygroundC.referenceTransform; // Issue a quick refresh if (!EditorApplication.isPlaying && isEditingInHierarchy) { foreach (PlaygroundParticlesC p in PlaygroundC.reference.particleSystems) { p.Start(); } } } selectedSort = sorting.intValue; // State initial values if (addStateTransform==null) addStateTransform = (Transform)playgroundParticlesScriptReference.particleSystemTransform; // Visiblity of Shuriken component in Inspector if (!playgroundScriptReference || playgroundScriptReference && !playgroundScriptReference.showShuriken) playgroundParticlesScriptReference.shurikenParticleSystem.hideFlags = HideFlags.HideInInspector; else playgroundParticlesScriptReference.shurikenParticleSystem.hideFlags = HideFlags.None; SetWireframeVisibility(); // Set paint init paintLayerMask = sourcePaint.FindPropertyRelative("layerMask"); paintCollisionType = sourcePaint.FindPropertyRelative("collisionType"); // Set projection init projectionMask = sourceProjection.FindPropertyRelative("projectionMask"); projectionCollisionType = sourceProjection.FindPropertyRelative("collisionType"); // Snapshots if (playgroundParticlesScriptReference.snapshots.Count>0) { if (playgroundParticlesScriptReference.snapshots.Count>0) { for (int i = 0; i<playgroundParticlesScriptReference.snapshots.Count; i++) if (playgroundParticlesScriptReference.snapshots[i].settings==null) playgroundParticlesScriptReference.snapshots.RemoveAt(i); } saveName += " "+(playgroundParticlesScriptReference.snapshots.Count+1).ToString(); } SetMissingKeys(); }