/// <summary> /// Draws the custom editor for the components & references of this class. /// </summary> private void DrawComponentsAndReferences() { if (EditorApplication.isPlaying) { TDS_EditorUtility.PropertyField("Throwables in Hands", "All throwables currently juggling with", throwables); GUILayout.Space(5); if (TDS_EditorUtility.ObjectField("Selected Throwable", "Currently selected throwable to use", throwable, typeof(TDS_Throwable))) { jugglers.ForEach(j => j.Throwable = (TDS_Throwable)throwable.objectReferenceValue); serializedObject.Update(); } GUILayout.Space(5); } GUILayout.Space(5); TDS_EditorUtility.ObjectField("Juggle Transform", "Juggle transform, where to set as children objects juggling with", juggleTransform, typeof(Transform)); GUILayout.Space(3); TDS_EditorUtility.PropertyField("Object Anchors", "Object anchors when juggling", objectAnchors); }
private void DrawAttacks() { EditorGUILayout.BeginVertical("Box"); //Draw a header for the enemy evolution settings EditorGUILayout.LabelField("Attack Settings", TDS_EditorUtility.HeaderStyle); TDS_EditorUtility.PropertyField("Attacks", "", attacks); EditorGUILayout.EndVertical(); }
/// <summary> /// Draws the components & references editor of the TDS_Player editing objects. /// </summary> private void DrawComponentsAndReferences() { TDS_EditorUtility.PropertyField("Ground detection Box", "Virtual box used to detect if the player is on ground or not", groundDetectionBox); GUILayout.Space(5); TDS_EditorUtility.ObjectField("Interaction Box", "Trigger used to detect the available interactions of the player", interactionBox, typeof(TDS_PlayerInteractionBox)); TDS_EditorUtility.ObjectField("FX Transform", "Transform used to spawn all kind of FXs", fxTransformPV, typeof(PhotonView)); TDS_EditorUtility.ObjectField("Summoner object", "The Summoner the player is actually wearing", summoner, typeof(TDS_Summoner)); }
/// <summary> /// Draws the editor of the editing scripts. /// </summary> public override void DrawEditor() { // Make a space at the beginning of the editor GUILayout.Space(10); Color _originalColor = GUI.backgroundColor; Color _originalGUIColor = GUI.color; GUI.backgroundColor = TDS_EditorUtility.BoxDarkColor; EditorGUILayout.BeginVertical("HelpBox"); // Records any changements on the editing objects to allow undo Undo.RecordObjects(targets, "Event System settings"); // Updates the SerializedProperties to get the latest values serializedObject.Update(); GUILayout.Space(3); TDS_EditorUtility.RadioToggle("Activated", "Is this event system activated or not", isActivated); if (isActivated.boolValue) { GUILayout.Space(3); EditorGUILayout.LabelField(new GUIContent("Current Event", "Current event processing"), new GUIContent(currentEvent.FindPropertyRelative("Name").stringValue)); } GUILayout.Space(5); TDS_EditorUtility.Toggle("Des. Object when Finished", "Should this object be deactivated when the event system gets finished", doDesObjectOnFinish); GUILayout.Space(3); GUI.backgroundColor = _originalColor; TDS_EditorUtility.PropertyField("Detected Tags", "Tags detected to trigger this event", detectedTags); GUI.backgroundColor = TDS_EditorUtility.BoxDarkColor; GUILayout.Space(5); // Draws enter events EditorGUILayout.LabelField("Enter Events"); DrawEvents(events, ref foldouts); GUILayout.Space(5); // Draws exit events EditorGUILayout.LabelField("Exit Events"); DrawEvents(exitEvents, ref exitFoldouts); // Applies all modified properties on the SerializedObjects serializedObject.ApplyModifiedProperties(); EditorGUILayout.EndVertical(); GUI.backgroundColor = _originalColor; GUI.color = _originalGUIColor; }
void DrawSpawnedEnemies() { EditorGUILayout.BeginVertical("Helpbox"); EditorGUILayout.LabelField("Spawned Elements", TDS_EditorUtility.HeaderStyle); GUILayout.Space(5); TDS_EditorUtility.PropertyField("Spawned Enemies", "Enemies already on the scene in editor", spawnedEnemies); GUILayout.Space(3); TDS_EditorUtility.PropertyField("Linked Throwables", "Throwables linked to this spawn area", areaThrowables); EditorGUILayout.EndVertical(); GUILayout.Space(15); }
private void DrawCatSettings() { EditorGUILayout.LabelField(serializedObject.targetObject.name, TDS_EditorUtility.HeaderStyle); TDS_EditorUtility.PropertyField("Cat State", "On which perch the cat is", catState); TDS_EditorUtility.PropertyField("Left Perch Infos", "Left perch infos", leftPerchInfos); TDS_EditorUtility.PropertyField("Right Perch Infos", "Left perch infos", rightPerchInfos); TDS_EditorUtility.PropertyField("Cat Attack", "Attack casted by the cat", catAttack); TDS_EditorUtility.FloatSlider("Charge Rate", "Rate using when the cat is independant", chargeRate, 5, 25); serializedObject.ApplyModifiedProperties(); }
private void DrawEvents() { Color _originalColor = GUI.backgroundColor; GUI.backgroundColor = new Color(.8f, .8f, .8f); TDS_EditorUtility.PropertyField("On Spawn Area Activated", "Called when a player activate the trigger", eventOnAreaActivated); TDS_EditorUtility.PropertyField("On Fight Start", "Called when the fight is starting", eventOnStartFight); TDS_EditorUtility.PropertyField("On Spawn Area Desactivated", "Called when all waves are completed", eventOnAreaDesactivated); TDS_EditorUtility.PropertyField("On Next Wave", "Called when a wave is completed", eventOnNextWave); GUI.backgroundColor = _originalColor; }
protected override void DrawSettings() { base.DrawSettings(); TDS_EditorUtility.IntSlider("Damages Threshold", "How much damages had to be taken to play the hit animation", damagesThreshold, 1, 50); TDS_EditorUtility.ObjectField("Boss Portrait", "Portrait to display next to the boss' lifebar", portrait, typeof(GameObject)); EditorGUILayout.LabelField("Health events", TDS_EditorUtility.HeaderStyle); TDS_EditorUtility.PropertyField("On Two Thirds Health", "Event called when the boss has reached two thirds of his life", onTwoThirdsHealth); TDS_EditorUtility.PropertyField("On Half Health", "Event called when the boss has reached half of his life", onHalfHealth); TDS_EditorUtility.PropertyField("On One Third Health", "Event called when the boss has reached one third of his life", onOneThirdHealth); }
/// <summary> /// Draws the custom editor for this class settings. /// </summary> private void DrawSettings() { if (TDS_EditorUtility.FloatField("Juggle Speed", "Speed at which the Juggler juggle with his objects", juggleSpeed)) { jugglers.ForEach(j => j.JuggleSpeed = juggleSpeed.floatValue); serializedObject.Update(); } if (TDS_EditorUtility.FloatField("Throw. Dist. from Center", "Distance of each throwables from the hands transform of the character", throwableDistanceFromCenter)) { jugglers.ForEach(j => j.ThrowableDistanceFromCenter = throwableDistanceFromCenter.floatValue); serializedObject.Update(); } GUILayout.Space(5); TDS_EditorUtility.Vector3Field("Juggle Transf. Ideal Pos.", "Position the juggle transform is always looking to have (in local space)", juggleTransformIdealLocalPosition); // Draws a header for the juggler aim settings EditorGUILayout.LabelField("Aim", TDS_EditorUtility.HeaderStyle); GUILayout.Space(3); TDS_EditorUtility.PropertyField("What Can Aim", "Indicates what the player can aim at", whatCanAim); TDS_EditorUtility.PropertyField("Aim Detected Tags", "Detected tags as target when freely aiming", aimDetectTags); GUILayout.Space(2); if (TDS_EditorUtility.FloatSlider("Aiming Speed Coef", "Speed coefficient applied to the character while he's aiming", aimingSpeedCoef, 0f, 2f)) { jugglers.ForEach(j => j.AimingSpeedCoef = aimingSpeedCoef.floatValue); serializedObject.Update(); } if (TDS_EditorUtility.FloatField("Time between Shoots", "Minimum time to spend between two object shoots", timeBetweenShoots)) { jugglers.ForEach(j => j.TimeBetweenShoots = timeBetweenShoots.floatValue); serializedObject.Update(); } if (EditorApplication.isPlaying) { if (TDS_EditorUtility.FloatSlider("Aiming Angle", "Angle used by the Juggler to aim for a throw", aimAngle, 15f, 60f)) { jugglers.ForEach(j => j.AimAngle = aimAngle.floatValue); serializedObject.Update(); } TDS_EditorUtility.Vector3Field("Throw Aiming Point", "Position to aim when preparing a throw (in local space)", throwAimingPoint); } }
/// <summary> /// Draws the custom editor for this class settings. /// </summary> private void DrawSettings() { if (TDS_EditorUtility.PropertyField("Beard State", "Current state of the Beard Lady's beard", currentBeardState) && Application.isPlaying) { beardLadies.ForEach(b => b.CancelInvokeGrowBeard()); beardLadies.ForEach(b => b.CurrentBeardState = (BeardState)currentBeardState.enumValueIndex); serializedObject.Update(); } GUILayout.Space(3); TDS_EditorUtility.ProgressBar(25, (float)currentBeardState.enumValueIndex / 3, "Beard State"); GUILayout.Space(5); if (TDS_EditorUtility.FloatField("Beard Grow Interval", "Interval between two beard grow up", beardGrowInterval)) { beardLadies.ForEach(b => b.BeardGrowInterval = beardGrowInterval.floatValue); serializedObject.Update(); } if (TDS_EditorUtility.IntSlider("Beard Life", "Current beard life", beardCurrentLife, 0, beardMaxLife.intValue) && Application.isPlaying) { beardLadies.ForEach(b => b.BeardCurrentLife = beardCurrentLife.intValue); serializedObject.Update(); } GUILayout.Space(3); TDS_EditorUtility.ProgressBar(25, (float)beardCurrentLife.intValue / beardMaxLife.intValue, "Beard Life"); GUILayout.Space(5); if (TDS_EditorUtility.IntField("Beard Max Life", "Maximum beard life value", beardMaxLife)) { beardLadies.ForEach(b => b.BeardMaxLife = beardMaxLife.intValue); serializedObject.Update(); } if (TDS_EditorUtility.FloatField("Beard Heal Interval", "Interval between two beard heal", beardHealInterval)) { beardLadies.ForEach(b => b.BeardHealInterval = beardHealInterval.floatValue); serializedObject.Update(); } }
protected override void DrawSettings() { base.DrawSettings(); TDS_EditorUtility.PropertyField("Area activated by Mr Loyal", "Area used in the top phase of Mr Loyal", linkedAreas); TDS_EditorUtility.PropertyField("Cats", "Mr Loyal's cats", cats); TDS_EditorUtility.FloatSlider("Cats' charge rate", "Waiting seconds before the cats will attack", chargeCatsRate, 5, 25); TDS_EditorUtility.Vector3Field("Teleportation Position", "Position where Mr Loyal's will teleport himself", teleportationPosition); EditorGUILayout.LabelField("SOUNDS", TDS_EditorUtility.HeaderStyle); TDS_EditorUtility.PropertyField("Callout Fakir Sound", "", fakirAudioClip); TDS_EditorUtility.PropertyField("Callout Mime Sound", "", mimeAudioClip); TDS_EditorUtility.PropertyField("Callout Acrobat Sound", "", acrobatAudioClip); TDS_EditorUtility.PropertyField("Callout MightyMan Sound", "", mightyManAudioClip); TDS_EditorUtility.PropertyField("Callout Cat Sound", "", catAudioClip); TDS_EditorUtility.PropertyField("Taunt audio clips", "", tauntAudioClips); TDS_EditorUtility.FloatSlider("Main Taunt rate", "", tauntRateMin, 3, tauntRateMax.floatValue); TDS_EditorUtility.FloatSlider("Max Taunt rate", "", tauntRateMax, tauntRateMin.floatValue, 25); serializedObject.ApplyModifiedProperties(); }
/// <summary> /// Draws the custom editor of the editing TDS_Camera objects. /// </summary> public void DrawEditor() { // Records any changements on the editing objects to allow undo Undo.RecordObjects(targets, "Camera script(s) settings"); // Updates the SerializedProperties to get the latest values serializedObject.Update(); TDS_EditorUtility.ObjectField("Camera", "Camera component attached to this script", camera, typeof(Camera)); GUILayout.Space(1); if (TDS_EditorUtility.ObjectField("Target", "Target this camera has to follow", cTarget, typeof(Transform))) { cameras.ForEach(c => c.Target = (Transform)cTarget.objectReferenceValue); } GUILayout.Space(3); TDS_EditorUtility.ObjectField("Top Bound", "Top bound collider of this level", topBound, typeof(BoxCollider)); TDS_EditorUtility.ObjectField("Left Bound", "Left bound collider of this level", leftBound, typeof(BoxCollider)); TDS_EditorUtility.ObjectField("Right Bound", "Right bound collider of this level", rightBound, typeof(BoxCollider)); TDS_EditorUtility.ObjectField("Bottom Bound", "Bottom bound collider of this level", bottomBound, typeof(BoxCollider)); GUILayout.Space(3); TDS_EditorUtility.PropertyField("Current Bounds", "Current bounds of the camera", currentBounds); GUILayout.Space(3); TDS_EditorUtility.PropertyField("Level Bounds", "Global bounds of the camera in the Level", levelBounds); TDS_EditorUtility.Vector3Field("Offset", "Offset of the camera from its target", offset); GUILayout.Space(1); if (TDS_EditorUtility.FloatSlider("Rotation", "Rotation in X axis of the camera", rotation, 0, 90)) { cameras.ForEach(c => c.Rotation = rotation.floatValue); } GUILayout.Space(2); if (EditorApplication.isPlaying && !serializedObject.isEditingMultipleObjects) { TDS_EditorUtility.ProgressBar(20, speedCurrent.floatValue / speedMax.floatValue, "Speed"); } if (TDS_EditorUtility.FloatSlider("Initial Speed", "Initial speed of the camera when starting moving", speedInitial, 0, speedMax.floatValue)) { cameras.ForEach(c => c.SpeedInitial = speedInitial.floatValue); } if (TDS_EditorUtility.FloatField("Max Speed", "Maximum value of this camera speed", speedMax)) { cameras.ForEach(c => c.SpeedMax = speedMax.floatValue); } if (TDS_EditorUtility.FloatField("Speed Coef", "Coefficient used to multiply the speed of the camera", speedCoef)) { cameras.ForEach(c => c.SpeedCoef = speedCoef.floatValue); } if (TDS_EditorUtility.FloatField("Speed Accl. Time", "Time the speed of the camera take from its initial value to reach its maximum value", speedAccelerationTime)) { cameras.ForEach(c => c.SpeedAccelerationTime = speedAccelerationTime.floatValue); } TDS_EditorUtility.FloatField("Viewport Y Max Bound Value", "This would be too complicated to describe here...", ViewportYMaxBoundValue); GUILayout.Space(5); TDS_EditorUtility.RadioToggle("Moving", "Is the camera currently moving", isMoving); // Apply modifications serializedObject.ApplyModifiedProperties(); }
/// <summary> /// Draws the editor for the Destructible class components & references. /// </summary> protected void DrawComponentsAndReferences() { TDS_EditorUtility.PropertyField("Loot", "All available loot for this destructible ; note that once a loot has been dropped, it cannot be dropped again, so add it again if you want multiple instances of it to drop", loot); }
/// <summary> /// Draws the settings editor of the TDS_Player editing objects. /// </summary> private void DrawSettings() { TDS_EditorUtility.PropertyField("Type of Player", "Type of character this player is", playerType); TDS_EditorUtility.PropertyField("Attacks", "All Attacks this player can perform", attacks); GUILayout.Space(5); TDS_EditorUtility.PropertyField("What is Obstacle", "What layers this player should collide on", whatIsObstacle); // Draws a header for the player combos settings EditorGUILayout.LabelField("Combo", TDS_EditorUtility.HeaderStyle); GUILayout.Space(3); // Draws informations about the current combo if in play mode if (EditorApplication.isPlaying && !isPlayerMultiEditing) { string _combo = string.Empty; for (int _i = 0; _i < comboCurrent.arraySize; _i++) { _combo += comboCurrent.GetArrayElementAtIndex(_i).boolValue ? "L" : "H"; } TDS_EditorUtility.ProgressBar(25, (float)comboCurrent.arraySize / comboMax.intValue, $"Combo : {comboCurrent.arraySize} | {_combo}"); GUILayout.Space(5); } if (TDS_EditorUtility.IntField("Max Combo", "Maximum amount of attacks in one combo", comboMax)) { players.ForEach(p => p.ComboMax = comboMax.intValue); serializedObject.Update(); } if (TDS_EditorUtility.FloatField("Combo Reset time", "Time it takes for a combo to automatically be reset when no attack is perform", comboResetTime)) { players.ForEach(p => p.ComboResetTime = comboResetTime.floatValue); serializedObject.Update(); } // Draws a header for the player special settings EditorGUILayout.LabelField("Special", TDS_EditorUtility.HeaderStyle); GUILayout.Space(3); TDS_EditorUtility.Toggle("Playable", "Is the player playable or not", isPlayable); // Draws a header for the player jump settings EditorGUILayout.LabelField("Jump", TDS_EditorUtility.HeaderStyle); GUILayout.Space(3); TDS_EditorUtility.FloatField("Jump Force", "Maximum amount of attacks in one combo", jumpForce); if (TDS_EditorUtility.FloatField("Jump Maximum Time Length", "Maximum time for a jump the player can continue to add force", jumpMaximumTime)) { players.ForEach(p => p.JumpMaximumTime = jumpMaximumTime.floatValue); serializedObject.Update(); } if (EditorApplication.isPlaying && (playerType.intValue != (int)PlayerType.Juggler)) { // Draws a header for the player aim settings EditorGUILayout.LabelField("Aim", TDS_EditorUtility.HeaderStyle); GUILayout.Space(3); if (TDS_EditorUtility.FloatSlider("Aiming Angle", "Angle used by this player to aim for a throw", aimAngle, 15f, 60f)) { players.ForEach(p => p.AimAngle = aimAngle.floatValue); serializedObject.Update(); } } }
/// <summary> /// Draws the editor for the events. /// </summary> public void DrawEvents(SerializedProperty _events, ref bool[] _foldouts) { // Button to add a new event GUI.backgroundColor = TDS_EditorUtility.BoxLightColor; GUI.color = Color.green; if (TDS_EditorUtility.Button("+", "Add a new event", EditorStyles.miniButton)) { _events.InsertArrayElementAtIndex(0); _events.GetArrayElementAtIndex(0).FindPropertyRelative("Name").stringValue = "New Event"; bool[] _newFoldouts = new bool[_foldouts.Length + 1]; Array.Copy(_foldouts, 0, _newFoldouts, 1, _foldouts.Length); _foldouts = _newFoldouts; } GUI.color = Color.white; GUI.backgroundColor = TDS_EditorUtility.BoxDarkColor; for (int _i = 0; _i < _events.arraySize; _i++) { GUILayout.Space(5); GUI.backgroundColor = TDS_EditorUtility.BoxLightColor; EditorGUILayout.BeginVertical("Box"); SerializedProperty _event = _events.GetArrayElementAtIndex(_i); SerializedProperty _eventName = _event.FindPropertyRelative("Name"); EditorGUILayout.BeginHorizontal(); // Button to show or not this event if (TDS_EditorUtility.Button(_eventName.stringValue, "Wrap / unwrap this event", TDS_EditorUtility.HeaderStyle)) { _foldouts[_i] = !_foldouts[_i]; } GUILayout.FlexibleSpace(); // BUttons to change the event position in the list if ((_i > 0) && TDS_EditorUtility.Button("▲", "Move this element up", EditorStyles.miniButton)) { _events.MoveArrayElement(_i, _i - 1); } if ((_i < _events.arraySize - 1) && TDS_EditorUtility.Button("▼", "Move this element down", EditorStyles.miniButton)) { _events.MoveArrayElement(_i, _i + 1); } // Button to delete this event GUI.color = Color.red; if (TDS_EditorUtility.Button("X", "Delete this event", EditorStyles.miniButton)) { _events.DeleteArrayElementAtIndex(_i); bool[] _newFoldouts = new bool[_foldouts.Length - 1]; Array.Copy(_foldouts, 0, _newFoldouts, 0, _i); Array.Copy(_foldouts, _i + 1, _newFoldouts, _i, _foldouts.Length - (_i + 1)); _foldouts = _newFoldouts; break; } GUI.color = Color.white; EditorGUILayout.EndHorizontal(); // If unfolded, draws this event if (_foldouts[_i]) { SerializedProperty _eventType = _event.FindPropertyRelative("eventType"); SerializedProperty _doRequireType = _event.FindPropertyRelative("doRequireSpecificPlayerType"); TDS_EditorUtility.TextField("Name", "Name of this event", _eventName); GUILayout.Space(3); TDS_EditorUtility.PropertyField("Event Type", "Type of this event", _eventType); CustomEventType _eventTypeValue = (CustomEventType)_eventType.enumValueIndex; if (_eventType.enumValueIndex > 7) { _eventTypeValue += 13; } TDS_EditorUtility.FloatField("Delay", "Delay before starting this event", _event.FindPropertyRelative("delay")); GUILayout.Space(3); TDS_EditorUtility.Toggle("Require specific Player type", "Should this event require a specific player type to be triggered", _doRequireType); if (_doRequireType.boolValue) { TDS_EditorUtility.PropertyField("Required type of Player", "Required type of player to trigger this event", _event.FindPropertyRelative("playerType")); } GUILayout.Space(5); switch (_eventTypeValue) { case CustomEventType.CameraMovement: TDS_EditorUtility.PropertyField("Target", "Target to make the camera look ", _event.FindPropertyRelative("eventTransform")); TDS_EditorUtility.FloatField("Duration", "Time to look at the target", _event.FindPropertyRelative("cameraWaitTime")); TDS_EditorUtility.FloatField("Speed Coef", "Coefficient applied to the speed of the camera.", _event.FindPropertyRelative("eventFloat")); break; case CustomEventType.DesactiveInfoBox: break; case CustomEventType.DisplayInfoBox: TDS_EditorUtility.TextField("Text ID", "ID of the text to use for the Info Box", _event.FindPropertyRelative("eventString")); break; case CustomEventType.Instantiate: TDS_EditorUtility.PropertyField("Prefab", "Prefab to instantiate", _event.FindPropertyRelative("prefab")); TDS_EditorUtility.PropertyField("Instantiation transform reference", "Transform to use as reference for position & rotation for the transform of the instantiated object", _event.FindPropertyRelative("eventTransform")); break; case CustomEventType.InstantiatePhoton: TDS_EditorUtility.PropertyField("Prefab", "Prefab to instantiate", _event.FindPropertyRelative("prefab")); TDS_EditorUtility.PropertyField("Instantiation transform reference", "Transform to use as reference for position & rotation for the transform of the instantiated object", _event.FindPropertyRelative("eventTransform")); break; case CustomEventType.MovePlayerAroundPoint: TDS_EditorUtility.PropertyField("Position", "Where to move te player around", _event.FindPropertyRelative("eventTransform")); break; case CustomEventType.Narrator: TDS_EditorUtility.PropertyField("Quote", "Narrator quote to play", _event.FindPropertyRelative("quote")); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); Color _originalColor = GUI.color; GUI.color = new Color(.7f, .35f, .75f); if (GUILayout.Button(new GUIContent("Load Quote", "Loads the quote with the ID entered as Text ID"), GUILayout.Width(150))) { FieldInfo _fieldInfo = typeof(TDS_Event).GetField("quote", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); if (_fieldInfo != null) { TDS_NarratorQuote _quote = ((TDS_NarratorManager)Resources.Load(TDS_NarratorManager.FILE_PATH)).Quotes.FirstOrDefault(q => q.Name == _event.FindPropertyRelative("quote").FindPropertyRelative("Name").stringValue); if (_quote != null) { TDS_Event[] _objectEvents = (TDS_Event[])typeof(TDS_EventsSystem).GetField(_events.name, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).GetValue(target); typeof(TDS_Event).GetField("quote", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).SetValue(_objectEvents[_i], _quote); } } } GUI.color = _originalColor; GUILayout.EndHorizontal(); break; case CustomEventType.PlayMusic: _event.FindPropertyRelative("eventInt").intValue = EditorGUILayout.IntPopup("Music", _event.FindPropertyRelative("eventInt").intValue, Enum.GetNames(typeof(Music)), (int[])Enum.GetValues(typeof(Music))); TDS_EditorUtility.FloatField("Fade Duration", "Time during which the previous music will fade out before the new one starts.", _event.FindPropertyRelative("eventFloat")); break; case CustomEventType.WaitForObjectDeath: TDS_EditorUtility.PropertyField("Object Tag", "Tag waiting for an object with dies", _event.FindPropertyRelative("eventString")); TDS_EditorUtility.PropertyField("Amount", "Amount of object with this tag to wait for death", _event.FindPropertyRelative("eventInt")); break; case CustomEventType.WaitForSpawnAreaDesactivation: TDS_EditorUtility.PropertyField("Amount", "Amount of spawn area to wait for desactivation", _event.FindPropertyRelative("eventInt")); break; case CustomEventType.UnityEventLocal: TDS_EditorUtility.PropertyField("Unity Event", "Associated Unity Event to this event", _event.FindPropertyRelative("unityEvent")); break; case CustomEventType.UnityEventOnline: TDS_EditorUtility.PropertyField("Unity Event", "Associated Unity Event to this event", _event.FindPropertyRelative("unityEvent")); break; case CustomEventType.WaitForAction: TDS_EditorUtility.PropertyField("Action to wait", "Action to wait the player to perform", _event.FindPropertyRelative("actionType")); break; case CustomEventType.WaitForEveryone: TDS_EditorUtility.PropertyField("Bound min X", "Transform to use for minimum bound X value to wait", _event.FindPropertyRelative("eventTransform")); break; default: // Mhmm... break; } // Button to add a new event GUI.color = Color.green; if (TDS_EditorUtility.Button("+", "Add a new event", EditorStyles.miniButton)) { _events.InsertArrayElementAtIndex(_i); bool[] _newFoldouts = new bool[_foldouts.Length + 1]; Array.Copy(_foldouts, 0, _newFoldouts, 0, _i + 1); Array.Copy(_foldouts, _i + 1, _newFoldouts, _i + 2, _foldouts.Length - (_i + 1)); _foldouts = _newFoldouts; } GUI.color = Color.white; } EditorGUILayout.EndVertical(); } }
/// <summary> /// Draws the editor of the editing scripts. /// </summary> public virtual void DrawEditor() { // Make a space at the beginning of the editor GUILayout.Space(10); Color _originalColor = GUI.backgroundColor; Color _originalGUIColor = GUI.color; GUI.backgroundColor = TDS_EditorUtility.BoxDarkColor; EditorGUILayout.BeginVertical("HelpBox"); // Records any changements on the editing objects to allow undo Undo.RecordObjects(targets, "Event System settings"); // Updates the SerializedProperties to get the latest values serializedObject.Update(); GUILayout.Space(3); TDS_EditorUtility.RadioToggle("Activated", "Is this event system activated or not", isActivated); if (isActivated.boolValue) { GUILayout.Space(3); EditorGUILayout.LabelField(new GUIContent("Current Event", "Current event processing"), new GUIContent(currentEvent.FindPropertyRelative("Name").stringValue)); } GUILayout.Space(5); TDS_EditorUtility.Toggle("Local", "Is this event system local-based or online ?", isLocal); GUILayout.Space(2); TDS_EditorUtility.Toggle("Des. Collider on Activation", "Should this object collider be desactivated when starting events", doDesTriggerOnActiv); TDS_EditorUtility.Toggle("Looping", "Should this event system loop when reaching the end or not", doLoop); TDS_EditorUtility.Toggle("Des. Object when Finished", "Should this object be deactivated when the event system gets finished", doDesObjectOnFinish); GUILayout.Space(2); TDS_EditorUtility.PropertyField("Activation mode", "Activation mode used to trigger these events", activationMode); if (activationMode.enumValueIndex < 3) { GUILayout.Space(3); GUI.backgroundColor = _originalColor; TDS_EditorUtility.PropertyField("Detected Tags", "Tags detected to trigger this event", detectedTags); GUI.backgroundColor = TDS_EditorUtility.BoxDarkColor; } GUILayout.Space(5); // Draws events DrawEvents(events, ref foldouts); // Applies all modified properties on the SerializedObjects serializedObject.ApplyModifiedProperties(); EditorGUILayout.EndVertical(); GUI.backgroundColor = _originalColor; GUI.color = _originalGUIColor; }
/// <summary> /// Draws the editor of the editing scripts. /// </summary> public void DrawEditor() { // Make a space at the beginning of the editor GUILayout.Space(10); Color _originalColor = GUI.backgroundColor; Color _originalGUIColor = GUI.color; GUI.backgroundColor = TDS_EditorUtility.BoxDarkColor; EditorGUILayout.BeginVertical("HelpBox"); GUILayout.Space(3); serializedObject.Update(); TDS_EditorUtility.Toggle("Destroy on Activate", "Should this object be destroyed when activated", doDestroyOnActivate); if (!doDestroyOnActivate.boolValue) { TDS_EditorUtility.Toggle("Disable on Activate", "Should this object be disable when activated", doDisableOnActivate); } GUILayout.Space(2); TDS_EditorUtility.PropertyField("Activation mode", "Activation mode used to trigger these bounds", activationMode); if (activationMode.enumValueIndex < 2) { GUILayout.Space(3); GUI.backgroundColor = _originalColor; TDS_EditorUtility.PropertyField("Detected Tags", "Tags detected to trigger this event", detectedTags); GUI.backgroundColor = TDS_EditorUtility.BoxDarkColor; } GUILayout.Space(5); GUI.backgroundColor = _originalColor; EditorGUILayout.BeginHorizontal(); TDS_EditorUtility.Vector3Field("Top Bound", "Top bound position", topBound); GUI.color = editingBound == 1 ? Color.grey : Color.cyan; if (GUILayout.Button("EDIT", GUILayout.Width(40))) { if (editingBound != 1) { editingBound = 1; } else { editingBound = 0; } } if (bottomBound.vector3Value != Vector3.zero) { GUI.color = new Color(.9f, .7f, .3f); if (GUILayout.Button(new GUIContent("BOTT. SET", "Set the position of the top bound to match the camera size with the bottom bound"), GUILayout.Width(75))) { Undo.RecordObjects(serializedObject.targetObjects, "set bottom bound position"); topBound.vector3Value = new Vector3(topBound.vector3Value.x, topBound.vector3Value.y, bottomBound.vector3Value.z + 16.5f); } } GUI.color = _originalGUIColor; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); TDS_EditorUtility.Vector3Field("Left Bound", "Left bound position", leftBound); GUI.color = editingBound == 2 ? Color.grey : Color.cyan; if (GUILayout.Button("EDIT", GUILayout.Width(40))) { if (editingBound != 2) { editingBound = 2; } else { editingBound = 0; } } if (rightBound.vector3Value != Vector3.zero) { GUI.color = new Color(.9f, .7f, .3f); if (GUILayout.Button(new GUIContent("RIGH. SET", "Set the position of the left bound to match the camera size with the right bound"), GUILayout.Width(75))) { Undo.RecordObjects(serializedObject.targetObjects, "set bottom bound position"); leftBound.vector3Value = new Vector3(rightBound.vector3Value.x - (Camera.main.orthographicSize * 2 * ((float)Screen.currentResolution.width / Screen.currentResolution.height)), leftBound.vector3Value.y, leftBound.vector3Value.z); } } GUI.color = _originalGUIColor; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); TDS_EditorUtility.Vector3Field("Right Bound", "Right bound rightBound", rightBound); GUI.color = editingBound == 3 ? Color.grey : Color.cyan; if (GUILayout.Button("EDIT", GUILayout.Width(40))) { if (editingBound != 3) { editingBound = 3; } else { editingBound = 0; } } if (leftBound.vector3Value != Vector3.zero) { GUI.color = new Color(.9f, .7f, .3f); if (GUILayout.Button(new GUIContent("LEFT SET", "Set the position of the right bound to match the camera size with the left bound"), GUILayout.Width(75))) { Undo.RecordObjects(serializedObject.targetObjects, "set bottom bound position"); rightBound.vector3Value = new Vector3(leftBound.vector3Value.x + (Camera.main.orthographicSize * 2 * ((float)Screen.currentResolution.width / Screen.currentResolution.height)), rightBound.vector3Value.y, rightBound.vector3Value.z); } } GUI.color = _originalGUIColor; EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); TDS_EditorUtility.Vector3Field("Bottom Bound", "Bottom bound position", bottomBound); GUI.color = editingBound == 4 ? Color.grey : Color.cyan; if (GUILayout.Button("EDIT", GUILayout.Width(40))) { if (editingBound != 4) { editingBound = 4; } else { editingBound = 0; } } if (topBound.vector3Value != Vector3.zero) { GUI.color = new Color(.9f, .7f, .3f); if (GUILayout.Button(new GUIContent("TOP SET", "Set the position of the bottom bound to match the camera size with the top bound"), GUILayout.Width(75))) { Undo.RecordObjects(serializedObject.targetObjects, "set bottom bound position"); bottomBound.vector3Value = new Vector3(bottomBound.vector3Value.x, bottomBound.vector3Value.y, topBound.vector3Value.z - 16.5f); } } GUI.color = _originalGUIColor; EditorGUILayout.EndHorizontal(); GUILayout.Space(5); EditorGUILayout.EndVertical(); serializedObject.ApplyModifiedProperties(); }