// Used also by DOTweenAnimationInspector when applying runtime changes and restarting public void CreateTween() { _tweenCreated = true; if (target == null) { Debug.LogWarning(string.Format("{0} :: This tween's target is NULL, because the animation was created with a DOTween Pro version older than 0.9.255. To fix this, exit Play mode then simply select this object, and it will update automatically", this.gameObject.name), this.gameObject); return; } if (forcedTargetType != TargetTypeEx.Unset) { targetType = forcedTargetType; } if (targetType == TargetTypeEx.Unset) { // Legacy DOTweenAnimation (made with a version older than 0.9.450) without stored targetType > assign it now targetType = TypeToDOTargetType(target.GetType()); } switch (animationType) { case GA.DOTweenAnimationType.None: break; case GA.DOTweenAnimationType.Move: if (useTargetAsV3) { isRelative = false; if (endValueTransform == null) { Debug.LogWarning(string.Format("{0} :: This tween's TO target is NULL, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject); endValueV3 = Vector3.zero; } else { if (targetType == TargetTypeEx.RectTransform) { RectTransform endValueT = endValueTransform as RectTransform; if (endValueT == null) { Debug.LogWarning(string.Format("{0} :: This tween's TO target should be a RectTransform, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject); endValueV3 = Vector3.zero; } else { RectTransform rTarget = target as RectTransform; if (rTarget == null) { Debug.LogWarning(string.Format("{0} :: This tween's target and TO target are not of the same type. Please reassign the values", this.gameObject.name), this.gameObject); } else { // Problem: doesn't work inside Awake (ararargh!) endValueV3 = DOTweenUtils46.SwitchToRectTransform(endValueT, rTarget); } } } else { endValueV3 = endValueTransform.position; } } } switch (targetType) { case TargetTypeEx.RectTransform: tween = ((RectTransform)target).DOAnchorPos3D(endValueV3, duration, optionalBool0); break; case TargetTypeEx.Transform: tween = ((Transform)target).DOMove(endValueV3, duration, optionalBool0); break; case TargetTypeEx.Rigidbody2D: tween = ((Rigidbody2D)target).DOMove(endValueV3, duration, optionalBool0); break; case TargetTypeEx.Rigidbody: tween = ((Rigidbody)target).DOMove(endValueV3, duration, optionalBool0); break; } break; case GA.DOTweenAnimationType.LocalMove: tween = transform.DOLocalMove(endValueV3, duration, optionalBool0); break; case GA.DOTweenAnimationType.Rotate: switch (targetType) { case TargetTypeEx.Transform: tween = ((Transform)target).DORotate(endValueV3, duration, optionalRotationMode); break; case TargetTypeEx.Rigidbody2D: tween = ((Rigidbody2D)target).DORotate(endValueFloat, duration); break; case TargetTypeEx.Rigidbody: tween = ((Rigidbody)target).DORotate(endValueV3, duration, optionalRotationMode); break; } break; case GA.DOTweenAnimationType.LocalRotate: tween = transform.DOLocalRotate(endValueV3, duration, optionalRotationMode); break; case GA.DOTweenAnimationType.Scale: switch (targetType) { #if DOTWEEN_TK2D case TargetType.tk2dTextMesh: tween = ((tk2dTextMesh)target).DOScale(optionalBool0 ? new Vector3(endValueFloat, endValueFloat, endValueFloat) : endValueV3, duration); break; case TargetType.tk2dBaseSprite: tween = ((tk2dBaseSprite)target).DOScale(optionalBool0 ? new Vector3(endValueFloat, endValueFloat, endValueFloat) : endValueV3, duration); break; #endif default: tween = transform.DOScale(optionalBool0 ? new Vector3(endValueFloat, endValueFloat, endValueFloat) : endValueV3, duration); break; } break; case GA.DOTweenAnimationType.UIWidthHeight: tween = ((RectTransform)target).DOSizeDelta(optionalBool0 ? new Vector2(endValueFloat, endValueFloat) : endValueV2, duration); break; case GA.DOTweenAnimationType.Color: isRelative = false; switch (targetType) { case TargetTypeEx.SpriteRenderer: tween = ((SpriteRenderer)target).DOColor(endValueColor, duration); break; case TargetTypeEx.Renderer: tween = ((Renderer)target).material.DOColor(endValueColor, duration); break; case TargetTypeEx.Image: tween = ((Image)target).DOColor(endValueColor, duration); break; case TargetTypeEx.UISprite: tween = ((UISprite)target).DOColor(endValueColor, duration); break; case TargetTypeEx.UITexture: tween = ((UITexture)target).DOColor(endValueColor, duration); break; case TargetTypeEx.UIWidget: tween = ((UIWidget)target).DOColor(endValueColor, duration); break; case TargetTypeEx.Text: tween = ((Text)target).DOColor(endValueColor, duration); break; case TargetTypeEx.Light: tween = ((Light)target).DOColor(endValueColor, duration); break; #if DOTWEEN_TK2D case TargetType.tk2dTextMesh: tween = ((tk2dTextMesh)target).DOColor(endValueColor, duration); break; case TargetType.tk2dBaseSprite: tween = ((tk2dBaseSprite)target).DOColor(endValueColor, duration); break; #endif #if DOTWEEN_TMP case TargetType.TextMeshProUGUI: tween = ((TextMeshProUGUI)target).DOColor(endValueColor, duration); break; case TargetType.TextMeshPro: tween = ((TextMeshPro)target).DOColor(endValueColor, duration); break; #endif } break; case GA.DOTweenAnimationType.Fade: isRelative = false; switch (targetType) { case TargetTypeEx.SpriteRenderer: tween = ((SpriteRenderer)target).DOFade(endValueFloat, duration); break; case TargetTypeEx.Renderer: tween = ((Renderer)target).material.DOFade(endValueFloat, duration); break; case TargetTypeEx.Image: tween = ((Image)target).DOFade(endValueFloat, duration); break; case TargetTypeEx.UISprite: tween = ((UISprite)target).DOFade(endValueFloat, duration); break; case TargetTypeEx.UITexture: tween = ((UITexture)target).DOFade(endValueFloat, duration); break; case TargetTypeEx.UIWidget: tween = ((UIWidget)target).DOFade(endValueFloat, duration); break; case TargetTypeEx.Text: tween = ((Text)target).DOFade(endValueFloat, duration); break; case TargetTypeEx.Light: tween = ((Light)target).DOIntensity(endValueFloat, duration); break; case TargetTypeEx.CanvasGroup: tween = ((CanvasGroup)target).DOFade(endValueFloat, duration); break; #if DOTWEEN_TK2D case TargetType.tk2dTextMesh: tween = ((tk2dTextMesh)target).DOFade(endValueFloat, duration); break; case TargetType.tk2dBaseSprite: tween = ((tk2dBaseSprite)target).DOFade(endValueFloat, duration); break; #endif #if DOTWEEN_TMP case TargetType.TextMeshProUGUI: tween = ((TextMeshProUGUI)target).DOFade(endValueFloat, duration); break; case TargetType.TextMeshPro: tween = ((TextMeshPro)target).DOFade(endValueFloat, duration); break; #endif } break; case GA.DOTweenAnimationType.Text: switch (targetType) { case TargetTypeEx.Text: tween = ((Text)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); break; #if DOTWEEN_TK2D case TargetType.tk2dTextMesh: tween = ((tk2dTextMesh)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); break; #endif #if DOTWEEN_TMP case TargetType.TextMeshProUGUI: tween = ((TextMeshProUGUI)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); break; case TargetType.TextMeshPro: tween = ((TextMeshPro)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); break; #endif } break; case GA.DOTweenAnimationType.PunchPosition: switch (targetType) { case TargetTypeEx.RectTransform: tween = ((RectTransform)target).DOPunchAnchorPos(endValueV3, duration, optionalInt0, optionalFloat0, optionalBool0); break; case TargetTypeEx.Transform: tween = ((Transform)target).DOPunchPosition(endValueV3, duration, optionalInt0, optionalFloat0, optionalBool0); break; } break; case GA.DOTweenAnimationType.PunchScale: tween = transform.DOPunchScale(endValueV3, duration, optionalInt0, optionalFloat0); break; case GA.DOTweenAnimationType.PunchRotation: tween = transform.DOPunchRotation(endValueV3, duration, optionalInt0, optionalFloat0); break; case GA.DOTweenAnimationType.ShakePosition: switch (targetType) { case TargetTypeEx.RectTransform: tween = ((RectTransform)target).DOShakeAnchorPos(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool0); break; case TargetTypeEx.Transform: tween = ((Transform)target).DOShakePosition(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool0); break; } break; case GA.DOTweenAnimationType.ShakeScale: tween = transform.DOShakeScale(duration, endValueV3, optionalInt0, optionalFloat0); break; case GA.DOTweenAnimationType.ShakeRotation: tween = transform.DOShakeRotation(duration, endValueV3, optionalInt0, optionalFloat0); break; case GA.DOTweenAnimationType.CameraAspect: tween = ((Camera)target).DOAspect(endValueFloat, duration); break; case GA.DOTweenAnimationType.CameraBackgroundColor: tween = ((Camera)target).DOColor(endValueColor, duration); break; case GA.DOTweenAnimationType.CameraFieldOfView: tween = ((Camera)target).DOFieldOfView(endValueFloat, duration); break; case GA.DOTweenAnimationType.CameraOrthoSize: tween = ((Camera)target).DOOrthoSize(endValueFloat, duration); break; case GA.DOTweenAnimationType.CameraPixelRect: tween = ((Camera)target).DOPixelRect(endValueRect, duration); break; case GA.DOTweenAnimationType.CameraRect: tween = ((Camera)target).DORect(endValueRect, duration); break; case GA.DOTweenAnimationType.Animation: tween = ((Animation)target).DOAnimation(animName, duration); break; case GaExtention.DOTweenAnimationType.Animator: tween = ((Animator)target).DOAnimation(animName, duration); break; } if (tween == null) { return; } if (isFrom) { ((Tweener)tween).From(isRelative); } else { tween.SetRelative(isRelative); } tween.SetTarget(this.gameObject).SetDelay(delay).SetLoops(loops, loopType).SetAutoKill(autoKill) .OnKill(() => tween = null); if (isSpeedBased) { tween.SetSpeedBased(); } if (easeType == Ease.INTERNAL_Custom) { tween.SetEase(easeCurve); } else { tween.SetEase(easeType); } if (!string.IsNullOrEmpty(id)) { tween.SetId(id); } tween.SetUpdate(isIndependentUpdate); if (hasOnStart) { if (onStart != null) { tween.OnStart(onStart.Invoke); } } else { onStart = null; } if (hasOnPlay) { if (onPlay != null) { tween.OnPlay(onPlay.Invoke); } } else { onPlay = null; } if (hasOnUpdate) { if (onUpdate != null) { tween.OnUpdate(onUpdate.Invoke); } } else { onUpdate = null; } if (hasOnStepComplete) { if (onStepComplete != null) { tween.OnStepComplete(onStepComplete.Invoke); } } else { onStepComplete = null; } if (hasOnComplete) { if (onComplete != null) { tween.OnComplete(onComplete.Invoke); } } else { onComplete = null; } if (hasOnRewind) { if (onRewind != null) { tween.OnRewind(onRewind.Invoke); } } else { onRewind = null; } if (autoPlay) { tween.Play(); } else { tween.Pause(); } if (hasOnTweenCreated && onTweenCreated != null) { onTweenCreated.Invoke(); } }
override public void OnInspectorGUI() { base.OnInspectorGUI(); GUILayout.Space(3); EditorGUIUtils.SetGUIStyles(); bool playMode = Application.isPlaying; _runtimeEditMode = _runtimeEditMode && playMode; GUILayout.BeginHorizontal(); GA.DOTweenEditorExteion.InspectorLogo(); GUILayout.Label(_src.animationType.ToString() + (string.IsNullOrEmpty(_src.id) ? "" : " [" + _src.id + "]"), EditorGUIUtils.sideLogoIconBoldLabelStyle); // Up-down buttons GUILayout.FlexibleSpace(); if (GUILayout.Button("▲", DeGUI.styles.button.toolIco)) { UnityEditorInternal.ComponentUtility.MoveComponentUp(_src); } if (GUILayout.Button("▼", DeGUI.styles.button.toolIco)) { UnityEditorInternal.ComponentUtility.MoveComponentDown(_src); } GUILayout.EndHorizontal(); if (playMode) { if (_runtimeEditMode) { } else { GUILayout.Space(8); GUILayout.Label("Animation Editor disabled while in play mode", EditorGUIUtils.wordWrapLabelStyle); if (!_src.isActive) { GUILayout.Label("This animation has been toggled as inactive and won't be generated", EditorGUIUtils.wordWrapLabelStyle); GUI.enabled = false; } if (GUILayout.Button(new GUIContent("Activate Edit Mode", "Switches to Runtime Edit Mode, where you can change animations values and restart them"))) { _runtimeEditMode = true; } GUILayout.Label("NOTE: when using DOPlayNext, the sequence is determined by the DOTweenAnimation Components order in the target GameObject's Inspector", EditorGUIUtils.wordWrapLabelStyle); GUILayout.Space(10); if (!_runtimeEditMode) { return; } } } Undo.RecordObject(_src, "DOTween Animation"); // _src.isValid = Validate(); // Moved down EditorGUIUtility.labelWidth = 110; if (playMode) { GUILayout.Space(4); DeGUILayout.Toolbar("Edit Mode Commands"); DeGUILayout.BeginVBox(DeGUI.styles.box.stickyTop); GUILayout.BeginHorizontal(); if (GUILayout.Button("TogglePause")) { _src.tween.TogglePause(); } if (GUILayout.Button("Rewind")) { _src.tween.Rewind(); } if (GUILayout.Button("Restart")) { _src.tween.Restart(); } GUILayout.EndHorizontal(); if (GUILayout.Button("Commit changes and restart")) { _src.tween.Rewind(); _src.tween.Kill(); if (_src.isValid) { _src.CreateTween(); _src.tween.Play(); } } GUILayout.Label("To apply your changes when exiting Play mode, use the Component's upper right menu and choose \"Copy Component\", then \"Paste Component Values\" after exiting Play mode", DeGUI.styles.label.wordwrap); DeGUILayout.EndVBox(); } else { bool hasManager = _src.GetComponent <DOTweenVisualManager>() != null; if (!hasManager) { if (GUILayout.Button(new GUIContent("Add Manager", "Adds a manager component which allows you to choose additional options for this gameObject"))) { _src.gameObject.AddComponent <DOTweenVisualManager>(); } } } GUILayout.Space(4); GUITrigger(); GUILayout.Space(4); GUILayout.BeginHorizontal(); GA.DOTweenAnimationType prevAnimType = _src.animationType; // _src.animationType = (GA.DOTweenAnimationType)EditorGUILayout.EnumPopup(_src.animationType, EditorGUIUtils.popupButton); _src.isActive = EditorGUILayout.Toggle(new GUIContent("", "If unchecked, this animation will not be created"), _src.isActive, GUILayout.Width(16)); GUI.enabled = _src.isActive; _src.animationType = AnimationToDOTweenAnimationType(_AnimationType[EditorGUILayout.Popup(DOTweenAnimationTypeToPopupId(_src.animationType), _AnimationType)]); _src.autoPlay = DeGUILayout.ToggleButton(_src.autoPlay, new GUIContent("AutoPlay", "If selected, the tween will play automatically")); _src.autoKill = DeGUILayout.ToggleButton(_src.autoKill, new GUIContent("AutoKill", "If selected, the tween will be killed when it completes, and won't be reusable")); GUILayout.EndHorizontal(); if (prevAnimType != _src.animationType) { // Set default optional values based on animation type _src.endValueTransform = null; _src.useTargetAsV3 = false; switch (_src.animationType) { case GA.DOTweenAnimationType.Move: case GA.DOTweenAnimationType.LocalMove: case GA.DOTweenAnimationType.Rotate: case GA.DOTweenAnimationType.LocalRotate: case GA.DOTweenAnimationType.Scale: _src.endValueV3 = Vector3.zero; _src.endValueFloat = 0; _src.optionalBool0 = _src.animationType == GA.DOTweenAnimationType.Scale; break; case GA.DOTweenAnimationType.UIWidthHeight: _src.endValueV3 = Vector3.zero; _src.endValueFloat = 0; _src.optionalBool0 = _src.animationType == GA.DOTweenAnimationType.UIWidthHeight; break; case GA.DOTweenAnimationType.Color: case GA.DOTweenAnimationType.Fade: _isLightSrc = _src.GetComponent <Light>() != null; _src.endValueFloat = 0; break; case GA.DOTweenAnimationType.Text: _src.optionalBool0 = true; break; case GA.DOTweenAnimationType.PunchPosition: case GA.DOTweenAnimationType.PunchRotation: case GA.DOTweenAnimationType.PunchScale: _src.endValueV3 = _src.animationType == GA.DOTweenAnimationType.PunchRotation ? new Vector3(0, 180, 0) : Vector3.one; _src.optionalFloat0 = 1; _src.optionalInt0 = 10; _src.optionalBool0 = false; break; case GA.DOTweenAnimationType.ShakePosition: case GA.DOTweenAnimationType.ShakeRotation: case GA.DOTweenAnimationType.ShakeScale: _src.endValueV3 = _src.animationType == GA.DOTweenAnimationType.ShakeRotation ? new Vector3(90, 90, 90) : Vector3.one; _src.optionalInt0 = 10; _src.optionalFloat0 = 90; _src.optionalBool0 = false; break; case GA.DOTweenAnimationType.CameraAspect: case GA.DOTweenAnimationType.CameraFieldOfView: case GA.DOTweenAnimationType.CameraOrthoSize: _src.endValueFloat = 0; break; case GA.DOTweenAnimationType.CameraPixelRect: case GA.DOTweenAnimationType.CameraRect: _src.endValueRect = new Rect(0, 0, 0, 0); break; case GA.DOTweenAnimationType.Animation: case GA.DOTweenAnimationType.Animator: _src.endValueFloat = 0; break; } } if (_src.animationType == GA.DOTweenAnimationType.None) { _src.isValid = false; if (GUI.changed) { EditorUtility.SetDirty(_src); } return; } if (prevAnimType != _src.animationType || ComponentsChanged()) { _src.isValid = Validate(); // See if we need to choose between multiple targets if (_src.animationType == GA.DOTweenAnimationType.Fade && _src.GetComponent <CanvasGroup>() != null && _src.GetComponent <Image>() != null && _src.GetComponent <UISprite>() != null && _src.GetComponent <UITexture>() != null && _src.GetComponent <UIWidget>() != null) { _chooseTargetMode = ChooseTargetMode.BetweenCanvasGroupAndImage; // Reassign target and forcedTargetType if lost if (_src.forcedTargetType == TargetTypeEx.Unset) { _src.forcedTargetType = _src.targetType; } switch (_src.forcedTargetType) { case TargetTypeEx.CanvasGroup: _src.target = _src.GetComponent <CanvasGroup>(); break; case TargetTypeEx.Image: _src.target = _src.GetComponent <Image>(); break; case TargetTypeEx.UISprite: _src.target = _src.GetComponent <UISprite>(); break; case TargetTypeEx.UITexture: _src.target = _src.GetComponent <UITexture>(); break; case TargetTypeEx.UIWidget: _src.target = _src.GetComponent <UIWidget>(); break; } } else { _chooseTargetMode = ChooseTargetMode.None; _src.forcedTargetType = TargetTypeEx.Unset; } } if (!_src.isValid) { GUI.color = Color.red; GUILayout.BeginVertical(GUI.skin.box); GUILayout.Label("No valid Component was found for the selected animation", EditorGUIUtils.wordWrapLabelStyle); GUILayout.EndVertical(); GUI.color = Color.white; if (GUI.changed) { EditorUtility.SetDirty(_src); } return; } // Special cases in which multiple target types could be used (set after validation) if (_chooseTargetMode == ChooseTargetMode.BetweenCanvasGroupAndImage && _src.forcedTargetType != TargetTypeEx.Unset) { FadeTargetType fadeTargetType = (FadeTargetType)Enum.Parse(typeof(FadeTargetType), _src.forcedTargetType.ToString()); TargetTypeEx prevTargetType = _src.forcedTargetType; _src.forcedTargetType = (TargetTypeEx)Enum.Parse(typeof(TargetTypeEx), EditorGUILayout.EnumPopup(_src.animationType + " Target", fadeTargetType).ToString()); if (_src.forcedTargetType != prevTargetType) { // Target type change > assign correct target switch (_src.forcedTargetType) { case TargetTypeEx.CanvasGroup: _src.target = _src.GetComponent <CanvasGroup>(); break; case TargetTypeEx.Image: _src.target = _src.GetComponent <Image>(); break; case TargetTypeEx.UISprite: _src.target = _src.GetComponent <UISprite>(); break; case TargetTypeEx.UITexture: _src.target = _src.GetComponent <UITexture>(); break; case TargetTypeEx.UIWidget: _src.target = _src.GetComponent <UIWidget>(); break; } } } GUILayout.BeginHorizontal(); _src.duration = EditorGUILayout.FloatField("Duration", _src.duration); if (_src.duration < 0) { _src.duration = 0; } _src.isSpeedBased = DeGUILayout.ToggleButton(_src.isSpeedBased, new GUIContent("SpeedBased", "If selected, the duration will count as units/degree x second"), DeGUI.styles.button.tool, GUILayout.Width(75)); GUILayout.EndHorizontal(); _src.delay = EditorGUILayout.FloatField("Delay", _src.delay); if (_src.delay < 0) { _src.delay = 0; } _src.isIndependentUpdate = EditorGUILayout.Toggle("Ignore TimeScale", _src.isIndependentUpdate); _src.easeType = EditorGUIUtils.FilteredEasePopup(_src.easeType); if (_src.easeType == Ease.INTERNAL_Custom) { _src.easeCurve = EditorGUILayout.CurveField(" Ease Curve", _src.easeCurve); } _src.loops = EditorGUILayout.IntField(new GUIContent("Loops", "Set to -1 for infinite loops"), _src.loops); if (_src.loops < -1) { _src.loops = -1; } if (_src.loops > 1 || _src.loops == -1) { _src.loopType = (LoopType)EditorGUILayout.EnumPopup(" Loop Type", _src.loopType); } _src.id = EditorGUILayout.TextField("ID", _src.id); bool canBeRelative = true; // End value and eventual specific options switch (_src.animationType) { case GA.DOTweenAnimationType.Move: case GA.DOTweenAnimationType.LocalMove: GUIEndValueV3(_src.animationType == GA.DOTweenAnimationType.Move); _src.optionalBool0 = EditorGUILayout.Toggle(" Snapping", _src.optionalBool0); canBeRelative = !_src.useTargetAsV3; break; case GA.DOTweenAnimationType.Rotate: case GA.DOTweenAnimationType.LocalRotate: if (_src.GetComponent <Rigidbody2D>()) { GUIEndValueFloat(); } else { GUIEndValueV3(); _src.optionalRotationMode = (RotateMode)EditorGUILayout.EnumPopup(" Rotation Mode", _src.optionalRotationMode); } break; case GA.DOTweenAnimationType.Scale: if (_src.optionalBool0) { GUIEndValueFloat(); } else { GUIEndValueV3(); } _src.optionalBool0 = EditorGUILayout.Toggle("Uniform Scale", _src.optionalBool0); break; case GA.DOTweenAnimationType.UIWidthHeight: if (_src.optionalBool0) { GUIEndValueFloat(); } else { GUIEndValueV2(); } _src.optionalBool0 = EditorGUILayout.Toggle("Uniform Scale", _src.optionalBool0); break; case GA.DOTweenAnimationType.Color: GUIEndValueColor(); canBeRelative = false; break; case GA.DOTweenAnimationType.Animator: case GA.DOTweenAnimationType.Animation: GUIEndValueAnimation(); canBeRelative = false; break; case GA.DOTweenAnimationType.Fade: GUIEndValueFloat(); if (_src.endValueFloat < 0) { _src.endValueFloat = 0; } if (!_isLightSrc && _src.endValueFloat > 1) { _src.endValueFloat = 1; } canBeRelative = false; break; case GA.DOTweenAnimationType.Text: GUIEndValueString(); _src.optionalBool0 = EditorGUILayout.Toggle("Rich Text Enabled", _src.optionalBool0); _src.optionalScrambleMode = (ScrambleMode)EditorGUILayout.EnumPopup("Scramble Mode", _src.optionalScrambleMode); _src.optionalString = EditorGUILayout.TextField(new GUIContent("Custom Scramble", "Custom characters to use in case of ScrambleMode.Custom"), _src.optionalString); break; case GA.DOTweenAnimationType.PunchPosition: case GA.DOTweenAnimationType.PunchRotation: case GA.DOTweenAnimationType.PunchScale: GUIEndValueV3(); canBeRelative = false; _src.optionalInt0 = EditorGUILayout.IntSlider(new GUIContent(" Vibrato", "How much will the punch vibrate"), _src.optionalInt0, 1, 50); _src.optionalFloat0 = EditorGUILayout.Slider(new GUIContent(" Elasticity", "How much the vector will go beyond the starting position when bouncing backwards"), _src.optionalFloat0, 0, 1); if (_src.animationType == GA.DOTweenAnimationType.PunchPosition) { _src.optionalBool0 = EditorGUILayout.Toggle(" Snapping", _src.optionalBool0); } break; case GA.DOTweenAnimationType.ShakePosition: case GA.DOTweenAnimationType.ShakeRotation: case GA.DOTweenAnimationType.ShakeScale: GUIEndValueV3(); canBeRelative = false; _src.optionalInt0 = EditorGUILayout.IntSlider(new GUIContent(" Vibrato", "How much will the shake vibrate"), _src.optionalInt0, 1, 50); _src.optionalFloat0 = EditorGUILayout.Slider(new GUIContent(" Randomness", "The shake randomness"), _src.optionalFloat0, 0, 90); if (_src.animationType == GA.DOTweenAnimationType.ShakePosition) { _src.optionalBool0 = EditorGUILayout.Toggle(" Snapping", _src.optionalBool0); } break; case GA.DOTweenAnimationType.CameraAspect: case GA.DOTweenAnimationType.CameraFieldOfView: case GA.DOTweenAnimationType.CameraOrthoSize: GUIEndValueFloat(); canBeRelative = false; break; case GA.DOTweenAnimationType.CameraBackgroundColor: GUIEndValueColor(); canBeRelative = false; break; case GA.DOTweenAnimationType.CameraPixelRect: case GA.DOTweenAnimationType.CameraRect: GUIEndValueRect(); canBeRelative = false; break; } // Final settings if (canBeRelative) { _src.isRelative = EditorGUILayout.Toggle(" Relative", _src.isRelative); } // Events AnimationInspectorGUI.AnimationEvents(this, _src); if (GUI.changed) { EditorUtility.SetDirty(_src); } }