From 2006b97d3a73b9ad69d20fc1f770a8ddd3611e2b Mon Sep 17 00:00:00 2001 From: fiore Date: Thu, 13 Mar 2025 09:28:57 +0900 Subject: [PATCH 1/7] =?UTF-8?q?=ED=8F=B4=EB=8D=94=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20prefab=20->=20prefabs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Prefabs/Coins Panel.prefab | 454 ++++++++++++++++++ Assets/Prefabs/Coins Panel.prefab.meta | 7 + .../{Prefab => Prefabs}/Signin Panel.prefab | 0 .../Signin Panel.prefab.meta | 0 .../{Prefab => Prefabs}/Signup Panel.prefab | 0 .../Signup Panel.prefab.meta | 0 Assets/{Prefab.meta => Prefabs/Utility.meta} | 2 +- .../{Prefab => Prefabs/Utility}/Timer.prefab | 0 .../Utility}/Timer.prefab.meta | 0 .../[Canvas] Game UI.prefab | 0 .../[Canvas] Game UI.prefab.meta | 0 ProjectSettings/ProjectSettings.asset | 19 +- 12 files changed, 480 insertions(+), 2 deletions(-) create mode 100644 Assets/Prefabs/Coins Panel.prefab create mode 100644 Assets/Prefabs/Coins Panel.prefab.meta rename Assets/{Prefab => Prefabs}/Signin Panel.prefab (100%) rename Assets/{Prefab => Prefabs}/Signin Panel.prefab.meta (100%) rename Assets/{Prefab => Prefabs}/Signup Panel.prefab (100%) rename Assets/{Prefab => Prefabs}/Signup Panel.prefab.meta (100%) rename Assets/{Prefab.meta => Prefabs/Utility.meta} (77%) rename Assets/{Prefab => Prefabs/Utility}/Timer.prefab (100%) rename Assets/{Prefab => Prefabs/Utility}/Timer.prefab.meta (100%) rename Assets/{Prefab => Prefabs}/[Canvas] Game UI.prefab (100%) rename Assets/{Prefab => Prefabs}/[Canvas] Game UI.prefab.meta (100%) diff --git a/Assets/Prefabs/Coins Panel.prefab b/Assets/Prefabs/Coins Panel.prefab new file mode 100644 index 0000000..f46eb6c --- /dev/null +++ b/Assets/Prefabs/Coins Panel.prefab @@ -0,0 +1,454 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &646100354038727038 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1769668775421633028} + - component: {fileID: 4222531876603999234} + - component: {fileID: 5499754916380040505} + m_Layer: 5 + m_Name: Coins Panel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1769668775421633028 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 646100354038727038} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7160441703557567757} + - {fileID: 4063434195558959060} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &4222531876603999234 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 646100354038727038} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: eea2199565579f74994703cd3b57324b, type: 3} + m_Name: + m_EditorClassIdentifier: + _coinsRemoveImageObject: {fileID: 0} + _coinsCountText: {fileID: 0} + _coinsRemoveAudioClip: {fileID: 0} + _coinsAddAudioClip: {fileID: 0} + _coinsEmptyAudioClip: {fileID: 0} +--- !u!82 &5499754916380040505 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 646100354038727038} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 0} + m_PlayOnAwake: 1 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!1 &4198953742281733827 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1079989316415266247} + - component: {fileID: 4144968568495096558} + - component: {fileID: 6016265620447360569} + m_Layer: 5 + m_Name: Heart Remove Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1079989316415266247 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4198953742281733827} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7160441703557567757} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 71, y: 64} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4144968568495096558 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4198953742281733827} + m_CullTransparentMesh: 1 +--- !u!114 &6016265620447360569 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4198953742281733827} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: f4100b35e05ee5742b84036e3fac9739, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6605662540677805756 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4063434195558959060} + - component: {fileID: 673492791722097697} + - component: {fileID: 2892066450466788586} + - component: {fileID: 7647362496602102397} + m_Layer: 5 + m_Name: Coins Count Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4063434195558959060 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6605662540677805756} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1769668775421633028} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 50} + m_Pivot: {x: 0.99999994, y: 0.5} +--- !u!222 &673492791722097697 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6605662540677805756} + m_CullTransparentMesh: 1 +--- !u!114 &2892066450466788586 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6605662540677805756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 1 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 54 + m_fontSizeBase: 54 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &7647362496602102397 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6605662540677805756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 2 + m_VerticalFit: 0 +--- !u!1 &8030154757013663868 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7160441703557567757} + - component: {fileID: 5103069450452632470} + - component: {fileID: 6256789334430198293} + m_Layer: 5 + m_Name: Coins Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7160441703557567757 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8030154757013663868} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1079989316415266247} + m_Father: {fileID: 1769668775421633028} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 71, y: 64} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &5103069450452632470 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8030154757013663868} + m_CullTransparentMesh: 1 +--- !u!114 &6256789334430198293 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8030154757013663868} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: f4100b35e05ee5742b84036e3fac9739, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/Assets/Prefabs/Coins Panel.prefab.meta b/Assets/Prefabs/Coins Panel.prefab.meta new file mode 100644 index 0000000..4018eb2 --- /dev/null +++ b/Assets/Prefabs/Coins Panel.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dc5d544dd6fd6e544b8e7399440a8323 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefab/Signin Panel.prefab b/Assets/Prefabs/Signin Panel.prefab similarity index 100% rename from Assets/Prefab/Signin Panel.prefab rename to Assets/Prefabs/Signin Panel.prefab diff --git a/Assets/Prefab/Signin Panel.prefab.meta b/Assets/Prefabs/Signin Panel.prefab.meta similarity index 100% rename from Assets/Prefab/Signin Panel.prefab.meta rename to Assets/Prefabs/Signin Panel.prefab.meta diff --git a/Assets/Prefab/Signup Panel.prefab b/Assets/Prefabs/Signup Panel.prefab similarity index 100% rename from Assets/Prefab/Signup Panel.prefab rename to Assets/Prefabs/Signup Panel.prefab diff --git a/Assets/Prefab/Signup Panel.prefab.meta b/Assets/Prefabs/Signup Panel.prefab.meta similarity index 100% rename from Assets/Prefab/Signup Panel.prefab.meta rename to Assets/Prefabs/Signup Panel.prefab.meta diff --git a/Assets/Prefab.meta b/Assets/Prefabs/Utility.meta similarity index 77% rename from Assets/Prefab.meta rename to Assets/Prefabs/Utility.meta index bbcd08f..04832ad 100644 --- a/Assets/Prefab.meta +++ b/Assets/Prefabs/Utility.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1df3bb155d375f14bb1f46255f0c65f3 +guid: 1fb885212ccb657459ee62c6381019e0 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Assets/Prefab/Timer.prefab b/Assets/Prefabs/Utility/Timer.prefab similarity index 100% rename from Assets/Prefab/Timer.prefab rename to Assets/Prefabs/Utility/Timer.prefab diff --git a/Assets/Prefab/Timer.prefab.meta b/Assets/Prefabs/Utility/Timer.prefab.meta similarity index 100% rename from Assets/Prefab/Timer.prefab.meta rename to Assets/Prefabs/Utility/Timer.prefab.meta diff --git a/Assets/Prefab/[Canvas] Game UI.prefab b/Assets/Prefabs/[Canvas] Game UI.prefab similarity index 100% rename from Assets/Prefab/[Canvas] Game UI.prefab rename to Assets/Prefabs/[Canvas] Game UI.prefab diff --git a/Assets/Prefab/[Canvas] Game UI.prefab.meta b/Assets/Prefabs/[Canvas] Game UI.prefab.meta similarity index 100% rename from Assets/Prefab/[Canvas] Game UI.prefab.meta rename to Assets/Prefabs/[Canvas] Game UI.prefab.meta diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 84c5a1b..2e33c81 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -791,7 +791,24 @@ PlayerSettings: webGLMemoryGeometricGrowthStep: 0.2 webGLMemoryGeometricGrowthCap: 96 webGLPowerPreference: 2 - scriptingDefineSymbols: {} + scriptingDefineSymbols: + Android: DOTWEEN + EmbeddedLinux: DOTWEEN + GameCoreScarlett: DOTWEEN + GameCoreXboxOne: DOTWEEN + LinuxHeadlessSimulation: DOTWEEN + Nintendo Switch: DOTWEEN + PS4: DOTWEEN + PS5: DOTWEEN + QNX: DOTWEEN + Stadia: DOTWEEN + Standalone: DOTWEEN + VisionOS: DOTWEEN + WebGL: DOTWEEN + Windows Store Apps: DOTWEEN + XboxOne: DOTWEEN + iPhone: DOTWEEN + tvOS: DOTWEEN additionalCompilerArguments: {} platformArchitecture: {} scriptingBackend: {} From a2531f286e7ace7ca76ddc4163f16beebd967e8e Mon Sep 17 00:00:00 2001 From: fiore Date: Thu, 13 Mar 2025 09:29:43 +0900 Subject: [PATCH 2/7] =?UTF-8?q?DoTween=20=ED=94=8C=EB=9F=AC=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EC=84=A4=EC=B9=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Plugins.meta | 8 + Assets/Plugins/Demigiant.meta | 8 + Assets/Plugins/Demigiant/DOTween.meta | 21 + Assets/Plugins/Demigiant/DOTween/DOTween.XML | 3089 +++++++++++++++++ .../Demigiant/DOTween/DOTween.XML.meta | 4 + Assets/Plugins/Demigiant/DOTween/DOTween.dll | Bin 0 -> 175616 bytes .../Demigiant/DOTween/DOTween.dll.meta | 22 + Assets/Plugins/Demigiant/DOTween/Editor.meta | 5 + .../DOTween/Editor/DOTweenEditor.XML | 144 + .../DOTween/Editor/DOTweenEditor.XML.meta | 4 + .../DOTween/Editor/DOTweenEditor.dll | Bin 0 -> 70656 bytes .../DOTween/Editor/DOTweenEditor.dll.meta | 22 + .../Demigiant/DOTween/Editor/Imgs.meta | 5 + .../DOTween/Editor/Imgs/DOTweenIcon.png | Bin 0 -> 1565 bytes .../DOTween/Editor/Imgs/DOTweenIcon.png.meta | 47 + .../DOTween/Editor/Imgs/DOTweenMiniIcon.png | Bin 0 -> 319 bytes .../Editor/Imgs/DOTweenMiniIcon.png.meta | 68 + .../Demigiant/DOTween/Editor/Imgs/Footer.png | Bin 0 -> 4409 bytes .../DOTween/Editor/Imgs/Footer.png.meta | 47 + .../DOTween/Editor/Imgs/Footer_dark.png | Bin 0 -> 4429 bytes .../DOTween/Editor/Imgs/Footer_dark.png.meta | 47 + .../Demigiant/DOTween/Editor/Imgs/Header.jpg | Bin 0 -> 22787 bytes .../DOTween/Editor/Imgs/Header.jpg.meta | 47 + Assets/Plugins/Demigiant/DOTween/Modules.meta | 5 + .../DOTween/Modules/DOTweenModuleAudio.cs | 198 ++ .../Modules/DOTweenModuleAudio.cs.meta | 8 + .../Modules/DOTweenModuleEPOOutline.cs | 146 + .../Modules/DOTweenModuleEPOOutline.cs.meta | 12 + .../DOTween/Modules/DOTweenModulePhysics.cs | 216 ++ .../Modules/DOTweenModulePhysics.cs.meta | 8 + .../DOTween/Modules/DOTweenModulePhysics2D.cs | 193 + .../Modules/DOTweenModulePhysics2D.cs.meta | 8 + .../DOTween/Modules/DOTweenModuleSprite.cs | 93 + .../Modules/DOTweenModuleSprite.cs.meta | 8 + .../DOTween/Modules/DOTweenModuleUI.cs | 662 ++++ .../DOTween/Modules/DOTweenModuleUI.cs.meta | 8 + .../Modules/DOTweenModuleUnityVersion.cs | 389 +++ .../Modules/DOTweenModuleUnityVersion.cs.meta | 8 + .../DOTween/Modules/DOTweenModuleUtils.cs | 167 + .../Modules/DOTweenModuleUtils.cs.meta | 8 + Assets/Plugins/Demigiant/DOTween/readme.txt | 29 + .../Plugins/Demigiant/DOTween/readme.txt.meta | 4 + Assets/Prefabs.meta | 8 + Assets/Resources.meta | 8 + Assets/Resources/DOTweenSettings.asset | 54 + Assets/Resources/DOTweenSettings.asset.meta | 8 + 46 files changed, 5836 insertions(+) create mode 100644 Assets/Plugins.meta create mode 100644 Assets/Plugins/Demigiant.meta create mode 100644 Assets/Plugins/Demigiant/DOTween.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/DOTween.XML create mode 100644 Assets/Plugins/Demigiant/DOTween/DOTween.XML.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/DOTween.dll create mode 100644 Assets/Plugins/Demigiant/DOTween/DOTween.dll.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg create mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs create mode 100644 Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTween/readme.txt create mode 100644 Assets/Plugins/Demigiant/DOTween/readme.txt.meta create mode 100644 Assets/Prefabs.meta create mode 100644 Assets/Resources.meta create mode 100644 Assets/Resources/DOTweenSettings.asset create mode 100644 Assets/Resources/DOTweenSettings.asset.meta diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta new file mode 100644 index 0000000..f1e76e9 --- /dev/null +++ b/Assets/Plugins.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ed3914c6a1057e4ab284e8e418efe3c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant.meta b/Assets/Plugins/Demigiant.meta new file mode 100644 index 0000000..161f289 --- /dev/null +++ b/Assets/Plugins/Demigiant.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fecb33911a59b4743a0b29c275356a1c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTween.meta b/Assets/Plugins/Demigiant/DOTween.meta new file mode 100644 index 0000000..cbebc39 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween.meta @@ -0,0 +1,21 @@ +fileFormatVersion: 2 +guid: a50bd9a009c8dfc4ebd88cc8101225a7 +labels: +- Tween +- Tweening +- Animation +- HOTween +- Paths +- iTween +- DFTween +- LeanTween +- Ease +- Easing +- Shake +- Punch +- 2DToolkit +- TextMeshPro +- Text +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/DOTween.XML b/Assets/Plugins/Demigiant/DOTween/DOTween.XML new file mode 100644 index 0000000..46e79c4 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/DOTween.XML @@ -0,0 +1,3089 @@ + + + + DOTween + + + + + Types of autoPlay behaviours + + + + No tween is automatically played + + + Only Sequences are automatically played + + + Only Tweeners are automatically played + + + All tweens are automatically played + + + + What axis to constrain in case of Vector tweens + + + + Called the first time the tween is set in a playing state, after any eventual delay + + + + Used in place of System.Func, which is not available in mscorlib. + + + + + Used in place of System.Action. + + + + + Public so it can be used by lose scripts related to DOTween (like DOTweenAnimation) + + + + + Used to separate DOTween class from the MonoBehaviour instance (in order to use static constructors on DOTween). + Contains all instance-based methods + + + + Used internally inside Unity Editor, as a trick to update DOTween's inspector at every frame + + + + Directly sets the current max capacity of Tweeners and Sequences + (meaning how many Tweeners and Sequences can be running at the same time), + so that DOTween doesn't need to automatically increase them in case the max is reached + (which might lead to hiccups when that happens). + Sequences capacity must be less or equal to Tweeners capacity + (if you pass a low Tweener capacity it will be automatically increased to match the Sequence's). + Beware: use this method only when there are no tweens running. + + Max Tweeners capacity. + Default: 200 + Max Sequences capacity. + Default: 50 + + + + This class contains a C# port of the easing equations created by Robert Penner (http://robertpenner.com/easing). + + + + + Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in: accelerating from zero velocity. + + + Current time (in frames or seconds). + + + Expected easing duration (in frames or seconds). + + Unused: here to keep same delegate for all ease types. + Unused: here to keep same delegate for all ease types. + + The eased value. + + + + + Easing equation function for a bounce (exponentially decaying parabolic bounce) easing out: decelerating from zero velocity. + + + Current time (in frames or seconds). + + + Expected easing duration (in frames or seconds). + + Unused: here to keep same delegate for all ease types. + Unused: here to keep same delegate for all ease types. + + The eased value. + + + + + Easing equation function for a bounce (exponentially decaying parabolic bounce) easing in/out: acceleration until halfway, then deceleration. + + + Current time (in frames or seconds). + + + Expected easing duration (in frames or seconds). + + Unused: here to keep same delegate for all ease types. + Unused: here to keep same delegate for all ease types. + + The eased value. + + + + + Returns a value between 0 and 1 (inclusive) based on the elapsed time and ease selected + + + + + Returns a value between 0 and 1 (inclusive) based on the elapsed time and ease selected + + + + + Used to interpret AnimationCurves as eases. + Public so it can be used by external ease factories + + + + + Behaviour in case a tween nested inside a Sequence fails and is captured by safe mode + + + + If the Sequence contains other elements, kill the failed tween but preserve the rest + + + Kill the whole Sequence + + + + Log types thrown by errors captured and prevented by safe mode + + + + No logs. NOT RECOMMENDED + + + Throw a normal log + + + Throw a warning log (default) + + + Throw an error log + + + + Additional notices passed to plugins when updating. + Public so it can be used by custom plugins. Internally, only PathPlugin uses it + + + + + None + + + + + Lets the plugin know that we restarted or rewinded + + + + + OnRewind callback behaviour (can only be set via DOTween's Utility Panel) + + + + + When calling Rewind or PlayBackwards/SmoothRewind, OnRewind callbacks will be fired only if the tween isn't already rewinded + + + + + When calling Rewind, OnRewind callbacks will always be fired, even if the tween is already rewinded. + When calling PlayBackwards/SmoothRewind instead, OnRewind callbacks will be fired only if the tween isn't already rewinded + + + + + When calling Rewind or PlayBackwards/SmoothRewind, OnRewind callbacks will always be fired, even if the tween is already rewinded + + + + + Public only so custom shortcuts can access some of these methods + + + + + INTERNAL: used by DO shortcuts and Modules to set special startup mode + + + + + INTERNAL: used by DO shortcuts and Modules to set the tween as blendable + + + + + INTERNAL: used by DO shortcuts and Modules to prevent a tween from using a From setup even if passed + + + + + Used to dispatch commands that need to be captured externally, usually by Modules + + + + + Various utils + + + + + Returns a Vector3 with z = 0 + + + + + Returns the 2D angle between two vectors + + + + + Returns a point on a circle with the given center and radius, + using Unity's circle coordinates (0° points up and increases clockwise) + + + + + Uses approximate equality on each axis instead of Unity's Vector3 equality, + because the latter fails (in some cases) when assigning a Vector3 to a transform.position and then checking it. + + + + + Looks for the type within all possible project assembly names + + + + NO-GC METHOD: changes the start value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new start value + If bigger than 0 applies it as the new tween duration + + + NO-GC METHOD: changes the end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new end value + If TRUE the start value will become the current target's value, otherwise it will stay the same + + + NO-GC METHOD: changes the end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new end value + If bigger than 0 applies it as the new tween duration + If TRUE the start value will become the current target's value, otherwise it will stay the same + + + NO-GC METHOD: changes the start and end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new start value + The new end value + If bigger than 0 applies it as the new tween duration + + + + Struct that stores two colors (used for LineRenderer tweens) + + + + + Used for tween callbacks + + + + + Used for tween callbacks + + + + + Used for custom and animationCurve-based ease functions. Must return a value between 0 and 1. + + + + + Straight Quaternion plugin. Instead of using Vector3 values accepts Quaternion values directly. + Beware: doesn't work with LoopType.Incremental (neither directly nor if inside a LoopType.Incremental Sequence). + To use it, call DOTween.To with the plugin parameter overload, passing it PureQuaternionPlugin.Plug() as first parameter + (do not use any of the other public PureQuaternionPlugin methods): + DOTween.To(PureQuaternionPlugin.Plug(), ()=> myQuaternionProperty, x=> myQuaternionProperty = x, myQuaternionEndValue, duration); + + + + + Plug this plugin inside a DOTween.To call. + Example: + DOTween.To(PureQuaternionPlugin.Plug(), ()=> myQuaternionProperty, x=> myQuaternionProperty = x, myQuaternionEndValue, duration); + + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + INTERNAL: do not use + + + + Extra non-tweening-related curve methods + + + + + Cubic bezier curve methods + + + + + Calculates a point along the given Cubic Bezier segment-curve. + + Segment start point + Start point's control point/handle + Segment end point + End point's control point/handle + 0-1 percentage along which to retrieve point + + + + Returns an array containing a series of points along the given Cubic Bezier segment-curve. + + Start point + Start point's control point/handle + End point + End point's control point/handle + Cloud resolution (min: 2) + + + + Calculates a series of points along the given Cubic Bezier segment-curve and adds them to the given list. + + Start point + Start point's control point/handle + End point + End point's control point/handle + Cloud resolution (min: 2) + + + + Main DOTween class. Contains static methods to create and control tweens in a generic way + + + + DOTween's version + + + If TRUE (default) makes tweens slightly slower but safer, automatically taking care of a series of things + (like targets becoming null while a tween is playing). + Default: TRUE + + + Log type when safe mode reports capturing an error and preventing it + + + Behaviour in case a tween nested inside a Sequence fails (and is caught by safe mode). + Default: NestedTweenFailureBehaviour.TryToPreserveSequence + + + If TRUE you will get a DOTween report when exiting play mode (only in the Editor). + Useful to know how many max Tweeners and Sequences you reached and optimize your final project accordingly. + Beware, this will slightly slow down your tweens while inside Unity Editor. + Default: FALSE + + + Global DOTween global timeScale (default: 1). + The final timeScale of a non-timeScaleIndependent tween is: + Unity's Time.timeScale * DOTween.timeScale * tween.timeScale + while the final timeScale of a timeScaleIndependent tween is: + DOTween.unscaledTimeScale * DOTween.timeScale * tween.timeScale + + + DOTween timeScale applied only to timeScaleIndependent tweens (default: 1). + The final timeScale of a timeScaleIndependent tween is: + DOTween.unscaledTimeScale * DOTween.timeScale * tween.timeScale + + + If TRUE, DOTween will use Time.smoothDeltaTime instead of Time.deltaTime for UpdateType.Normal and UpdateType.Late tweens + (unless they're set as timeScaleIndependent, in which case a value between the last timestep + and will be used instead). + Setting this to TRUE will lead to smoother animations. + Default: FALSE + + + If is TRUE, this indicates the max timeStep that an independent update call can last. + Setting this to TRUE will lead to smoother animations. + Default: FALSE + + + DOTween's log behaviour. + Default: LogBehaviour.ErrorsOnly + + + Used to intercept DOTween's logs. If this method isn't NULL, DOTween will call it before writing a log via Unity's own Debug log methods. + Return TRUE if you want DOTween to proceed with the log, FALSE otherwise. + This method must return a bool and accept two parameters: + - LogType: the type of Unity log that DOTween is trying to log + - object: the log message that DOTween wants to log + + + If TRUE draws path gizmos in Unity Editor (if the gizmos button is active). + Deactivate this if you want to avoid gizmos overhead while in Unity Editor + + + If TRUE activates various debug options + + + Stores the target id so it can be used to give more info in case of safeMode error capturing. + Only active if both debugMode and useSafeMode are TRUE + + + Default updateType for new tweens. + Default: UpdateType.Normal + + + Sets whether Unity's timeScale should be taken into account by default or not. + Default: false + + + Default autoPlay behaviour for new tweens. + Default: AutoPlay.All + + + Default autoKillOnComplete behaviour for new tweens. + Default: TRUE + + + Default loopType applied to all new tweens. + Default: LoopType.Restart + + + If TRUE all newly created tweens are set as recyclable, otherwise not. + Default: FALSE + + + Default ease applied to all new Tweeners (not to Sequences which always have Ease.Linear as default). + Default: Ease.InOutQuad + + + Default overshoot/amplitude used for eases + Default: 1.70158f + + + Default period used for eases + Default: 0 + + + Used internally. Assigned/removed by DOTweenComponent.Create/DestroyInstance + + + + Must be called once, before the first ever DOTween call/reference, + otherwise it will be called automatically and will use default options. + Calling it a second time won't have any effect. + You can chain SetCapacity to this method, to directly set the max starting size of Tweeners and Sequences: + DOTween.Init(false, false, LogBehaviour.Default).SetCapacity(100, 20); + + If TRUE all new tweens will be set for recycling, meaning that when killed, + instead of being destroyed, they will be put in a pool and reused instead of creating new tweens. This option allows you to avoid + GC allocations by reusing tweens, but you will have to take care of tween references, since they might result active + even if they were killed (since they might have been respawned and are now being used for other tweens). + If you want to automatically set your tween references to NULL when a tween is killed + you can use the OnKill callback like this: + .OnKill(()=> myTweenReference = null) + You can change this setting at any time by changing the static property, + or you can set the recycling behaviour for each tween separately, using: + SetRecyclable(bool recyclable) + Default: FALSE + If TRUE makes tweens slightly slower but safer, automatically taking care of a series of things + (like targets becoming null while a tween is playing). + You can change this setting at any time by changing the static property. + Default: FALSE + Type of logging to use. + You can change this setting at any time by changing the static property. + Default: ErrorsOnly + + + + Directly sets the current max capacity of Tweeners and Sequences + (meaning how many Tweeners and Sequences can be running at the same time), + so that DOTween doesn't need to automatically increase them in case the max is reached + (which might lead to hiccups when that happens). + Sequences capacity must be less or equal to Tweeners capacity + (if you pass a low Tweener capacity it will be automatically increased to match the Sequence's). + Beware: use this method only when there are no tweens running. + + Max Tweeners capacity. + Default: 200 + Max Sequences capacity. + Default: 50 + + + + Kills all tweens, clears all cached tween pools and plugins and resets the max Tweeners/Sequences capacities to the default values. + + If TRUE also destroys DOTween's gameObject and resets its initializiation, default settings and everything else + (so that next time you use it it will need to be re-initialized) + + + + Clears all cached tween pools. + + + + + Checks all active tweens to find and remove eventually invalid ones (usually because their targets became NULL) + and returns the total number of invalid tweens found and removed. + IMPORTANT: this will cause an error on UWP platform, so don't use it there + BEWARE: this is a slightly expensive operation so use it with care + + + + + Updates all tweens that are set to . + + Manual deltaTime + Unscaled delta time (used with tweens set as timeScaleIndependent) + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a property or field to the given value using a custom plugin + The plugin to use. Each custom plugin implements a static Get() method + you'll need to call to assign the correct plugin in the correct way, like this: + CustomPlugin.Get() + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens only one axis of a Vector3 to the given value using default plugins. + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + The axis to tween + + + Tweens only the alpha of a Color to the given value using default plugins + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end value to reachThe tween's duration + + + Tweens a virtual property from the given start to the given end value + and implements a setter that allows to use that value with an external method or a lambda + Example: + To(MyMethod, 0, 12, 0.5f); + Where MyMethod is a function that accepts a float parameter (which will be the result of the virtual tween) + The action to perform with the tweened value + The value to start from + The end value to reach + The duration of the virtual tween + + + + Punches a Vector3 towards the given direction and then back to the starting one + as if it was connected to the starting position via an elastic. + This tween type generates some GC allocations at startup + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The direction and strength of the punch + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. + 1 creates a full oscillation between the direction and the opposite decaying direction, + while 0 oscillates only between the starting position and the decaying direction + + + Shakes a Vector3 with the given values. + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction and behave like a random punch. + If TRUE only shakes on the X Y axis (looks better with things like cameras). + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Vector3 with the given values. + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction and behave like a random punch. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Tweens a property or field to the given values using default plugins. + Ease is applied between each segment and not as a whole. + This tween type generates some GC allocations at startup + A getter for the field or property to tween. + Example usage with lambda:()=> myProperty + A setter for the field or property to tween + Example usage with lambda:x=> myProperty = x + The end values to reach for each segment. This array must have the same length as durations + The duration of each segment. This array must have the same length as endValues + + + + Returns a new to be used for tween groups. + Mind that Sequences don't have a target applied automatically like Tweener creation shortcuts, + so if you want to be able to kill this Sequence when calling DOTween.Kill(target) you'll have to add + the target manually; you can do that directly by using the overload instead of this one + + + + + Returns a new to be used for tween groups, and allows to set a target + (because Sequences don't have their target set automatically like Tweener creation shortcuts). + That way killing/controlling tweens by target will apply to this Sequence too. + + The target of the Sequence. Relevant only for static target-based methods like DOTween.Kill(target), + useless otherwise + + + Completes all tweens and returns the number of actual tweens completed + (meaning tweens that don't have infinite loops and were not already complete) + For Sequences only: if TRUE also internal Sequence callbacks will be fired, + otherwise they will be ignored + + + Completes all tweens with the given ID or target and returns the number of actual tweens completed + (meaning the tweens that don't have infinite loops and were not already complete) + For Sequences only: if TRUE internal Sequence callbacks will be fired, + otherwise they will be ignored + + + Flips all tweens (changing their direction to forward if it was backwards and viceversa), + then returns the number of actual tweens flipped + + + Flips the tweens with the given ID or target (changing their direction to forward if it was backwards and viceversa), + then returns the number of actual tweens flipped + + + Sends all tweens to the given position (calculating also eventual loop cycles) and returns the actual tweens involved + + + Sends all tweens with the given ID or target to the given position (calculating also eventual loop cycles) + and returns the actual tweens involved + + + Kills all tweens and returns the number of actual tweens killed + If TRUE completes the tweens before killing them + + + Kills all tweens and returns the number of actual tweens killed + If TRUE completes the tweens before killing them + Eventual IDs or targets to exclude from the killing + + + Kills all tweens with the given ID or target and returns the number of actual tweens killed + If TRUE completes the tweens before killing them + + + Kills all tweens with the given target and the given ID, and returns the number of actual tweens killed + If TRUE completes the tweens before killing them + + + Pauses all tweens and returns the number of actual tweens paused + + + Pauses all tweens with the given ID or target and returns the number of actual tweens paused + (meaning the tweens that were actually playing and have been paused) + + + Plays all tweens and returns the number of actual tweens played + (meaning tweens that were not already playing or complete) + + + Plays all tweens with the given ID or target and returns the number of actual tweens played + (meaning the tweens that were not already playing or complete) + + + Plays all tweens with the given target and the given ID, and returns the number of actual tweens played + (meaning the tweens that were not already playing or complete) + + + Plays backwards all tweens and returns the number of actual tweens played + (meaning tweens that were not already started, playing backwards or rewinded) + + + Plays backwards all tweens with the given ID or target and returns the number of actual tweens played + (meaning the tweens that were not already started, playing backwards or rewinded) + + + Plays backwards all tweens with the given target and ID and returns the number of actual tweens played + (meaning the tweens that were not already started, playing backwards or rewinded) + + + Plays forward all tweens and returns the number of actual tweens played + (meaning tweens that were not already playing forward or complete) + + + Plays forward all tweens with the given ID or target and returns the number of actual tweens played + (meaning the tweens that were not already playing forward or complete) + + + Plays forward all tweens with the given target and ID and returns the number of actual tweens played + (meaning the tweens that were not already started, playing backwards or rewinded) + + + Restarts all tweens, then returns the number of actual tweens restarted + + + Restarts all tweens with the given ID or target, then returns the number of actual tweens restarted + If TRUE includes the eventual tweens delays, otherwise skips them + If >= 0 changes the startup delay of all involved tweens to this value, otherwise doesn't touch it + + + Restarts all tweens with the given target and the given ID, and returns the number of actual tweens played + (meaning the tweens that were not already playing or complete) + If TRUE includes the eventual tweens delays, otherwise skips them + If >= 0 changes the startup delay of all involved tweens to this value, otherwise doesn't touch it + + + Rewinds and pauses all tweens, then returns the number of actual tweens rewinded + (meaning tweens that were not already rewinded) + + + Rewinds and pauses all tweens with the given ID or target, then returns the number of actual tweens rewinded + (meaning the tweens that were not already rewinded) + + + Smoothly rewinds all tweens (delays excluded), then returns the number of actual tweens rewinding/rewinded + (meaning tweens that were not already rewinded). + A "smooth rewind" animates the tween to its start position, + skipping all elapsed loops (except in case of LoopType.Incremental) while keeping the animation fluent. + Note that a tween that was smoothly rewinded will have its play direction flipped + + + Smoothly rewinds all tweens (delays excluded) with the given ID or target, then returns the number of actual tweens rewinding/rewinded + (meaning the tweens that were not already rewinded). + A "smooth rewind" animates the tween to its start position, + skipping all elapsed loops (except in case of LoopType.Incremental) while keeping the animation fluent. + Note that a tween that was smoothly rewinded will have its play direction flipped + + + Toggles the play state of all tweens and returns the number of actual tweens toggled + (meaning tweens that could be played or paused, depending on the toggle state) + + + Toggles the play state of all tweens with the given ID or target and returns the number of actual tweens toggled + (meaning the tweens that could be played or paused, depending on the toggle state) + + + + Returns TRUE if a tween with the given ID or target is active. + You can also use this to know if a shortcut tween is active for a given target. + Example: + transform.DOMoveX(45, 1); // transform is automatically added as the tween target + DOTween.IsTweening(transform); // Returns true + + The target or ID to look for + If FALSE (default) returns TRUE as long as a tween for the given target/ID is active, + otherwise also requires it to be playing + + + + Returns the total number of active tweens (so both Tweeners and Sequences). + A tween is considered active if it wasn't killed, regardless if it's playing or paused + + + + + Returns the total number of active Tweeners. + A Tweener is considered active if it wasn't killed, regardless if it's playing or paused + + + + + Returns the total number of active Sequences. + A Sequence is considered active if it wasn't killed, regardless if it's playing or paused + + + + + Returns the total number of active and playing tweens. + A tween is considered as playing even if its delay is actually playing + + + + + Returns a the total number of active tweens with the given id. + + If TRUE returns only the tweens with the given ID that are currently playing + + + + Returns a list of all active tweens in a playing state. + Returns NULL if there are no active playing tweens. + Beware: each time you call this method a new list is generated, so use it for debug only + + If NULL creates a new list, otherwise clears and fills this one (and thus saves allocations) + + + + Returns a list of all active tweens in a paused state. + Returns NULL if there are no active paused tweens. + Beware: each time you call this method a new list is generated, so use it for debug only + + If NULL creates a new list, otherwise clears and fills this one (and thus saves allocations) + + + + Returns a list of all active tweens with the given id. + Returns NULL if there are no active tweens with the given id. + Beware: each time you call this method a new list is generated + + If TRUE returns only the tweens with the given ID that are currently playing + If NULL creates a new list, otherwise clears and fills this one (and thus saves allocations) + + + + Returns a list of all active tweens with the given target. + Returns NULL if there are no active tweens with the given target. + Beware: each time you call this method a new list is generated + If TRUE returns only the tweens with the given target that are currently playing + If NULL creates a new list, otherwise clears and fills this one (and thus saves allocations) + + + + + Creates virtual tweens that can be used to change other elements via their OnUpdate calls + + + + + Tweens a virtual float. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type float, called at each update + + + + Tweens a virtual int. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type int, called at each update + + + + Tweens a virtual Vector2. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type Vector3, called at each update + + + + Tweens a virtual Vector3. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type Vector3, called at each update + + + + Tweens a virtual Color. + You can add regular settings to the generated tween, + but do not use OnUpdate or you will overwrite the onVirtualUpdate parameter + + The value to start from + The value to tween to + The duration of the tween + A callback which must accept a parameter of type Color, called at each update + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + Eventual overshoot to use with Back ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + Eventual amplitude to use with Elastic easeType + Eventual period to use with Elastic easeType + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The AnimationCurve to use for ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + Eventual overshoot to use with Back ease + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The type of ease + Eventual amplitude to use with Elastic easeType + Eventual period to use with Elastic easeType + + + Returns a value based on the given ease and lifetime percentage (0 to 1) + The value to start from when lifetimePercentage is 0 + The value to reach when lifetimePercentage is 1 + The time percentage (0 to 1) at which the value should be taken + The AnimationCurve to use for ease + + + Fires the given callback after the given time. + Callback delay + Callback to fire when the delay has expired + If TRUE (default) ignores Unity's timeScale + + + + Don't assign this! It's assigned automatically when creating 0 duration tweens + + + + + Don't assign this! It's assigned automatically when setting the ease to an AnimationCurve or to a custom ease function + + + + + Allows to wrap ease method in special ways, adding extra features + + + + + Converts the given ease so that it also creates a stop-motion effect, by playing the tween at the given FPS + + FPS at which the tween should be played + Ease type + + + + Converts the given ease so that it also creates a stop-motion effect, by playing the tween at the given FPS + + FPS at which the tween should be played + AnimationCurve to use for the ease + + + + Converts the given ease so that it also creates a stop-motion effect, by playing the tween at the given FPS + + FPS at which the tween should be played + Custom ease function to use + + + + Used to allow method chaining with DOTween.Init + + + + + Directly sets the current max capacity of Tweeners and Sequences + (meaning how many Tweeners and Sequences can be running at the same time), + so that DOTween doesn't need to automatically increase them in case the max is reached + (which might lead to hiccups when that happens). + Sequences capacity must be less or equal to Tweeners capacity + (if you pass a low Tweener capacity it will be automatically increased to match the Sequence's). + Beware: use this method only when there are no tweens running. + + Max Tweeners capacity. + Default: 200 + Max Sequences capacity. + Default: 50 + + + + Behaviour that can be assigned when chaining a SetLink to a tween + + + + Pauses the tween when the link target is disabled + + + Pauses the tween when the link target is disabled, plays it when it's enabled + + + Pauses the tween when the link target is disabled, restarts it when it's enabled + + + Plays the tween when the link target is enabled + + + Restarts the tween when the link target is enabled + + + Kills the tween when the link target is disabled + + + Kills the tween when the link target is destroyed (becomes NULL). This is always active even if another behaviour is chosen + + + Completes the tween when the link target is disabled + + + Completes and kills the tween when the link target is disabled + + + Rewinds the tween (delay excluded) when the link target is disabled + + + Rewinds and kills the tween when the link target is disabled + + + + Path mode (used to determine correct LookAt orientation) + + + + Ignores the path mode (and thus LookAt behaviour) + + + Regular 3D path + + + 2D top-down path + + + 2D side-scroller path + + + + Type of path to use with DOPath tweens + + + + Linear, composed of straight segments between each waypoint + + + Curved path (which uses Catmull-Rom curves) + + + EXPERIMENTAL: Curved path (which uses Cubic Bezier curves, where each point requires two extra control points) + + + + Tweens a Vector2 along a circle. + EndValue represents the center of the circle, start and end value degrees are inside options + ChangeValue x is changeValue°, y is unused + + + + + Path control point + + + + + Path waypoints (modified by PathPlugin when setting relative end/change value or by CubicBezierDecoder) and by DOTweenPathInspector + + + + + Minimum input points necessary to create the path (doesn't correspond to actual waypoints required) + + + + + Gets the point on the path at the given percentage (0 to 1) + + The percentage (0 to 1) at which to get the point + If TRUE constant speed is taken into account, otherwise not + + + + Base interface for all tween plugins options + + + + Resets the plugin + + + + This plugin generates some GC allocations at startup + + + + + Path plugin works exclusively with Transforms + + + + + Rotation mode used with DORotate methods + + + + + Fastest way that never rotates beyond 360° + + + + + Fastest way that rotates beyond 360° + + + + + Adds the given rotation to the transform using world axis and an advanced precision mode + (like when using transform.Rotate(Space.World)). + In this mode the end value is is always considered relative + + + + + Adds the given rotation to the transform's local axis + (like when rotating an object with the "local" switch enabled in Unity's editor or using transform.Rotate(Space.Self)). + In this mode the end value is is always considered relative + + + + + Type of scramble to apply to string tweens + + + + + No scrambling of characters + + + + + A-Z + a-z + 0-9 characters + + + + + A-Z characters + + + + + a-z characters + + + + + 0-9 characters + + + + + Custom characters + + + + + Type of randomness to apply to a shake tween + + + + Default, full randomness + + + Creates a more balanced randomness that looks more harmonic + + + + Methods that extend Tween objects and allow to control or get data from them + + + + Completes the tween + + + Completes the tween + For Sequences only: if TRUE also internal Sequence callbacks will be fired, + otherwise they will be ignored + + + Optional: indicates that the tween creation has ended, to be used (optionally) as the last element of tween chaining creation.
+ This method won't do anything except in case of 0-duration tweens, + where it will complete them immediately instead of waiting for the next internal update routine + (unless they're nested in a Sequence, in which case the Sequence will still be the one in control and this method will be ignored)
+
+ + Flips the direction of this tween (backwards if it was going forward or viceversa) + + + Forces the tween to initialize its settings immediately + + + Send the tween to the given position in time + Time position to reach + (if higher than the whole tween duration the tween will simply reach its end) + If TRUE will play the tween after reaching the given position, otherwise it will pause it + + + Send the tween to the given position in time while also executing any callback between the previous time position and the new one + Time position to reach + (if higher than the whole tween duration the tween will simply reach its end) + If TRUE will play the tween after reaching the given position, otherwise it will pause it + + + Kills the tween + If TRUE completes the tween before killing it + + + + Forces this tween to update manually, regardless of the set via SetUpdate. + Note that the tween will still be subject to normal tween rules, so if for example it's paused this method will do nothing. + Also note that if you only want to update this tween instance manually you'll have to set it to anyway, + so that it's not updated automatically. + + Manual deltaTime + Unscaled delta time (used with tweens set as timeScaleIndependent) + + + Pauses the tween + + + Plays the tween + + + Sets the tween in a backwards direction and plays it + + + Sets the tween in a forward direction and plays it + + + Restarts the tween from the beginning + Ignored in case of Sequences. If TRUE includes the eventual tween delay, otherwise skips it + Ignored in case of Sequences. If >= 0 changes the startup delay to this value, otherwise doesn't touch it + + + Rewinds and pauses the tween + Ignored in case of Sequences. If TRUE includes the eventual tween delay, otherwise skips it + + + Smoothly rewinds the tween (delays excluded). + A "smooth rewind" animates the tween to its start position, + skipping all elapsed loops (except in case of LoopType.Incremental) while keeping the animation fluent. + If called on a tween who is still waiting for its delay to happen, it will simply set the delay to 0 and pause the tween. + Note that a tween that was smoothly rewinded will have its play direction flipped + + + Plays the tween if it was paused, pauses it if it was playing + + + Send a path tween to the given waypoint. + Has no effect if this is not a path tween. + BEWARE, this is a special utility method: + it works only with Linear eases. Also, the lookAt direction might be wrong after calling this and might need to be set manually + (because it relies on a smooth path movement and doesn't work well with jumps that encompass dramatic direction changes) + Waypoint index to reach + (if higher than the max waypoint index the tween will simply go to the last one) + If TRUE will play the tween after reaching the given waypoint, otherwise it will pause it + + + + Creates a yield instruction that waits until the tween is killed or complete. + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForCompletion(); + + + + + Creates a yield instruction that waits until the tween is killed or rewinded. + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForRewind(); + + + + + Creates a yield instruction that waits until the tween is killed. + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForKill(); + + + + + Creates a yield instruction that waits until the tween is killed or has gone through the given amount of loops. + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForElapsedLoops(2); + + Elapsed loops to wait for + + + + Creates a yield instruction that waits until the tween is killed or has reached the given position (loops included, delays excluded). + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForPosition(2.5f); + + Position (loops included, delays excluded) to wait for + + + + Creates a yield instruction that waits until the tween is killed or started + (meaning when the tween is set in a playing state the first time, after any eventual delay). + It can be used inside a coroutine as a yield. + Example usage:yield return myTween.WaitForStart(); + + + + Returns the total number of loops completed by this tween + + + Returns the eventual delay set for this tween + + + Returns the eventual elapsed delay set for this tween + + + Returns the duration of this tween (delays excluded). + NOTE: when using settings like SpeedBased, the duration will be recalculated when the tween starts + If TRUE returns the full duration loops included, + otherwise the duration of a single loop cycle + + + Returns the elapsed time for this tween (delays exluded) + If TRUE returns the elapsed time since startup loops included, + otherwise the elapsed time within the current loop cycle + + + Returns the elapsed percentage (0 to 1) of this tween (delays exluded) + If TRUE returns the elapsed percentage since startup loops included, + otherwise the elapsed percentage within the current loop cycle + + + Returns the elapsed percentage (0 to 1) of this tween (delays exluded), + based on a single loop, and calculating eventual backwards Yoyo loops as 1 to 0 instead of 0 to 1 + + + Returns FALSE if this tween has been killed or is NULL, TRUE otherwise. + BEWARE: if this tween is recyclable it might have been spawned again for another use and thus return TRUE anyway. + When working with recyclable tweens you should take care to know when a tween has been killed and manually set your references to NULL. + If you want to be sure your references are set to NULL when a tween is killed you can use the OnKill callback like this: + .OnKill(()=> myTweenReference = null) + + + Returns TRUE if this tween was reversed and is set to go backwards + + + NOTE: To check if a tween was simply set to go backwards see . + Returns TRUE if this tween is going backwards for any of these reasons: + - The tween was reversed and is going backwards on a straight loop + - The tween was reversed and is going backwards on an odd Yoyo loop + - The tween is going forward but on an even Yoyo loop + IMPORTANT: if used inside a tween's callback, this will return a result concerning the exact frame when it's asked, + so for example in a callback at the end of a Yoyo loop step this method will never return FALSE + because the frame will never end exactly there and the tween will already be going backwards when the callback is fired + + + Returns TRUE if the tween is complete + (silently fails and returns FALSE if the tween has been killed) + + + Returns TRUE if this tween has been initialized + + + Returns TRUE if this tween is playing + + + Returns the total number of loops set for this tween + (returns -1 if the loops are infinite) + + + + Returns a point on a path based on the given path percentage. + Returns Vector3.zero if this is not a path tween, if the tween is invalid, or if the path is not yet initialized. + A path is initialized after its tween starts, or immediately if the tween was created with the Path Editor (DOTween Pro feature). + You can force a path to be initialized by calling myTween.ForceInit(). + + Percentage of the path (0 to 1) on which to get the point + + + + Returns an array of points that can be used to draw the path. + Note that this method generates allocations, because it creates a new array. + Returns NULL if this is not a path tween, if the tween is invalid, or if the path is not yet initialized. + A path is initialized after its tween starts, or immediately if the tween was created with the Path Editor (DOTween Pro feature). + You can force a path to be initialized by calling myTween.ForceInit(). + + How many points to create for each path segment (waypoint to waypoint). + Only used in case of non-Linear paths + + + + Returns the length of a path. + Returns -1 if this is not a path tween, if the tween is invalid, or if the path is not yet initialized. + A path is initialized after its tween starts, or immediately if the tween was created with the Path Editor (DOTween Pro feature). + You can force a path to be initialized by calling myTween.ForceInit(). + + + + + Types of loop + + + + Each loop cycle restarts from the beginning + + + The tween moves forward and backwards at alternate cycles + + + Continuously increments the tween at the end of each loop cycle (A to B, B to B+(A-B), and so on), thus always moving "onward". + In case of String tweens works only if the tween is set as relative + + + + Controls other tweens as a group + + + + + Methods that extend known Unity objects and allow to directly create and control tweens from their instances + + + + Tweens a Camera's aspect to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's backgroundColor to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's farClipPlane to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's fieldOfView to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's nearClipPlane to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's orthographicSize to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's pixelRect to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Camera's rect to the given value. + Also stores the camera as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Shakes a Camera's localPosition along its relative X Y axes with the given values. + Also stores the camera as the tween's target so it can be used for filtered operations + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Camera's localPosition along its relative X Y axes with the given values. + Also stores the camera as the tween's target so it can be used for filtered operations + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Camera's localRotation. + Also stores the camera as the tween's target so it can be used for filtered operations + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Camera's localRotation. + Also stores the camera as the tween's target so it can be used for filtered operations + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Tweens a Light's color to the given value. + Also stores the light as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Light's intensity to the given value. + Also stores the light as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Light's shadowStrength to the given value. + Also stores the light as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a LineRenderer's color to the given value. + Also stores the LineRenderer as the tween's target so it can be used for filtered operations. + Note that this method requires to also insert the start colors for the tween, + since LineRenderers have no way to get them. + The start value to tween from + The end value to reachThe duration of the tween + + + Tweens a Material's color to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Material's named color property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween (like _Tint or _SpecColor) + The duration of the tween + + + Tweens a Material's named color property with the given ID to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a Material's alpha color to the given value + (will have no effect unless your material supports transparency). + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Material's alpha color to the given value + (will have no effect unless your material supports transparency). + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween (like _Tint or _SpecColor) + The duration of the tween + + + Tweens a Material's alpha color with the given ID to the given value + (will have no effect unless your material supports transparency). + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a Material's named float property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween + The duration of the tween + + + Tweens a Material's named float property with the given ID to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a Material's texture offset to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The duration of the tween + + + Tweens a Material's named texture offset property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween + The duration of the tween + + + Tweens a Material's texture scale to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The duration of the tween + + + Tweens a Material's named texture scale property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween + The duration of the tween + + + Tweens a Material's named Vector property to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The name of the material property to tween + The duration of the tween + + + Tweens a Material's named Vector property with the given ID to the given value. + Also stores the material as the tween's target so it can be used for filtered operations + The end value to reach + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a TrailRenderer's startWidth/endWidth to the given value. + Also stores the TrailRenderer as the tween's target so it can be used for filtered operations + The end startWidth to reachThe end endWidth to reach + The duration of the tween + + + Tweens a TrailRenderer's time to the given value. + Also stores the TrailRenderer as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's position to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's X position to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's Y position to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's Z position to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's localPosition to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's X localPosition to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's Y localPosition to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's Z localPosition to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's rotation to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + Rotation mode + + + Tweens a Transform's rotation to the given value using pure quaternion values. + Also stores the transform as the tween's target so it can be used for filtered operations. + PLEASE NOTE: DORotate, which takes Vector3 values, is the preferred rotation method. + This method was implemented for very special cases, and doesn't support LoopType.Incremental loops + (neither for itself nor if placed inside a LoopType.Incremental Sequence) + + The end value to reachThe duration of the tween + + + Tweens a Transform's localRotation to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + Rotation mode + + + Tweens a Transform's rotation to the given value using pure quaternion values. + Also stores the transform as the tween's target so it can be used for filtered operations. + PLEASE NOTE: DOLocalRotate, which takes Vector3 values, is the preferred rotation method. + This method was implemented for very special cases, and doesn't support LoopType.Incremental loops + (neither for itself nor if placed inside a LoopType.Incremental Sequence) + + The end value to reachThe duration of the tween + + + Tweens a Transform's localScale to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's localScale uniformly to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's X localScale to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's Y localScale to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's Z localScale to the given value. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Transform's rotation so that it will look towards the given world position. + Also stores the transform as the tween's target so it can be used for filtered operations + The position to look atThe duration of the tween + Eventual axis constraint for the rotation + The vector that defines in which direction up is (default: Vector3.up) + + + EXPERIMENTAL Tweens a Transform's rotation so that it will look towards the given world position, + while also updating the lookAt position every frame + (contrary to which calculates the lookAt rotation only once, when the tween starts). + Also stores the transform as the tween's target so it can be used for filtered operations + The position to look atThe duration of the tween + Eventual axis constraint for the rotation + The vector that defines in which direction up is (default: Vector3.up) + + + Punches a Transform's localPosition towards the given direction and then back to the starting one + as if it was connected to the starting position via an elastic. + The direction and strength of the punch (added to the Transform's current position) + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. + 1 creates a full oscillation between the punch direction and the opposite direction, + while 0 oscillates only between the punch and the start position + If TRUE the tween will smoothly snap all values to integers + + + Punches a Transform's localScale towards the given size and then back to the starting one + as if it was connected to the starting scale via an elastic. + The punch strength (added to the Transform's current scale) + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting size when bouncing backwards. + 1 creates a full oscillation between the punch scale and the opposite scale, + while 0 oscillates only between the punch scale and the start scale + + + Punches a Transform's localRotation towards the given size and then back to the starting one + as if it was connected to the starting rotation via an elastic. + The punch strength (added to the Transform's current rotation) + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting rotation when bouncing backwards. + 1 creates a full oscillation between the punch rotation and the opposite rotation, + while 0 oscillates only between the punch and the start rotation + + + Shakes a Transform's localPosition with the given values. + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the tween will smoothly snap all values to integers + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localPosition with the given values. + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the tween will smoothly snap all values to integers + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localRotation. + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localRotation. + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localScale. + The duration of the tween + The shake strength + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Shakes a Transform's localScale. + The duration of the tween + The shake strength on each axis + Indicates how much will the shake vibrate + Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + Setting it to 0 will shake along a single direction. + If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + Randomness mode + + + Tweens a Transform's position to the given value, while also applying a jump effect along the Y axis. + Returns a Sequence instead of a Tweener. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reach + Power of the jump (the max height of the jump is represented by this plus the final Y offset) + Total number of jumps + The duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's localPosition to the given value, while also applying a jump effect along the Y axis. + Returns a Sequence instead of a Tweener. + Also stores the transform as the tween's target so it can be used for filtered operations + The end value to reach + Power of the jump (the max height of the jump is represented by this plus the final Y offset) + Total number of jumps + The duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's position through the given path waypoints, using the chosen path algorithm. + Also stores the transform as the tween's target so it can be used for filtered operations + The waypoints to go through + The duration of the tween + The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + The path mode: 3D, side-scroller 2D, top-down 2D + The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. + Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + The color of the path (shown when gizmos are active in the Play panel and the tween is running) + + + Tweens a Transform's localPosition through the given path waypoints, using the chosen path algorithm. + Also stores the transform as the tween's target so it can be used for filtered operations + The waypoint to go through + The duration of the tween + The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + The path mode: 3D, side-scroller 2D, top-down 2D + The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. + Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + The color of the path (shown when gizmos are active in the Play panel and the tween is running) + + + IMPORTANT: Unless you really know what you're doing, you should use the overload that accepts a Vector3 array instead. + Tweens a Transform's position via the given path. + Also stores the transform as the tween's target so it can be used for filtered operations + The path to use + The duration of the tween + The path mode: 3D, side-scroller 2D, top-down 2D + + + IMPORTANT: Unless you really know what you're doing, you should use the overload that accepts a Vector3 array instead. + Tweens a Transform's localPosition via the given path. + Also stores the transform as the tween's target so it can be used for filtered operations + The path to use + The duration of the tween + The path mode: 3D, side-scroller 2D, top-down 2D + + + Tweens a Tween's timeScale to the given value. + Also stores the Tween as the tween's target so it can be used for filtered operations + The end value to reachThe duration of the tween + + + Tweens a Light's color to the given value, + in a way that allows other DOBlendableColor tweens to work together on the same target, + instead than fight each other as multiple DOColor would do. + Also stores the Light as the tween's target so it can be used for filtered operations + The value to tween toThe duration of the tween + + + Tweens a Material's color to the given value, + in a way that allows other DOBlendableColor tweens to work together on the same target, + instead than fight each other as multiple DOColor would do. + Also stores the Material as the tween's target so it can be used for filtered operations + The value to tween toThe duration of the tween + + + Tweens a Material's named color property to the given value, + in a way that allows other DOBlendableColor tweens to work together on the same target, + instead than fight each other as multiple DOColor would do. + Also stores the Material as the tween's target so it can be used for filtered operations + The value to tween to + The name of the material property to tween (like _Tint or _SpecColor) + The duration of the tween + + + Tweens a Material's named color property with the given ID to the given value, + in a way that allows other DOBlendableColor tweens to work together on the same target, + instead than fight each other as multiple DOColor would do. + Also stores the Material as the tween's target so it can be used for filtered operations + The value to tween to + The ID of the material property to tween (also called nameID in Unity's manual) + The duration of the tween + + + Tweens a Transform's position BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableMove tweens to work together on the same target, + instead than fight each other as multiple DOMove would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + Tweens a Transform's localPosition BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableMove tweens to work together on the same target, + instead than fight each other as multiple DOMove would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + If TRUE the tween will smoothly snap all values to integers + + + EXPERIMENTAL METHOD - Tweens a Transform's rotation BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableRotate tweens to work together on the same target, + instead than fight each other as multiple DORotate would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + Rotation mode + + + EXPERIMENTAL METHOD - Tweens a Transform's lcoalRotation BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableRotate tweens to work together on the same target, + instead than fight each other as multiple DORotate would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + Rotation mode + + + Punches a Transform's localRotation BY the given value and then back to the starting one + as if it was connected to the starting rotation via an elastic. Does it in a way that allows other + DOBlendableRotate tweens to work together on the same target + The punch strength (added to the Transform's current rotation) + The duration of the tween + Indicates how much will the punch vibrate + Represents how much (0 to 1) the vector will go beyond the starting rotation when bouncing backwards. + 1 creates a full oscillation between the punch rotation and the opposite rotation, + while 0 oscillates only between the punch and the start rotation + + + Tweens a Transform's localScale BY the given value (as if you chained a SetRelative), + in a way that allows other DOBlendableScale tweens to work together on the same target, + instead than fight each other as multiple DOScale would do. + Also stores the transform as the tween's target so it can be used for filtered operations + The value to tween byThe duration of the tween + + + + Completes all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens completed + (meaning the tweens that don't have infinite loops and were not already complete) + + For Sequences only: if TRUE also internal Sequence callbacks will be fired, + otherwise they will be ignored + + + + Completes all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens completed + (meaning the tweens that don't have infinite loops and were not already complete) + + For Sequences only: if TRUE also internal Sequence callbacks will be fired, + otherwise they will be ignored + + + + Kills all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens killed. + + If TRUE completes the tween before killing it + + + + Kills all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens killed. + + If TRUE completes the tween before killing it + + + + Flips the direction (backwards if it was going forward or viceversa) of all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens flipped. + + + + + Flips the direction (backwards if it was going forward or viceversa) of all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens flipped. + + + + + Sends to the given position all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens involved. + + Time position to reach + (if higher than the whole tween duration the tween will simply reach its end) + If TRUE will play the tween after reaching the given position, otherwise it will pause it + + + + Sends to the given position all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens involved. + + Time position to reach + (if higher than the whole tween duration the tween will simply reach its end) + If TRUE will play the tween after reaching the given position, otherwise it will pause it + + + + Pauses all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens paused. + + + + + Pauses all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens paused. + + + + + Plays all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays backwards all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays backwards all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays forward all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Plays forward all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens played. + + + + + Restarts all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens restarted. + + + + + Restarts all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens restarted. + + + + + Rewinds all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens rewinded. + + + + + Rewinds all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens rewinded. + + + + + Smoothly rewinds all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens rewinded. + + + + + Smoothly rewinds all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens rewinded. + + + + + Toggles the paused state (plays if it was paused, pauses if it was playing) of all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens involved. + + + + + Toggles the paused state (plays if it was paused, pauses if it was playing) of all tweens that have this target as a reference + (meaning tweens that were started from this target, or that had this target added as an Id) + and returns the total number of tweens involved. + + + + + This class serves only as a utility class to store tween settings to apply on multiple tweens. + It is in no way needed otherwise, since you can directly apply tween settings to a tween via chaining + + + + A variable you can eventually Clear and reuse when needed, + to avoid instantiating TweenParams objects + + + Creates a new TweenParams object, which you can use to store tween settings + to pass to multiple tweens via myTween.SetAs(myTweenParms) + + + Clears and resets this TweenParams instance using default values, + so it can be reused without instantiating another one + + + Sets the autoKill behaviour of the tween. + Has no effect if the tween has already started + If TRUE the tween will be automatically killed when complete + + + Sets an ID for the tween, which can then be used as a filter with DOTween's static methods. + The ID to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets an ID for the tween, which can then be used as a filter with DOTween's static methods. + The ID to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets an ID for the tween, which can then be used as a filter with DOTween's static methods. + The ID to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets the target for the tween, which can then be used as a filter with DOTween's static methods. + IMPORTANT: use it with caution. If you just want to set an ID for the tween use SetId instead. + When using shorcuts the shortcut target is already assigned as the tween's target, + so using this method will overwrite it and prevent shortcut-operations like myTarget.DOPause from working correctly. + The target to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets the looping options for the tween. + Has no effect if the tween has already started + Number of cycles to play (-1 for infinite - will be converted to 1 in case the tween is nested in a Sequence) + Loop behaviour type (default: LoopType.Restart) + + + Sets the ease of the tween. + If applied to Sequences eases the whole sequence animation + Eventual overshoot or amplitude to use with Back or Elastic easeType (default is 1.70158) + Eventual period to use with Elastic easeType (default is 0) + + + Sets the ease of the tween using an AnimationCurve. + If applied to Sequences eases the whole sequence animation + + + Sets the ease of the tween using a custom ease function. + If applied to Sequences eases the whole sequence animation + + + Sets the recycling behaviour for the tween. + If TRUE the tween will be recycled after being killed, otherwise it will be destroyed. + + + Sets the update type to the one defined in DOTween.defaultUpdateType (UpdateType.Normal unless changed) + and lets you choose if it should be independent from Unity's Time.timeScale + If TRUE the tween will ignore Unity's Time.timeScale + + + Sets the type of update (default or independent) for the tween + The type of update (default: UpdateType.Normal) + If TRUE the tween will ignore Unity's Time.timeScale + + + Sets the onStart callback for the tween. + Called the first time the tween is set in a playing state, after any eventual delay + + + Sets the onPlay callback for the tween. + Called when the tween is set in a playing state, after any eventual delay. + Also called each time the tween resumes playing from a paused state + + + Sets the onRewind callback for the tween. + Called when the tween is rewinded, + either by calling Rewind or by reaching the start position while playing backwards. + Rewinding a tween that is already rewinded will not fire this callback + + + Sets the onUpdate callback for the tween. + Called each time the tween updates + + + Sets the onStepComplete callback for the tween. + Called the moment the tween completes one loop cycle, even when going backwards + + + Sets the onComplete callback for the tween. + Called the moment the tween reaches its final forward position, loops included + + + Sets the onKill callback for the tween. + Called the moment the tween is killed + + + Sets the onWaypointChange callback for the tween. + Called when a path tween reaches a new waypoint + + + Sets a delayed startup for the tween. + Has no effect on Sequences or if the tween has already started + + + If isRelative is TRUE sets the tween as relative + (the endValue will be calculated as startValue + endValue instead than being used directly). + Has no effect on Sequences or if the tween has already started + + + If isSpeedBased is TRUE sets the tween as speed based + (the duration will represent the number of units the tween moves x second). + Has no effect on Sequences, nested tweens, or if the tween has already started + + + + Methods that extend Tween objects and allow to set their parameters + + + + Sets the autoKill behaviour of the tween to TRUE. + Has no effect if the tween has already started or if it's added to a Sequence + + + Sets the autoKill behaviour of the tween. + Has no effect if the tween has already started or if it's added to a Sequence + If TRUE the tween will be automatically killed when complete + + + Sets an ID for the tween (), which can then be used as a filter with DOTween's static methods. + The ID to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets a string ID for the tween (), which can then be used as a filter with DOTween's static methods. + Filtering via string is 2X faster than using an object as an ID (using the alternate obejct overload) + The string ID to assign to this tween. + + + Sets an int ID for the tween (), which can then be used as a filter with DOTween's static methods. + Filtering via int is 4X faster than via object, 2X faster than via string (using the alternate object/string overloads) + The int ID to assign to this tween. + + + Allows to link this tween to a GameObject + so that it will be automatically killed when the GameObject is destroyed. + Has no effect if the tween is added to a Sequence + The link target (unrelated to the target set via SetTarget) + + + Allows to link this tween to a GameObject and assign a behaviour depending on it. + This will also automatically kill the tween when the GameObject is destroyed. + Has no effect if the tween is added to a Sequence + The link target (unrelated to the target set via SetTarget) + The behaviour to use ( is always evaluated even if you choose another one) + + + Sets the target for the tween, which can then be used as a filter with DOTween's static methods. + IMPORTANT: use it with caution. If you just want to set an ID for the tween use SetId instead. + When using shorcuts the shortcut target is already assigned as the tween's target, + so using this method will overwrite it and prevent shortcut-operations like myTarget.DOPause from working correctly. + The target to assign to this tween. Can be an int, a string, an object or anything else. + + + Sets the looping options for the tween. + Has no effect if the tween has already started + Number of cycles to play (-1 for infinite - will be converted to 1 in case the tween is nested in a Sequence) + + + Sets the looping options for the tween. + Has no effect if the tween has already started + Number of cycles to play (-1 for infinite - will be converted to 1 in case the tween is nested in a Sequence) + Loop behaviour type (default: LoopType.Restart) + + + Sets the ease of the tween. + If applied to Sequences eases the whole sequence animation + + + Sets the ease of the tween. + If applied to Sequences eases the whole sequence animation + + Eventual overshoot to use with Back or Flash ease (default is 1.70158 - 1 for Flash). + In case of Flash ease it must be an intenger and sets the total number of flashes that will happen. + Using an even number will complete the tween on the starting value, while an odd one will complete it on the end value. + + + + Sets the ease of the tween. + If applied to Sequences eases the whole sequence animation + Eventual amplitude to use with Elastic easeType or overshoot to use with Flash easeType (default is 1.70158 - 1 for Flash). + In case of Flash ease it must be an integer and sets the total number of flashes that will happen. + Using an even number will complete the tween on the starting value, while an odd one will complete it on the end value. + + Eventual period to use with Elastic or Flash easeType (default is 0). + In case of Flash ease it indicates the power in time of the ease, and must be between -1 and 1. + 0 is balanced, 1 weakens the ease with time, -1 starts the ease weakened and gives it power towards the end. + + + + Sets the ease of the tween using an AnimationCurve. + If applied to Sequences eases the whole sequence animation + + + Sets the ease of the tween using a custom ease function (which must return a value between 0 and 1). + If applied to Sequences eases the whole sequence animation + + + Allows the tween to be recycled after being killed. + + + Sets the recycling behaviour for the tween. + If TRUE the tween will be recycled after being killed, otherwise it will be destroyed. + + + Sets the update type to UpdateType.Normal and lets you choose if it should be independent from Unity's Time.timeScale + If TRUE the tween will ignore Unity's Time.timeScale + + + Sets the type of update for the tween + The type of update (defalt: UpdateType.Normal) + + + Sets the type of update for the tween and lets you choose if it should be independent from Unity's Time.timeScale + The type of update + If TRUE the tween will ignore Unity's Time.timeScale + + + EXPERIMENTAL: inverts this tween, so that it will play from the end to the beginning + (playing it backwards will actually play it from the beginning to the end). + Has no effect if the tween has already started or if it's added to a Sequence + + + EXPERIMENTAL: inverts this tween, so that it will play from the end to the beginning + (playing it backwards will actually play it from the beginning to the end). + Has no effect if the tween has already started or if it's added to a Sequence + If TRUE the tween will be inverted, otherwise it won't + + + Sets the onStart callback for the tween, clearing any previous onStart callback that was set. + Called the first time the tween is set in a playing state, after any eventual delay + + + Sets the onPlay callback for the tween, clearing any previous onPlay callback that was set. + Called when the tween is set in a playing state, after any eventual delay. + Also called each time the tween resumes playing from a paused state + + + Sets the onPause callback for the tween, clearing any previous onPause callback that was set. + Called when the tween state changes from playing to paused. + If the tween has autoKill set to FALSE, this is called also when the tween reaches completion. + + + Sets the onRewind callback for the tween, clearing any previous onRewind callback that was set. + Called when the tween is rewinded, + either by calling Rewind or by reaching the start position while playing backwards. + Rewinding a tween that is already rewinded will not fire this callback + + + Sets the onUpdate callback for the tween, clearing any previous onUpdate callback that was set. + Called each time the tween updates + + + Sets the onStepComplete callback for the tween, clearing any previous onStepComplete callback that was set. + Called the moment the tween completes one loop cycle, even when going backwards + + + Sets the onComplete callback for the tween, clearing any previous onComplete callback that was set. + Called the moment the tween reaches its final forward position, loops included + + + Sets the onKill callback for the tween, clearing any previous onKill callback that was set. + Called the moment the tween is killed + + + Sets the onWaypointChange callback for the tween, clearing any previous onWaypointChange callback that was set. + Called when a path tween's current waypoint changes + + + Sets the parameters of the tween (id, ease, loops, delay, timeScale, callbacks, etc) as the parameters of the given one. + Doesn't copy specific SetOptions settings: those will need to be applied manually each time. + Has no effect if the tween has already started. + NOTE: the tween's target will not be changed + Tween from which to copy the parameters + + + Sets the parameters of the tween (id, ease, loops, delay, timeScale, callbacks, etc) as the parameters of the given TweenParams. + Has no effect if the tween has already started. + TweenParams from which to copy the parameters + + + Adds the given tween to the end of the Sequence. + Has no effect if the Sequence has already started + The tween to append + + + Adds the given tween to the beginning of the Sequence, pushing forward the other nested content. + Has no effect if the Sequence has already started + The tween to prepend + + + Inserts the given tween at the same time position of the last tween, callback or interval added to the Sequence. + Note that, in case of a Join after an interval, the insertion time will be the time where the interval starts, not where it finishes. + Has no effect if the Sequence has already started + + + Inserts the given tween at the given time position in the Sequence, + automatically adding an interval if needed. + Has no effect if the Sequence has already started + The time position where the tween will be placed + The tween to insert + + + Adds the given interval to the end of the Sequence. + Has no effect if the Sequence has already started + The interval duration + + + Adds the given interval to the beginning of the Sequence, pushing forward the other nested content. + Has no effect if the Sequence has already started + The interval duration + + + Adds the given callback to the end of the Sequence. + Has no effect if the Sequence has already started + The callback to append + + + Adds the given callback to the beginning of the Sequence, pushing forward the other nested content. + Has no effect if the Sequence has already started + The callback to prepend + + + Inserts the given callback at the same time position of the last tween, callback or interval added to the Sequence. + Note that, in case of a Join after an interval, the insertion time will be the time where the interval starts, not where it finishes. + Has no effect if the Sequence has already started + /// <param name="callback">The callback to prepend</param> + + + Inserts the given callback at the given time position in the Sequence, + automatically adding an interval if needed. + Has no effect if the Sequence has already started + The time position where the callback will be placed + The callback to insert + + + Changes a TO tween into a FROM tween: sets the current target's position as the tween's endValue + then immediately sends the target to the previously set endValue. + + + Changes a TO tween into a FROM tween: sets the current target's position as the tween's endValue + then immediately sends the target to the previously set endValue. + If TRUE the FROM value will be calculated as relative to the current one + + + Changes a TO tween into a FROM tween: sets the current value of the target as the endValue, + and the previously passed endValue as the actual startValue. + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM value will be calculated as relative to the current one + + + Changes a TO tween into a FROM tween: sets the tween's starting value to the given one + and eventually sets the tween's target to that value immediately. + Value to start from + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM/TO values will be calculated as relative to the current ones + + + Changes a TO tween into a FROM tween: sets the tween's starting value to the given one + and eventually sets the tween's target to that value immediately. + Alpha value to start from (in case of Fade tweens) + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM/TO values will be calculated as relative to the current ones + + + Changes a TO tween into a FROM tween: sets the tween's starting value to the given one + and eventually sets the tween's target to that value immediately. + Value to start from (in case of Vector tweens that act on a single coordinate or scale tweens) + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM/TO values will be calculated as relative to the current ones + + + Changes a TO tween into a FROM tween: sets the tween's starting value to the given one + and eventually sets the tween's target to that value immediately. + Value to start from (in case of Vector tweens that act on a single coordinate or scale tweens) + If TRUE sets the target to from value immediately, otherwise waits for the tween to start + If TRUE the FROM/TO values will be calculated as relative to the current ones + + + Sets a delayed startup for the tween. + In case of Sequences behaves the same as , + which means the delay will repeat in case of loops (while with tweens it's ignored after the first loop cycle). + Has no effect if the tween has already started + + + EXPERIMENTAL: implemented in v1.2.340. + Sets a delayed startup for the tween with options to choose how the delay is applied in case of Sequences. + Has no effect if the tween has already started + Only used by types: If FALSE sets the delay as a one-time occurrence + (defaults to this for types), + otherwise as a Sequence interval which will repeat at the beginning of every loop cycle + + + Sets the tween as relative + (the endValue will be calculated as startValue + endValue instead than being used directly). + Has no effect on Sequences or if the tween has already started + + + If isRelative is TRUE sets the tween as relative + (the endValue will be calculated as startValue + endValue instead than being used directly). + Has no effect on Sequences or if the tween has already started + + + If isSpeedBased is TRUE sets the tween as speed based + (the duration will represent the number of units the tween moves x second). + Has no effect on Sequences, nested tweens, or if the tween has already started + + + If isSpeedBased is TRUE sets the tween as speed based + (the duration will represent the number of units the tween moves x second). + Has no effect on Sequences, nested tweens, or if the tween has already started + + + Options for float tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector2 tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector2 tweens + Selecting an axis will tween the vector only on that axis, leaving the others untouched + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector3 tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector3 tweens + Selecting an axis will tween the vector only on that axis, leaving the others untouched + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector4 tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector4 tweens + Selecting an axis will tween the vector only on that axis, leaving the others untouched + If TRUE the tween will smoothly snap all values to integers + + + Options for Quaternion tweens + If TRUE (default) the rotation will take the shortest route, and will not rotate more than 360°. + If FALSE the rotation will be fully accounted. Is always FALSE if the tween is set as relative + + + Options for Color tweens + If TRUE only the alpha value of the color will be tweened + + + Options for Vector4 tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector4 tweens + If TRUE, rich text will be interpreted correctly while animated, + otherwise all tags will be considered as normal text + The type of scramble to use, if any + A string containing the characters to use for scrambling. + Use as many characters as possible (minimum 10) because DOTween uses a fast scramble mode which gives better results with more characters. + Leave it to NULL to use default ones + + + Options for Vector3Array tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for Vector3Array tweens + If TRUE the tween will smoothly snap all values to integers + + + Options for ShapeCircle tweens + If TRUE the center you set in the DOTween.To method will be considered as relative + to the starting position of the target + If TRUE the tween will smoothly snap all values to integers + + + Options for Path tweens (created via the DOPath shortcut) + The eventual movement axis to lock. You can input multiple axis if you separate them like this: + AxisConstrain.X | AxisConstraint.Y + The eventual rotation axis to lock. You can input multiple axis if you separate them like this: + AxisConstrain.X | AxisConstraint.Y + + + Options for Path tweens (created via the DOPath shortcut) + If TRUE the path will be automatically closed + The eventual movement axis to lock. You can input multiple axis if you separate them like this: + AxisConstrain.X | AxisConstraint.Y + The eventual rotation axis to lock. You can input multiple axis if you separate them like this: + AxisConstrain.X | AxisConstraint.Y + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target towards the given position. + Must be chained directly to the tween creation method or to a SetOptions + The position to look at + The eventual direction to consider as "forward". + If left to NULL defaults to the regular forward side of the transform + The vector that defines in which direction up is (default: Vector3.up) + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target towards the given position with options to keep the Z rotation stable. + Must be chained directly to the tween creation method or to a SetOptions + The position to look at + If TRUE doesn't rotate the target along the Z axis + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target towards another transform. + Must be chained directly to the tween creation method or to a SetOptions + The transform to look at + The eventual direction to consider as "forward". + If left to NULL defaults to the regular forward side of the transform + The vector that defines in which direction up is (default: Vector3.up) + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target towards another transform with options to keep the Z rotation stable. + Must be chained directly to the tween creation method or to a SetOptions + The transform to look at + If TRUE doesn't rotate the target along the Z axis + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the target to the path, with the given lookAhead. + Must be chained directly to the tween creation method or to a SetOptions + The percentage of lookAhead to use (0 to 1) + The eventual direction to consider as "forward". + If left to NULL defaults to the regular forward side of the transform + The vector that defines in which direction up is (default: Vector3.up) + + + Additional LookAt options for Path tweens (created via the DOPath shortcut). + Orients the path with options to keep the Z rotation stable. + Must be chained directly to the tween creation method or to a SetOptions + The percentage of lookAhead to use (0 to 1) + If TRUE doesn't rotate the target along the Z axis + + + + Types of log behaviours + + + + Log only warnings and errors + + + Log warnings, errors and additional infos + + + Log only errors + + + + Indicates either a Tweener or a Sequence + + + + TimeScale for the tween + + + If TRUE the tween will play backwards + + + If TRUE the tween is completely inverted but without playing it backwards + (play backwards will actually play the tween in the original direction) + + + Object ID (usable for filtering with DOTween static methods). Can be anything except a string or an int + (use or for those) + + + String ID (usable for filtering with DOTween static methods). 2X faster than using an object id + + + Int ID (usable for filtering with DOTween static methods). 4X faster than using an object id, 2X faster than using a string id. + Default is -999 so avoid using an ID like that or it will capture all unset intIds + + + Tween target (usable for filtering with DOTween static methods). Automatically set by tween creation shortcuts + + + Called when the tween is set in a playing state, after any eventual delay. + Also called each time the tween resumes playing from a paused state + + + Called when the tween state changes from playing to paused. + If the tween has autoKill set to FALSE, this is called also when the tween reaches completion. + + + Called when the tween is rewinded, + either by calling Rewind or by reaching the start position while playing backwards. + Rewinding a tween that is already rewinded will not fire this callback + + + Called each time the tween updates + + + Called the moment the tween completes one loop cycle + + + Called the moment the tween reaches completion (loops included) + + + Called the moment the tween is killed + + + Called when a path tween's current waypoint changes + + + Tweeners-only (ignored by Sequences), returns TRUE if the tween was set as relative + + + + Set by SetTarget if DOTween's Debug Mode is on (see DOTween Utility Panel -> "Store GameObject's ID" debug option + + + + FALSE when tween is (or should be) despawned - set only by TweenManager + + + Gets and sets the time position (loops included, delays excluded) of the tween + + + Returns TRUE if the tween is set to loop (either a set number of times or infinitely) + + + TRUE after the tween was set in a play state at least once, AFTER any delay is elapsed + + + Time position within a single loop cycle + + + + Animates a single value + + + + Changes the start value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new start value + If bigger than 0 applies it as the new tween duration + + + Changes the end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new end value + If bigger than 0 applies it as the new tween duration + If TRUE the start value will become the current target's value, otherwise it will stay the same + + + Changes the end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new end value + If TRUE the start value will become the current target's value, otherwise it will stay the same + + + Changes the start and end value of a tween and rewinds it (without pausing it). + Has no effect with tweens that are inside Sequences + The new start value + The new end value + If bigger than 0 applies it as the new tween duration + + + + Used internally + + + + + Update type + + + + Updates every frame during Update calls + + + Updates every frame during LateUpdate calls + + + Updates using FixedUpdate calls + + + Updates using manual update calls + +
+
diff --git a/Assets/Plugins/Demigiant/DOTween/DOTween.XML.meta b/Assets/Plugins/Demigiant/DOTween/DOTween.XML.meta new file mode 100644 index 0000000..7a866b5 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/DOTween.XML.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 34192c5e0d14aee43a0e86cc4823268a +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/DOTween.dll b/Assets/Plugins/Demigiant/DOTween/DOTween.dll new file mode 100644 index 0000000000000000000000000000000000000000..57112d34beef1b8bb4f78782d752c7bef2452e0c GIT binary patch literal 175616 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 + + + DOTweenEditor + + + + + Contains compatibility methods taken from DemiEditor (for when DOTween is without it) + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Warning: some versions of this method don't have the includeInactive parameter so it won't be taken into account + + + + + Starts the update loop of tween in the editor. Has no effect during playMode. + + Eventual callback to call after every update + + + + Stops the update loop and clears the onPreviewUpdated callback. + + If TRUE also resets the tweened objects to their original state. + Note that this works by calling Rewind on all tweens, so it will work correctly + only if you have a single tween type per object and it wasn't killed + If TRUE also kills any cached tween + + + + Readies the tween for editor preview by setting its UpdateType to Manual plus eventual extra settings. + + The tween to ready + If TRUE (recommended) removes all callbacks (OnComplete/Rewind/etc) + If TRUE prevents the tween from being auto-killed at completion + If TRUE starts playing the tween immediately + + + Full major version + first minor version (ex: 2018.1f) + + + Major version + + + First minor version (ex: in 2018.1 it would be 1) + + + + Checks that the given editor texture use the correct import settings, + and applies them if they're incorrect. + + + + + Returns TRUE if setup is required + + + + + Returns TRUE if the file/directory at the given path exists. + + Path, relative to Unity's project folder + + + + + Converts the given project-relative path to a full path, + with backward (\) slashes). + + + + + Converts the given full path to a path usable with AssetDatabase methods + (relative to Unity's project folder, and with the correct Unity forward (/) slashes). + + + + + Connects to a asset. + If the asset already exists at the given path, loads it and returns it. + Otherwise, either returns NULL or automatically creates it before loading and returning it + (depending on the given parameters). + + Asset type + File path (relative to Unity's project folder) + If TRUE and the requested asset doesn't exist, forces its creation + + + + Full path for the given loaded assembly, assembly file included + + + + + Adds the given global define if it's not already present + + + + + Removes the given global define if it's present + + + + + Returns TRUE if the given global define is present in all the + or only in the given , depending on passed parameters. + + + to use. Leave NULL to check in all of them. + + + + Not used as menu item anymore, but as a utility function + + + + Full major version + first minor version (ex: 2018.1f) + + + Major version + + + First minor version (ex: in 2018.1 it would be 1) + + + diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML.meta b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML.meta new file mode 100644 index 0000000..7cec113 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 2e2c6224d345d9249acfa6e8ef40bb2d +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll new file mode 100644 index 0000000000000000000000000000000000000000..4911a86b3feaad8d13ba041e50ed77832d813651 GIT binary patch literal 70656 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%0Dh6|eO%in;`_q3bA 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.meta b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.meta new file mode 100644 index 0000000..53590f3 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 45d5034162d6cf04dbe46da84fc7d074 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 1 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs.meta new file mode 100644 index 0000000..a81ba5f --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 0034ebae0c2a9344e897db1160d71b6d +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..d06fc7c3e49fb705b19f50a23884e11e08fd6e89 GIT binary patch literal 1565 zcmV+&2IBdNP)pK&q+iZU-R{R_dCD)yXSsA=iKiWUaHS%xglyYZad)#h+<5;*}0 zNm4;#XNMU$Zj;|vsJ23aE-5O{$8uo1iN`?c(v%ev86gvrQJJtDUgxox^bsB@>w%Sv@Z{F3?7c1><;yj*g<&fQ;rHj}CCd5!B9uJ9iB}?8sX9 z0l}mbA`+6NSzvKr7orW|#Qq*|(_H8{K}SN-b6PMMr68BfK|728UnV4rbuENZG2Z=Z5Wu9k@Z ztFhSr_^u&Go2vR`!G?lmnDf^U%@^vc&8BfCWA&5;S^i0KcuQ?}kJ(Z3^ukf69xF;y zhTjIduJg}*jhXlo$g+|CIjkSftK3odtF^Ij{rKV$Cnn9$)I>`OWpR2BZvMLfc!?KG z`Ygj57^xT!Rkoeb;;a>--p1*pKcW45EApC=r9;lR-6-kL1bPPs&3JrJ`3>IVgWG}u zrp-R@PdWz2X;89OBJXFclQSuKH%hu+=km#Rb8S^yF>)=)yvW|npJ`O9bTXp9hsHlb znp{n43g)Eywa^bS0=L=}#fV_6`pc{T=00UOIql`_gv<&0h%GG1sFbh_*L zqP^;2G6HL$uEjx);7q^Pe;Vac1Sb6of8vi>KZaIU-M!xHLy7h)J?TTTtlXuy)v(S-r9V9I7cw) zBJ@dWbWCbJy!KBwxl~8X#1q??E z(FRaBcRnf^OG3xEWE{XiDJhYPVBV54Q*B2`fK%)r4bJp zv@(2PX=l*%^bG!@&}Ku`gi%4ta5WNM0#2BfuE7?N_gS0ljFV#0yW1U1N=~9Q$*7V9 zs*5|&bg|QQt;WLQDrER5jfAhm2W6wJag5au!96_|(2Th-DB`E<_rUdkM#GW4COG!3 z`K~-?KL;C^l|r|5RUE^pEPvtTLR^K!B04D#hpLNGOCz;*Z|Rx&7b{!rLVU{NI)eH5 zyg0@a6A$elUi>gA6@P$cWD53gSzVnTr*}j6sd4;47Sd19E6U{>QXP%UxLJ2^hjTS@ z6ZIq2+r)$@>IAiS(jN5U4r-m;p98e&wn5+}NTri*S7~M1@c0mh@Mz$FrSMzj$u5?< P00000NkvXXu0mjftl$Bl literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png.meta new file mode 100644 index 0000000..61c3cce --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenIcon.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 8da095e39e9b4df488dfd436f81116d6 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 128 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..7cd74c1a26df1a45564c7a0e21c62d0ef3af2fd1 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{!3Opi<85sBugD~Uq{1quc!H=FU zjv*3LlT#WP(iF^Cl2R3(u|Mi}s1fft&-^joZ3WZ(2Ug1Y!S$8-a*li}_21XqSnvJ# z@Y+`2=i8W`Zfg*cV81TuZmqUr`JI~8M}9x(m1v%HMLo`ySuokJ?%Vq7{C4$+ST-HH z5`RuO<@s#=8XoVy+lF)YEaxg?4vAr1(jlM1>Tx0PF<0}pFUf679a{7Ee==}5`qQz? zuIUa#(3byge21?t-^6oqTDwHc&iz0s`zDdQwtGKbESsPtIM1KwqFB4+nW=frYn!|7 zvs(U9y->(A=TFZ3t)>6Hv^;B{u+A(fd3smW;eIaTDS0KOITHVv7#gf%Y$mkMJ`MCd NgQu&X%Q~loCICTRfS>>X literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png.meta new file mode 100644 index 0000000..c343a61 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/DOTweenMiniIcon.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 61521df2e071645488ba3d05e49289ae +timeCreated: 1602317874 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png new file mode 100644 index 0000000000000000000000000000000000000000..e29d02fe18b777b1d316feb647b339803c5126de GIT binary patch literal 4409 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png.meta new file mode 100644 index 0000000..7ca1911 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 7051dba417b3d53409f2918f1ea4938d +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 256 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e48db5ef7a2b83eff50d6e3b5fe9ba3bcd4a5015 GIT binary patch literal 4429 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 TqmFO~00000NkvXXu0mjf{EM6C literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png.meta new file mode 100644 index 0000000..f12a1a7 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Footer_dark.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 519694efe2bb2914788b151fbd8c01f4 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d710d719075150879b1ee76680af87791c4d3b3 GIT binary patch literal 22787 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 QE#Li`lK-oJv9mh=KQ4fgsQ>@~ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg.meta b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg.meta new file mode 100644 index 0000000..26e4255 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Editor/Imgs/Header.jpg.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 78a59ca99f8987941adb61f9e14a06a7 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 512 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules.meta b/Assets/Plugins/Demigiant/DOTween/Modules.meta new file mode 100644 index 0000000..24cd2ac --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 143604b8bad857d47a6f7cc7a533e2dc +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs new file mode 100644 index 0000000..d958ae0 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs @@ -0,0 +1,198 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true // MODULE_MARKER +using System; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; +using UnityEngine; +using UnityEngine.Audio; // Required for AudioMixer + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleAudio + { + #region Shortcuts + + #region Audio + + /// Tweens an AudioSource's volume to the given value. + /// Also stores the AudioSource as the tween's target so it can be used for filtered operations + /// The end value to reach (0 to 1)The duration of the tween + public static TweenerCore DOFade(this AudioSource target, float endValue, float duration) + { + if (endValue < 0) endValue = 0; + else if (endValue > 1) endValue = 1; + TweenerCore t = DOTween.To(() => target.volume, x => target.volume = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an AudioSource's pitch to the given value. + /// Also stores the AudioSource as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOPitch(this AudioSource target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.pitch, x => target.pitch = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region AudioMixer + + /// Tweens an AudioMixer's exposed float to the given value. + /// Also stores the AudioMixer as the tween's target so it can be used for filtered operations. + /// Note that you need to manually expose a float in an AudioMixerGroup in order to be able to tween it from an AudioMixer. + /// Name given to the exposed float to set + /// The end value to reachThe duration of the tween + public static TweenerCore DOSetFloat(this AudioMixer target, string floatName, float endValue, float duration) + { + TweenerCore t = DOTween.To(()=> { + float currVal; + target.GetFloat(floatName, out currVal); + return currVal; + }, x=> target.SetFloat(floatName, x), endValue, duration); + t.SetTarget(target); + return t; + } + + #region Operation Shortcuts + + /// + /// Completes all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens completed + /// (meaning the tweens that don't have infinite loops and were not already complete) + /// + /// For Sequences only: if TRUE also internal Sequence callbacks will be fired, + /// otherwise they will be ignored + public static int DOComplete(this AudioMixer target, bool withCallbacks = false) + { + return DOTween.Complete(target, withCallbacks); + } + + /// + /// Kills all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens killed. + /// + /// If TRUE completes the tween before killing it + public static int DOKill(this AudioMixer target, bool complete = false) + { + return DOTween.Kill(target, complete); + } + + /// + /// Flips the direction (backwards if it was going forward or viceversa) of all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens flipped. + /// + public static int DOFlip(this AudioMixer target) + { + return DOTween.Flip(target); + } + + /// + /// Sends to the given position all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens involved. + /// + /// Time position to reach + /// (if higher than the whole tween duration the tween will simply reach its end) + /// If TRUE will play the tween after reaching the given position, otherwise it will pause it + public static int DOGoto(this AudioMixer target, float to, bool andPlay = false) + { + return DOTween.Goto(target, to, andPlay); + } + + /// + /// Pauses all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens paused. + /// + public static int DOPause(this AudioMixer target) + { + return DOTween.Pause(target); + } + + /// + /// Plays all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlay(this AudioMixer target) + { + return DOTween.Play(target); + } + + /// + /// Plays backwards all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlayBackwards(this AudioMixer target) + { + return DOTween.PlayBackwards(target); + } + + /// + /// Plays forward all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens played. + /// + public static int DOPlayForward(this AudioMixer target) + { + return DOTween.PlayForward(target); + } + + /// + /// Restarts all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens restarted. + /// + public static int DORestart(this AudioMixer target) + { + return DOTween.Restart(target); + } + + /// + /// Rewinds all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens rewinded. + /// + public static int DORewind(this AudioMixer target) + { + return DOTween.Rewind(target); + } + + /// + /// Smoothly rewinds all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens rewinded. + /// + public static int DOSmoothRewind(this AudioMixer target) + { + return DOTween.SmoothRewind(target); + } + + /// + /// Toggles the paused state (plays if it was paused, pauses if it was playing) of all tweens that have this target as a reference + /// (meaning tweens that were started from this target, or that had this target added as an Id) + /// and returns the total number of tweens involved. + /// + public static int DOTogglePause(this AudioMixer target) + { + return DOTween.TogglePause(target); + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta new file mode 100644 index 0000000..50aa010 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b766d08851589514b97afb23c6f30a70 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs new file mode 100644 index 0000000..2ab3775 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs @@ -0,0 +1,146 @@ +using UnityEngine; + +#if false || EPO_DOTWEEN // MODULE_MARKER + +using EPOOutline; +using DG.Tweening.Plugins.Options; +using DG.Tweening; +using DG.Tweening.Core; + +namespace DG.Tweening +{ + public static class DOTweenModuleEPOOutline + { + public static int DOKill(this SerializedPass target, bool complete) + { + return DOTween.Kill(target, complete); + } + + public static TweenerCore DOFloat(this SerializedPass target, string propertyName, float endValue, float duration) + { + var tweener = DOTween.To(() => target.GetFloat(propertyName), x => target.SetFloat(propertyName, x), endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + public static TweenerCore DOFade(this SerializedPass target, string propertyName, float endValue, float duration) + { + var tweener = DOTween.ToAlpha(() => target.GetColor(propertyName), x => target.SetColor(propertyName, x), endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + public static TweenerCore DOColor(this SerializedPass target, string propertyName, Color endValue, float duration) + { + var tweener = DOTween.To(() => target.GetColor(propertyName), x => target.SetColor(propertyName, x), endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + public static TweenerCore DOVector(this SerializedPass target, string propertyName, Vector4 endValue, float duration) + { + var tweener = DOTween.To(() => target.GetVector(propertyName), x => target.SetVector(propertyName, x), endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + public static TweenerCore DOFloat(this SerializedPass target, int propertyId, float endValue, float duration) + { + var tweener = DOTween.To(() => target.GetFloat(propertyId), x => target.SetFloat(propertyId, x), endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + public static TweenerCore DOFade(this SerializedPass target, int propertyId, float endValue, float duration) + { + var tweener = DOTween.ToAlpha(() => target.GetColor(propertyId), x => target.SetColor(propertyId, x), endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + public static TweenerCore DOColor(this SerializedPass target, int propertyId, Color endValue, float duration) + { + var tweener = DOTween.To(() => target.GetColor(propertyId), x => target.SetColor(propertyId, x), endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + public static TweenerCore DOVector(this SerializedPass target, int propertyId, Vector4 endValue, float duration) + { + var tweener = DOTween.To(() => target.GetVector(propertyId), x => target.SetVector(propertyId, x), endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + public static int DOKill(this Outlinable.OutlineProperties target, bool complete = false) + { + return DOTween.Kill(target, complete); + } + + public static int DOKill(this Outliner target, bool complete = false) + { + return DOTween.Kill(target, complete); + } + + /// + /// Controls the alpha (transparency) of the outline + /// + public static TweenerCore DOFade(this Outlinable.OutlineProperties target, float endValue, float duration) + { + var tweener = DOTween.ToAlpha(() => target.Color, x => target.Color = x, endValue, duration); + tweener.SetOptions(true).SetTarget(target); + return tweener; + } + + /// + /// Controls the color of the outline + /// + public static TweenerCore DOColor(this Outlinable.OutlineProperties target, Color endValue, float duration) + { + var tweener = DOTween.To(() => target.Color, x => target.Color = x, endValue, duration); + tweener.SetOptions(false).SetTarget(target); + return tweener; + } + + /// + /// Controls the amount of blur applied to the outline + /// + public static TweenerCore DOBlurShift(this Outlinable.OutlineProperties target, float endValue, float duration, bool snapping = false) + { + var tweener = DOTween.To(() => target.BlurShift, x => target.BlurShift = x, endValue, duration); + tweener.SetOptions(snapping).SetTarget(target); + return tweener; + } + + /// + /// Controls the amount of blur applied to the outline + /// + public static TweenerCore DOBlurShift(this Outliner target, float endValue, float duration, bool snapping = false) + { + var tweener = DOTween.To(() => target.BlurShift, x => target.BlurShift = x, endValue, duration); + tweener.SetOptions(snapping).SetTarget(target); + return tweener; + } + + /// + /// Controls the amount of dilation applied to the outline + /// + public static TweenerCore DODilateShift(this Outlinable.OutlineProperties target, float endValue, float duration, bool snapping = false) + { + var tweener = DOTween.To(() => target.DilateShift, x => target.DilateShift = x, endValue, duration); + tweener.SetOptions(snapping).SetTarget(target); + return tweener; + } + + /// + /// Controls the amount of dilation applied to the outline + /// + public static TweenerCore DODilateShift(this Outliner target, float endValue, float duration, bool snapping = false) + { + var tweener = DOTween.To(() => target.DilateShift, x => target.DilateShift = x, endValue, duration); + tweener.SetOptions(snapping).SetTarget(target); + return tweener; + } + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs.meta new file mode 100644 index 0000000..4b8991f --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e944529dcaee98f4e9498d80e541d93e +timeCreated: 1602593330 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs new file mode 100644 index 0000000..08b0700 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs @@ -0,0 +1,216 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true // MODULE_MARKER +using System; +using DG.Tweening.Core; +using DG.Tweening.Core.Enums; +using DG.Tweening.Plugins; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModulePhysics + { + #region Shortcuts + + #region Rigidbody + + /// Tweens a Rigidbody's position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMove(this Rigidbody target, Vector3 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's X position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveX(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector3(endValue, 0, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's Y position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveY(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, endValue, 0), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's Z position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveZ(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, 0, endValue), duration); + t.SetOptions(AxisConstraint.Z, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's rotation to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// Rotation mode + public static TweenerCore DORotate(this Rigidbody target, Vector3 endValue, float duration, RotateMode mode = RotateMode.Fast) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, endValue, duration); + t.SetTarget(target); + t.plugOptions.rotateMode = mode; + return t; + } + + /// Tweens a Rigidbody's rotation so that it will look towards the given position. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The position to look atThe duration of the tween + /// Eventual axis constraint for the rotation + /// The vector that defines in which direction up is (default: Vector3.up) + public static TweenerCore DOLookAt(this Rigidbody target, Vector3 towards, float duration, AxisConstraint axisConstraint = AxisConstraint.None, Vector3? up = null) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, towards, duration) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetLookAt); + t.plugOptions.axisConstraint = axisConstraint; + t.plugOptions.up = (up == null) ? Vector3.up : (Vector3)up; + return t; + } + + #region Special + + /// Tweens a Rigidbody's position to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJump(this Rigidbody target, Vector3 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, jumpPower, 0), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(() => startPosY = target.position.y); + s.Append(DOTween.To(() => target.position, target.MovePosition, new Vector3(endValue.x, 0, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(DOTween.To(() => target.position, target.MovePosition, new Vector3(0, 0, endValue.z), duration) + .SetOptions(AxisConstraint.Z, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + yTween.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector3 pos = target.position; + pos.y += DOVirtual.EasedValue(0, offsetY, yTween.ElapsedPercentage(), Ease.OutQuad); + target.MovePosition(pos); + }); + return s; + } + + /// Tweens a Rigidbody's position through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations. + /// NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOPath. + /// The waypoints to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOPath( + this Rigidbody target, Vector3[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, target.MovePosition, new Path(pathType, path, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + return t; + } + /// Tweens a Rigidbody's localPosition through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations + /// NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOLocalPath. + /// The waypoint to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOLocalPath( + this Rigidbody target, Vector3[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), new Path(pathType, path, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + // Used by path editor when creating the actual tween, so it can pass a pre-compiled path + internal static TweenerCore DOPath( + this Rigidbody target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, target.MovePosition, path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + return t; + } + internal static TweenerCore DOLocalPath( + this Rigidbody target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta new file mode 100644 index 0000000..0ce0d75 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dae9aa560b4242648a3affa2bfabc365 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs new file mode 100644 index 0000000..8ce2b56 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs @@ -0,0 +1,193 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true // MODULE_MARKER +using System; +using DG.Tweening.Core; +using DG.Tweening.Plugins; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModulePhysics2D + { + #region Shortcuts + + #region Rigidbody2D Shortcuts + + /// Tweens a Rigidbody2D's position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMove(this Rigidbody2D target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody2D's X position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveX(this Rigidbody2D target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector2(endValue, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody2D's Y position to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveY(this Rigidbody2D target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector2(0, endValue), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody2D's rotation to the given value. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DORotate(this Rigidbody2D target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, endValue, duration); + t.SetTarget(target); + return t; + } + + #region Special + + /// Tweens a Rigidbody2D's position to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations. + /// IMPORTANT: a rigidbody2D can't be animated in a jump arc using MovePosition, so the tween will directly set the position + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJump(this Rigidbody2D target, Vector2 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.position, x => target.position = x, new Vector2(0, jumpPower), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(() => startPosY = target.position.y); + s.Append(DOTween.To(() => target.position, x => target.position = x, new Vector2(endValue.x, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + yTween.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector3 pos = target.position; + pos.y += DOVirtual.EasedValue(0, offsetY, yTween.ElapsedPercentage(), Ease.OutQuad); + target.MovePosition(pos); + }); + return s; + } + + /// Tweens a Rigidbody2D's position through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations. + /// NOTE: to tween a Rigidbody2D correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOPath. + /// The waypoints to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOPath( + this Rigidbody2D target, Vector2[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + int len = path.Length; + Vector3[] path3D = new Vector3[len]; + for (int i = 0; i < len; ++i) path3D[i] = path[i]; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, x => target.MovePosition(x), new Path(pathType, path3D, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody2D = true; + t.plugOptions.mode = pathMode; + return t; + } + /// Tweens a Rigidbody2D's localPosition through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody2D as the tween's target so it can be used for filtered operations + /// NOTE: to tween a Rigidbody2D correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOLocalPath. + /// The waypoint to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOLocalPath( + this Rigidbody2D target, Vector2[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + int len = path.Length; + Vector3[] path3D = new Vector3[len]; + for (int i = 0; i < len; ++i) path3D[i] = path[i]; + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), new Path(pathType, path3D, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody2D = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + // Used by path editor when creating the actual tween, so it can pass a pre-compiled path + internal static TweenerCore DOPath( + this Rigidbody2D target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, x => target.MovePosition(x), path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody2D = true; + t.plugOptions.mode = pathMode; + return t; + } + internal static TweenerCore DOLocalPath( + this Rigidbody2D target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody2D = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta new file mode 100644 index 0000000..ca9ed29 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 230fe34542e175245ba74b4659dae700 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs new file mode 100644 index 0000000..72afb7b --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs @@ -0,0 +1,93 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true // MODULE_MARKER +using System; +using UnityEngine; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleSprite + { + #region Shortcuts + + #region SpriteRenderer + + /// Tweens a SpriteRenderer's color to the given value. + /// Also stores the spriteRenderer as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this SpriteRenderer target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Material's alpha color to the given value. + /// Also stores the spriteRenderer as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this SpriteRenderer target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a SpriteRenderer's color using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this SpriteRenderer target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + + #endregion + + #region Blendables + + #region SpriteRenderer + + /// Tweens a SpriteRenderer's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the SpriteRenderer as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this SpriteRenderer target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta new file mode 100644 index 0000000..a0c67c4 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 188918ab119d93148aa0de59ccf5286b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs new file mode 100644 index 0000000..2381f4c --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs @@ -0,0 +1,662 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true // MODULE_MARKER + +using System; +using System.Globalization; +using UnityEngine; +using UnityEngine.UI; +using DG.Tweening.Core; +using DG.Tweening.Core.Enums; +using DG.Tweening.Plugins; +using DG.Tweening.Plugins.Options; +using Outline = UnityEngine.UI.Outline; +using Text = UnityEngine.UI.Text; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModuleUI + { + #region Shortcuts + + #region CanvasGroup + + /// Tweens a CanvasGroup's alpha color to the given value. + /// Also stores the canvasGroup as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this CanvasGroup target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.alpha, x => target.alpha = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region Graphic + + /// Tweens an Graphic's color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this Graphic target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an Graphic's alpha color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this Graphic target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region Image + + /// Tweens an Image's color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this Image target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an Image's alpha color to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this Image target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an Image's fillAmount to the given value. + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The end value to reach (0 to 1)The duration of the tween + public static TweenerCore DOFillAmount(this Image target, float endValue, float duration) + { + if (endValue > 1) endValue = 1; + else if (endValue < 0) endValue = 0; + TweenerCore t = DOTween.To(() => target.fillAmount, x => target.fillAmount = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens an Image's colors using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this Image target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + + #endregion + + #region LayoutElement + + /// Tweens an LayoutElement's flexibleWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOFlexibleSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => new Vector2(target.flexibleWidth, target.flexibleHeight), x => { + target.flexibleWidth = x.x; + target.flexibleHeight = x.y; + }, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens an LayoutElement's minWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMinSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => new Vector2(target.minWidth, target.minHeight), x => { + target.minWidth = x.x; + target.minHeight = x.y; + }, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens an LayoutElement's preferredWidth/Height to the given value. + /// Also stores the LayoutElement as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOPreferredSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => new Vector2(target.preferredWidth, target.preferredHeight), x => { + target.preferredWidth = x.x; + target.preferredHeight = x.y; + }, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + #endregion + + #region Outline + + /// Tweens a Outline's effectColor to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this Outline target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.effectColor, x => target.effectColor = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Outline's effectColor alpha to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this Outline target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.effectColor, x => target.effectColor = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Outline's effectDistance to the given value. + /// Also stores the Outline as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOScale(this Outline target, Vector2 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.effectDistance, x => target.effectDistance = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region RectTransform + + /// Tweens a RectTransform's anchoredPosition to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPosX(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(endValue, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPosY(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(0, endValue), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's anchoredPosition3D to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos3D(this RectTransform target, Vector3 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition3D X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos3DX(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(endValue, 0, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition3D Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos3DY(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(0, endValue, 0), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + /// Tweens a RectTransform's anchoredPosition3D Z to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorPos3DZ(this RectTransform target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchoredPosition3D, x => target.anchoredPosition3D = x, new Vector3(0, 0, endValue), duration); + t.SetOptions(AxisConstraint.Z, snapping).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's anchorMax to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorMax(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchorMax, x => target.anchorMax = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's anchorMin to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOAnchorMin(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.anchorMin, x => target.anchorMin = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's pivot to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOPivot(this RectTransform target, Vector2 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.pivot, x => target.pivot = x, endValue, duration); + t.SetTarget(target); + return t; + } + /// Tweens a RectTransform's pivot X to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOPivotX(this RectTransform target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.pivot, x => target.pivot = x, new Vector2(endValue, 0), duration); + t.SetOptions(AxisConstraint.X).SetTarget(target); + return t; + } + /// Tweens a RectTransform's pivot Y to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOPivotY(this RectTransform target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.pivot, x => target.pivot = x, new Vector2(0, endValue), duration); + t.SetOptions(AxisConstraint.Y).SetTarget(target); + return t; + } + + /// Tweens a RectTransform's sizeDelta to the given value. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOSizeDelta(this RectTransform target, Vector2 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.sizeDelta, x => target.sizeDelta = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Punches a RectTransform's anchoredPosition towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The direction and strength of the punch (added to the RectTransform's current position) + /// The duration of the tween + /// Indicates how much will the punch vibrate + /// Represents how much (0 to 1) the vector will go beyond the starting position when bouncing backwards. + /// 1 creates a full oscillation between the punch direction and the opposite direction, + /// while 0 oscillates only between the punch and the start position + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOPunchAnchorPos(this RectTransform target, Vector2 punch, float duration, int vibrato = 10, float elasticity = 1, bool snapping = false) + { + return DOTween.Punch(() => target.anchoredPosition, x => target.anchoredPosition = x, punch, duration, vibrato, elasticity) + .SetTarget(target).SetOptions(snapping); + } + + /// Shakes a RectTransform's anchoredPosition with the given values. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The shake strength + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the tween will smoothly snap all values to integers + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + /// Randomness mode + public static Tweener DOShakeAnchorPos(this RectTransform target, float duration, float strength = 100, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true, ShakeRandomnessMode randomnessMode = ShakeRandomnessMode.Full) + { + return DOTween.Shake(() => target.anchoredPosition, x => target.anchoredPosition = x, duration, strength, vibrato, randomness, true, fadeOut, randomnessMode) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping); + } + /// Shakes a RectTransform's anchoredPosition with the given values. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The shake strength on each axis + /// Indicates how much will the shake vibrate + /// Indicates how much the shake will be random (0 to 180 - values higher than 90 kind of suck, so beware). + /// Setting it to 0 will shake along a single direction. + /// If TRUE the tween will smoothly snap all values to integers + /// If TRUE the shake will automatically fadeOut smoothly within the tween's duration, otherwise it will not + /// Randomness mode + public static Tweener DOShakeAnchorPos(this RectTransform target, float duration, Vector2 strength, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true, ShakeRandomnessMode randomnessMode = ShakeRandomnessMode.Full) + { + return DOTween.Shake(() => target.anchoredPosition, x => target.anchoredPosition = x, duration, strength, vibrato, randomness, fadeOut, randomnessMode) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetShake).SetOptions(snapping); + } + + #region Special + + /// Tweens a RectTransform's anchoredPosition to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJumpAnchorPos(this RectTransform target, Vector2 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + + // Separate Y Tween so we can elaborate elapsedPercentage on that insted of on the Sequence + // (in case users add a delay or other elements to the Sequence) + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(0, jumpPower), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(()=> startPosY = target.anchoredPosition.y); + s.Append(DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(endValue.x, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + s.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector2 pos = target.anchoredPosition; + pos.y += DOVirtual.EasedValue(0, offsetY, s.ElapsedDirectionalPercentage(), Ease.OutQuad); + target.anchoredPosition = pos; + }); + return s; + } + + #endregion + + #endregion + + #region ScrollRect + + /// Tweens a ScrollRect's horizontal/verticalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DONormalizedPos(this ScrollRect target, Vector2 endValue, float duration, bool snapping = false) + { + return DOTween.To(() => new Vector2(target.horizontalNormalizedPosition, target.verticalNormalizedPosition), + x => { + target.horizontalNormalizedPosition = x.x; + target.verticalNormalizedPosition = x.y; + }, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a ScrollRect's horizontalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOHorizontalNormalizedPos(this ScrollRect target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.horizontalNormalizedPosition, x => target.horizontalNormalizedPosition = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + /// Tweens a ScrollRect's verticalNormalizedPosition to the given value. + /// Also stores the ScrollRect as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOVerticalNormalizedPos(this ScrollRect target, float endValue, float duration, bool snapping = false) + { + return DOTween.To(() => target.verticalNormalizedPosition, x => target.verticalNormalizedPosition = x, endValue, duration) + .SetOptions(snapping).SetTarget(target); + } + + #endregion + + #region Slider + + /// Tweens a Slider's value to the given value. + /// Also stores the Slider as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOValue(this Slider target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.value, x => target.value = x, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + #endregion + + #region Text + + /// Tweens a Text's color to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOColor(this Text target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// + /// Tweens a Text's text from one integer to another, with options for thousands separators + /// + /// The value to start from + /// The end value to reach + /// The duration of the tween + /// If TRUE (default) also adds thousands separators + /// The to use (InvariantCulture if NULL) + public static TweenerCore DOCounter( + this Text target, int fromValue, int endValue, float duration, bool addThousandsSeparator = true, CultureInfo culture = null + ){ + int v = fromValue; + CultureInfo cInfo = !addThousandsSeparator ? null : culture ?? CultureInfo.InvariantCulture; + TweenerCore t = DOTween.To(() => v, x => { + v = x; + target.text = addThousandsSeparator + ? v.ToString("N0", cInfo) + : v.ToString(); + }, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Text's alpha color to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + public static TweenerCore DOFade(this Text target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Text's text to the given value. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The end string to tween toThe duration of the tween + /// If TRUE (default), rich text will be interpreted correctly while animated, + /// otherwise all tags will be considered as normal text + /// The type of scramble mode to use, if any + /// A string containing the characters to use for scrambling. + /// Use as many characters as possible (minimum 10) because DOTween uses a fast scramble mode which gives better results with more characters. + /// Leave it to NULL (default) to use default ones + public static TweenerCore DOText(this Text target, string endValue, float duration, bool richTextEnabled = true, ScrambleMode scrambleMode = ScrambleMode.None, string scrambleChars = null) + { + if (endValue == null) { + if (Debugger.logPriority > 0) Debugger.LogWarning("You can't pass a NULL string to DOText: an empty string will be used instead to avoid errors"); + endValue = ""; + } + TweenerCore t = DOTween.To(() => target.text, x => target.text = x, endValue, duration); + t.SetOptions(richTextEnabled, scrambleMode, scrambleChars) + .SetTarget(target); + return t; + } + + #endregion + + #region Blendables + + #region Graphic + + /// Tweens a Graphic's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Graphic as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Graphic target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #region Image + + /// Tweens a Image's color to the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Image as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Image target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #region Text + + /// Tweens a Text's color BY the given value, + /// in a way that allows other DOBlendableColor tweens to work together on the same target, + /// instead than fight each other as multiple DOColor would do. + /// Also stores the Text as the tween's target so it can be used for filtered operations + /// The value to tween toThe duration of the tween + public static Tweener DOBlendableColor(this Text target, Color endValue, float duration) + { + endValue = endValue - target.color; + Color to = new Color(0, 0, 0, 0); + return DOTween.To(() => to, x => { + Color diff = x - to; + to = x; + target.color += diff; + }, endValue, duration) + .Blendable().SetTarget(target); + } + + #endregion + + #endregion + + #region Shapes + + /// Tweens a RectTransform's anchoredPosition so that it draws a circle around the given center. + /// Also stores the RectTransform as the tween's target so it can be used for filtered operations. + /// IMPORTANT: SetFrom(value) requires a instead of a float, where the X property represents the "from degrees value" + /// Circle-center/pivot around which to rotate (in UI anchoredPosition coordinates) + /// The end value degrees to reach (to rotate counter-clockwise pass a negative value) + /// The duration of the tween + /// If TRUE the coordinates will be considered as relative to the target's current anchoredPosition + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOShapeCircle( + this RectTransform target, Vector2 center, float endValueDegrees, float duration, bool relativeCenter = false, bool snapping = false + ) + { + TweenerCore t = DOTween.To( + CirclePlugin.Get(), () => target.anchoredPosition, x => target.anchoredPosition = x, center, duration + ); + t.SetOptions(endValueDegrees, relativeCenter, snapping).SetTarget(target); + return t; + } + + #endregion + + #endregion + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + public static class Utils + { + /// + /// Converts the anchoredPosition of the first RectTransform to the second RectTransform, + /// taking into consideration offset, anchors and pivot, and returns the new anchoredPosition + /// + public static Vector2 SwitchToRectTransform(RectTransform from, RectTransform to) + { + Vector2 localPoint; + Vector2 fromPivotDerivedOffset = new Vector2(from.rect.width * 0.5f + from.rect.xMin, from.rect.height * 0.5f + from.rect.yMin); + Vector2 screenP = RectTransformUtility.WorldToScreenPoint(null, from.position); + screenP += fromPivotDerivedOffset; + RectTransformUtility.ScreenPointToLocalPointInRectangle(to, screenP, null, out localPoint); + Vector2 pivotDerivedOffset = new Vector2(to.rect.width * 0.5f + to.rect.xMin, to.rect.height * 0.5f + to.rect.yMin); + return to.anchoredPosition + localPoint - pivotDerivedOffset; + } + } + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta new file mode 100644 index 0000000..60d55ef --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a060394c03331a64392db53a10e7f2d1 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs new file mode 100644 index 0000000..8f818ba --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs @@ -0,0 +1,389 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +using System; +using UnityEngine; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; +//#if UNITY_2018_1_OR_NEWER && (NET_4_6 || NET_STANDARD_2_0) +//using Task = System.Threading.Tasks.Task; +//#endif + +#pragma warning disable 1591 +namespace DG.Tweening +{ + /// + /// Shortcuts/functions that are not strictly related to specific Modules + /// but are available only on some Unity versions + /// + public static class DOTweenModuleUnityVersion + { + #region Material + + /// Tweens a Material's color using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to useThe duration of the tween + public static Sequence DOGradientColor(this Material target, Gradient gradient, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.color = c.color; + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + /// Tweens a Material's named color property using the given gradient + /// (NOTE 1: only uses the colors of the gradient, not the alphas - NOTE 2: creates a Sequence, not a Tweener). + /// Also stores the image as the tween's target so it can be used for filtered operations + /// The gradient to use + /// The name of the material property to tween (like _Tint or _SpecColor) + /// The duration of the tween + public static Sequence DOGradientColor(this Material target, Gradient gradient, string property, float duration) + { + Sequence s = DOTween.Sequence(); + GradientColorKey[] colors = gradient.colorKeys; + int len = colors.Length; + for (int i = 0; i < len; ++i) { + GradientColorKey c = colors[i]; + if (i == 0 && c.time <= 0) { + target.SetColor(property, c.color); + continue; + } + float colorDuration = i == len - 1 + ? duration - s.Duration(false) // Verifies that total duration is correct + : duration * (i == 0 ? c.time : c.time - colors[i - 1].time); + s.Append(target.DOColor(c.color, property, colorDuration).SetEase(Ease.Linear)); + } + s.SetTarget(target); + return s; + } + + #endregion + + #region CustomYieldInstructions + + /// + /// Returns a that waits until the tween is killed or complete. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForCompletion(true); + /// + public static CustomYieldInstruction WaitForCompletion(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForCompletion(t); + } + + /// + /// Returns a that waits until the tween is killed or rewinded. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForRewind(); + /// + public static CustomYieldInstruction WaitForRewind(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForRewind(t); + } + + /// + /// Returns a that waits until the tween is killed. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForKill(); + /// + public static CustomYieldInstruction WaitForKill(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForKill(t); + } + + /// + /// Returns a that waits until the tween is killed or has gone through the given amount of loops. + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForElapsedLoops(2); + /// + /// Elapsed loops to wait for + public static CustomYieldInstruction WaitForElapsedLoops(this Tween t, int elapsedLoops, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForElapsedLoops(t, elapsedLoops); + } + + /// + /// Returns a that waits until the tween is killed + /// or has reached the given time position (loops included, delays excluded). + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForPosition(2.5f); + /// + /// Position (loops included, delays excluded) to wait for + public static CustomYieldInstruction WaitForPosition(this Tween t, float position, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForPosition(t, position); + } + + /// + /// Returns a that waits until the tween is killed or started + /// (meaning when the tween is set in a playing state the first time, after any eventual delay). + /// It can be used inside a coroutine as a yield. + /// Example usage:yield return myTween.WaitForStart(); + /// + public static CustomYieldInstruction WaitForStart(this Tween t, bool returnCustomYieldInstruction) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return null; + } + return new DOTweenCYInstruction.WaitForStart(t); + } + + #endregion + +#if UNITY_2018_1_OR_NEWER + #region Unity 2018.1 or Newer + + #region Material + + /// Tweens a Material's named texture offset property with the given ID to the given value. + /// Also stores the material as the tween's target so it can be used for filtered operations + /// The end value to reach + /// The ID of the material property to tween (also called nameID in Unity's manual) + /// The duration of the tween + public static TweenerCore DOOffset(this Material target, Vector2 endValue, int propertyID, float duration) + { + if (!target.HasProperty(propertyID)) { + if (Debugger.logPriority > 0) Debugger.LogMissingMaterialProperty(propertyID); + return null; + } + TweenerCore t = DOTween.To(() => target.GetTextureOffset(propertyID), x => target.SetTextureOffset(propertyID, x), endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a Material's named texture scale property with the given ID to the given value. + /// Also stores the material as the tween's target so it can be used for filtered operations + /// The end value to reach + /// The ID of the material property to tween (also called nameID in Unity's manual) + /// The duration of the tween + public static TweenerCore DOTiling(this Material target, Vector2 endValue, int propertyID, float duration) + { + if (!target.HasProperty(propertyID)) { + if (Debugger.logPriority > 0) Debugger.LogMissingMaterialProperty(propertyID); + return null; + } + TweenerCore t = DOTween.To(() => target.GetTextureScale(propertyID), x => target.SetTextureScale(propertyID, x), endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region .NET 4.6 or Newer + +#if UNITY_2018_1_OR_NEWER && (NET_4_6 || NET_STANDARD_2_0) + + #region Async Instructions + + /// + /// Returns an async that waits until the tween is killed or complete. + /// It can be used inside an async operation. + /// Example usage:await myTween.WaitForCompletion(); + /// + public static async System.Threading.Tasks.Task AsyncWaitForCompletion(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && !t.IsComplete()) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed or rewinded. + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForRewind(); + /// + public static async System.Threading.Tasks.Task AsyncWaitForRewind(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && (!t.playedOnce || t.position * (t.CompletedLoops() + 1) > 0)) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed. + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForKill(); + /// + public static async System.Threading.Tasks.Task AsyncWaitForKill(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed or has gone through the given amount of loops. + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForElapsedLoops(); + /// + /// Elapsed loops to wait for + public static async System.Threading.Tasks.Task AsyncWaitForElapsedLoops(this Tween t, int elapsedLoops) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && t.CompletedLoops() < elapsedLoops) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed or started + /// (meaning when the tween is set in a playing state the first time, after any eventual delay). + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForPosition(); + /// + /// Position (loops included, delays excluded) to wait for + public static async System.Threading.Tasks.Task AsyncWaitForPosition(this Tween t, float position) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && t.position * (t.CompletedLoops() + 1) < position) await System.Threading.Tasks.Task.Yield(); + } + + /// + /// Returns an async that waits until the tween is killed. + /// It can be used inside an async operation. + /// Example usage:await myTween.AsyncWaitForKill(); + /// + public static async System.Threading.Tasks.Task AsyncWaitForStart(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && !t.playedOnce) await System.Threading.Tasks.Task.Yield(); + } + + #endregion +#endif + + #endregion + + #endregion +#endif + } + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ CLASSES █████████████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + public static class DOTweenCYInstruction + { + public class WaitForCompletion : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && !t.IsComplete(); + }} + readonly Tween t; + public WaitForCompletion(Tween tween) + { + t = tween; + } + } + + public class WaitForRewind : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && (!t.playedOnce || t.position * (t.CompletedLoops() + 1) > 0); + }} + readonly Tween t; + public WaitForRewind(Tween tween) + { + t = tween; + } + } + + public class WaitForKill : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active; + }} + readonly Tween t; + public WaitForKill(Tween tween) + { + t = tween; + } + } + + public class WaitForElapsedLoops : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && t.CompletedLoops() < elapsedLoops; + }} + readonly Tween t; + readonly int elapsedLoops; + public WaitForElapsedLoops(Tween tween, int elapsedLoops) + { + t = tween; + this.elapsedLoops = elapsedLoops; + } + } + + public class WaitForPosition : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && t.position * (t.CompletedLoops() + 1) < position; + }} + readonly Tween t; + readonly float position; + public WaitForPosition(Tween tween, float position) + { + t = tween; + this.position = position; + } + } + + public class WaitForStart : CustomYieldInstruction + { + public override bool keepWaiting { get { + return t.active && !t.playedOnce; + }} + readonly Tween t; + public WaitForStart(Tween tween) + { + t = tween; + } + } + } +} diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta new file mode 100644 index 0000000..290189f --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 63c02322328255542995bd02b47b0457 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs new file mode 100644 index 0000000..12a365d --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs @@ -0,0 +1,167 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +using System; +using System.Reflection; +using UnityEngine; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + /// + /// Utility functions that deal with available Modules. + /// Modules defines: + /// - DOTAUDIO + /// - DOTPHYSICS + /// - DOTPHYSICS2D + /// - DOTSPRITE + /// - DOTUI + /// Extra defines set and used for implementation of external assets: + /// - DOTWEEN_TMP ► TextMesh Pro + /// - DOTWEEN_TK2D ► 2D Toolkit + /// + public static class DOTweenModuleUtils + { + static bool _initialized; + + #region Reflection + + /// + /// Called via Reflection by DOTweenComponent on Awake + /// +#if UNITY_2018_1_OR_NEWER + [UnityEngine.Scripting.Preserve] +#endif + public static void Init() + { + if (_initialized) return; + + _initialized = true; + DOTweenExternalCommand.SetOrientationOnPath += Physics.SetOrientationOnPath; + +#if UNITY_EDITOR +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1 + UnityEditor.EditorApplication.playmodeStateChanged += PlaymodeStateChanged; +#else + UnityEditor.EditorApplication.playModeStateChanged += PlaymodeStateChanged; +#endif +#endif + } + +#if UNITY_2018_1_OR_NEWER +#pragma warning disable + [UnityEngine.Scripting.Preserve] + // Just used to preserve methods when building, never called + static void Preserver() + { + Assembly[] loadedAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + MethodInfo mi = typeof(MonoBehaviour).GetMethod("Stub"); + } +#pragma warning restore +#endif + + #endregion + +#if UNITY_EDITOR + // Fires OnApplicationPause in DOTweenComponent even when Editor is paused (otherwise it's only fired at runtime) +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1 + static void PlaymodeStateChanged() + #else + static void PlaymodeStateChanged(UnityEditor.PlayModeStateChange state) +#endif + { + if (DOTween.instance == null) return; + DOTween.instance.OnApplicationPause(UnityEditor.EditorApplication.isPaused); + } +#endif + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + public static class Physics + { + // Called via DOTweenExternalCommand callback + public static void SetOrientationOnPath(PathOptions options, Tween t, Quaternion newRot, Transform trans) + { +#if true // PHYSICS_MARKER + if (options.isRigidbody) ((Rigidbody)t.target).rotation = newRot; + else trans.rotation = newRot; +#else + trans.rotation = newRot; +#endif + } + + // Returns FALSE if the DOTween's Physics2D Module is disabled, or if there's no Rigidbody2D attached + public static bool HasRigidbody2D(Component target) + { +#if true // PHYSICS2D_MARKER + return target.GetComponent() != null; +#else + return false; +#endif + } + + #region Called via Reflection + + + // Called via Reflection by DOTweenPathInspector + // Returns FALSE if the DOTween's Physics Module is disabled, or if there's no rigidbody attached +#if UNITY_2018_1_OR_NEWER + [UnityEngine.Scripting.Preserve] +#endif + public static bool HasRigidbody(Component target) + { +#if true // PHYSICS_MARKER + return target.GetComponent() != null; +#else + return false; +#endif + } + + // Called via Reflection by DOTweenPath +#if UNITY_2018_1_OR_NEWER + [UnityEngine.Scripting.Preserve] +#endif + public static TweenerCore CreateDOTweenPathTween( + MonoBehaviour target, bool tweenRigidbody, bool isLocal, Path path, float duration, PathMode pathMode + ){ + TweenerCore t = null; + bool rBodyFoundAndTweened = false; +#if true // PHYSICS_MARKER + if (tweenRigidbody) { + Rigidbody rBody = target.GetComponent(); + if (rBody != null) { + rBodyFoundAndTweened = true; + t = isLocal + ? rBody.DOLocalPath(path, duration, pathMode) + : rBody.DOPath(path, duration, pathMode); + } + } +#endif +#if true // PHYSICS2D_MARKER + if (!rBodyFoundAndTweened && tweenRigidbody) { + Rigidbody2D rBody2D = target.GetComponent(); + if (rBody2D != null) { + rBodyFoundAndTweened = true; + t = isLocal + ? rBody2D.DOLocalPath(path, duration, pathMode) + : rBody2D.DOPath(path, duration, pathMode); + } + } +#endif + if (!rBodyFoundAndTweened) { + t = isLocal + ? target.transform.DOLocalPath(path, duration, pathMode) + : target.transform.DOPath(path, duration, pathMode); + } + return t; + } + + #endregion + } + } +} diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta new file mode 100644 index 0000000..ab62186 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7bcaf917d9cf5b84090421a5a2abe42e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTween/readme.txt b/Assets/Plugins/Demigiant/DOTween/readme.txt new file mode 100644 index 0000000..37ff7ef --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/readme.txt @@ -0,0 +1,29 @@ +DOTween and DOTween Pro are copyright (c) 2014-2018 Daniele Giardini - Demigiant + +// IMPORTANT!!! ///////////////////////////////////////////// +// Upgrading DOTween from versions older than 1.2.000 /////// +// (or DOTween Pro older than 1.0.000) ////////////////////// +------------------------------------------------------------- +If you're upgrading your project from a version of DOTween older than 1.2.000 (or DOTween Pro older than 1.0.000) please follow these instructions carefully. +1) Import the new version in the same folder as the previous one, overwriting old files. A lot of errors will appear but don't worry +2) Close and reopen Unity (and your project). This is fundamental: skipping this step will cause a bloodbath +3) Open DOTween's Utility Panel (Tools > Demigiant > DOTween Utility Panel) if it doesn't open automatically, then press "Setup DOTween...": this will run the upgrade setup +4) From the Add/Remove Modules panel that opens, activate/deactivate Modules for Unity systems and for external assets (Pro version only) + +// GET STARTED ////////////////////////////////////////////// + +- After importing a new DOTween update, select DOTween's Utility Panel from the "Tools/Demigiant" menu (if it doesn't open automatically) and press the "Setup DOTween..." button to activate/deactivate Modules. You can also access a Preferences Tab from there to choose default settings for DOTween. +- In your code, add "using DG.Tweening" to each class where you want to use DOTween. +- You're ready to tween. Check out the links below for full documentation and license info. + + +// LINKS /////////////////////////////////////////////////////// + +DOTween website (documentation, examples, etc): http://dotween.demigiant.com +DOTween license: http://dotween.demigiant.com/license.php +DOTween repository (Google Code): https://code.google.com/p/dotween/ +Demigiant website (documentation, examples, etc): http://www.demigiant.com + +// NOTES ////////////////////////////////////////////////////// + +- DOTween's Utility Panel can be found under "Tools > Demigiant > DOTween Utility Panel" and also contains other useful options, plus a tab to set DOTween's preferences \ No newline at end of file diff --git a/Assets/Plugins/Demigiant/DOTween/readme.txt.meta b/Assets/Plugins/Demigiant/DOTween/readme.txt.meta new file mode 100644 index 0000000..3799165 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTween/readme.txt.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: fccfc62abf2eb0a4db614853430894fd +TextScriptImporter: + userData: diff --git a/Assets/Prefabs.meta b/Assets/Prefabs.meta new file mode 100644 index 0000000..bbcd08f --- /dev/null +++ b/Assets/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1df3bb155d375f14bb1f46255f0c65f3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources.meta b/Assets/Resources.meta new file mode 100644 index 0000000..97bcf64 --- /dev/null +++ b/Assets/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e27871476a4ef2438c9adba85dda8be +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/DOTweenSettings.asset b/Assets/Resources/DOTweenSettings.asset new file mode 100644 index 0000000..62ebbaf --- /dev/null +++ b/Assets/Resources/DOTweenSettings.asset @@ -0,0 +1,54 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 16995157, guid: a811bde74b26b53498b4f6d872b09b6d, type: 3} + m_Name: DOTweenSettings + m_EditorClassIdentifier: + useSafeMode: 1 + safeModeOptions: + logBehaviour: 2 + nestedTweenFailureBehaviour: 0 + timeScale: 1 + unscaledTimeScale: 1 + useSmoothDeltaTime: 0 + maxSmoothUnscaledTime: 0.15 + rewindCallbackMode: 0 + showUnityEditorReport: 0 + logBehaviour: 0 + drawGizmos: 1 + defaultRecyclable: 0 + defaultAutoPlay: 3 + defaultUpdateType: 0 + defaultTimeScaleIndependent: 0 + defaultEaseType: 6 + defaultEaseOvershootOrAmplitude: 1.70158 + defaultEasePeriod: 0 + defaultAutoKill: 1 + defaultLoopType: 0 + debugMode: 0 + debugStoreTargetId: 1 + showPreviewPanel: 1 + storeSettingsLocation: 0 + modules: + showPanel: 0 + audioEnabled: 1 + physicsEnabled: 1 + physics2DEnabled: 1 + spriteEnabled: 1 + uiEnabled: 1 + textMeshProEnabled: 0 + tk2DEnabled: 0 + deAudioEnabled: 0 + deUnityExtendedEnabled: 0 + epoOutlineEnabled: 0 + createASMDEF: 0 + showPlayingTweens: 0 + showPausedTweens: 0 diff --git a/Assets/Resources/DOTweenSettings.asset.meta b/Assets/Resources/DOTweenSettings.asset.meta new file mode 100644 index 0000000..e9020f9 --- /dev/null +++ b/Assets/Resources/DOTweenSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 546ca4b8e733098498b2fb33cf9981d1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: From 834f752d70d07555ce22d65a49b3927136b5e3ce Mon Sep 17 00:00:00 2001 From: fiore Date: Thu, 13 Mar 2025 09:30:55 +0900 Subject: [PATCH 3/7] =?UTF-8?q?Coins=20Panel=20Controller=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=20=EC=8B=9C=EC=9E=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Script/Common/CoinsPanelController.cs | 135 ++++++++++++++++++ .../Common/CoinsPanelController.cs.meta | 11 ++ 2 files changed, 146 insertions(+) create mode 100644 Assets/Script/Common/CoinsPanelController.cs create mode 100644 Assets/Script/Common/CoinsPanelController.cs.meta diff --git a/Assets/Script/Common/CoinsPanelController.cs b/Assets/Script/Common/CoinsPanelController.cs new file mode 100644 index 0000000..7b9ed1e --- /dev/null +++ b/Assets/Script/Common/CoinsPanelController.cs @@ -0,0 +1,135 @@ +using System; +using UnityEngine; +using DG.Tweening; +using TMPro; +using UnityEngine.UI; + +[RequireComponent(typeof(AudioSource))] +public class CoinsPanelController : MonoBehaviour +{ + [SerializeField] private GameObject _coinsRemoveImageObject; + [SerializeField] private TMP_Text _coinsCountText; + + [SerializeField] private AudioClip _coinsRemoveAudioClip; + [SerializeField] private AudioClip _coinsAddAudioClip; + [SerializeField] private AudioClip _coinsEmptyAudioClip; + + private Color _coinsColor; + + private AudioSource _audioSource; + + private int _coinsCount; + + // 1. 코인 추가 연출 + // 2. 코인 감소 연출 + // 3. 코인 부족 연출 + + private void Awake() + { + _audioSource = GetComponent(); + _coinsColor = _coinsRemoveImageObject.GetComponent().color; + } + + private void Start() + { + _coinsRemoveImageObject.SetActive(false); + + // TODO : 코인 수량 초기화 + // InitCoinsCount(<어디선가 가져와야함!>); + } + + /// + /// Coins Panel에 코인 수 초기화 + /// + /// 코인 수 + public void InitCoinsCount(int coinsCount) + { + _coinsCount = coinsCount; + _coinsCountText.text = _coinsCount.ToString(); + } + + private void ChangeTextAnimation(bool isAdd, Action action) + { + float duration = 0.2f; + float yPos = 40f; + + _coinsCountText.rectTransform.DOAnchorPosY(-yPos, duration); + _coinsCountText.DOFade(0, duration).OnComplete(() => + { + if (isAdd) + { + var currentHeartCount = _coinsCountText.text; + _coinsCountText.text = (int.Parse(currentHeartCount) + 1).ToString(); + } + else + { + var currentHeartCount = _coinsCountText.text; + _coinsCountText.text = (int.Parse(currentHeartCount) - 1).ToString(); + } + + // Coins Panel의 Width를 글자 수에 따라 변경 + var textLength = _coinsCountText.text.Length; + GetComponent().sizeDelta = new Vector2(100 + textLength * 30f, 100f); + + // 새로운 코인 수 추가 애니메이션 + _coinsCountText.rectTransform.DOAnchorPosY(yPos, 0); + _coinsCountText.rectTransform.DOAnchorPosY(0, duration); + _coinsCountText.DOFade(1, duration).OnComplete(() => + { + action?.Invoke(); + }); + }); + } + + public void AddCoins(int coinsCount, Action action) + { + Sequence sequence = DOTween.Sequence(); + + for (int i = 0; i < coinsCount; i++) + { + sequence.AppendCallback(() => + { + ChangeTextAnimation(true, ()=> + { + // TODO : 코인 수량 업데이트 + action?.Invoke(); + }); + + // 효과음 재생 + // if (UserInformation.IsPlaySFX) + // _audioSource.PlayOneShot(_coinsAddAudioClip); + }); + sequence.AppendInterval(0.5f); + } + } + + public void EmptyCoins() + { + // 효과음 재생 + // if (UserInformation.IsPlaySFX) + // _audioSource.PlayOneShot(_coinsEmptyAudioClip); + + GetComponent().DOPunchPosition(new Vector3(20f, 0, 0), 1f, 7); + } + + public void RemoveCoins(Action action) + { + // 효과음 재생 + // if (UserInformation.IsPlaySFX) + // _audioSource.PlayOneShot(_coinsRemoveAudioClip); + + // 코인 사라지는 연출 + _coinsRemoveImageObject.SetActive(true); + _coinsRemoveImageObject.transform.localScale = Vector3.zero; + _coinsRemoveImageObject.GetComponent().color = _coinsColor; + + _coinsRemoveImageObject.transform.DOScale(3f, 1f); + _coinsRemoveImageObject.GetComponent().DOFade(0f, 1f) + .OnComplete( ()=>ChangeTextAnimation(false, ()=> + { + // 코인 수량 감소 + // GameManager.Instance.heartCount--; + action?.Invoke(); + })); // 하트 수 텍스트 떨어지는 연출 + } +} diff --git a/Assets/Script/Common/CoinsPanelController.cs.meta b/Assets/Script/Common/CoinsPanelController.cs.meta new file mode 100644 index 0000000..c5f9606 --- /dev/null +++ b/Assets/Script/Common/CoinsPanelController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eea2199565579f74994703cd3b57324b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 0797415f9ba0e857d8af6aa14bad04fc1fe0309b Mon Sep 17 00:00:00 2001 From: fiore Date: Thu, 13 Mar 2025 11:30:06 +0900 Subject: [PATCH 4/7] =?UTF-8?q?=EC=BD=94=EC=9D=B8=20=ED=8C=A8=EB=84=90=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Prefabs/Coins Panel.prefab | 16 +-- Assets/Resouces/Coins_ADD_Sound.wav | Bin 0 -> 282952 bytes Assets/Resouces/Coins_ADD_Sound.wav.meta | 23 +++ Assets/Resouces/Coins_Empty_Sound.wav | Bin 0 -> 31412 bytes Assets/Resouces/Coins_Empty_Sound.wav.meta | 23 +++ Assets/Resouces/Coins_Remove_Sound.wav | Bin 0 -> 116668 bytes Assets/Resouces/Coins_Remove_Sound.wav.meta | 23 +++ Assets/Script/Common/CoinsPanelController.cs | 38 +++-- Assets/Sprites/DegullMok-Coins.png | Bin 0 -> 7733 bytes Assets/Sprites/DegullMok-Coins.png.meta | 140 +++++++++++++++++++ 10 files changed, 243 insertions(+), 20 deletions(-) create mode 100644 Assets/Resouces/Coins_ADD_Sound.wav create mode 100644 Assets/Resouces/Coins_ADD_Sound.wav.meta create mode 100644 Assets/Resouces/Coins_Empty_Sound.wav create mode 100644 Assets/Resouces/Coins_Empty_Sound.wav.meta create mode 100644 Assets/Resouces/Coins_Remove_Sound.wav create mode 100644 Assets/Resouces/Coins_Remove_Sound.wav.meta create mode 100644 Assets/Sprites/DegullMok-Coins.png create mode 100644 Assets/Sprites/DegullMok-Coins.png.meta diff --git a/Assets/Prefabs/Coins Panel.prefab b/Assets/Prefabs/Coins Panel.prefab index f46eb6c..11abdf8 100644 --- a/Assets/Prefabs/Coins Panel.prefab +++ b/Assets/Prefabs/Coins Panel.prefab @@ -51,11 +51,11 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: eea2199565579f74994703cd3b57324b, type: 3} m_Name: m_EditorClassIdentifier: - _coinsRemoveImageObject: {fileID: 0} - _coinsCountText: {fileID: 0} - _coinsRemoveAudioClip: {fileID: 0} - _coinsAddAudioClip: {fileID: 0} - _coinsEmptyAudioClip: {fileID: 0} + _coinsRemoveImageObject: {fileID: 4198953742281733827} + _coinsCountText: {fileID: 2892066450466788586} + _coinsRemoveAudioClip: {fileID: 8300000, guid: 585a9de0fb7ee4163af5c559ba5b2364, type: 3} + _coinsAddAudioClip: {fileID: 8300000, guid: 1ec44182fa76a4b3eb1459c0a6d9a8ab, type: 3} + _coinsEmptyAudioClip: {fileID: 8300000, guid: 908a78cb991984977bea42916bed8684, type: 3} --- !u!82 &5499754916380040505 AudioSource: m_ObjectHideFlags: 0 @@ -164,7 +164,7 @@ GameObject: - component: {fileID: 4144968568495096558} - component: {fileID: 6016265620447360569} m_Layer: 5 - m_Name: Heart Remove Image + m_Name: Coins Remove Image m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -217,7 +217,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: f4100b35e05ee5742b84036e3fac9739, type: 3} + m_Sprite: {fileID: 21300000, guid: 307bff9630735f342852f28b1cd5d300, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -442,7 +442,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: f4100b35e05ee5742b84036e3fac9739, type: 3} + m_Sprite: {fileID: 21300000, guid: 307bff9630735f342852f28b1cd5d300, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 diff --git a/Assets/Resouces/Coins_ADD_Sound.wav b/Assets/Resouces/Coins_ADD_Sound.wav new file mode 100644 index 0000000000000000000000000000000000000000..68f3912d946ea6fb9fe43368cb3e93ec33d3b149 GIT binary patch literal 282952 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

%8rEHCk8S3-(@Q1uv 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