From 4bf1dd9e8e1d3682e1b78122081d7d3b6713652d Mon Sep 17 00:00:00 2001 From: Mingu Kim Date: Thu, 15 Jan 2026 21:58:11 +0900 Subject: [PATCH] =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=B0=EC=83=B7=20?= =?UTF-8?q?=EC=B4=AC=EC=98=81=20=EC=8B=9C=20=EC=BA=90=EB=A6=AD=ED=84=B0=20?= =?UTF-8?q?=EC=95=A0=EB=8B=88=EB=A9=94=EC=9D=B4=EC=85=98=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EC=B4=AC=EC=98=81=20=EC=82=AC=EC=9A=B4?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Audio.meta | 8 + Assets/Audio/camera-shutter1.mp3 | Bin 0 -> 11910 bytes Assets/Audio/camera-shutter1.mp3.meta | 23 + Assets/Main.unity | 263 +- Assets/Plugins/Demigiant.meta | 23 +- Assets/Plugins/Demigiant/DOTween/DOTween.XML | 6196 ++++++++--------- .../Demigiant/DOTween/DOTween.XML.meta | 7 - Assets/Plugins/Demigiant/DOTween/DOTween.dll | Bin 177664 -> 175616 bytes .../Demigiant/DOTween/DOTween.dll.meta | 7 - .../DOTween/Editor/DOTweenEditor.XML | 288 +- .../DOTween/Editor/DOTweenEditor.XML.meta | 7 - .../DOTween/Editor/DOTweenEditor.dll | Bin 70656 -> 70656 bytes .../DOTween/Editor/DOTweenEditor.dll.meta | 7 - .../DOTween/Editor/DOTweenUpgradeManager.XML | 14 - .../Editor/DOTweenUpgradeManager.XML.meta | 11 - .../DOTween/Editor/DOTweenUpgradeManager.dll | Bin 10752 -> 0 bytes .../DOTween/Editor/Imgs/DOTweenIcon.png.meta | 7 - .../Editor/Imgs/DOTweenMiniIcon.png.meta | 7 - .../DOTween/Editor/Imgs/Footer.png.meta | 7 - .../DOTween/Editor/Imgs/Footer_dark.png.meta | 7 - .../DOTween/Editor/Imgs/Header.jpg.meta | 7 - .../DOTween/Modules/DOTweenModuleAudio.cs | 396 +- .../Modules/DOTweenModuleAudio.cs.meta | 7 - .../Modules/DOTweenModuleEPOOutline.cs | 292 +- .../Modules/DOTweenModuleEPOOutline.cs.meta | 7 - .../DOTween/Modules/DOTweenModulePhysics.cs | 432 +- .../Modules/DOTweenModulePhysics.cs.meta | 7 - .../DOTween/Modules/DOTweenModulePhysics2D.cs | 386 +- .../Modules/DOTweenModulePhysics2D.cs.meta | 7 - .../DOTween/Modules/DOTweenModuleSprite.cs | 186 +- .../Modules/DOTweenModuleSprite.cs.meta | 7 - .../DOTween/Modules/DOTweenModuleUI.cs | 1324 ++-- .../DOTween/Modules/DOTweenModuleUI.cs.meta | 7 - .../Modules/DOTweenModuleUnityVersion.cs | 778 +-- .../Modules/DOTweenModuleUnityVersion.cs.meta | 7 - .../DOTween/Modules/DOTweenModuleUtils.cs | 334 +- .../Modules/DOTweenModuleUtils.cs.meta | 7 - Assets/Plugins/Demigiant/DOTween/readme.txt | 56 +- .../Plugins/Demigiant/DOTween/readme.txt.meta | 7 - .../Demigiant/DOTweenPro Examples.meta | 23 + .../DOTweenAnimation_Advanced.unity | 5343 ++++++++++++++ .../DOTweenAnimation_Advanced.unity.meta | 4 + ...DOTweenAnimation_AdvancedSettings.lighting | 63 + ...enAnimation_AdvancedSettings.lighting.meta | 8 + .../DOTweenAnimation_Basics.unity | 1826 +++++ .../DOTweenAnimation_Basics.unity.meta | 4 + .../DOTweenAnimation_BasicsSettings.lighting | 63 + ...weenAnimation_BasicsSettings.lighting.meta | 8 + .../DOTweenPro Examples/DOTweenPath.unity | 1623 +++++ .../DOTweenPath.unity.meta | 4 + .../DOTweenPathSettings.lighting | 63 + .../DOTweenPathSettings.lighting.meta | 8 + .../DOTweenPro Examples/Examples Assets.meta | 5 + .../Examples Assets/dotweenpro_logo.png | Bin 0 -> 17098 bytes .../Examples Assets/dotweenpro_logo.png.meta | 92 + Assets/Plugins/Demigiant/DOTweenPro.meta | 23 + .../Demigiant/DOTweenPro/DOTweenAnimation.cs | 917 +++ .../DOTweenPro/DOTweenAnimation.cs.meta | 8 + .../Demigiant/DOTweenPro/DOTweenDeAudio.cs | 9 + .../DOTweenPro/DOTweenDeAudio.cs.meta | 12 + .../DOTweenPro/DOTweenDeUnityExtended.cs | 9 + .../DOTweenPro/DOTweenDeUnityExtended.cs.meta | 12 + .../Demigiant/DOTweenPro/DOTweenPro.XML | 80 + .../Demigiant/DOTweenPro/DOTweenPro.XML.meta | 4 + .../Demigiant/DOTweenPro/DOTweenPro.dll | Bin 0 -> 16384 bytes .../DOTweenPro.dll.meta} | 13 +- .../DOTweenPro/DOTweenProShortcuts.cs | 90 + .../DOTweenPro/DOTweenProShortcuts.cs.meta | 8 + .../DOTweenPro/DOTweenTextMeshPro.cs | 1037 +++ .../DOTweenPro/DOTweenTextMeshPro.cs.meta | 8 + .../Demigiant/DOTweenPro/DOTweenTk2d.cs | 247 + .../Demigiant/DOTweenPro/DOTweenTk2d.cs.meta | 8 + .../Plugins/Demigiant/DOTweenPro/Editor.meta | 5 + .../Editor/DOTweenAnimationInspector.cs | 764 ++ .../Editor/DOTweenAnimationInspector.cs.meta | 8 + .../Editor/DOTweenPreviewManager.cs | 265 + .../Editor/DOTweenPreviewManager.cs.meta | 8 + .../DOTweenPro/Editor/DOTweenProEditor.XML | 18 + .../Editor/DOTweenProEditor.XML.meta | 4 + .../DOTweenPro/Editor/DOTweenProEditor.dll | Bin 0 -> 35840 bytes .../Editor/DOTweenProEditor.dll.meta | 22 + .../Plugins/Demigiant/DOTweenPro/readme.txt | 35 + .../Demigiant/DOTweenPro/readme.txt.meta | 4 + Assets/Plugins/Demigiant/DemiLib.meta | 21 + Assets/Plugins/Demigiant/DemiLib/Core.meta | 5 + .../Demigiant/DemiLib/Core/DemiLib.dll | Bin 0 -> 14848 bytes .../Demigiant/DemiLib/Core/DemiLib.dll.meta | 22 + .../Demigiant/DemiLib/Core/DemiLib.xml | 231 + .../Demigiant/DemiLib/Core/DemiLib.xml.meta | 4 + .../Demigiant/DemiLib/Core/Editor.meta | 5 + .../DemiLib/Core/Editor/DemiEditor.dll | Bin 0 -> 195072 bytes .../DemiLib/Core/Editor/DemiEditor.dll.meta | 22 + .../DemiLib/Core/Editor/DemiEditor.xml | 2405 +++++++ .../DemiLib/Core/Editor/DemiEditor.xml.meta | 4 + .../Demigiant/DemiLib/Core/Editor/Imgs.meta | 5 + .../DemiLib/Core/Editor/Imgs/blackSquare.png | Bin 0 -> 109 bytes .../Core/Editor/Imgs/blackSquare.png.meta | 47 + .../Core/Editor/Imgs/blackSquareAlpha10.png | Bin 0 -> 109 bytes .../Editor/Imgs/blackSquareAlpha10.png.meta | 47 + .../Core/Editor/Imgs/blackSquareAlpha15.png | Bin 0 -> 109 bytes .../Editor/Imgs/blackSquareAlpha15.png.meta | 47 + .../Core/Editor/Imgs/blackSquareAlpha25.png | Bin 0 -> 109 bytes .../Editor/Imgs/blackSquareAlpha25.png.meta | 47 + .../Core/Editor/Imgs/blackSquareAlpha50.png | Bin 0 -> 109 bytes .../Editor/Imgs/blackSquareAlpha50.png.meta | 47 + .../Core/Editor/Imgs/blackSquareAlpha80.png | Bin 0 -> 109 bytes .../Editor/Imgs/blackSquareAlpha80.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/blueSquare.png | Bin 0 -> 106 bytes .../Core/Editor/Imgs/blueSquare.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/circle.png | Bin 0 -> 455 bytes .../DemiLib/Core/Editor/Imgs/circle.png.meta | 47 + .../Editor/Imgs/circle_dashedBorderEmpty.png | Bin 0 -> 673 bytes .../Imgs/circle_dashedBorderEmpty.png.meta | 68 + .../DemiLib/Core/Editor/Imgs/greenSquare.png | Bin 0 -> 106 bytes .../Core/Editor/Imgs/greenSquare.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/grid_bright.png | Bin 0 -> 222 bytes .../Core/Editor/Imgs/grid_bright.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/grid_dark.png | Bin 0 -> 216 bytes .../Core/Editor/Imgs/grid_dark.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alert.png | Bin 0 -> 540 bytes .../Core/Editor/Imgs/ico_alert.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignB.png | Bin 0 -> 131 bytes .../Core/Editor/Imgs/ico_alignB.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignBC.png | Bin 0 -> 158 bytes .../Core/Editor/Imgs/ico_alignBC.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignBL.png | Bin 0 -> 152 bytes .../Core/Editor/Imgs/ico_alignBL.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignBR.png | Bin 0 -> 150 bytes .../Core/Editor/Imgs/ico_alignBR.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignCC.png | Bin 0 -> 152 bytes .../Core/Editor/Imgs/ico_alignCC.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignCL.png | Bin 0 -> 158 bytes .../Core/Editor/Imgs/ico_alignCL.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignCR.png | Bin 0 -> 153 bytes .../Core/Editor/Imgs/ico_alignCR.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignHC.png | Bin 0 -> 147 bytes .../Core/Editor/Imgs/ico_alignHC.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignL.png | Bin 0 -> 136 bytes .../Core/Editor/Imgs/ico_alignL.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignR.png | Bin 0 -> 145 bytes .../Core/Editor/Imgs/ico_alignR.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignT.png | Bin 0 -> 129 bytes .../Core/Editor/Imgs/ico_alignT.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignTC.png | Bin 0 -> 164 bytes .../Core/Editor/Imgs/ico_alignTC.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignTL.png | Bin 0 -> 153 bytes .../Core/Editor/Imgs/ico_alignTL.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignTR.png | Bin 0 -> 155 bytes .../Core/Editor/Imgs/ico_alignTR.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_alignVC.png | Bin 0 -> 135 bytes .../Core/Editor/Imgs/ico_alignVC.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_camera.png | Bin 0 -> 206 bytes .../Core/Editor/Imgs/ico_camera.png.meta | 47 + .../Core/Editor/Imgs/ico_camera_border.png | Bin 0 -> 347 bytes .../Editor/Imgs/ico_camera_border.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_cog.png | Bin 0 -> 197 bytes .../DemiLib/Core/Editor/Imgs/ico_cog.png.meta | 47 + .../Core/Editor/Imgs/ico_cog_border.png | Bin 0 -> 376 bytes .../Core/Editor/Imgs/ico_cog_border.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_comment.png | Bin 0 -> 176 bytes .../Core/Editor/Imgs/ico_comment.png.meta | 47 + .../Core/Editor/Imgs/ico_comment_border.png | Bin 0 -> 426 bytes .../Editor/Imgs/ico_comment_border.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_delete.png | Bin 0 -> 145 bytes .../Core/Editor/Imgs/ico_delete.png.meta | 47 + .../Core/Editor/Imgs/ico_demigiant.png | Bin 0 -> 605 bytes .../Core/Editor/Imgs/ico_demigiant.png.meta | 47 + .../Editor/Imgs/ico_distributeHAlignT.png | Bin 0 -> 174 bytes .../Imgs/ico_distributeHAlignT.png.meta | 47 + .../Editor/Imgs/ico_distributeVAlignL.png | Bin 0 -> 197 bytes .../Imgs/ico_distributeVAlignL.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_doing.png | Bin 0 -> 838 bytes .../Core/Editor/Imgs/ico_doing.png.meta | 68 + .../DemiLib/Core/Editor/Imgs/ico_end.png | Bin 0 -> 475 bytes .../DemiLib/Core/Editor/Imgs/ico_end.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_flipV.png | Bin 0 -> 167 bytes .../Core/Editor/Imgs/ico_flipV.png.meta | 47 + .../Core/Editor/Imgs/ico_foldout_closed.png | Bin 0 -> 158 bytes .../Editor/Imgs/ico_foldout_closed.png.meta | 47 + .../Core/Editor/Imgs/ico_foldout_open.png | Bin 0 -> 170 bytes .../Editor/Imgs/ico_foldout_open.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_heart.png | Bin 0 -> 210 bytes .../Core/Editor/Imgs/ico_heart.png.meta | 47 + .../Core/Editor/Imgs/ico_heart_border.png | Bin 0 -> 307 bytes .../Editor/Imgs/ico_heart_border.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_light.png | Bin 0 -> 190 bytes .../Core/Editor/Imgs/ico_light.png.meta | 47 + .../Core/Editor/Imgs/ico_light_border.png | Bin 0 -> 292 bytes .../Editor/Imgs/ico_light_border.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_lock.png | Bin 0 -> 300 bytes .../Core/Editor/Imgs/ico_lock.png.meta | 47 + .../Core/Editor/Imgs/ico_lock_open.png | Bin 0 -> 293 bytes .../Core/Editor/Imgs/ico_lock_open.png.meta | 47 + .../Core/Editor/Imgs/ico_nodeArrow.png | Bin 0 -> 168 bytes .../Core/Editor/Imgs/ico_nodeArrow.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_ok.png | Bin 0 -> 715 bytes .../DemiLib/Core/Editor/Imgs/ico_ok.png.meta | 47 + .../Core/Editor/Imgs/ico_optionsDropdown.png | Bin 0 -> 135 bytes .../Editor/Imgs/ico_optionsDropdown.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_play.png | Bin 0 -> 256 bytes .../Core/Editor/Imgs/ico_play.png.meta | 47 + .../Core/Editor/Imgs/ico_play_border.png | Bin 0 -> 386 bytes .../Core/Editor/Imgs/ico_play_border.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_skull.png | Bin 0 -> 227 bytes .../Core/Editor/Imgs/ico_skull.png.meta | 47 + .../Core/Editor/Imgs/ico_skull_border.png | Bin 0 -> 332 bytes .../Editor/Imgs/ico_skull_border.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_star.png | Bin 0 -> 203 bytes .../Core/Editor/Imgs/ico_star.png.meta | 47 + .../Core/Editor/Imgs/ico_star_border.png | Bin 0 -> 323 bytes .../Core/Editor/Imgs/ico_star_border.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/ico_todo.png | Bin 0 -> 674 bytes .../Core/Editor/Imgs/ico_todo.png.meta | 68 + .../DemiLib/Core/Editor/Imgs/ico_ui.png | Bin 0 -> 223 bytes .../DemiLib/Core/Editor/Imgs/ico_ui.png.meta | 47 + .../Core/Editor/Imgs/ico_ui_border.png | Bin 0 -> 259 bytes .../Core/Editor/Imgs/ico_ui_border.png.meta | 47 + .../Core/Editor/Imgs/ico_visibility.png | Bin 0 -> 298 bytes .../Core/Editor/Imgs/ico_visibility.png.meta | 47 + .../Core/Editor/Imgs/ico_visibility_off.png | Bin 0 -> 367 bytes .../Editor/Imgs/ico_visibility_off.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/orangeSquare.png | Bin 0 -> 104 bytes .../Core/Editor/Imgs/orangeSquare.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/project.meta | 5 + .../Core/Editor/Imgs/project/ico_atlas.png | Bin 0 -> 218 bytes .../Editor/Imgs/project/ico_atlas.png.meta | 47 + .../Core/Editor/Imgs/project/ico_audio.png | Bin 0 -> 338 bytes .../Editor/Imgs/project/ico_audio.png.meta | 47 + .../Core/Editor/Imgs/project/ico_bundle.png | Bin 0 -> 522 bytes .../Editor/Imgs/project/ico_bundle.png.meta | 47 + .../Core/Editor/Imgs/project/ico_cog.png | Bin 0 -> 406 bytes .../Core/Editor/Imgs/project/ico_cog.png.meta | 47 + .../Core/Editor/Imgs/project/ico_cross.png | Bin 0 -> 210 bytes .../Editor/Imgs/project/ico_cross.png.meta | 47 + .../Editor/Imgs/project/ico_demigiant.png | Bin 0 -> 388 bytes .../Imgs/project/ico_demigiant.png.meta | 47 + .../Core/Editor/Imgs/project/ico_folder.png | Bin 0 -> 150 bytes .../Editor/Imgs/project/ico_folder.png.meta | 47 + .../Core/Editor/Imgs/project/ico_fonts.png | Bin 0 -> 465 bytes .../Editor/Imgs/project/ico_fonts.png.meta | 47 + .../Core/Editor/Imgs/project/ico_heart.png | Bin 0 -> 334 bytes .../Editor/Imgs/project/ico_heart.png.meta | 47 + .../Editor/Imgs/project/ico_materials.png | Bin 0 -> 355 bytes .../Imgs/project/ico_materials.png.meta | 47 + .../Core/Editor/Imgs/project/ico_models.png | Bin 0 -> 380 bytes .../Editor/Imgs/project/ico_models.png.meta | 47 + .../Editor/Imgs/project/ico_particles.png | Bin 0 -> 493 bytes .../Imgs/project/ico_particles.png.meta | 47 + .../Core/Editor/Imgs/project/ico_play.png | Bin 0 -> 217 bytes .../Editor/Imgs/project/ico_play.png.meta | 47 + .../Core/Editor/Imgs/project/ico_prefab.png | Bin 0 -> 343 bytes .../Editor/Imgs/project/ico_prefab.png.meta | 47 + .../Core/Editor/Imgs/project/ico_scripts.png | Bin 0 -> 208 bytes .../Editor/Imgs/project/ico_scripts.png.meta | 47 + .../Core/Editor/Imgs/project/ico_shaders.png | Bin 0 -> 379 bytes .../Editor/Imgs/project/ico_shaders.png.meta | 47 + .../Core/Editor/Imgs/project/ico_skull.png | Bin 0 -> 368 bytes .../Editor/Imgs/project/ico_skull.png.meta | 47 + .../Core/Editor/Imgs/project/ico_star.png | Bin 0 -> 289 bytes .../Editor/Imgs/project/ico_star.png.meta | 47 + .../Core/Editor/Imgs/project/ico_terrains.png | Bin 0 -> 309 bytes .../Editor/Imgs/project/ico_terrains.png.meta | 47 + .../Core/Editor/Imgs/project/ico_textures.png | Bin 0 -> 278 bytes .../Editor/Imgs/project/ico_textures.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/purpleSquare.png | Bin 0 -> 106 bytes .../Core/Editor/Imgs/purpleSquare.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/redSquare.png | Bin 0 -> 106 bytes .../Core/Editor/Imgs/redSquare.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/squareBorder.png | Bin 0 -> 122 bytes .../Core/Editor/Imgs/squareBorder.png.meta | 47 + .../Core/Editor/Imgs/squareBorderAlpha15.png | Bin 0 -> 116 bytes .../Editor/Imgs/squareBorderAlpha15.png.meta | 47 + .../Core/Editor/Imgs/squareBorderCurved.png | Bin 0 -> 196 bytes .../Editor/Imgs/squareBorderCurved.png.meta | 47 + .../Core/Editor/Imgs/squareBorderCurved02.png | Bin 0 -> 281 bytes .../Editor/Imgs/squareBorderCurved02.png.meta | 47 + .../Imgs/squareBorderCurved02_darkBorders.png | Bin 0 -> 336 bytes .../squareBorderCurved02_darkBorders.png.meta | 47 + .../Editor/Imgs/squareBorderCurvedAlpha.png | Bin 0 -> 197 bytes .../Imgs/squareBorderCurvedAlpha.png.meta | 47 + .../Editor/Imgs/squareBorderCurvedEmpty.png | Bin 0 -> 180 bytes .../Imgs/squareBorderCurvedEmpty.png.meta | 47 + .../Editor/Imgs/squareBorderCurvedEmpty02.png | Bin 0 -> 217 bytes .../Imgs/squareBorderCurvedEmpty02.png.meta | 47 + .../Imgs/squareBorderCurvedEmptyThick.png | Bin 0 -> 233 bytes .../squareBorderCurvedEmptyThick.png.meta | 47 + .../Imgs/squareBorderCurved_darkBorders.png | Bin 0 -> 216 bytes .../squareBorderCurved_darkBorders.png.meta | 47 + .../squareBorderCurved_darkBordersAlpha.png | Bin 0 -> 200 bytes ...uareBorderCurved_darkBordersAlpha.png.meta | 47 + .../Core/Editor/Imgs/squareBorderEmpty.png | Bin 0 -> 114 bytes .../Editor/Imgs/squareBorderEmpty.png.meta | 47 + .../Core/Editor/Imgs/squareBorderEmpty01.png | Bin 0 -> 114 bytes .../Editor/Imgs/squareBorderEmpty01.png.meta | 47 + .../Core/Editor/Imgs/squareBorderEmpty02.png | Bin 0 -> 121 bytes .../Editor/Imgs/squareBorderEmpty02.png.meta | 47 + .../Core/Editor/Imgs/squareBorderEmpty03.png | Bin 0 -> 122 bytes .../Editor/Imgs/squareBorderEmpty03.png.meta | 47 + .../Editor/Imgs/squareBorderThickEmpty.png | Bin 0 -> 121 bytes .../Imgs/squareBorderThickEmpty.png.meta | 47 + .../Editor/Imgs/squareBorderThickerEmpty.png | Bin 0 -> 122 bytes .../Imgs/squareBorderThickerEmpty.png.meta | 47 + .../Core/Editor/Imgs/squareCorners03.png | Bin 0 -> 133 bytes .../Core/Editor/Imgs/squareCorners03.png.meta | 47 + .../Core/Editor/Imgs/squareCornersEmpty02.png | Bin 0 -> 131 bytes .../Editor/Imgs/squareCornersEmpty02.png.meta | 47 + .../Core/Editor/Imgs/tileBars_empty.png | Bin 0 -> 236 bytes .../Core/Editor/Imgs/tileBars_empty.png.meta | 47 + .../Core/Editor/Imgs/tileBars_slanted.png | Bin 0 -> 285 bytes .../Editor/Imgs/tileBars_slanted.png.meta | 47 + .../Editor/Imgs/tileBars_slanted_alpha.png | Bin 0 -> 266 bytes .../Imgs/tileBars_slanted_alpha.png.meta | 47 + .../Core/Editor/Imgs/tileCheckerboard.png | Bin 0 -> 397 bytes .../Editor/Imgs/tileCheckerboard.png.meta | 92 + .../Core/Editor/Imgs/transparentSquare.png | Bin 0 -> 97 bytes .../Editor/Imgs/transparentSquare.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/whiteDot.png | Bin 0 -> 148 bytes .../Core/Editor/Imgs/whiteDot.png.meta | 47 + .../Core/Editor/Imgs/whiteDot_darkBorder.png | Bin 0 -> 219 bytes .../Editor/Imgs/whiteDot_darkBorder.png.meta | 47 + .../Editor/Imgs/whiteDot_whiteBorderAlpha.png | Bin 0 -> 176 bytes .../Imgs/whiteDot_whiteBorderAlpha.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/whiteSquare.png | Bin 0 -> 103 bytes .../Core/Editor/Imgs/whiteSquare.png.meta | 47 + .../Core/Editor/Imgs/whiteSquareAlpha10.png | Bin 0 -> 107 bytes .../Editor/Imgs/whiteSquareAlpha10.png.meta | 47 + .../Core/Editor/Imgs/whiteSquareAlpha15.png | Bin 0 -> 109 bytes .../Editor/Imgs/whiteSquareAlpha15.png.meta | 47 + .../Core/Editor/Imgs/whiteSquareAlpha25.png | Bin 0 -> 107 bytes .../Editor/Imgs/whiteSquareAlpha25.png.meta | 47 + .../Core/Editor/Imgs/whiteSquareAlpha50.png | Bin 0 -> 107 bytes .../Editor/Imgs/whiteSquareAlpha50.png.meta | 47 + .../Core/Editor/Imgs/whiteSquareAlpha80.png | Bin 0 -> 110 bytes .../Editor/Imgs/whiteSquareAlpha80.png.meta | 47 + .../Core/Editor/Imgs/whiteSquareCurved.png | Bin 0 -> 144 bytes .../Editor/Imgs/whiteSquareCurved.png.meta | 68 + .../Core/Editor/Imgs/whiteSquareCurved02.png | Bin 0 -> 190 bytes .../Editor/Imgs/whiteSquareCurved02.png.meta | 68 + .../Editor/Imgs/whiteSquare_fadeOut_bt.png | Bin 0 -> 131 bytes .../Imgs/whiteSquare_fadeOut_bt.png.meta | 47 + .../DemiLib/Core/Editor/Imgs/yellowSquare.png | Bin 0 -> 106 bytes .../Core/Editor/Imgs/yellowSquare.png.meta | 47 + .../Plugins/Demigiant/readme_DOTweenPro.txt | 35 + .../Demigiant/readme_DOTweenPro.txt.meta | 19 + Assets/Resources.meta | 8 + Assets/Resources/DOTweenSettings.asset | 54 + Assets/Resources/DOTweenSettings.asset.meta | 8 + Assets/Scripts/TakeScreen.cs | 179 +- ProjectSettings/EditorBuildSettings.asset | 2 +- ProjectSettings/ProjectSettings.asset | 20 +- 350 files changed, 27255 insertions(+), 5621 deletions(-) create mode 100644 Assets/Audio.meta create mode 100755 Assets/Audio/camera-shutter1.mp3 create mode 100644 Assets/Audio/camera-shutter1.mp3.meta delete mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/DOTweenUpgradeManager.XML delete mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/DOTweenUpgradeManager.XML.meta delete mode 100644 Assets/Plugins/Demigiant/DOTween/Editor/DOTweenUpgradeManager.dll create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Advanced.unity create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Advanced.unity.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_AdvancedSettings.lighting create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_AdvancedSettings.lighting.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Basics.unity create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Basics.unity.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_BasicsSettings.lighting create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_BasicsSettings.lighting.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPath.unity create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPath.unity.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPathSettings.lighting create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPathSettings.lighting.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/Examples Assets.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/Examples Assets/dotweenpro_logo.png create mode 100644 Assets/Plugins/Demigiant/DOTweenPro Examples/Examples Assets/dotweenpro_logo.png.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenAnimation.cs create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenAnimation.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll rename Assets/Plugins/Demigiant/{DOTween/Editor/DOTweenUpgradeManager.dll.meta => DOTweenPro/DOTweenPro.dll.meta} (60%) create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/Editor.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll.meta create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/readme.txt create mode 100644 Assets/Plugins/Demigiant/DOTweenPro/readme.txt.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.xml create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.xml.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquare.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquare.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha10.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha10.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha15.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha15.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha25.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha25.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha50.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha50.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha80.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha80.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blueSquare.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blueSquare.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle_dashedBorderEmpty.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle_dashedBorderEmpty.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/greenSquare.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/greenSquare.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_bright.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_bright.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_dark.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_dark.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alert.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alert.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignB.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignB.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBC.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBC.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBL.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBL.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBR.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBR.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCC.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCC.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCL.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCL.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCR.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCR.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignHC.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignHC.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignL.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignL.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignR.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignR.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignT.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignT.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTC.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTC.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTL.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTL.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTR.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTR.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignVC.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignVC.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera_border.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera_border.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog_border.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog_border.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment_border.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment_border.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_delete.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_delete.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiant.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiant.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeHAlignT.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeHAlignT.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeVAlignL.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeVAlignL.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_doing.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_doing.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_end.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_end.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_flipV.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_flipV.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_closed.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_closed.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_open.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_open.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart_border.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart_border.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light_border.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_light_border.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock_open.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock_open.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_nodeArrow.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_nodeArrow.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ok.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ok.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_optionsDropdown.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_optionsDropdown.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play_border.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play_border.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull_border.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull_border.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star_border.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star_border.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_todo.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_todo.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui_border.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui_border.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility_off.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility_off.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/orangeSquare.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/orangeSquare.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_atlas.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_atlas.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_audio.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_audio.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_bundle.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_bundle.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cog.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cog.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cross.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cross.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_demigiant.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_demigiant.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_folder.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_folder.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_fonts.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_fonts.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_heart.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_heart.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_materials.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_materials.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_models.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_models.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_particles.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_particles.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_play.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_play.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_prefab.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_prefab.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_scripts.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_scripts.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_shaders.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_shaders.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_skull.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_skull.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_star.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_star.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_terrains.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_terrains.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_textures.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_textures.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/purpleSquare.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/purpleSquare.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/redSquare.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/redSquare.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorder.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorder.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderAlpha15.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderAlpha15.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02_darkBorders.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02_darkBorders.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedAlpha.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedAlpha.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty02.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmpty02.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmptyThick.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurvedEmptyThick.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBorders.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBorders.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBordersAlpha.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBordersAlpha.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty01.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty01.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty02.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty02.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty03.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty03.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickEmpty.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickEmpty.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickerEmpty.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickerEmpty.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCorners03.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCorners03.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCornersEmpty02.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCornersEmpty02.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_empty.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_empty.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted_alpha.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted_alpha.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileCheckerboard.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileCheckerboard.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/transparentSquare.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/transparentSquare.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_darkBorder.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_darkBorder.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_whiteBorderAlpha.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_whiteBorderAlpha.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha10.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha10.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha15.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha15.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha25.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha25.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha50.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha50.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha80.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha80.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved02.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved02.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare_fadeOut_bt.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare_fadeOut_bt.png.meta create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/yellowSquare.png create mode 100644 Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/yellowSquare.png.meta create mode 100644 Assets/Plugins/Demigiant/readme_DOTweenPro.txt create mode 100644 Assets/Plugins/Demigiant/readme_DOTweenPro.txt.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/Audio.meta b/Assets/Audio.meta new file mode 100644 index 0000000..ade8293 --- /dev/null +++ b/Assets/Audio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 11df597fea8fb461a965d831c26e7568 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Audio/camera-shutter1.mp3 b/Assets/Audio/camera-shutter1.mp3 new file mode 100755 index 0000000000000000000000000000000000000000..f2cc2d9d52f88eaf91f4c729c1d4e66dce0b8c1a GIT binary patch literal 11910 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 literal 0 HcmV?d00001 diff --git a/Assets/Audio/camera-shutter1.mp3.meta b/Assets/Audio/camera-shutter1.mp3.meta new file mode 100644 index 0000000..7686567 --- /dev/null +++ b/Assets/Audio/camera-shutter1.mp3.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 6a6771d05326c4775a47c0ec4c4e4558 +AudioImporter: + externalObjects: {} + serializedVersion: 8 + defaultSettings: + serializedVersion: 2 + loadType: 0 + sampleRateSetting: 0 + sampleRateOverride: 44100 + compressionFormat: 1 + quality: 1 + conversionMode: 0 + preloadAudioData: 0 + platformSettingOverrides: {} + forceToMono: 0 + normalize: 1 + loadInBackground: 0 + ambisonic: 0 + 3D: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Main.unity b/Assets/Main.unity index d33884e..7cbb77d 100644 --- a/Assets/Main.unity +++ b/Assets/Main.unity @@ -308,6 +308,8 @@ GameObject: - component: {fileID: 162178408} - component: {fileID: 162178410} - component: {fileID: 162178409} + - component: {fileID: 162178412} + - component: {fileID: 162178411} m_Layer: 5 m_Name: Image Character m_TagString: Untagged @@ -331,7 +333,7 @@ RectTransform: 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: -267.873, y: 126.63} + m_AnchoredPosition: {x: -162, y: 80} m_SizeDelta: {x: 424.251, y: 424.25} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &162178409 @@ -372,6 +374,247 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 162178407} m_CullTransparentMesh: 1 +--- !u!82 &162178411 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 162178407} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 0} + m_Resource: {fileID: 8300000, guid: 6a6771d05326c4775a47c0ec4c4e4558, type: 3} + m_PlayOnAwake: 0 + 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!114 &162178412 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 162178407} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp-firstpass::DG.Tweening.DOTweenAnimation + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 1 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 1 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 162178409} + m_TargetAssemblyTypeName: UnityEngine.UI.Image, UnityEngine.UI + m_MethodName: set_sprite + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 21300000, guid: b003007f0724f4eb39ca05642c497ce4, type: 3} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Sprite, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 162178411} + m_TargetAssemblyTypeName: UnityEngine.AudioSource, UnityEngine + m_MethodName: Play + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 162178409} + m_TargetAssemblyTypeName: UnityEngine.UI.Image, UnityEngine.UI + m_MethodName: set_sprite + m_Mode: 2 + m_Arguments: + m_ObjectArgument: {fileID: 21300000, guid: 7ab63bd8191ef49a6918352ece3c5364, type: 3} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Sprite, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 0.5 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + loopType: 0 + loops: 1 + id: + isRelative: 0 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 0 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 162178408} + animationType: 9 + targetType: 5 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 10, z: 1} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 1, b: 1, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 1 + optionalInt0: 1 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: --- !u!1 &240954698 GameObject: m_ObjectHideFlags: 0 @@ -469,6 +712,18 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 + - m_Target: {fileID: 162178412} + m_TargetAssemblyTypeName: DG.Tweening.DOTweenAnimation, Assembly-CSharp-firstpass + m_MethodName: DORestart + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 --- !u!114 &240954701 MonoBehaviour: m_ObjectHideFlags: 0 @@ -522,7 +777,7 @@ MonoBehaviour: selectMonitorIndex: 2 takeNumber: 0 inputPrefix: {fileID: 56188227} - inputResult: {fileID: 0} + inputResult: {fileID: 975488549} directorySelector: {fileID: 1438379834} --- !u!1 &519420028 GameObject: @@ -889,7 +1144,7 @@ MonoBehaviour: m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_TextWrappingMode: 3 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 3 m_linkedTextComponent: {fileID: 0} @@ -1395,7 +1650,7 @@ MonoBehaviour: m_InputType: 0 m_AsteriskChar: 42 m_KeyboardType: 0 - m_LineType: 0 + m_LineType: 1 m_HideMobileInput: 0 m_HideSoftKeyboard: 0 m_CharacterValidation: 0 diff --git a/Assets/Plugins/Demigiant.meta b/Assets/Plugins/Demigiant.meta index 4691b03..cfb2591 100644 --- a/Assets/Plugins/Demigiant.meta +++ b/Assets/Plugins/Demigiant.meta @@ -1,8 +1,23 @@ fileFormatVersion: 2 -guid: d4fb1de9b00bfac42af0a35ff2a01f89 +guid: 9f80792dcd2829e41b1f075e7245ca5b +labels: +- Tween +- Tweening +- Animation +- HOTween +- Paths +- VisualScripting +- VisualEditor +- iTween +- Ease +- Easing +- Shake +- Punch +- 2DToolkit +- TextMeshPro +- Text +- LeanTween +- DFTween folderAsset: yes DefaultImporter: - externalObjects: {} userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTween/DOTween.XML b/Assets/Plugins/Demigiant/DOTween/DOTween.XML index f56085a..7b6f33d 100644 --- a/Assets/Plugins/Demigiant/DOTween/DOTween.XML +++ b/Assets/Plugins/Demigiant/DOTween/DOTween.XML @@ -1,3107 +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. - Use this method if you don't care about , otherwise use - - - - - USE THIS FOR CUSTOM PLUGINS when you want to be able to use . - Returns a value that is from 0 to 1 if is not incremental, otherwise from 0 to (1 * completed loops) - - - - - 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 - - - Gets/sets the max Tweeners capacity (automatically increased by DOTween when necessary). - You can also set both Tweeners and Sequences capacity via the static method - - - Gets/sets the max Sequences capacity (automatically increased by DOTween when necessary). - You can also set both Tweeners and Sequences capacity via the static method - - - 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 was set to be timeScale independent via the tween.SetUpdate method - - - 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 - -
-
+ + + + 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 index 0e797fe..7a866b5 100644 --- a/Assets/Plugins/Demigiant/DOTween/DOTween.XML.meta +++ b/Assets/Plugins/Demigiant/DOTween/DOTween.XML.meta @@ -2,10 +2,3 @@ fileFormatVersion: 2 guid: 34192c5e0d14aee43a0e86cc4823268a TextScriptImporter: userData: -AssetOrigin: - serializedVersion: 1 - productId: 27676 - packageName: DOTween (HOTween v2) - packageVersion: 1.2.790 - assetPath: Assets/Plugins/Demigiant/DOTween/DOTween.XML - uploadId: 831234 diff --git a/Assets/Plugins/Demigiant/DOTween/DOTween.dll b/Assets/Plugins/Demigiant/DOTween/DOTween.dll index 73235fc01a2d43cf393d9d7c897be3924bbbefeb..57112d34beef1b8bb4f78782d752c7bef2452e0c 100644 GIT binary patch literal 175616 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�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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) - - - + + + + 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 index a34b5a8..7cec113 100644 --- a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML.meta +++ b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML.meta @@ -2,10 +2,3 @@ fileFormatVersion: 2 guid: 2e2c6224d345d9249acfa6e8ef40bb2d TextScriptImporter: userData: -AssetOrigin: - serializedVersion: 1 - productId: 27676 - packageName: DOTween (HOTween v2) - packageVersion: 1.2.790 - assetPath: Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.XML - uploadId: 831234 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenEditor.dll index c2d87f934f951d96c83020e8dd51cc058c5ad46e..4911a86b3feaad8d13ba041e50ed77832d813651 100644 GIT binary patch delta 90 zcmZoz!P2mTWkLtb(c=B78+%-S3%u@qbSLpyuvgprIzF+NrMjCR{8r)D0ZB6e0TU3* pFaohABZCY#BSTQIOYq~Y0E0N!`~Hi~3fEs_sI%E_z|DAp0|1$DAsqk! delta 90 zcmZoz!P2mTWkLsw;vcijjXf^E1^%8snz5$1*=dE?wc9N0vu - - - DOTweenUpgradeManager - - - - - This class and its whole library are deleted the first time DOTween's setup is run after an upgrade (or after a new install). - NOTE: DidReloadScripts doesn't work on first install so it's useless, InitializeOnLoad is the only way - - - - diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenUpgradeManager.XML.meta b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenUpgradeManager.XML.meta deleted file mode 100644 index e086eae..0000000 --- a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenUpgradeManager.XML.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3df9fdaadcb4c394e826a4d8d20bb952 -TextScriptImporter: - userData: -AssetOrigin: - serializedVersion: 1 - productId: 27676 - packageName: DOTween (HOTween v2) - packageVersion: 1.2.790 - assetPath: Assets/Plugins/Demigiant/DOTween/Editor/DOTweenUpgradeManager.XML - uploadId: 831234 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenUpgradeManager.dll b/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenUpgradeManager.dll deleted file mode 100644 index 7485311e8ef809509c8adb704ab50efb2a6248c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10752 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 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 +// 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 index ddb7ef3..50aa010 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs.meta @@ -6,10 +6,3 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: -AssetOrigin: - serializedVersion: 1 - productId: 27676 - packageName: DOTween (HOTween v2) - packageVersion: 1.2.790 - assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleAudio.cs - uploadId: 831234 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs index 2ab3775..743ef0a 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs @@ -1,146 +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 +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 index af2843d..4b8991f 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs.meta +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs.meta @@ -10,10 +10,3 @@ MonoImporter: userData: assetBundleName: assetBundleVariant: -AssetOrigin: - serializedVersion: 1 - productId: 27676 - packageName: DOTween (HOTween v2) - packageVersion: 1.2.790 - assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleEPOOutline.cs - uploadId: 831234 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs index 08b0700..6e1469e 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs @@ -1,216 +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 +// 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 index 2081c84..0ce0d75 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs.meta @@ -6,10 +6,3 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: -AssetOrigin: - serializedVersion: 1 - productId: 27676 - packageName: DOTween (HOTween v2) - packageVersion: 1.2.790 - assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics.cs - uploadId: 831234 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs index 8ce2b56..d668003 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs @@ -1,193 +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 +// 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 index a730580..ca9ed29 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs.meta @@ -6,10 +6,3 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: -AssetOrigin: - serializedVersion: 1 - productId: 27676 - packageName: DOTween (HOTween v2) - packageVersion: 1.2.790 - assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModulePhysics2D.cs - uploadId: 831234 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs index 72afb7b..0efebb3 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs @@ -1,93 +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 +// 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 index bf1392e..a0c67c4 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs.meta @@ -6,10 +6,3 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: -AssetOrigin: - serializedVersion: 1 - productId: 27676 - packageName: DOTween (HOTween v2) - packageVersion: 1.2.790 - assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleSprite.cs - uploadId: 831234 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs index 2381f4c..6322b3a 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs @@ -1,662 +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 +// 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 index 7aaa07e..60d55ef 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs.meta @@ -6,10 +6,3 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: -AssetOrigin: - serializedVersion: 1 - productId: 27676 - packageName: DOTween (HOTween v2) - packageVersion: 1.2.790 - assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUI.cs - uploadId: 831234 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs index 8f818ba..90498ed 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs @@ -1,389 +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; - } - } - } -} +// 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 index 6c3c674..290189f 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta @@ -6,10 +6,3 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: -AssetOrigin: - serializedVersion: 1 - productId: 27676 - packageName: DOTween (HOTween v2) - packageVersion: 1.2.790 - assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUnityVersion.cs - uploadId: 831234 diff --git a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs index 12a365d..3d4c786 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs @@ -1,167 +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 - } - } -} +// 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 index f92deb9..ab62186 100644 --- a/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta +++ b/Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs.meta @@ -6,10 +6,3 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: -AssetOrigin: - serializedVersion: 1 - productId: 27676 - packageName: DOTween (HOTween v2) - packageVersion: 1.2.790 - assetPath: Assets/Plugins/Demigiant/DOTween/Modules/DOTweenModuleUtils.cs - uploadId: 831234 diff --git a/Assets/Plugins/Demigiant/DOTween/readme.txt b/Assets/Plugins/Demigiant/DOTween/readme.txt index 37ff7ef..82b7c6c 100644 --- a/Assets/Plugins/Demigiant/DOTween/readme.txt +++ b/Assets/Plugins/Demigiant/DOTween/readme.txt @@ -1,29 +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 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 index a1ba904..3799165 100644 --- a/Assets/Plugins/Demigiant/DOTween/readme.txt.meta +++ b/Assets/Plugins/Demigiant/DOTween/readme.txt.meta @@ -2,10 +2,3 @@ fileFormatVersion: 2 guid: fccfc62abf2eb0a4db614853430894fd TextScriptImporter: userData: -AssetOrigin: - serializedVersion: 1 - productId: 27676 - packageName: DOTween (HOTween v2) - packageVersion: 1.2.790 - assetPath: Assets/Plugins/Demigiant/DOTween/readme.txt - uploadId: 831234 diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples.meta b/Assets/Plugins/Demigiant/DOTweenPro Examples.meta new file mode 100644 index 0000000..12bbcd4 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 0e606767f2f03204fb289d21d2696684 +labels: +- Tween +- Tweening +- Animation +- HOTween +- Paths +- VisualScripting +- VisualEditor +- iTween +- DFTween +- LeanTween +- Ease +- Easing +- Shake +- Punch +- 2DToolkit +- TextMeshPro +- Text +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Advanced.unity b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Advanced.unity new file mode 100644 index 0000000..0026da8 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Advanced.unity @@ -0,0 +1,5343 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 1 + m_BakeResolution: 50 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 85cd2cce8645a4cbcaff5508eee0adf5, type: 2} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &45542689 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 45542690} + - component: {fileID: 45542693} + - component: {fileID: 45542692} + - component: {fileID: 45542691} + m_Layer: 5 + m_Name: 'Button (ID: move)' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &45542690 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 45542689} + 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: 191643491} + m_Father: {fileID: 1997177219} + 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: -36} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &45542691 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 45542689} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 45542692} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1844382610} + m_TargetAssemblyTypeName: + m_MethodName: DORestartById + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: move + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &45542692 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 45542689} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &45542693 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 45542689} + m_CullTransparentMesh: 1 +--- !u!1 &76224661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 76224668} + - component: {fileID: 76224667} + - component: {fileID: 76224666} + - component: {fileID: 76224665} + - component: {fileID: 76224664} + - component: {fileID: 76224663} + m_Layer: 0 + m_Name: Cube C (w animation) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &76224663 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 76224661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 1 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 0 + loops: 1 + id: rotate + isRelative: 0 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 0 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 76224668} + animationType: 3 + targetType: 0 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 180, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 1, b: 1, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!114 &76224664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 76224661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 1 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 0 + loops: 1 + id: move + isRelative: 1 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 0 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 76224668} + animationType: 1 + targetType: 0 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 1, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 1, b: 1, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!114 &76224665 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 76224661} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 1 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 0 + loops: 1 + id: toRed + isRelative: 0 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 0 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 76224666} + animationType: 6 + targetType: 0 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 0, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 0, b: 0, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!23 &76224666 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 76224661} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &76224667 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 76224661} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &76224668 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 76224661} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 2, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1760580329} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &83016929 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 83016930} + - component: {fileID: 83016932} + - component: {fileID: 83016931} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &83016930 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 83016929} + 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: 1839080358} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &83016931 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 83016929} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'ID: toRed' +--- !u!222 &83016932 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 83016929} + m_CullTransparentMesh: 1 +--- !u!1 &118309267 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 118309271} + - component: {fileID: 118309270} + - component: {fileID: 118309268} + - component: {fileID: 118309274} + - component: {fileID: 118309272} + - component: {fileID: 118309269} + m_Layer: 0 + m_Name: Cube A (w animation) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &118309268 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &118309269 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 1 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 0 + loops: 1 + id: rotate + isRelative: 0 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 0 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 118309271} + animationType: 3 + targetType: 0 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 180, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 1, b: 1, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!33 &118309270 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &118309271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1192540964} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &118309272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 1 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 0 + loops: 1 + id: move + isRelative: 1 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 0 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 118309271} + animationType: 1 + targetType: 0 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 1, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 1, b: 1, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!114 &118309274 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 1 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 0 + loops: 1 + id: toRed + isRelative: 0 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 0 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 118309268} + animationType: 6 + targetType: 0 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 0, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 0, b: 0, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!1 &186391000 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 186391001} + m_Layer: 5 + m_Name: Buttons - PlayAllById + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &186391001 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 186391000} + 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: 467194356} + - {fileID: 1492174307} + - {fileID: 323853745} + - {fileID: 1644045641} + m_Father: {fileID: 1260203941} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -34} + m_SizeDelta: {x: 0, y: -48.000015} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &191643490 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 191643491} + - component: {fileID: 191643493} + - component: {fileID: 191643492} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &191643491 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 191643490} + 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: 45542690} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &191643492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 191643490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'ID: move' +--- !u!222 &191643493 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 191643490} + m_CullTransparentMesh: 1 +--- !u!1 &215583160 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 215583161} + - component: {fileID: 215583163} + - component: {fileID: 215583162} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &215583161 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 215583160} + 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: 1619597526} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &215583162 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 215583160} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'ID: move' +--- !u!222 &215583163 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 215583160} + m_CullTransparentMesh: 1 +--- !u!1 &286188793 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 286188794} + m_Layer: 5 + m_Name: Buttons - PlayById + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &286188794 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 286188793} + 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: 1158456312} + - {fileID: 1839080358} + - {fileID: 1095596651} + - {fileID: 566135255} + m_Father: {fileID: 1260203941} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 42} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &323853744 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 323853745} + - component: {fileID: 323853748} + - component: {fileID: 323853747} + - component: {fileID: 323853746} + m_Layer: 5 + m_Name: 'Button (ID: move)' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &323853745 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323853744} + 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: 645240663} + m_Father: {fileID: 186391001} + 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: -36} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &323853746 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323853744} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 323853747} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1844382610} + m_TargetAssemblyTypeName: + m_MethodName: DOPlayAllById + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: move + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &323853747 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323853744} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &323853748 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323853744} + m_CullTransparentMesh: 1 +--- !u!1 &386943563 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 386943564} + - component: {fileID: 386943566} + - component: {fileID: 386943565} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &386943564 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386943563} + 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: 766204080} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &386943565 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386943563} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'ID: toRed' +--- !u!222 &386943566 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 386943563} + m_CullTransparentMesh: 1 +--- !u!1 &461995929 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 461995932} + - component: {fileID: 461995931} + - component: {fileID: 461995930} + m_Layer: 0 + m_Name: Name + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!102 &461995930 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 461995929} + m_Text: B + m_OffsetZ: 0 + m_CharacterSize: 20 + m_LineSpacing: 1 + m_Anchor: 4 + m_Alignment: 1 + m_TabSize: 4 + m_FontSize: 30 + m_FontStyle: 1 + m_RichText: 1 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!23 &461995931 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 461995929} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!4 &461995932 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 461995929} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1844382606} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &467194355 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 467194356} + - component: {fileID: 467194358} + - component: {fileID: 467194357} + m_Layer: 5 + m_Name: Description + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &467194356 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 467194355} + 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: 186391001} + 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: 550, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &467194357 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 467194355} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 'DOPlayAllById (Cube B as target) + + Will play the DOTweenAnimations + with the given ID, on ANY gameObject' +--- !u!222 &467194358 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 467194355} + m_CullTransparentMesh: 1 +--- !u!1 &502741617 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 502741618} + - component: {fileID: 502741621} + - component: {fileID: 502741620} + - component: {fileID: 502741619} + m_Layer: 5 + m_Name: 'Button (ID: rotate)' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &502741618 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 502741617} + 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: 685170976} + m_Father: {fileID: 1997177219} + 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: 100, y: -36} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &502741619 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 502741617} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 502741620} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1844382610} + m_TargetAssemblyTypeName: + m_MethodName: DORestartById + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: rotate + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &502741620 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 502741617} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &502741621 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 502741617} + m_CullTransparentMesh: 1 +--- !u!1 &566135254 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 566135255} + - component: {fileID: 566135258} + - component: {fileID: 566135257} + - component: {fileID: 566135256} + m_Layer: 5 + m_Name: 'Button (ID: rotate)' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &566135255 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566135254} + 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: 740664255} + m_Father: {fileID: 286188794} + 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: 100, y: -36} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &566135256 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566135254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 566135257} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1844382610} + m_TargetAssemblyTypeName: + m_MethodName: DOPlayById + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: rotate + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &566135257 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566135254} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &566135258 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 566135254} + m_CullTransparentMesh: 1 +--- !u!1 &608072282 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 608072283} + - component: {fileID: 608072285} + - component: {fileID: 608072284} + m_Layer: 5 + m_Name: Description + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &608072283 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 608072282} + 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: 1785989881} + 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: 550, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &608072284 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 608072282} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 'DORestartAllById (Cube B as target) + + Will restart the DOTweenAnimations + with the given ID, on ANY gameObject' +--- !u!222 &608072285 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 608072282} + m_CullTransparentMesh: 1 +--- !u!1 &645240662 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 645240663} + - component: {fileID: 645240665} + - component: {fileID: 645240664} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &645240663 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 645240662} + 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: 323853745} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &645240664 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 645240662} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'ID: move' +--- !u!222 &645240665 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 645240662} + m_CullTransparentMesh: 1 +--- !u!1 &685170975 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 685170976} + - component: {fileID: 685170978} + - component: {fileID: 685170977} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &685170976 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 685170975} + 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: 502741618} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &685170977 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 685170975} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'ID: rotate' +--- !u!222 &685170978 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 685170975} + m_CullTransparentMesh: 1 +--- !u!1 &718047501 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 718047502} + - component: {fileID: 718047504} + - component: {fileID: 718047503} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &718047502 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 718047501} + 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: 1371900811} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &718047503 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 718047501} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'ID: rotate' +--- !u!222 &718047504 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 718047501} + m_CullTransparentMesh: 1 +--- !u!1 &731424937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 731424938} + - component: {fileID: 731424940} + - component: {fileID: 731424939} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &731424938 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 731424937} + 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: 899835911} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &731424939 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 731424937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'ID: toRed' +--- !u!222 &731424940 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 731424937} + m_CullTransparentMesh: 1 +--- !u!1 &740664254 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 740664255} + - component: {fileID: 740664257} + - component: {fileID: 740664256} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &740664255 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740664254} + 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: 566135255} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &740664256 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740664254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'ID: rotate' +--- !u!222 &740664257 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740664254} + m_CullTransparentMesh: 1 +--- !u!1 &766204079 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 766204080} + - component: {fileID: 766204083} + - component: {fileID: 766204082} + - component: {fileID: 766204081} + m_Layer: 5 + m_Name: 'Button (ID: toRed)' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &766204080 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 766204079} + 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: 386943564} + m_Father: {fileID: 1785989881} + 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: -100, y: -36} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &766204081 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 766204079} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 766204082} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1844382610} + m_TargetAssemblyTypeName: + m_MethodName: DORestartAllById + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: toRed + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &766204082 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 766204079} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &766204083 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 766204079} + m_CullTransparentMesh: 1 +--- !u!1 &848136767 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 848136772} + - component: {fileID: 848136771} + - component: {fileID: 848136769} + - component: {fileID: 848136768} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &848136768 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848136767} + m_Enabled: 1 +--- !u!124 &848136769 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848136767} + m_Enabled: 1 +--- !u!20 &848136771 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848136767} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.16176468, g: 0.16176468, b: 0.16176468, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &848136772 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848136767} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &899835910 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 899835911} + - component: {fileID: 899835914} + - component: {fileID: 899835913} + - component: {fileID: 899835912} + m_Layer: 5 + m_Name: 'Button (ID: toRed)' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &899835911 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 899835910} + 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: 731424938} + m_Father: {fileID: 1997177219} + 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: -100, y: -36} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &899835912 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 899835910} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 899835913} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1844382610} + m_TargetAssemblyTypeName: + m_MethodName: DORestartById + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: toRed + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &899835913 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 899835910} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &899835914 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 899835910} + m_CullTransparentMesh: 1 +--- !u!1 &970591913 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 970591914} + - component: {fileID: 970591916} + - component: {fileID: 970591915} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &970591914 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 970591913} + 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: 1356883401} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &970591915 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 970591913} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: DOPlayNext +--- !u!222 &970591916 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 970591913} + m_CullTransparentMesh: 1 +--- !u!1 &1025578319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1025578320} + - component: {fileID: 1025578322} + - component: {fileID: 1025578321} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1025578320 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1025578319} + 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: 1095596651} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1025578321 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1025578319} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'ID: move' +--- !u!222 &1025578322 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1025578319} + m_CullTransparentMesh: 1 +--- !u!1 &1053889438 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1053889442} + - component: {fileID: 1053889441} + - component: {fileID: 1053889440} + - component: {fileID: 1053889439} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1053889439 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053889438} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2d49b7c1bcd2e07499844da127be038d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_ForceModuleActive: 0 +--- !u!114 &1053889440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053889438} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1053889441 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053889438} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1053889442 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053889438} + serializedVersion: 2 + 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: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1095596650 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1095596651} + - component: {fileID: 1095596654} + - component: {fileID: 1095596653} + - component: {fileID: 1095596652} + m_Layer: 5 + m_Name: 'Button (ID: move)' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1095596651 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095596650} + 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: 1025578320} + m_Father: {fileID: 286188794} + 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: -36} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1095596652 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095596650} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1095596653} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1844382610} + m_TargetAssemblyTypeName: + m_MethodName: DOPlayById + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: move + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1095596653 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095596650} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &1095596654 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1095596650} + m_CullTransparentMesh: 1 +--- !u!1 &1158456309 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1158456312} + - component: {fileID: 1158456311} + - component: {fileID: 1158456310} + m_Layer: 5 + m_Name: Description + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1158456310 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158456309} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 'DOPlayById (Cube B as target) + + Will play only the DOTweenAnimations + with the given ID that are on Cube B' +--- !u!222 &1158456311 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158456309} + m_CullTransparentMesh: 1 +--- !u!224 &1158456312 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1158456309} + 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: 286188794} + 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: 550, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1192540961 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1192540964} + - component: {fileID: 1192540963} + - component: {fileID: 1192540962} + m_Layer: 0 + m_Name: Name + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!102 &1192540962 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192540961} + m_Text: A + m_OffsetZ: 0 + m_CharacterSize: 20 + m_LineSpacing: 1 + m_Anchor: 4 + m_Alignment: 1 + m_TabSize: 4 + m_FontSize: 30 + m_FontStyle: 1 + m_RichText: 1 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!23 &1192540963 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192540961} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!4 &1192540964 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1192540961} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 118309271} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1242857378 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1242857380} + - component: {fileID: 1242857379} + m_Layer: 0 + m_Name: Directional light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1242857379 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242857378} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &1242857380 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242857378} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.10938166, w: 0.8754261} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1260203940 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1260203941} + - component: {fileID: 1260203944} + - component: {fileID: 1260203943} + - component: {fileID: 1260203942} + m_Layer: 5 + m_Name: Canvas (w button controls) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1260203941 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260203940} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1356883401} + - {fileID: 286188794} + - {fileID: 186391001} + - {fileID: 1997177219} + - {fileID: 1785989881} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1260203942 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260203940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1260203943 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260203940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1260203944 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260203940} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 1 + m_Camera: {fileID: 848136771} + m_PlaneDistance: 100 + m_PixelPerfect: 1 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &1305249262 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1305249263} + - component: {fileID: 1305249265} + - component: {fileID: 1305249264} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1305249263 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305249262} + 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: 1492174307} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1305249264 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305249262} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'ID: toRed' +--- !u!222 &1305249265 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1305249262} + m_CullTransparentMesh: 1 +--- !u!1 &1356883400 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1356883401} + - component: {fileID: 1356883404} + - component: {fileID: 1356883403} + - component: {fileID: 1356883402} + m_Layer: 5 + m_Name: Button (DOPlayNext) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1356883401 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356883400} + 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: 970591914} + m_Father: {fileID: 1260203941} + 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: 82} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1356883402 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356883400} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1356883403} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 118309274} + m_TargetAssemblyTypeName: + m_MethodName: DOPlayNext + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1844382610} + m_TargetAssemblyTypeName: + m_MethodName: DOPlayNext + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 76224665} + m_TargetAssemblyTypeName: + m_MethodName: DOPlayNext + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1356883403 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356883400} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &1356883404 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356883400} + m_CullTransparentMesh: 1 +--- !u!1 &1371900810 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1371900811} + - component: {fileID: 1371900814} + - component: {fileID: 1371900813} + - component: {fileID: 1371900812} + m_Layer: 5 + m_Name: 'Button (ID: rotate)' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1371900811 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1371900810} + 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: 718047502} + m_Father: {fileID: 1785989881} + 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: 100, y: -36} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1371900812 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1371900810} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1371900813} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1844382610} + m_TargetAssemblyTypeName: + m_MethodName: DORestartAllById + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: rotate + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1371900813 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1371900810} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &1371900814 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1371900810} + m_CullTransparentMesh: 1 +--- !u!1 &1477055226 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1477055227} + - component: {fileID: 1477055229} + - component: {fileID: 1477055228} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1477055227 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1477055226} + 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: 1644045641} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1477055228 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1477055226} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'ID: rotate' +--- !u!222 &1477055229 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1477055226} + m_CullTransparentMesh: 1 +--- !u!1 &1492174306 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1492174307} + - component: {fileID: 1492174310} + - component: {fileID: 1492174309} + - component: {fileID: 1492174308} + m_Layer: 5 + m_Name: 'Button (ID: toRed)' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1492174307 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1492174306} + 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: 1305249263} + m_Father: {fileID: 186391001} + 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: -100, y: -36} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1492174308 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1492174306} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1492174309} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1844382610} + m_TargetAssemblyTypeName: + m_MethodName: DOPlayAllById + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: toRed + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1492174309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1492174306} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &1492174310 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1492174306} + m_CullTransparentMesh: 1 +--- !u!1 &1619597525 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1619597526} + - component: {fileID: 1619597529} + - component: {fileID: 1619597528} + - component: {fileID: 1619597527} + m_Layer: 5 + m_Name: 'Button (ID: move)' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1619597526 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1619597525} + 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: 215583161} + m_Father: {fileID: 1785989881} + 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: -36} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1619597527 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1619597525} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1619597528} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1844382610} + m_TargetAssemblyTypeName: + m_MethodName: DORestartAllById + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: move + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1619597528 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1619597525} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &1619597529 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1619597525} + m_CullTransparentMesh: 1 +--- !u!1 &1644045637 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1644045641} + - component: {fileID: 1644045640} + - component: {fileID: 1644045639} + - component: {fileID: 1644045638} + m_Layer: 5 + m_Name: 'Button (ID: rotate)' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1644045638 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1644045637} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1644045639} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1844382610} + m_TargetAssemblyTypeName: + m_MethodName: DOPlayAllById + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: rotate + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1644045639 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1644045637} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &1644045640 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1644045637} + m_CullTransparentMesh: 1 +--- !u!224 &1644045641 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1644045637} + 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: 1477055227} + m_Father: {fileID: 186391001} + 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: 100, y: -36} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1760580328 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1760580329} + - component: {fileID: 1760580331} + - component: {fileID: 1760580330} + m_Layer: 0 + m_Name: Name + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1760580329 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1760580328} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 76224668} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!102 &1760580330 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1760580328} + m_Text: C + m_OffsetZ: 0 + m_CharacterSize: 20 + m_LineSpacing: 1 + m_Anchor: 4 + m_Alignment: 1 + m_TabSize: 4 + m_FontSize: 30 + m_FontStyle: 1 + m_RichText: 1 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!23 &1760580331 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1760580328} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!1 &1785989880 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1785989881} + m_Layer: 5 + m_Name: Buttons - RestartAllById + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1785989881 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1785989880} + 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: 608072283} + - {fileID: 766204080} + - {fileID: 1619597526} + - {fileID: 1371900811} + m_Father: {fileID: 1260203941} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -184} + m_SizeDelta: {x: 0, y: -48} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1812319720 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1812319721} + - component: {fileID: 1812319723} + - component: {fileID: 1812319722} + m_Layer: 5 + m_Name: Description + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1812319721 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812319720} + 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: 1997177219} + 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: 550, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1812319722 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812319720} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 'DORestartById (Cube B as target) + + Will restart only the DOTweenAnimations + with the given ID that are on Cube B' +--- !u!222 &1812319723 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1812319720} + m_CullTransparentMesh: 1 +--- !u!1 &1839080357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1839080358} + - component: {fileID: 1839080361} + - component: {fileID: 1839080360} + - component: {fileID: 1839080359} + m_Layer: 5 + m_Name: 'Button (ID: toRed)' + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1839080358 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839080357} + 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: 83016930} + m_Father: {fileID: 286188794} + 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: -100, y: -36} + m_SizeDelta: {x: 100, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1839080359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839080357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1839080360} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1844382610} + m_TargetAssemblyTypeName: + m_MethodName: DOPlayById + m_Mode: 5 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: toRed + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1839080360 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839080357} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &1839080361 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1839080357} + m_CullTransparentMesh: 1 +--- !u!1 &1844382605 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1844382606} + - component: {fileID: 1844382612} + - component: {fileID: 1844382611} + - component: {fileID: 1844382610} + - component: {fileID: 1844382609} + - component: {fileID: 1844382608} + m_Layer: 0 + m_Name: Cube B (w animation) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1844382606 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844382605} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 461995932} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1844382608 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844382605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 1 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 0 + loops: 1 + id: rotate + isRelative: 0 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 0 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 1844382606} + animationType: 3 + targetType: 0 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 180, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 1, b: 1, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!114 &1844382609 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844382605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 1 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 0 + loops: 1 + id: move + isRelative: 1 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 0 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 1844382606} + animationType: 1 + targetType: 0 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 1, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 1, b: 1, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!114 &1844382610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844382605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 1 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 0 + loops: 1 + id: toRed + isRelative: 0 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 0 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 1844382611} + animationType: 6 + targetType: 0 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 0, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 0, b: 0, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!23 &1844382611 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844382605} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1844382612 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1844382605} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1997177218 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1997177219} + m_Layer: 5 + m_Name: Buttons - RestartById + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1997177219 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1997177218} + 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: 1812319721} + - {fileID: 899835911} + - {fileID: 45542690} + - {fileID: 502741618} + m_Father: {fileID: 1260203941} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -110} + m_SizeDelta: {x: 0, y: -200} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 848136772} + - {fileID: 1242857380} + - {fileID: 118309271} + - {fileID: 1844382606} + - {fileID: 76224668} + - {fileID: 1260203941} + - {fileID: 1053889442} diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Advanced.unity.meta b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Advanced.unity.meta new file mode 100644 index 0000000..e46232a --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Advanced.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: a5f7a56d339da84449899ecf95fbe33d +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_AdvancedSettings.lighting b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_AdvancedSettings.lighting new file mode 100644 index 0000000..a58f88d --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_AdvancedSettings.lighting @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!850595691 &4890085278179872738 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: DOTweenAnimation_AdvancedSettings + serializedVersion: 9 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 0 + m_BakeBackend: 2 + m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 + m_BakeResolution: 50 + m_Padding: 2 + m_LightmapCompression: 0 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 1 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 1 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 0 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_AdvancedSettings.lighting.meta b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_AdvancedSettings.lighting.meta new file mode 100644 index 0000000..2e586dc --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_AdvancedSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 85cd2cce8645a4cbcaff5508eee0adf5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Basics.unity b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Basics.unity new file mode 100644 index 0000000..5579448 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Basics.unity @@ -0,0 +1,1826 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 1 + m_BakeResolution: 50 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 178d3b55e898640028f983fd5a906931, type: 2} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &118309267 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 118309271} + - component: {fileID: 118309270} + - component: {fileID: 118309268} + - component: {fileID: 118309273} + - component: {fileID: 118309272} + m_Layer: 0 + m_Name: Cube (w animation) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &118309268 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &118309270 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &118309271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -4, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &118309272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 2 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 1 + loops: -1 + id: + isRelative: 0 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 1 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 118309271} + animationType: 3 + targetType: 11 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 180, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 1, b: 1, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!114 &118309273 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 2 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 1 + loops: -1 + id: + isRelative: 1 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 1 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 118309271} + animationType: 1 + targetType: 11 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 4, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 1, b: 1, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!1 &848136767 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 848136772} + - component: {fileID: 848136771} + - component: {fileID: 848136769} + - component: {fileID: 848136768} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &848136768 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848136767} + m_Enabled: 1 +--- !u!124 &848136769 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848136767} + m_Enabled: 1 +--- !u!20 &848136771 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848136767} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.16176468, g: 0.16176468, b: 0.16176468, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &848136772 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848136767} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &970591913 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 970591914} + - component: {fileID: 970591916} + - component: {fileID: 970591915} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &970591914 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 970591913} + 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: 1356883401} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &970591915 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 970591913} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: PLAY +--- !u!222 &970591916 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 970591913} + m_CullTransparentMesh: 1 +--- !u!1 &990238542 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 990238543} + - component: {fileID: 990238545} + - component: {fileID: 990238544} + - component: {fileID: 990238546} + m_Layer: 5 + m_Name: Text (w text animation) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &990238543 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 990238542} + 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: 1260203941} + 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: 230} + m_SizeDelta: {x: 400, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &990238544 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 990238542} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: 'Original text that will be + tweened + +' +--- !u!222 &990238545 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 990238542} + m_CullTransparentMesh: 1 +--- !u!114 &990238546 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 990238542} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 3 + easeType: 1 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 1 + loops: 0 + id: + isRelative: 0 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 1 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 990238544} + animationType: 8 + targetType: 0 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 0, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 1, b: 1, a: 1} + endValueString: This is the new tweened text + (scandalous)! + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 1 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!1 &1053889438 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1053889442} + - component: {fileID: 1053889441} + - component: {fileID: 1053889440} + - component: {fileID: 1053889439} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1053889439 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053889438} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2d49b7c1bcd2e07499844da127be038d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_ForceModuleActive: 0 +--- !u!114 &1053889440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053889438} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1053889441 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053889438} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1053889442 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053889438} + serializedVersion: 2 + 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: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1127963255 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1127963256} + - component: {fileID: 1127963258} + - component: {fileID: 1127963257} + m_Layer: 5 + m_Name: Info + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1127963256 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1127963255} + 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: 1260203941} + 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: -186} + m_SizeDelta: {x: 300, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1127963257 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1127963255} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: The PLAY button starts the logo fade out. When the fade out is complete, + it will start all the other animations (thanks to the Events created in the logo + DOTweenAnimation Component) +--- !u!222 &1127963258 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1127963255} + m_CullTransparentMesh: 1 +--- !u!1 &1242857378 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1242857380} + - component: {fileID: 1242857379} + m_Layer: 0 + m_Name: Directional light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1242857379 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242857378} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &1242857380 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242857378} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.10938166, w: 0.8754261} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1260203940 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1260203941} + - component: {fileID: 1260203944} + - component: {fileID: 1260203943} + - component: {fileID: 1260203942} + m_Layer: 5 + m_Name: Canvas (contains animated objects) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1260203941 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260203940} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1636198022} + - {fileID: 990238543} + - {fileID: 1323952358} + - {fileID: 1356883401} + - {fileID: 1127963256} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1260203942 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260203940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1260203943 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260203940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1260203944 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260203940} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 1 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &1323952357 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1323952358} + - component: {fileID: 1323952362} + - component: {fileID: 1323952361} + - component: {fileID: 1323952360} + - component: {fileID: 1323952359} + m_Layer: 5 + m_Name: Text (w color animation) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1323952358 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323952357} + 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: 1260203941} + 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: 254} + m_SizeDelta: {x: 400, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1323952359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323952357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 3 + easeType: 1 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 1 + loops: -1 + id: + isRelative: 0 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 1 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 1323952361} + animationType: 6 + targetType: 0 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 0, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 0, b: 0.8068962, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!114 &1323952360 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323952357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 3 + easeType: 1 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 1 + loops: 0 + id: + isRelative: 1 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 1 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 1323952361} + animationType: 8 + targetType: 0 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 0, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 1, b: 1, a: 1} + endValueString: ' See? What did I tell you?' + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 1 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!114 &1323952361 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323952357} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 16 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: This text will change color... +--- !u!222 &1323952362 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1323952357} + m_CullTransparentMesh: 1 +--- !u!1 &1356883400 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1356883401} + - component: {fileID: 1356883404} + - component: {fileID: 1356883403} + - component: {fileID: 1356883402} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1356883401 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356883400} + 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: 970591914} + m_Father: {fileID: 1260203941} + 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: -147} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1356883402 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356883400} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1356883403} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1636198019} + m_TargetAssemblyTypeName: + m_MethodName: DOPlay + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1356883403 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356883400} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &1356883404 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356883400} + m_CullTransparentMesh: 1 +--- !u!1 &1636198018 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1636198022} + - component: {fileID: 1636198021} + - component: {fileID: 1636198020} + - component: {fileID: 1636198019} + m_Layer: 5 + m_Name: Logo (starts animations w events) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1636198019 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1636198018} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 1 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 990238546} + m_TargetAssemblyTypeName: + m_MethodName: DOPlay + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 118309273} + m_TargetAssemblyTypeName: + m_MethodName: DOPlay + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + - m_Target: {fileID: 1323952360} + m_TargetAssemblyTypeName: + m_MethodName: DOPlay + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + targetIsSelf: 1 + targetGO: {fileID: 0} + tweenTargetIsTargetGO: 1 + delay: 0 + duration: 1 + easeType: 5 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loopType: 0 + loops: 1 + id: + isRelative: 0 + isFrom: 0 + isIndependentUpdate: 0 + autoKill: 1 + autoGenerate: 1 + isActive: 1 + isValid: 1 + target: {fileID: 1636198020} + animationType: 7 + targetType: 0 + forcedTargetType: 0 + autoPlay: 0 + useTargetAsV3: 0 + endValueFloat: 0 + endValueV3: {x: 0, y: 0, z: 0} + endValueV2: {x: 0, y: 0} + endValueColor: {r: 1, g: 1, b: 1, a: 1} + endValueString: + endValueRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + endValueTransform: {fileID: 0} + optionalBool0: 0 + optionalBool1: 0 + optionalFloat0: 0 + optionalInt0: 0 + optionalRotationMode: 0 + optionalScrambleMode: 0 + optionalShakeRandomnessMode: 0 + optionalString: +--- !u!114 &1636198020 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1636198018} + 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: 44a054df1702e39458b7072b08d0f212, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1636198021 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1636198018} + m_CullTransparentMesh: 1 +--- !u!224 &1636198022 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1636198018} + 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: 1260203941} + 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: 45} + m_SizeDelta: {x: 241, y: 320} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 848136772} + - {fileID: 1242857380} + - {fileID: 118309271} + - {fileID: 1260203941} + - {fileID: 1053889442} diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Basics.unity.meta b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Basics.unity.meta new file mode 100644 index 0000000..226d596 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_Basics.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 6a2ad353325ffe64983c28d69a8738f5 +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_BasicsSettings.lighting b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_BasicsSettings.lighting new file mode 100644 index 0000000..a08b5c8 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_BasicsSettings.lighting @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!850595691 &4890085278179872738 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: DOTweenAnimation_BasicsSettings + serializedVersion: 9 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 0 + m_BakeBackend: 2 + m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 + m_BakeResolution: 50 + m_Padding: 2 + m_LightmapCompression: 0 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 1 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 1 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 0 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_BasicsSettings.lighting.meta b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_BasicsSettings.lighting.meta new file mode 100644 index 0000000..5558fdc --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenAnimation_BasicsSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 178d3b55e898640028f983fd5a906931 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPath.unity b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPath.unity new file mode 100644 index 0000000..a45e443 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPath.unity @@ -0,0 +1,1623 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientEquatorColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientGroundColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &4 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 1 + m_BakeResolution: 50 + m_AtlasSize: 1024 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 0 + m_ReflectionCompression: 2 + m_MixedBakeMode: 1 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 0 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 80db94a7542aa4f7ebb4b05bfe806c3b, type: 2} +--- !u!196 &5 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666666 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &118309267 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 118309271} + - component: {fileID: 118309270} + - component: {fileID: 118309268} + - component: {fileID: 118309269} + m_Layer: 0 + m_Name: Cube A (w path) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &118309268 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &118309269 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -333801856, guid: aa0b1eebb5db27a419fa4564bbe5c9c5, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 1 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1087750405} + m_TargetAssemblyTypeName: + m_MethodName: DOPlay + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + delay: 0 + duration: 3 + easeType: 6 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loops: 1 + id: + loopType: 0 + orientType: 0 + lookAtTransform: {fileID: 0} + lookAtPosition: {x: 0, y: 0, z: 0} + lookAhead: 0.01 + autoPlay: 0 + autoKill: 1 + relative: 0 + isLocal: 0 + isClosedPath: 1 + pathResolution: 10 + pathMode: 1 + lockRotation: 0 + assignForwardAndUp: 0 + forwardDirection: {x: 0, y: 0, z: 1} + upDirection: {x: 0, y: 1, z: 0} + tweenRigidbody: 0 + wps: + - {x: 3.8321667, y: 6.9544535, z: 0} + - {x: -6.0542445, y: 9.465288, z: 0} + - {x: -12.069765, y: 6.1698112, z: 0} + - {x: -12.069786, y: -0.2641964, z: 0} + - {x: -6.368099, y: -4.187376, z: 0} + fullWps: [] + path: + wpLengths: + - 0 + - 9.359136 + - 10.405018 + - 7.102792 + - 6.6672983 + - 7.1915474 + - 11.289525 + wps: + - {x: 4.45, y: -1.83, z: 0} + - {x: 3.8321667, y: 6.9544535, z: 0} + - {x: -6.0542445, y: 9.465288, z: 0} + - {x: -12.069765, y: 6.1698112, z: 0} + - {x: -12.069786, y: -0.2641964, z: 0} + - {x: -6.368099, y: -4.187376, z: 0} + - {x: 4.45, y: -1.83, z: 0} + type: 1 + subdivisionsXSegment: 10 + subdivisions: 70 + controlPoints: + - a: {x: -6.368099, y: -4.187376, z: 0} + b: {x: 0, y: 0, z: 0} + - a: {x: 3.8321667, y: 6.9544535, z: 0} + b: {x: 0, y: 0, z: 0} + length: 52.02238 + isFinalized: 1 + timesTable: + - 0.014285714 + - 0.028571429 + - 0.042857144 + - 0.057142857 + - 0.071428575 + - 0.08571429 + - 0.1 + - 0.114285715 + - 0.12857144 + - 0.14285715 + - 0.15714286 + - 0.17142858 + - 0.18571429 + - 0.2 + - 0.21428572 + - 0.22857143 + - 0.24285714 + - 0.25714287 + - 0.27142859 + - 0.2857143 + - 0.3 + - 0.31428573 + - 0.32857144 + - 0.34285715 + - 0.35714287 + - 0.37142858 + - 0.3857143 + - 0.4 + - 0.41428572 + - 0.42857143 + - 0.44285715 + - 0.45714286 + - 0.47142857 + - 0.4857143 + - 0.5 + - 0.51428574 + - 0.5285714 + - 0.54285717 + - 0.55714285 + - 0.5714286 + - 0.5857143 + - 0.6 + - 0.6142857 + - 0.62857145 + - 0.64285713 + - 0.6571429 + - 0.67142856 + - 0.6857143 + - 0.7 + - 0.71428573 + - 0.7285714 + - 0.74285716 + - 0.75714284 + - 0.7714286 + - 0.78571427 + - 0.8 + - 0.8142857 + - 0.82857144 + - 0.8428571 + - 0.85714287 + - 0.87142855 + - 0.8857143 + - 0.9 + - 0.9142857 + - 0.92857146 + - 0.94285715 + - 0.9571429 + - 0.9714286 + - 0.9857143 + - 1 + lengthsTable: + - 0.66792893 + - 1.3899281 + - 2.16896 + - 2.9980419 + - 3.8644814 + - 4.752426 + - 5.6444182 + - 6.5224686 + - 7.368998 + - 8.167948 + - 8.906464 + - 9.58573 + - 10.313842 + - 11.125577 + - 12.012393 + - 12.959278 + - 13.947668 + - 14.956963 + - 15.965341 + - 16.950247 + - 17.888689 + - 18.75748 + - 19.533484 + - 20.220243 + - 20.891918 + - 21.555 + - 22.208927 + - 22.852415 + - 23.483595 + - 24.100157 + - 24.699495 + - 25.278862 + - 25.83552 + - 26.366951 + - 26.8711 + - 27.376375 + - 27.912098 + - 28.475262 + - 29.060778 + - 29.66227 + - 30.272577 + - 30.884148 + - 31.48931 + - 32.080574 + - 32.650936 + - 33.194313 + - 33.709743 + - 34.240025 + - 34.79521 + - 35.371506 + - 35.965523 + - 36.574467 + - 37.19625 + - 37.829685 + - 38.474625 + - 39.132145 + - 39.804657 + - 40.496033 + - 41.23852 + - 42.10978 + - 43.088493 + - 44.145332 + - 45.25077 + - 46.375446 + - 47.49042 + - 48.567577 + - 49.58027 + - 50.50447 + - 51.32128 + - 52.02238 + inspectorMode: 0 + pathType: 1 + handlesType: 0 + livePreview: 1 + handlesDrawMode: 0 + perspectiveHandleSize: 0.5 + showIndexes: 1 + showWpLength: 0 + pathColor: {r: 1, g: 1, b: 1, a: 0.5} + lastSrcPosition: {x: 4.45, y: -1.83, z: 0} + lastSrcRotation: {x: 0, y: 0, z: 0, w: 0} + wpsDropdown: 0 + dropToFloorOffset: 0 +--- !u!33 &118309270 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &118309271 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118309267} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 4.45, y: -1.83, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &848136767 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 848136772} + - component: {fileID: 848136771} + - component: {fileID: 848136769} + - component: {fileID: 848136768} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &848136768 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848136767} + m_Enabled: 1 +--- !u!124 &848136769 +Behaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848136767} + m_Enabled: 1 +--- !u!20 &848136771 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848136767} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.16176468, g: 0.16176468, b: 0.16176468, a: 0.019607844} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &848136772 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 848136767} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -30} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &970591913 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 970591914} + - component: {fileID: 970591916} + - component: {fileID: 970591915} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &970591914 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 970591913} + 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: 1356883401} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &970591915 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 970591913} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.196, g: 0.196, b: 0.196, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: PLAY +--- !u!222 &970591916 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 970591913} + m_CullTransparentMesh: 1 +--- !u!1 &1053889438 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1053889442} + - component: {fileID: 1053889441} + - component: {fileID: 1053889440} + - component: {fileID: 1053889439} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1053889439 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053889438} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2d49b7c1bcd2e07499844da127be038d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_ForceModuleActive: 0 +--- !u!114 &1053889440 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053889438} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &1053889441 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053889438} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 5 +--- !u!4 &1053889442 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1053889438} + serializedVersion: 2 + 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: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1087750404 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1087750408} + - component: {fileID: 1087750407} + - component: {fileID: 1087750406} + - component: {fileID: 1087750405} + m_Layer: 0 + m_Name: Cube B (animated after Cube A) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1087750405 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1087750404} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -333801856, guid: aa0b1eebb5db27a419fa4564bbe5c9c5, type: 3} + m_Name: + m_EditorClassIdentifier: + updateType: 0 + isSpeedBased: 0 + hasOnStart: 0 + hasOnPlay: 0 + hasOnUpdate: 0 + hasOnStepComplete: 0 + hasOnComplete: 0 + hasOnTweenCreated: 0 + hasOnRewind: 0 + onStart: + m_PersistentCalls: + m_Calls: [] + onPlay: + m_PersistentCalls: + m_Calls: [] + onUpdate: + m_PersistentCalls: + m_Calls: [] + onStepComplete: + m_PersistentCalls: + m_Calls: [] + onComplete: + m_PersistentCalls: + m_Calls: [] + onTweenCreated: + m_PersistentCalls: + m_Calls: [] + onRewind: + m_PersistentCalls: + m_Calls: [] + delay: 0 + duration: 3 + easeType: 1 + easeCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + 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 + loops: -1 + id: + loopType: 0 + orientType: 0 + lookAtTransform: {fileID: 0} + lookAtPosition: {x: 0, y: 0, z: 0} + lookAhead: 0.01 + autoPlay: 0 + autoKill: 1 + relative: 1 + isLocal: 0 + isClosedPath: 1 + pathResolution: 10 + pathMode: 1 + lockRotation: 0 + assignForwardAndUp: 0 + forwardDirection: {x: 0, y: 0, z: 1} + upDirection: {x: 0, y: 1, z: 0} + tweenRigidbody: 0 + wps: + - {x: 13.417454, y: 2.978077, z: 0} + - {x: 9.493597, y: 8.510473, z: 0} + - {x: -3.3649445, y: 5.5603714, z: 0} + - {x: -13.000723, y: 12.019701, z: 0} + - {x: -19.387083, y: 4.5597005, z: 0} + - {x: -15.279156, y: -3.646319, z: 0} + - {x: -4.1231623, y: -1.0233588, z: 0} + - {x: 3.7979867, y: -4.5040193, z: 0} + fullWps: [] + path: + wpLengths: + - 0 + - 5.8644567 + - 7.2802324 + - 13.301847 + - 11.81175 + - 10.301735 + - 9.680841 + - 11.593836 + - 8.754475 + - 7.309784 + wps: + - {x: 10.45, y: -1.83, z: 0} + - {x: 13.417454, y: 2.978077, z: 0} + - {x: 9.493597, y: 8.510473, z: 0} + - {x: -3.3649445, y: 5.5603714, z: 0} + - {x: -13.000723, y: 12.019701, z: 0} + - {x: -19.387083, y: 4.5597005, z: 0} + - {x: -15.279156, y: -3.646319, z: 0} + - {x: -4.1231623, y: -1.0233588, z: 0} + - {x: 3.7979867, y: -4.5040193, z: 0} + - {x: 10.45, y: -1.83, z: 0} + type: 1 + subdivisionsXSegment: 10 + subdivisions: 100 + controlPoints: + - a: {x: 3.7979867, y: -4.5040193, z: 0} + b: {x: 0, y: 0, z: 0} + - a: {x: 13.417454, y: 2.978077, z: 0} + b: {x: 0, y: 0, z: 0} + length: 85.91056 + isFinalized: 1 + timesTable: + - 0.01 + - 0.02 + - 0.03 + - 0.04 + - 0.049999997 + - 0.06 + - 0.07 + - 0.08 + - 0.089999996 + - 0.099999994 + - 0.11 + - 0.12 + - 0.13 + - 0.14 + - 0.14999999 + - 0.16 + - 0.17 + - 0.17999999 + - 0.19 + - 0.19999999 + - 0.21 + - 0.22 + - 0.22999999 + - 0.24 + - 0.25 + - 0.26 + - 0.26999998 + - 0.28 + - 0.29 + - 0.29999998 + - 0.31 + - 0.32 + - 0.32999998 + - 0.34 + - 0.35 + - 0.35999998 + - 0.37 + - 0.38 + - 0.39 + - 0.39999998 + - 0.41 + - 0.42 + - 0.42999998 + - 0.44 + - 0.45 + - 0.45999998 + - 0.47 + - 0.48 + - 0.48999998 + - 0.5 + - 0.51 + - 0.52 + - 0.53 + - 0.53999996 + - 0.55 + - 0.56 + - 0.57 + - 0.58 + - 0.59 + - 0.59999996 + - 0.61 + - 0.62 + - 0.63 + - 0.64 + - 0.65 + - 0.65999997 + - 0.66999996 + - 0.68 + - 0.69 + - 0.7 + - 0.71 + - 0.71999997 + - 0.72999996 + - 0.74 + - 0.75 + - 0.76 + - 0.77 + - 0.78 + - 0.78999996 + - 0.79999995 + - 0.81 + - 0.82 + - 0.83 + - 0.84 + - 0.84999996 + - 0.85999995 + - 0.87 + - 0.88 + - 0.89 + - 0.9 + - 0.90999997 + - 0.91999996 + - 0.93 + - 0.94 + - 0.95 + - 0.96 + - 0.96999997 + - 0.97999996 + - 0.98999995 + - 1 + lengthsTable: + - 0.5545968 + - 1.1175883 + - 1.6830537 + - 2.245447 + - 2.7997518 + - 3.3416884 + - 3.867998 + - 4.376838 + - 4.868309 + - 5.3450947 + - 5.813135 + - 6.311367 + - 6.877433 + - 7.495066 + - 8.148528 + - 8.823632 + - 9.508459 + - 10.194385 + - 10.877503 + - 11.560418 + - 12.254057 + - 12.978595 + - 13.783311 + - 14.741959 + - 15.848983 + - 17.077965 + - 18.394625 + - 19.761522 + - 21.140495 + - 22.494476 + - 23.78951 + - 24.997858 + - 26.103634 + - 27.136875 + - 28.20907 + - 29.343433 + - 30.531721 + - 31.750658 + - 32.96895 + - 34.151752 + - 35.26419 + - 36.275455 + - 37.165974 + - 37.94238 + - 38.672184 + - 39.461693 + - 40.331173 + - 41.275455 + - 42.278408 + - 43.318016 + - 44.36911 + - 45.404976 + - 46.39841 + - 47.322807 + - 48.15364 + - 48.891544 + - 49.678425 + - 50.534695 + - 51.444313 + - 52.38865 + - 53.348053 + - 54.30292 + - 55.23473 + - 56.12729 + - 56.968613 + - 57.754013 + - 58.495777 + - 59.294735 + - 60.205452 + - 61.226448 + - 62.33766 + - 63.510315 + - 64.71169 + - 65.907745 + - 67.06497 + - 68.15262 + - 69.14602 + - 70.03488 + - 70.87562 + - 71.70776 + - 72.54151 + - 73.377945 + - 74.21172 + - 75.033615 + - 75.83277 + - 76.59903 + - 77.325615 + - 78.01288 + - 78.67338 + - 79.33375 + - 80.00281 + - 80.68108 + - 81.366684 + - 82.05582 + - 82.74328 + - 83.422775 + - 84.087204 + - 84.728836 + - 85.33948 + - 85.91056 + inspectorMode: 0 + pathType: 1 + handlesType: 0 + livePreview: 1 + handlesDrawMode: 0 + perspectiveHandleSize: 0.5 + showIndexes: 1 + showWpLength: 0 + pathColor: {r: 1, g: 1, b: 1, a: 0.5} + lastSrcPosition: {x: 10.45, y: -1.83, z: 0} + lastSrcRotation: {x: 0, y: 0, z: 0, w: 0} + wpsDropdown: 0 + dropToFloorOffset: 0 +--- !u!23 &1087750406 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1087750404} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10302, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1087750407 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1087750404} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1087750408 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1087750404} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 10.45, y: -1.83, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1127963255 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1127963256} + - component: {fileID: 1127963258} + - component: {fileID: 1127963257} + m_Layer: 5 + m_Name: Info + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1127963256 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1127963255} + 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: 1260203941} + 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: -186} + m_SizeDelta: {x: 300, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1127963257 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1127963255} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 1 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: The PLAY button starts Cube A path animation. When that is complete, it + will start the other cube's animation (thanks to the Event created in Cube A's + DOTweenPath Component) +--- !u!222 &1127963258 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1127963255} + m_CullTransparentMesh: 1 +--- !u!1 &1242857378 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1242857380} + - component: {fileID: 1242857379} + m_Layer: 0 + m_Name: Directional light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &1242857379 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242857378} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.802082 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &1242857380 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1242857378} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821794, y: -0.23456973, z: 0.10938166, w: 0.8754261} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 0.99999994, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1260203940 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1260203941} + - component: {fileID: 1260203944} + - component: {fileID: 1260203943} + - component: {fileID: 1260203942} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1260203941 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260203940} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1356883401} + - {fileID: 1127963256} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!114 &1260203942 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260203940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1260203943 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260203940} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1260203944 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1260203940} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 1 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!1 &1356883400 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1356883401} + - component: {fileID: 1356883404} + - component: {fileID: 1356883403} + - component: {fileID: 1356883402} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1356883401 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356883400} + 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: 970591914} + m_Father: {fileID: 1260203941} + 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: -147} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1356883402 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356883400} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1356883403} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 118309269} + m_TargetAssemblyTypeName: + m_MethodName: DOPlay + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &1356883403 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356883400} + 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: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + 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!222 &1356883404 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1356883400} + m_CullTransparentMesh: 1 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 848136772} + - {fileID: 1242857380} + - {fileID: 118309271} + - {fileID: 1087750408} + - {fileID: 1260203941} + - {fileID: 1053889442} diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPath.unity.meta b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPath.unity.meta new file mode 100644 index 0000000..9051851 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPath.unity.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: a351b59ca54a0bc4083c35844da13a61 +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPathSettings.lighting b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPathSettings.lighting new file mode 100644 index 0000000..dc02f9d --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPathSettings.lighting @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!850595691 &4890085278179872738 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: DOTweenPathSettings + serializedVersion: 9 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 0 + m_BakeBackend: 2 + m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 + m_BakeResolution: 50 + m_Padding: 2 + m_LightmapCompression: 0 + m_AO: 1 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 1 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 1 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 0 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPathSettings.lighting.meta b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPathSettings.lighting.meta new file mode 100644 index 0000000..73468f5 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples/DOTweenPathSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 80db94a7542aa4f7ebb4b05bfe806c3b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/Examples Assets.meta b/Assets/Plugins/Demigiant/DOTweenPro Examples/Examples Assets.meta new file mode 100644 index 0000000..27d6f9b --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro Examples/Examples Assets.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 2add6a5374e55e642a55ed3b43fd9db4 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro Examples/Examples Assets/dotweenpro_logo.png b/Assets/Plugins/Demigiant/DOTweenPro Examples/Examples Assets/dotweenpro_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c6d84204d243ecbb2398c9130d5346cc91e86889 GIT binary patch literal 17098 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�v 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%0DY$h0<3+C#9u^kxY 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 + /// Attach this to a GameObject to create a tween + /// + [AddComponentMenu("DOTween/DOTween Animation")] + public class DOTweenAnimation : ABSAnimationComponent + { + public enum AnimationType + { + None, + Move, LocalMove, + Rotate, LocalRotate, + Scale, + Color, Fade, + Text, + PunchPosition, PunchRotation, PunchScale, + ShakePosition, ShakeRotation, ShakeScale, + CameraAspect, CameraBackgroundColor, CameraFieldOfView, CameraOrthoSize, CameraPixelRect, CameraRect, + UIWidthHeight, + FillAmount + } + + public enum TargetType + { + Unset, + + Camera, + CanvasGroup, + Image, + Light, + RectTransform, + Renderer, SpriteRenderer, + Rigidbody, Rigidbody2D, + Text, + Transform, + + tk2dBaseSprite, + tk2dTextMesh, + + TextMeshPro, + TextMeshProUGUI + } + + #region EVENTS - EDITOR-ONLY + + /// Used internally by the editor + public static event Action OnReset; + static void Dispatch_OnReset(DOTweenAnimation anim) { if (OnReset != null) OnReset(anim); } + + #endregion + + public bool targetIsSelf = true; // If FALSE allows to set the target manually + public GameObject targetGO = null; // Used in case targetIsSelf is FALSE + // If FALSE always uses the GO containing this DOTweenAnimation (and not the one containing the target) as DOTween's SetTarget target + public bool tweenTargetIsTargetGO = true; + + public float delay; + public float duration = 1; + public Ease easeType = Ease.OutQuad; + public AnimationCurve easeCurve = new AnimationCurve(new Keyframe(0, 0), new Keyframe(1, 1)); + public LoopType loopType = LoopType.Restart; + public int loops = 1; + public string id = ""; + public bool isRelative; + public bool isFrom; + public bool isIndependentUpdate = false; + public bool autoKill = true; + public bool autoGenerate = true; // If TRUE automatically creates the tween at startup + + public bool isActive = true; + public bool isValid; + public Component target; + public AnimationType animationType; + public TargetType targetType; + public TargetType forcedTargetType; // Used when choosing between multiple targets + public bool autoPlay = true; + public bool useTargetAsV3; + + public float endValueFloat; + public Vector3 endValueV3; + public Vector2 endValueV2; + public Color endValueColor = new Color(1, 1, 1, 1); + public string endValueString = ""; + public Rect endValueRect = new Rect(0, 0, 0, 0); + public Transform endValueTransform; + + public bool optionalBool0, optionalBool1; + public float optionalFloat0; + public int optionalInt0; + public RotateMode optionalRotationMode = RotateMode.Fast; + public ScrambleMode optionalScrambleMode = ScrambleMode.None; + public ShakeRandomnessMode optionalShakeRandomnessMode = ShakeRandomnessMode.Full; + public string optionalString; + + bool _tweenAutoGenerationCalled; // TRUE after the tweens have been autoGenerated + int _playCount = -1; // Used when calling DOPlayNext + readonly List _tmpTweens = new List(); + + #region Unity Methods + + void Awake() + { + if (!isActive || !autoGenerate) return; + + if (animationType != AnimationType.Move || !useTargetAsV3) { + // Don't create tweens if we're using a RectTransform as a Move target, + // because that will work only inside Start + CreateTween(false, autoPlay); + _tweenAutoGenerationCalled = true; + } + } + + void Start() + { + if (_tweenAutoGenerationCalled || !isActive || !autoGenerate) return; + + CreateTween(false, autoPlay); + _tweenAutoGenerationCalled = true; + } + + void Reset() + { + Dispatch_OnReset(this); + } + + void OnDestroy() + { + if (tween != null && tween.active) tween.Kill(); + tween = null; + } + + /// + /// Creates/recreates the tween without playing it, but first rewinding and killing the existing one if present. + /// + public void RewindThenRecreateTween() + { + if (tween != null && tween.active) tween.Rewind(); + CreateTween(true, false); + } + /// + /// Creates/recreates the tween and plays it, first rewinding and killing the existing one if present. + /// + public void RewindThenRecreateTweenAndPlay() + { + if (tween != null && tween.active) tween.Rewind(); + CreateTween(true, true); + } + /// + /// Creates/recreates the tween from its target's current value without playing it, but first killing the existing one if present. + /// + public void RecreateTween() + { CreateTween(true, false); } + /// + /// Creates/recreates the tween from its target's current value and plays it, first killing the existing one if present. + /// + public void RecreateTweenAndPlay() + { CreateTween(true, true); } + // Used also by DOTweenAnimationInspector when applying runtime changes and restarting + /// + /// Creates the tween manually (called automatically if AutoGenerate is set in the Inspector) + /// from its target's current value. + /// + /// If TRUE and an existing tween was already created (and not killed), kills it and recreates it with the current + /// parameters. Otherwise, if a tween already exists, does nothing. + /// If TRUE also plays the tween, otherwise only creates it + public void CreateTween(bool regenerateIfExists = false, bool andPlay = true) + { + if (!isValid) { + if (regenerateIfExists) { // Called manually: warn users + Debug.LogWarning(string.Format("{0} :: This DOTweenAnimation isn't valid and its tween won't be created", this.gameObject.name), this.gameObject); + } + return; + } + if (tween != null) { + if (tween.active) { + if (regenerateIfExists) tween.Kill(); + else return; + } + tween = null; + } + +// if (target == null) { +// Debug.LogWarning(string.Format("{0} :: This DOTweenAnimation's target is NULL, because the animation was created with a DOTween Pro version older than 0.9.255. To fix this, exit Play mode then simply select this object, and it will update automatically", this.gameObject.name), this.gameObject); +// return; +// } + + GameObject tweenGO = GetTweenGO(); + if (target == null || tweenGO == null) { + if (targetIsSelf && target == null) { + // Old error caused during upgrade from DOTween Pro 0.9.255 + Debug.LogWarning(string.Format("{0} :: This DOTweenAnimation's target is NULL, because the animation was created with a DOTween Pro version older than 0.9.255. To fix this, exit Play mode then simply select this object, and it will update automatically", this.gameObject.name), this.gameObject); + } else { + // Missing non-self target + Debug.LogWarning(string.Format("{0} :: This DOTweenAnimation's target/GameObject is unset: the tween will not be created.", this.gameObject.name), this.gameObject); + } + return; + } + + if (forcedTargetType != TargetType.Unset) targetType = forcedTargetType; + if (targetType == TargetType.Unset) { + // Legacy DOTweenAnimation (made with a version older than 0.9.450) without stored targetType > assign it now + targetType = TypeToDOTargetType(target.GetType()); + } + + switch (animationType) { + case AnimationType.None: + break; + case AnimationType.Move: + if (useTargetAsV3) { + isRelative = false; + if (endValueTransform == null) { + Debug.LogWarning(string.Format("{0} :: This tween's TO target is NULL, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject); + endValueV3 = Vector3.zero; + } else { +#if true // UI_MARKER + if (targetType == TargetType.RectTransform) { + RectTransform endValueT = endValueTransform as RectTransform; + if (endValueT == null) { + Debug.LogWarning(string.Format("{0} :: This tween's TO target should be a RectTransform, a Vector3 of (0,0,0) will be used instead", this.gameObject.name), this.gameObject); + endValueV3 = Vector3.zero; + } else { + RectTransform rTarget = target as RectTransform; + if (rTarget == null) { + Debug.LogWarning(string.Format("{0} :: This tween's target and TO target are not of the same type. Please reassign the values", this.gameObject.name), this.gameObject); + } else { + // Problem: doesn't work inside Awake (ararargh!) + endValueV3 = DOTweenModuleUI.Utils.SwitchToRectTransform(endValueT, rTarget); + } + } + } else +#endif + endValueV3 = endValueTransform.position; + } + } + switch (targetType) { + case TargetType.Transform: + tween = ((Transform)target).DOMove(endValueV3, duration, optionalBool0); + break; + case TargetType.RectTransform: +#if true // UI_MARKER + tween = ((RectTransform)target).DOAnchorPos3D(endValueV3, duration, optionalBool0); +#else + tween = ((Transform)target).DOMove(endValueV3, duration, optionalBool0); +#endif + break; + case TargetType.Rigidbody: +#if true // PHYSICS_MARKER + tween = ((Rigidbody)target).DOMove(endValueV3, duration, optionalBool0); +#else + tween = ((Transform)target).DOMove(endValueV3, duration, optionalBool0); +#endif + break; + case TargetType.Rigidbody2D: +#if true // PHYSICS2D_MARKER + tween = ((Rigidbody2D)target).DOMove(endValueV3, duration, optionalBool0); +#else + tween = ((Transform)target).DOMove(endValueV3, duration, optionalBool0); +#endif + break; + } + break; + case AnimationType.LocalMove: + tween = tweenGO.transform.DOLocalMove(endValueV3, duration, optionalBool0); + break; + case AnimationType.Rotate: + switch (targetType) { + case TargetType.Transform: + tween = ((Transform)target).DORotate(endValueV3, duration, optionalRotationMode); + break; + case TargetType.Rigidbody: +#if true // PHYSICS_MARKER + tween = ((Rigidbody)target).DORotate(endValueV3, duration, optionalRotationMode); +#else + tween = ((Transform)target).DORotate(endValueV3, duration, optionalRotationMode); +#endif + break; + case TargetType.Rigidbody2D: +#if true // PHYSICS2D_MARKER + tween = ((Rigidbody2D)target).DORotate(endValueFloat, duration); +#else + tween = ((Transform)target).DORotate(endValueV3, duration, optionalRotationMode); +#endif + break; + } + break; + case AnimationType.LocalRotate: + tween = tweenGO.transform.DOLocalRotate(endValueV3, duration, optionalRotationMode); + break; + case AnimationType.Scale: + switch (targetType) { +#if false // TK2D_MARKER + case TargetType.tk2dTextMesh: + tween = ((tk2dTextMesh)target).DOScale(optionalBool0 ? new Vector3(endValueFloat, endValueFloat, endValueFloat) : endValueV3, duration); + break; + case TargetType.tk2dBaseSprite: + tween = ((tk2dBaseSprite)target).DOScale(optionalBool0 ? new Vector3(endValueFloat, endValueFloat, endValueFloat) : endValueV3, duration); + break; +#endif + default: + tween = tweenGO.transform.DOScale(optionalBool0 ? new Vector3(endValueFloat, endValueFloat, endValueFloat) : endValueV3, duration); + break; + } + break; +#if true // UI_MARKER + case AnimationType.UIWidthHeight: + tween = ((RectTransform)target).DOSizeDelta(optionalBool0 ? new Vector2(endValueFloat, endValueFloat) : endValueV2, duration); + break; + case AnimationType.FillAmount: + tween = ((Image)target).DOFillAmount(endValueFloat, duration); + break; +#endif + case AnimationType.Color: + isRelative = false; + switch (targetType) { + case TargetType.Renderer: + tween = ((Renderer)target).material.DOColor(endValueColor, duration); + break; + case TargetType.Light: + tween = ((Light)target).DOColor(endValueColor, duration); + break; +#if true // SPRITE_MARKER + case TargetType.SpriteRenderer: + tween = ((SpriteRenderer)target).DOColor(endValueColor, duration); + break; +#endif +#if true // UI_MARKER + case TargetType.Image: + tween = ((Graphic)target).DOColor(endValueColor, duration); + break; + case TargetType.Text: + tween = ((Text)target).DOColor(endValueColor, duration); + break; +#endif +#if false // TK2D_MARKER + case TargetType.tk2dTextMesh: + tween = ((tk2dTextMesh)target).DOColor(endValueColor, duration); + break; + case TargetType.tk2dBaseSprite: + tween = ((tk2dBaseSprite)target).DOColor(endValueColor, duration); + break; +#endif +#if false // TEXTMESHPRO_MARKER + case TargetType.TextMeshProUGUI: + tween = ((TextMeshProUGUI)target).DOColor(endValueColor, duration); + break; + case TargetType.TextMeshPro: + tween = ((TextMeshPro)target).DOColor(endValueColor, duration); + break; +#endif + } + break; + case AnimationType.Fade: + isRelative = false; + switch (targetType) { + case TargetType.Renderer: + tween = ((Renderer)target).material.DOFade(endValueFloat, duration); + break; + case TargetType.Light: + tween = ((Light)target).DOIntensity(endValueFloat, duration); + break; +#if true // SPRITE_MARKER + case TargetType.SpriteRenderer: + tween = ((SpriteRenderer)target).DOFade(endValueFloat, duration); + break; +#endif +#if true // UI_MARKER + case TargetType.Image: + tween = ((Graphic)target).DOFade(endValueFloat, duration); + break; + case TargetType.Text: + tween = ((Text)target).DOFade(endValueFloat, duration); + break; + case TargetType.CanvasGroup: + tween = ((CanvasGroup)target).DOFade(endValueFloat, duration); + break; +#endif +#if false // TK2D_MARKER + case TargetType.tk2dTextMesh: + tween = ((tk2dTextMesh)target).DOFade(endValueFloat, duration); + break; + case TargetType.tk2dBaseSprite: + tween = ((tk2dBaseSprite)target).DOFade(endValueFloat, duration); + break; +#endif +#if false // TEXTMESHPRO_MARKER + case TargetType.TextMeshProUGUI: + tween = ((TextMeshProUGUI)target).DOFade(endValueFloat, duration); + break; + case TargetType.TextMeshPro: + tween = ((TextMeshPro)target).DOFade(endValueFloat, duration); + break; +#endif + } + break; + case AnimationType.Text: +#if true // UI_MARKER + switch (targetType) { + case TargetType.Text: + tween = ((Text)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); + break; + } +#endif +#if false // TK2D_MARKER + switch (targetType) { + case TargetType.tk2dTextMesh: + tween = ((tk2dTextMesh)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); + break; + } +#endif +#if false // TEXTMESHPRO_MARKER + switch (targetType) { + case TargetType.TextMeshProUGUI: + tween = ((TextMeshProUGUI)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); + break; + case TargetType.TextMeshPro: + tween = ((TextMeshPro)target).DOText(endValueString, duration, optionalBool0, optionalScrambleMode, optionalString); + break; + } +#endif + break; + case AnimationType.PunchPosition: + switch (targetType) { + case TargetType.Transform: + tween = ((Transform)target).DOPunchPosition(endValueV3, duration, optionalInt0, optionalFloat0, optionalBool0); + break; +#if true // UI_MARKER + case TargetType.RectTransform: + tween = ((RectTransform)target).DOPunchAnchorPos(endValueV3, duration, optionalInt0, optionalFloat0, optionalBool0); + break; +#endif + } + break; + case AnimationType.PunchScale: + tween = tweenGO.transform.DOPunchScale(endValueV3, duration, optionalInt0, optionalFloat0); + break; + case AnimationType.PunchRotation: + tween = tweenGO.transform.DOPunchRotation(endValueV3, duration, optionalInt0, optionalFloat0); + break; + case AnimationType.ShakePosition: + switch (targetType) { + case TargetType.Transform: + tween = ((Transform)target).DOShakePosition(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool0, optionalBool1, optionalShakeRandomnessMode); + break; +#if true // UI_MARKER + case TargetType.RectTransform: + tween = ((RectTransform)target).DOShakeAnchorPos(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool0, optionalBool1, optionalShakeRandomnessMode); + break; +#endif + } + break; + case AnimationType.ShakeScale: + tween = tweenGO.transform.DOShakeScale(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool1, optionalShakeRandomnessMode); + break; + case AnimationType.ShakeRotation: + tween = tweenGO.transform.DOShakeRotation(duration, endValueV3, optionalInt0, optionalFloat0, optionalBool1, optionalShakeRandomnessMode); + break; + case AnimationType.CameraAspect: + tween = ((Camera)target).DOAspect(endValueFloat, duration); + break; + case AnimationType.CameraBackgroundColor: + tween = ((Camera)target).DOColor(endValueColor, duration); + break; + case AnimationType.CameraFieldOfView: + tween = ((Camera)target).DOFieldOfView(endValueFloat, duration); + break; + case AnimationType.CameraOrthoSize: + tween = ((Camera)target).DOOrthoSize(endValueFloat, duration); + break; + case AnimationType.CameraPixelRect: + tween = ((Camera)target).DOPixelRect(endValueRect, duration); + break; + case AnimationType.CameraRect: + tween = ((Camera)target).DORect(endValueRect, duration); + break; + } + + if (tween == null) return; + + // Created + + if (isFrom) { + ((Tweener)tween).From(isRelative); + } else { + tween.SetRelative(isRelative); + } + GameObject setTarget = GetTweenTarget(); + tween.SetTarget(setTarget).SetDelay(delay).SetLoops(loops, loopType).SetAutoKill(autoKill) + .OnKill(()=> tween = null); + if (isSpeedBased) tween.SetSpeedBased(); + if (easeType == Ease.INTERNAL_Custom) tween.SetEase(easeCurve); + else tween.SetEase(easeType); + if (!string.IsNullOrEmpty(id)) tween.SetId(id); + tween.SetUpdate(isIndependentUpdate); + + if (hasOnStart) { + if (onStart != null) tween.OnStart(onStart.Invoke); + } else onStart = null; + if (hasOnPlay) { + if (onPlay != null) tween.OnPlay(onPlay.Invoke); + } else onPlay = null; + if (hasOnUpdate) { + if (onUpdate != null) tween.OnUpdate(onUpdate.Invoke); + } else onUpdate = null; + if (hasOnStepComplete) { + if (onStepComplete != null) tween.OnStepComplete(onStepComplete.Invoke); + } else onStepComplete = null; + if (hasOnComplete) { + if (onComplete != null) tween.OnComplete(onComplete.Invoke); + } else onComplete = null; + if (hasOnRewind) { + if (onRewind != null) tween.OnRewind(onRewind.Invoke); + } else onRewind = null; + + if (andPlay) tween.Play(); + else tween.Pause(); + + if (hasOnTweenCreated && onTweenCreated != null) onTweenCreated.Invoke(); + } + + #endregion + + #region Public Methods + + #region Special + + /// + /// Returns the tweens (if generated and not killed) created by all DOTweenAnimations on this gameObject, + /// in the same order as they appear in the Inspector (top to bottom). + /// Note that a tween is generated inside the Awake call (except RectTransform tweens which are generated inside Start), + /// so this method won't return them before that + /// + public List GetTweens() + { + List result = new List(); + DOTweenAnimation[] anims = this.GetComponents(); + foreach (DOTweenAnimation anim in anims) { + if (anim.tween != null && anim.tween.active) result.Add(anim.tween); + } + return result; + } + + /// + /// Sets the animation target (which must be of the same type of the one set in the Inspector). + /// This is useful if you want to change it BEFORE this + /// creates a tween, while after that it won't have any effect. + /// Consider that a creates its tween inside its Awake (except for special tweens), + /// so you will need to sure your code runs before this object's Awake (via ScriptExecutionOrder or enabling/disabling methods) + /// + /// + /// New target for the animation (must be of the same type of the previous one) + /// If TRUE also uses tweenTarget's gameObject when settings the target-ID of the tween + /// (which is used with DOPlay/DORestart/etc to apply the same operation on all tweens that have the same target-id). + /// You should usually leave this to TRUE if you change the target. + /// + public void SetAnimationTarget(Component tweenTarget, bool useTweenTargetGameObjectForGroupOperations = true) + { + TargetType newTargetType = TypeToDOTargetType(target.GetType()); + if (newTargetType != targetType) { + Debug.LogError("DOTweenAnimation ► SetAnimationTarget: the new target is of a different type from the one set in the Inspector"); + return; + } + target = tweenTarget; + targetGO = target.gameObject; + tweenTargetIsTargetGO = useTweenTargetGameObjectForGroupOperations; + } + + #endregion + + /// + /// Plays all tweens whose target-id is the same as the one set by this animation + /// + public override void DOPlay() + { + DOTween.Play(GetTweenTarget()); + } + + /// + /// Plays backwards all tweens whose target-id is the same as the one set by this animation + /// + public override void DOPlayBackwards() + { + DOTween.PlayBackwards(GetTweenTarget()); + } + + /// + /// Plays foward all tweens whose target-id is the same as the one set by this animation + /// + public override void DOPlayForward() + { + DOTween.PlayForward(GetTweenTarget()); + } + + /// + /// Pauses all tweens whose target-id is the same as the one set by this animation + /// + public override void DOPause() + { + DOTween.Pause(GetTweenTarget()); + } + + /// + /// Pauses/unpauses (depending on the current state) all tweens whose target-id is the same as the one set by this animation + /// + public override void DOTogglePause() + { + DOTween.TogglePause(GetTweenTarget()); + } + + /// + /// Rewinds all tweens created by this animation in the correct order + /// + public override void DORewind() + { + _playCount = -1; + // Rewind using Components order (in case there are multiple animations on the same property) + DOTweenAnimation[] anims = this.gameObject.GetComponents(); + for (int i = anims.Length - 1; i > -1; --i) { + Tween t = anims[i].tween; + if (t != null && t.IsInitialized()) anims[i].tween.Rewind(); + } + // DOTween.Rewind(GetTweenTarget()); + } + + /// + /// Restarts all tweens whose target-id is the same as the one set by this animation + /// + public override void DORestart() + { DORestart(false); } + /// + /// Restarts all tweens whose target-id is the same as the one set by this animation + /// + /// If TRUE, re-evaluates the tween's start and end values from its current position. + /// Set it to TRUE when spawning the same DOTweenAnimation in different positions (like when using a pooling system) + public override void DORestart(bool fromHere) + { + _playCount = -1; + if (tween == null) { + if (Debugger.logPriority > 1) Debugger.LogNullTween(tween); return; + } + if (fromHere && isRelative) ReEvaluateRelativeTween(); + DOTween.Restart(GetTweenTarget()); + } + + /// + /// Completes all tweens whose target-id is the same as the one set by this animation + /// + public override void DOComplete() + { + DOTween.Complete(GetTweenTarget()); + } + + /// + /// Sends to the given time (and pauses) all the tweens whose target-id is the one set by this animation + /// + /// Time to send the tween to + public override void DOGotoAndPause(float time) + { DOGoto(time, false); } + /// + /// Sends to the given time (and plays) all the tweens whose target-id is the one set by this animation + /// + /// Time to send the tween to + public override void DOGotoAndPlay(float time) + { DOGoto(time, true); } + void DOGoto(float time, bool andPlay) + { + _tmpTweens.Clear(); + DOTween.TweensByTarget(GetTweenTarget(), false, _tmpTweens); + int len = _tmpTweens.Count; + if (len == 0) { + Debugger.LogWarning((andPlay ? "DOGotoAndPlay" : "DoGotoAndPause") + " ► tween doesn't exist"); + } else { + for (int i = 0; i < _tmpTweens.Count; ++i) { + _tmpTweens[i].Goto(time, andPlay); + } + } + _tmpTweens.Clear(); + } + + /// + /// Kills all tweens whose target-id is the same as the one set by this animation + /// + public override void DOKill() + { + DOTween.Kill(GetTweenTarget()); + tween = null; + } + + #region Specifics + + /// + /// Plays all tweens with the given ID and whose target-id is the same as the one set by this animation + /// + public void DOPlayById(string id) + { + DOTween.Play(GetTweenTarget(), id); + } + /// + /// Plays all tweens with the given ID (regardless of their target gameObject) + /// + public void DOPlayAllById(string id) + { + DOTween.Play(id); + } + + /// + /// Pauses all tweens that with the given ID (regardless of their target gameObject) + /// + public void DOPauseAllById(string id) + { + DOTween.Pause(id); + } + + /// + /// Plays backwards all tweens with the given ID and whose target-id is the same as the one set by this animation + /// + public void DOPlayBackwardsById(string id) + { + DOTween.PlayBackwards(GetTweenTarget(), id); + } + /// + /// Plays backwards all tweens with the given ID (regardless of their target gameObject) + /// + public void DOPlayBackwardsAllById(string id) + { + DOTween.PlayBackwards(id); + } + + /// + /// Plays forward all tweens with the given ID and whose target-id is the same as the one set by this animation + /// + public void DOPlayForwardById(string id) + { + DOTween.PlayForward(GetTweenTarget(), id); + } + /// + /// Plays forward all tweens with the given ID (regardless of their target gameObject) + /// + public void DOPlayForwardAllById(string id) + { + DOTween.PlayForward(id); + } + + /// + /// Plays the next animation on this animation's gameObject (if any) + /// + public void DOPlayNext() + { + DOTweenAnimation[] anims = this.GetComponents(); + while (_playCount < anims.Length - 1) { + _playCount++; + DOTweenAnimation anim = anims[_playCount]; + if (anim != null && anim.tween != null && anim.tween.active && !anim.tween.IsPlaying() && !anim.tween.IsComplete()) { + anim.tween.Play(); + break; + } + } + } + + /// + /// Rewinds all tweens with the given ID and whose target-id is the same as the one set by this animation, + /// then plays the next animation on this animation's gameObject (if any) + /// + public void DORewindAndPlayNext() + { + _playCount = -1; + DOTween.Rewind(GetTweenTarget()); + DOPlayNext(); + } + + /// + /// Rewinds all tweens with the given ID (regardless of their target gameObject) + /// + public void DORewindAllById(string id) + { + _playCount = -1; + DOTween.Rewind(id); + } + + /// + /// Restarts all tweens with the given ID and whose target-id is the same as the one set by this animation + /// + public void DORestartById(string id) + { + _playCount = -1; + DOTween.Restart(GetTweenTarget(), id); + } + /// + /// Restarts all tweens with the given ID (regardless of their target gameObject) + /// + public void DORestartAllById(string id) + { + _playCount = -1; + DOTween.Restart(id); + } + + /// + /// Kills all tweens with the given ID and whose target-id is the same as the one set by this animation + /// + public void DOKillById(string id) + { + DOTween.Kill(GetTweenTarget(), id); + } + /// + /// Kills all tweens with the given ID (regardless of their target gameObject) + /// + public void DOKillAllById(string id) + { + DOTween.Kill(id); + } + + #endregion + + #region Internal (also used by Inspector) + + public static TargetType TypeToDOTargetType(Type t) + { + string str = t.ToString(); + int dotIndex = str.LastIndexOf("."); + if (dotIndex != -1) str = str.Substring(dotIndex + 1); + if (str.IndexOf("Renderer") != -1 && (str != "SpriteRenderer")) str = "Renderer"; +//#if true // PHYSICS_MARKER +// if (str == "Rigidbody") str = "Transform"; +//#endif +//#if true // PHYSICS2D_MARKER +// if (str == "Rigidbody2D") str = "Transform"; +//#endif +#if true // UI_MARKER +// if (str == "RectTransform") str = "Transform"; + if (str == "RawImage" || str == "Graphic") str = "Image"; // RawImages/Graphics are managed like Images for DOTweenAnimation (color and fade use Graphic target anyway) +#endif + return (TargetType)Enum.Parse(typeof(TargetType), str); + } + + // Editor preview system + /// + /// Previews the tween in the editor. Only for DOTween internal usage: don't use otherwise. + /// + public Tween CreateEditorPreview() + { + if (Application.isPlaying) return null; + + // CHANGE: first param switched to TRUE otherwise changing an animation and replaying in editor would still play old one + CreateTween(true, autoPlay); + return tween; + } + + #endregion + + #endregion + + #region Private + + /// + /// Returns the gameObject whose target component should be animated + /// + /// + GameObject GetTweenGO() + { + return targetIsSelf ? this.gameObject : targetGO; + } + + /// + /// Returns the GameObject which should be used/retrieved for SetTarget + /// + GameObject GetTweenTarget() + { + return targetIsSelf || !tweenTargetIsTargetGO ? this.gameObject : targetGO; + } + + // Re-evaluate relative position of path + void ReEvaluateRelativeTween() + { + GameObject tweenGO = GetTweenGO(); + if (tweenGO == null) { + Debug.LogWarning(string.Format("{0} :: This DOTweenAnimation's target/GameObject is unset: the tween will not be created.", this.gameObject.name), this.gameObject); + return; + } + if (animationType == AnimationType.Move) { + ((Tweener)tween).ChangeEndValue(tweenGO.transform.position + endValueV3, true); + } else if (animationType == AnimationType.LocalMove) { + ((Tweener)tween).ChangeEndValue(tweenGO.transform.localPosition + endValueV3, true); + } + } + + #endregion + } + + public static class DOTweenAnimationExtensions + { +// // Doesn't work on Win 8.1 +// public static bool IsSameOrSubclassOf(this Type t, Type tBase) +// { +// return t.IsSubclassOf(tBase) || t == tBase; +// } + + public static bool IsSameOrSubclassOf(this Component t) + { + return t is T; + } + } +} diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenAnimation.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenAnimation.cs.meta new file mode 100644 index 0000000..a10ceea --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenAnimation.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4d0390bd8b8ffd640b34fe25065ff1df +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs new file mode 100644 index 0000000..8763395 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs @@ -0,0 +1,9 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2015/03/27 19:02 +// +// License Copyright (c) Daniele Giardini. +// This work is subject to the terms at http://dotween.demigiant.com/license.php + + +#if false // MODULE_MARKER +#endif diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs.meta new file mode 100644 index 0000000..32c1ec8 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeAudio.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1d1aa01bacf85c04ea18116651a7f0db +timeCreated: 1587116610 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs new file mode 100644 index 0000000..8763395 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs @@ -0,0 +1,9 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2015/03/27 19:02 +// +// License Copyright (c) Daniele Giardini. +// This work is subject to the terms at http://dotween.demigiant.com/license.php + + +#if false // MODULE_MARKER +#endif diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs.meta new file mode 100644 index 0000000..9cba4ea --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenDeUnityExtended.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0a0cc3e90c4a6ea41bb14d7f35c577c3 +timeCreated: 1587116610 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML new file mode 100644 index 0000000..ac7f862 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML @@ -0,0 +1,80 @@ + + + + DOTweenPro + + + + + Restarts the tween + + + + + Restarts the tween + + If TRUE, re-evaluates the tween's start and end values from its current position. + Set it to TRUE when spawning the same DOTweenPath in different positions (like when using a pooling system) + + + + Attach this to a GameObject to create and assign a path to it + + + + Used internally by the editor + + + + Restarts the tween + + + + + Restarts the tween + + If TRUE, re-evaluates the tween's start and end values from its current position. + Set it to TRUE when spawning the same DOTweenPath in different positions (like when using a pooling system) + + + + Sends the tween to the given time then pauses it + + Time to send the tween to + + + + Sends the tween to the given time then plays it + + Time to send the tween to + + + + Kills all tweens (path/animations/etc.) with the given ID (regardless of their target gameObject) + + + + + Returns a list of points that are used to draw the path inside the editor, + or NULL if the path hasn't been initialized yet or if its tween has been killed + + + + + Tweens a Vector3 along a spiral. + EndValue represents the direction of the spiral + + + + + Spiral tween mode + + + + The spiral motion will expand outwards for the whole the tween + + + The spiral motion will expand outwards for half the tween and then will spiral back to the starting position + + + diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML.meta new file mode 100644 index 0000000..ddc78e5 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.XML.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: db7d7ef84c388bc4fbc3835d31a15306 +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll new file mode 100644 index 0000000000000000000000000000000000000000..1c376027b5137fc6b36b3334cf4115922de9adb3 GIT binary patch literal 16384 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 N2J(wvT>t+(@LyGI0%-sM literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenUpgradeManager.dll.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll.meta similarity index 60% rename from Assets/Plugins/Demigiant/DOTween/Editor/DOTweenUpgradeManager.dll.meta rename to Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll.meta index da00e6e..9ecbfd3 100644 --- a/Assets/Plugins/Demigiant/DOTween/Editor/DOTweenUpgradeManager.dll.meta +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenPro.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2bf936a5d80799e4e88ec9270fea75a4 +guid: aa0b1eebb5db27a419fa4564bbe5c9c5 PluginImporter: serializedVersion: 1 iconMap: {} @@ -7,10 +7,10 @@ PluginImporter: isPreloaded: 0 platformData: Any: - enabled: 0 + enabled: 1 settings: {} Editor: - enabled: 1 + enabled: 0 settings: DefaultValueInitialized: true WindowsStoreApps: @@ -20,10 +20,3 @@ PluginImporter: userData: assetBundleName: assetBundleVariant: -AssetOrigin: - serializedVersion: 1 - productId: 27676 - packageName: DOTween (HOTween v2) - packageVersion: 1.2.790 - assetPath: Assets/Plugins/Demigiant/DOTween/Editor/DOTweenUpgradeManager.dll - uploadId: 831234 diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs new file mode 100644 index 0000000..4864309 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs @@ -0,0 +1,90 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +using System; +using DG.Tweening.Core; +using DG.Tweening.Plugins; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenProShortcuts + { + static DOTweenProShortcuts() + { + // Create stub instances of custom plugins, in order to allow IL2CPP to understand they must be included in the build +#pragma warning disable 219 + SpiralPlugin stub = new SpiralPlugin(); +#pragma warning restore 219 + } + + #region Shortcuts + + #region Transform + + /// Tweens a Transform's localPosition in a spiral shape. + /// Also stores the transform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The axis around which the spiral will rotate + /// The type of spiral movement + /// Speed of the rotations + /// Frequency of the rotation. Lower values lead to wider spirals + /// Indicates how much the tween should move along the spiral's axis + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOSpiral( + this Transform target, float duration, Vector3? axis = null, SpiralMode mode = SpiralMode.Expand, + float speed = 1, float frequency = 10, float depth = 0, bool snapping = false + ) { + if (Mathf.Approximately(speed, 0)) speed = 1; + if (axis == null || axis == Vector3.zero) axis = Vector3.forward; + + TweenerCore t = DOTween.To(SpiralPlugin.Get(), () => target.localPosition, x => target.localPosition = x, (Vector3)axis, duration) + .SetTarget(target); + + t.plugOptions.mode = mode; + t.plugOptions.speed = speed; + t.plugOptions.frequency = frequency; + t.plugOptions.depth = depth; + t.plugOptions.snapping = snapping; + return t; + } + + #endregion + +#if true // PHYSICS_MARKER + #region Rigidbody + + /// Tweens a Rigidbody's position in a spiral shape. + /// Also stores the transform as the tween's target so it can be used for filtered operations + /// The duration of the tween + /// The axis around which the spiral will rotate + /// The type of spiral movement + /// Speed of the rotations + /// Frequency of the rotation. Lower values lead to wider spirals + /// Indicates how much the tween should move along the spiral's axis + /// If TRUE the tween will smoothly snap all values to integers + public static Tweener DOSpiral( + this Rigidbody target, float duration, Vector3? axis = null, SpiralMode mode = SpiralMode.Expand, + float speed = 1, float frequency = 10, float depth = 0, bool snapping = false + ) { + if (Mathf.Approximately(speed, 0)) speed = 1; + if (axis == null || axis == Vector3.zero) axis = Vector3.forward; + + TweenerCore t = DOTween.To(SpiralPlugin.Get(), () => target.position, target.MovePosition, (Vector3)axis, duration) + .SetTarget(target); + + t.plugOptions.mode = mode; + t.plugOptions.speed = speed; + t.plugOptions.frequency = frequency; + t.plugOptions.depth = depth; + t.plugOptions.snapping = snapping; + return t; + } + + #endregion +#endif + + #endregion + } +} diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs.meta new file mode 100644 index 0000000..bc6e863 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenProShortcuts.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1c3190a1a1c53f449926f6d5542b4ce5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs new file mode 100644 index 0000000..d156145 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs @@ -0,0 +1,1037 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2015/03/27 19:02 +// +// License Copyright (c) Daniele Giardini. +// This work is subject to the terms at http://dotween.demigiant.com/license.php + + +#if false // MODULE_MARKER +using System; +using System.Globalization; +using System.Collections.Generic; +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; +using UnityEngine; +using TMPro; +using Object = UnityEngine.Object; + +namespace DG.Tweening +{ + public enum TMPSkewSpanMode + { + /// Applies the skew as-is (like normal skew works): the longer the text-span the higher the last character will be + Default, + /// Applies the skew scaled by the size of the text-span: the max skew/displacement will be the given skew factor + AsMaxSkewFactor + } + + /// + /// Methods that extend TMP_Text objects and allow to directly create and control tweens from their instances. + /// + public static class ShortcutExtensionsTMPText + { + #region Colors + + /// Tweens a TextMeshPro's color to the given value. + /// Also stores the TextMeshPro 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 TMP_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 TextMeshPro's faceColor to the given value. + /// Also stores the TextMeshPro 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 DOFaceColor(this TMP_Text target, Color32 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.faceColor, x => target.faceColor = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a TextMeshPro's outlineColor to the given value. + /// Also stores the TextMeshPro 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 DOOutlineColor(this TMP_Text target, Color32 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.outlineColor, x => target.outlineColor = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a TextMeshPro's glow color to the given value. + /// Also stores the TextMeshPro as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE will use the fontSharedMaterial instead than the fontMaterial + public static TweenerCore DOGlowColor(this TMP_Text target, Color endValue, float duration, bool useSharedMaterial = false) + { + TweenerCore t = useSharedMaterial + ? target.fontSharedMaterial.DOColor(endValue, "_GlowColor", duration) + : target.fontMaterial.DOColor(endValue, "_GlowColor", duration); + t.SetTarget(target); + return t; + } + + /// Tweens a TextMeshPro's alpha color to the given value. + /// Also stores the TextMeshPro 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 TMP_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 TextMeshPro faceColor's alpha to the given value. + /// Also stores the TextMeshPro 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 DOFaceFade(this TMP_Text target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.faceColor, x => target.faceColor = x, endValue, duration); + t.SetTarget(target); + return t; + } + + #endregion + + #region Other + + /// Tweens a TextMeshPro's scale to the given value (using correct uniform scale as TMP requires). + /// Also stores the TextMeshPro 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 TMP_Text target, float endValue, float duration) + { + Transform trans = target.transform; + Vector3 endValueV3 = new Vector3(endValue, endValue, endValue); + TweenerCore t = DOTween.To(() => trans.localScale, x => trans.localScale = x, endValueV3, duration); + t.SetTarget(target); + return t; + } + + /// + /// Tweens a TextMeshPro'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 TMP_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 TextMeshPro's fontSize to the given value. + /// Also stores the TextMeshPro 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 DOFontSize(this TMP_Text target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.fontSize, x => target.fontSize = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a TextMeshPro's maxVisibleCharacters to the given value. + /// Also stores the TextMeshPro 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 DOMaxVisibleCharacters(this TMP_Text target, int endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.maxVisibleCharacters, x => target.maxVisibleCharacters = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a TextMeshPro's text to the given value. + /// Also stores the TextMeshPro 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 TMP_Text target, string endValue, float duration, bool richTextEnabled = true, ScrambleMode scrambleMode = ScrambleMode.None, string scrambleChars = null) + { + TweenerCore t = DOTween.To(() => target.text, x => target.text = x, endValue, duration); + t.SetOptions(richTextEnabled, scrambleMode, scrambleChars) + .SetTarget(target); + return t; + } + + #endregion + } + + #region DOTweenTMPAnimator + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ CLASS ███████████████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + /// + /// Wrapper for objects that enables per-character tweening + /// (you don't need this if instead you want to animate the whole text object). + /// It also contains various handy methods to simply deform text without animating it ;) + /// EXAMPLE: + /// DOTweenTMPAnimator animator = new DOTweenTMPAnimator(myTextMeshProTextField); + /// Tween tween = animator.DOCharScale(characterIndex, scaleValue, duration); + /// + /// + public class DOTweenTMPAnimator : IDisposable + { + static readonly Dictionary _targetToAnimator = new Dictionary(); + + /// that this animator is linked to + public TMP_Text target { get; private set; } + public TMP_TextInfo textInfo { get; private set; } + readonly List _charTransforms = new List(); + TMP_MeshInfo[] _cachedMeshInfos; + bool _ignoreTextChangedEvent; + + /// + /// Creates a new instance of the , which is necessary to animate by single characters. + /// If a already exists for the same object it will be disposed + /// (but not its tweens, those you will have to kill manually). + /// If you want to animate the whole text object you don't need this, and you can use direct DO shortcuts instead. + /// IMPORTANT: the target must have been enabled/activated at least once before you can use it with this + /// + /// The that will be linked to this animator + public DOTweenTMPAnimator(TMP_Text target) + { + if (target == null) { + Debugger.LogError("DOTweenTMPAnimator target can't be null"); + return; + } + if (!target.gameObject.activeInHierarchy) { + Debugger.LogError("You can't create a DOTweenTMPAnimator if its target is disabled"); + return; + } + // Verify that there's no other animators for the same target, and in case dispose them + if (_targetToAnimator.ContainsKey(target)) { + if (Debugger.logPriority >= 2) { + Debugger.Log(string.Format( + "A DOTweenTMPAnimator for \"{0}\" already exists: disposing it because you can't have more than one DOTweenTMPAnimator" + + " for the same TextMesh Pro object. If you have tweens running on the disposed DOTweenTMPAnimator you should kill them manually", + target + )); + } + _targetToAnimator[target].Dispose(); + _targetToAnimator.Remove(target); + } + // + this.target = target; + _targetToAnimator.Add(target, this); + Refresh(); + // Listeners + TMPro_EventManager.TEXT_CHANGED_EVENT.Add(OnTextChanged); + } + + /// + /// If a instance exists for the given target disposes it + /// + public static void DisposeInstanceFor(TMP_Text target) + { + if (!_targetToAnimator.ContainsKey(target)) return; + _targetToAnimator[target].Dispose(); + _targetToAnimator.Remove(target); + } + + /// + /// Clears and disposes of this object + /// + public void Dispose() + { + target = null; + _charTransforms.Clear(); + textInfo = null; + _cachedMeshInfos = null; + TMPro_EventManager.TEXT_CHANGED_EVENT.Remove(OnTextChanged); + } + + /// + /// Refreshes the animator text data and resets all transformation data. Call this after you change the target + /// + public void Refresh() + { + _ignoreTextChangedEvent = true; + target.ForceMeshUpdate(true); + textInfo = target.textInfo; + _cachedMeshInfos = textInfo.CopyMeshInfoVertexData(); + int totChars = textInfo.characterCount; + int totCurrent = _charTransforms.Count; + if (totCurrent > totChars) { + _charTransforms.RemoveRange(totChars, totCurrent - totChars); + totCurrent = totChars; + } + for (int i = 0; i < totCurrent; ++i) { + CharTransform c = _charTransforms[i]; + c.ResetTransformationData(); + c.Refresh(textInfo, _cachedMeshInfos); + _charTransforms[i] = c; + } + for (int i = totCurrent; i < totChars; ++i) _charTransforms.Add(new CharTransform(i, textInfo, _cachedMeshInfos)); + _ignoreTextChangedEvent = false; + } + + /// + /// Resets all deformations + /// + public void Reset() + { + int totCurrent = _charTransforms.Count; + for (int i = 0; i < totCurrent; ++i) _charTransforms[i].ResetAll(target, textInfo.meshInfo, _cachedMeshInfos); + } + + void OnTextChanged(Object obj) + { + if (_ignoreTextChangedEvent || target == null || obj != target) return; + Refresh(); + } + + bool ValidateChar(int charIndex, bool isTween = true) + { + if (textInfo.characterCount <= charIndex) { + Debugger.LogError(string.Format("CharIndex {0} doesn't exist", charIndex)); + return false; + } + if (!textInfo.characterInfo[charIndex].isVisible) { + if (Debugger.logPriority > 1) { + if (isTween) { + Debugger.Log(string.Format( + "CharIndex {0} isn't visible, ignoring it and returning an empty tween (TextMesh Pro will behave weirdly if invisible chars are included in the animation)", + charIndex + )); + } else { + Debugger.Log(string.Format("CharIndex {0} isn't visible, ignoring it", charIndex)); + } + } + return false; + } + return true; + } + + bool ValidateSpan(int fromCharIndex, int toCharIndex, out int firstVisibleCharIndex, out int lastVisibleCharIndex) + { + firstVisibleCharIndex = -1; // First visible/existing charIndex from given index + lastVisibleCharIndex = -1; // Last visible/existing charIndex backwards from given index + int charCount = textInfo.characterCount; + if (fromCharIndex >= charCount) return false; + if (toCharIndex >= charCount) toCharIndex = charCount - 1; + for (int i = fromCharIndex; i < toCharIndex + 1; ++i) { + if (!_charTransforms[i].isVisible) continue; + firstVisibleCharIndex = i; + break; + } + if (firstVisibleCharIndex == -1) return false; + for (int i = toCharIndex; i > firstVisibleCharIndex - 1; --i) { + if (!_charTransforms[i].isVisible) continue; + lastVisibleCharIndex = i; + break; + } + if (lastVisibleCharIndex == -1) return false; + return true; + } + + #region Word Setters + + /// + /// Skews a span of characters uniformly (like normal skew works in graphic applications) + /// + /// First char index of the span to skew + /// Last char index of the span to skew + /// Skew factor + /// If TRUE skews the top side of the span, otherwise the bottom one + public void SkewSpanX(int fromCharIndex, int toCharIndex, float skewFactor, bool skewTop = true) + { + int firstVisibleCharIndex, lastVisibleCharIndex; + if (!ValidateSpan(fromCharIndex, toCharIndex, out firstVisibleCharIndex, out lastVisibleCharIndex)) return; + for (int i = firstVisibleCharIndex; i < lastVisibleCharIndex + 1; ++i) { + if (!_charTransforms[i].isVisible) continue; + CharVertices v = _charTransforms[i].GetVertices(); + float skew = SkewCharX(i, skewFactor, skewTop); + } + } + + /// + /// Skews a span of characters uniformly (like normal skew works in graphic applications) + /// + /// First char index of the span to skew + /// Last char index of the span to skew + /// Skew factor + /// Skew mode + /// If TRUE skews the right side of the span, otherwise the left one + public void SkewSpanY( + int fromCharIndex, int toCharIndex, float skewFactor, + TMPSkewSpanMode mode = TMPSkewSpanMode.Default, bool skewRight = true + ){ + int firstVisibleCharIndex, lastVisibleCharIndex; + if (!ValidateSpan(fromCharIndex, toCharIndex, out firstVisibleCharIndex, out lastVisibleCharIndex)) return; + if (mode == TMPSkewSpanMode.AsMaxSkewFactor) { + CharVertices firstVisibleCharVertices = _charTransforms[firstVisibleCharIndex].GetVertices(); + CharVertices lastVisibleCharVertices = _charTransforms[lastVisibleCharIndex].GetVertices(); + float spanW = Mathf.Abs(lastVisibleCharVertices.bottomRight.x - firstVisibleCharVertices.bottomLeft.x); + float spanH = Mathf.Abs(lastVisibleCharVertices.topRight.y - lastVisibleCharVertices.bottomRight.y); + float ratio = spanH / spanW; + skewFactor *= ratio; + } + float offsetY = 0; + CharVertices prevCharVertices = new CharVertices(); + float prevCharSkew = 0; + if (skewRight) { + for (int i = firstVisibleCharIndex; i < lastVisibleCharIndex + 1; ++i) { + if (!_charTransforms[i].isVisible) continue; + CharVertices v = _charTransforms[i].GetVertices(); + float skew = SkewCharY(i, skewFactor, skewRight); + if (i > firstVisibleCharIndex) { + float prevCharW = Mathf.Abs(prevCharVertices.bottomLeft.x - prevCharVertices.bottomRight.x); + float charsDist = Mathf.Abs(v.bottomLeft.x - prevCharVertices.bottomRight.x); + offsetY += prevCharSkew + (prevCharSkew * charsDist) / prevCharW; + SetCharOffset(i, new Vector3(0, _charTransforms[i].offset.y + offsetY, 0)); + } + prevCharVertices = v; + prevCharSkew = skew; + } + } else { + for (int i = lastVisibleCharIndex; i > firstVisibleCharIndex - 1; --i) { + if (!_charTransforms[i].isVisible) continue; + CharVertices v = _charTransforms[i].GetVertices(); + float skew = SkewCharY(i, skewFactor, skewRight); + if (i < lastVisibleCharIndex) { + float prevCharW = Mathf.Abs(prevCharVertices.bottomLeft.x - prevCharVertices.bottomRight.x); + float charsDist = Mathf.Abs(v.bottomRight.x - prevCharVertices.bottomLeft.x); + offsetY += prevCharSkew + (prevCharSkew * charsDist) / prevCharW; + SetCharOffset(i, new Vector3(0, _charTransforms[i].offset.y + offsetY, 0)); + } + prevCharVertices = v; + prevCharSkew = skew; + } + } + } + + #endregion + + #region Char Getters + + /// + /// Returns the current color of the given character, if it exists and is visible. + /// + /// Character index + public Color GetCharColor(int charIndex) + { + if (!ValidateChar(charIndex)) return Color.white; + return _charTransforms[charIndex].GetColor(textInfo.meshInfo); + } + + /// + /// Returns the current offset of the given character, if it exists and is visible. + /// + /// Character index + public Vector3 GetCharOffset(int charIndex) + { + if (!ValidateChar(charIndex)) return Vector3.zero; + return _charTransforms[charIndex].offset; + } + + /// + /// Returns the current rotation of the given character, if it exists and is visible. + /// + /// Character index + public Vector3 GetCharRotation(int charIndex) + { + if (!ValidateChar(charIndex)) return Vector3.zero; + return _charTransforms[charIndex].rotation.eulerAngles; + } + + /// + /// Returns the current scale of the given character, if it exists and is visible. + /// + /// Character index + public Vector3 GetCharScale(int charIndex) + { + if (!ValidateChar(charIndex)) return Vector3.zero; + return _charTransforms[charIndex].scale; + } + + #endregion + + #region Char Setters + + /// + /// Immediately sets the color of the given character. + /// Will do nothing if the is invalid or the character isn't visible + /// + /// Character index + /// Color to set + public void SetCharColor(int charIndex, Color32 color) + { + if (!ValidateChar(charIndex)) return; + CharTransform c = _charTransforms[charIndex]; + c.UpdateColor(target, color, textInfo.meshInfo); + _charTransforms[charIndex] = c; + } + + /// + /// Immediately sets the offset of the given character. + /// Will do nothing if the is invalid or the character isn't visible + /// + /// Character index + /// Offset to set + public void SetCharOffset(int charIndex, Vector3 offset) + { + if (!ValidateChar(charIndex)) return; + CharTransform c = _charTransforms[charIndex]; + c.UpdateGeometry(target, offset, c.rotation, c.scale, _cachedMeshInfos); + _charTransforms[charIndex] = c; + } + + /// + /// Immediately sets the rotation of the given character. + /// Will do nothing if the is invalid or the character isn't visible + /// + /// Character index + /// Rotation to set + public void SetCharRotation(int charIndex, Vector3 rotation) + { + if (!ValidateChar(charIndex)) return; + CharTransform c = _charTransforms[charIndex]; + c.UpdateGeometry(target, c.offset, Quaternion.Euler(rotation), c.scale, _cachedMeshInfos); + _charTransforms[charIndex] = c; + } + + /// + /// Immediately sets the scale of the given character. + /// Will do nothing if the is invalid or the character isn't visible + /// + /// Character index + /// Scale to set + public void SetCharScale(int charIndex, Vector3 scale) + { + if (!ValidateChar(charIndex)) return; + CharTransform c = _charTransforms[charIndex]; + c.UpdateGeometry(target, c.offset, c.rotation, scale, _cachedMeshInfos); + _charTransforms[charIndex] = c; + } + + /// + /// Immediately shifts the vertices of the given character by the given factor. + /// Will do nothing if the is invalid or the character isn't visible + /// + /// Character index + /// Top left offset + /// Top right offset + /// Bottom left offset + /// Bottom right offset + public void ShiftCharVertices(int charIndex, Vector3 topLeftShift, Vector3 topRightShift, Vector3 bottomLeftShift, Vector3 bottomRightShift) + { + if (!ValidateChar(charIndex)) return; + CharTransform c = _charTransforms[charIndex]; + c.ShiftVertices(target, topLeftShift, topRightShift, bottomLeftShift, bottomRightShift); + _charTransforms[charIndex] = c; + } + + /// + /// Skews the given character horizontally along the X axis and returns the skew amount applied (based on the character's size) + /// + /// Character index + /// skew amount + /// If TRUE skews the top side of the character, otherwise the bottom one + public float SkewCharX(int charIndex, float skewFactor, bool skewTop = true) + { + if (!ValidateChar(charIndex)) return 0; + Vector3 skewV = new Vector3(skewFactor, 0, 0); + CharTransform c = _charTransforms[charIndex]; + if (skewTop) c.ShiftVertices(target, skewV, skewV, Vector3.zero, Vector3.zero); + else c.ShiftVertices(target, Vector3.zero, Vector3.zero, skewV, skewV); + _charTransforms[charIndex] = c; + return skewFactor; + } + + /// + /// Skews the given character vertically along the Y axis and returns the skew amount applied (based on the character's size) + /// + /// Character index + /// skew amount + /// If TRUE skews the right side of the character, otherwise the left one + /// If TRUE applies exactly the given , + /// otherwise modifies it based on the aspectRation of the character + public float SkewCharY(int charIndex, float skewFactor, bool skewRight = true, bool fixedSkew = false) + { + if (!ValidateChar(charIndex)) return 0; + float skew = fixedSkew ? skewFactor : skewFactor * textInfo.characterInfo[charIndex].aspectRatio; + Vector3 skewV = new Vector3(0, skew, 0); + CharTransform c = _charTransforms[charIndex]; + if (skewRight) c.ShiftVertices(target, Vector3.zero, skewV, Vector3.zero, skewV); + else c.ShiftVertices(target, skewV, Vector3.zero, skewV, Vector3.zero); + _charTransforms[charIndex] = c; + return skew; + } + + /// + /// Resets the eventual vertices shift applied to the given character via . + /// Will do nothing if the is invalid or the character isn't visible + /// + /// Character index + public void ResetVerticesShift(int charIndex) + { + if (!ValidateChar(charIndex)) return; + CharTransform c = _charTransforms[charIndex]; + c.ResetVerticesShift(target); + _charTransforms[charIndex] = c; + } + + #endregion + + #region Char Tweens + + /// Tweens a character's alpha to the given value and returns the . + /// Will return NULL if the is invalid or the character isn't visible. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The end value to reachThe duration of the tween + public TweenerCore DOFadeChar(int charIndex, float endValue, float duration) + { + if (!ValidateChar(charIndex)) return null; + TweenerCore t = DOTween.ToAlpha(() => _charTransforms[charIndex].GetColor(textInfo.meshInfo), x => { + _charTransforms[charIndex].UpdateAlpha(target, x, textInfo.meshInfo); + }, endValue, duration); + return t; + } + + /// Tweens a character's color to the given value and returns the . + /// Will return NULL if the is invalid or the character isn't visible. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The end value to reachThe duration of the tween + public TweenerCore DOColorChar(int charIndex, Color endValue, float duration) + { + if (!ValidateChar(charIndex)) return null; + TweenerCore t = DOTween.To(() => _charTransforms[charIndex].GetColor(textInfo.meshInfo), x => { + _charTransforms[charIndex].UpdateColor(target, x, textInfo.meshInfo); + }, endValue, duration); + return t; + } + + /// Tweens a character's offset to the given value and returns the . + /// Will return NULL if the is invalid or the character isn't visible. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The end value to reachThe duration of the tween + public TweenerCore DOOffsetChar(int charIndex, Vector3 endValue, float duration) + { + if (!ValidateChar(charIndex)) return null; + TweenerCore t = DOTween.To(() => _charTransforms[charIndex].offset, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, x, charT.rotation, charT.scale, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, endValue, duration); + return t; + } + + /// Tweens a character's rotation to the given value and returns the . + /// Will return NULL if the is invalid or the character isn't visible. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The end value to reachThe duration of the tween + /// Rotation mode + public TweenerCore DORotateChar(int charIndex, Vector3 endValue, float duration, RotateMode mode = RotateMode.Fast) + { + if (!ValidateChar(charIndex)) return null; + TweenerCore t = DOTween.To(() => _charTransforms[charIndex].rotation, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, charT.offset, x, charT.scale, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, endValue, duration); + t.plugOptions.rotateMode = mode; + return t; + } + + /// Tweens a character's scale to the given value and returns the . + /// Will return NULL if the is invalid or the character isn't visible. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The end value to reachThe duration of the tween + public TweenerCore DOScaleChar(int charIndex, float endValue, float duration) + { + return DOScaleChar(charIndex, new Vector3(endValue, endValue, endValue), duration); + } + /// Tweens a character's color to the given value and returns the . + /// Will return NULL if the is invalid or the character isn't visible. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The end value to reachThe duration of the tween + public TweenerCore DOScaleChar(int charIndex, Vector3 endValue, float duration) + { + if (!ValidateChar(charIndex)) return null; + TweenerCore t = DOTween.To(() => _charTransforms[charIndex].scale, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, charT.offset, charT.rotation, x, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, endValue, duration); + return t; + } + + /// Punches a character's offset towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The punch strength + /// The duration of the tween + /// Indicates how much will the punch vibrate per second + /// 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 offset and the opposite offset, + /// while 0 oscillates only between the punch offset and the start offset + public Tweener DOPunchCharOffset(int charIndex, Vector3 punch, float duration, int vibrato = 10, float elasticity = 1) + { + if (!ValidateChar(charIndex)) return null; + if (duration <= 0) { + if (Debugger.logPriority > 0) Debug.LogWarning("Duration can't be 0, returning NULL without creating a tween"); + return null; + } + return DOTween.Punch(() => _charTransforms[charIndex].offset, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, x, charT.rotation, charT.scale, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, punch, duration, vibrato, elasticity); + } + + /// Punches a character's rotation towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The punch strength + /// The duration of the tween + /// Indicates how much will the punch vibrate per second + /// 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 rotation and the opposite rotation, + /// while 0 oscillates only between the punch rotation and the start rotation + public Tweener DOPunchCharRotation(int charIndex, Vector3 punch, float duration, int vibrato = 10, float elasticity = 1) + { + if (!ValidateChar(charIndex)) return null; + if (duration <= 0) { + if (Debugger.logPriority > 0) Debug.LogWarning("Duration can't be 0, returning NULL without creating a tween"); + return null; + } + return DOTween.Punch(() => _charTransforms[charIndex].rotation.eulerAngles, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, charT.offset, Quaternion.Euler(x), charT.scale, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, punch, duration, vibrato, elasticity); + } + + /// Punches a character's scale towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The punch strength (added to the character's current scale) + /// The duration of the tween + /// Indicates how much will the punch vibrate per second + /// 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 + public Tweener DOPunchCharScale(int charIndex, float punch, float duration, int vibrato = 10, float elasticity = 1) + { + return DOPunchCharScale(charIndex, new Vector3(punch, punch, punch), duration, vibrato, elasticity); + } + /// Punches a character's scale towards the given direction and then back to the starting one + /// as if it was connected to the starting position via an elastic. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// The punch strength (added to the character's current scale) + /// The duration of the tween + /// Indicates how much will the punch vibrate per second + /// 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 + public Tweener DOPunchCharScale(int charIndex, Vector3 punch, float duration, int vibrato = 10, float elasticity = 1) + { + if (!ValidateChar(charIndex)) return null; + if (duration <= 0) { + if (Debugger.logPriority > 0) Debug.LogWarning("Duration can't be 0, returning NULL without creating a tween"); + return null; + } + return DOTween.Punch(() => _charTransforms[charIndex].scale, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, charT.offset, charT.rotation, x, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, punch, duration, vibrato, elasticity); + } + + /// Shakes a character's offset with the given values. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// 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 + public Tweener DOShakeCharOffset(int charIndex, float duration, float strength, int vibrato = 10, float randomness = 90, bool fadeOut = true) + { + return DOShakeCharOffset(charIndex, duration, new Vector3(strength, strength, strength), vibrato, randomness, fadeOut); + } + /// Shakes a character's offset with the given values. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// 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 + public Tweener DOShakeCharOffset(int charIndex, float duration, Vector3 strength, int vibrato = 10, float randomness = 90, bool fadeOut = true) + { + if (!ValidateChar(charIndex)) return null; + if (duration <= 0) { + if (Debugger.logPriority > 0) Debug.LogWarning("Duration can't be 0, returning NULL without creating a tween"); + return null; + } + return DOTween.Shake(() => _charTransforms[charIndex].offset, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, x, charT.rotation, charT.scale, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, duration, strength, vibrato, randomness, fadeOut); + } + + /// Shakes a character's rotation with the given values. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// 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 + public Tweener DOShakeCharRotation(int charIndex, float duration, Vector3 strength, int vibrato = 10, float randomness = 90, bool fadeOut = true) + { + if (!ValidateChar(charIndex)) return null; + if (duration <= 0) { + if (Debugger.logPriority > 0) Debug.LogWarning("Duration can't be 0, returning NULL without creating a tween"); + return null; + } + return DOTween.Shake(() => _charTransforms[charIndex].rotation.eulerAngles, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, charT.offset, Quaternion.Euler(x), charT.scale, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, duration, strength, vibrato, randomness, fadeOut); + } + + /// Shakes a character's scale with the given values. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// 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 + public Tweener DOShakeCharScale(int charIndex, float duration, float strength, int vibrato = 10, float randomness = 90, bool fadeOut = true) + { + return DOShakeCharScale(charIndex, duration, new Vector3(strength, strength, strength), vibrato, randomness, fadeOut); + } + /// Shakes a character's scale with the given values. + /// The index of the character to tween (will throw an error if it doesn't exist) + /// 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 + public Tweener DOShakeCharScale(int charIndex, float duration, Vector3 strength, int vibrato = 10, float randomness = 90, bool fadeOut = true) + { + if (!ValidateChar(charIndex)) return null; + if (duration <= 0) { + if (Debugger.logPriority > 0) Debug.LogWarning("Duration can't be 0, returning NULL without creating a tween"); + return null; + } + return DOTween.Shake(() => _charTransforms[charIndex].scale, x => { + CharTransform charT = _charTransforms[charIndex]; + charT.UpdateGeometry(target, charT.offset, charT.rotation, x, _cachedMeshInfos); + _charTransforms[charIndex] = charT; + }, duration, strength, vibrato, randomness, fadeOut); + } + + #endregion + + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + + struct CharVertices + { + public Vector3 bottomLeft, topLeft, topRight, bottomRight; + + public CharVertices(Vector3 bottomLeft, Vector3 topLeft, Vector3 topRight, Vector3 bottomRight) + { + this.bottomLeft = bottomLeft; + this.topLeft = topLeft; + this.topRight = topRight; + this.bottomRight = bottomRight; + } + } + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + // Vertices of each character are: + // 0 : bottom left, 1 : top left, 2 : top right, 3 : bottom right + struct CharTransform + { + public int charIndex; + public bool isVisible { get; private set; } // FALSE both if it's invisible or if it's a space + public Vector3 offset; + public Quaternion rotation; + public Vector3 scale; + Vector3 _topLeftShift, _topRightShift, _bottomLeftShift, _bottomRightShift; + Vector3 _charMidBaselineOffset; + int _matIndex, _firstVertexIndex; + TMP_MeshInfo _meshInfo; + + public CharTransform(int charIndex, TMP_TextInfo textInfo, TMP_MeshInfo[] cachedMeshInfos) : this() + { + this.charIndex = charIndex; + offset = Vector3.zero; + rotation = Quaternion.identity; + scale = Vector3.one; + Refresh(textInfo, cachedMeshInfos); + } + + public void Refresh(TMP_TextInfo textInfo, TMP_MeshInfo[] cachedMeshInfos) + { + TMP_CharacterInfo charInfo = textInfo.characterInfo[charIndex]; + bool isSpaceChar = charInfo.character == ' '; + isVisible = charInfo.isVisible && !isSpaceChar; + _matIndex = charInfo.materialReferenceIndex; + _firstVertexIndex = charInfo.vertexIndex; + _meshInfo = textInfo.meshInfo[_matIndex]; + Vector3[] cachedVertices = cachedMeshInfos[_matIndex].vertices; + _charMidBaselineOffset = isSpaceChar + ? Vector3.zero + : (cachedVertices[_firstVertexIndex] + cachedVertices[_firstVertexIndex + 2]) * 0.5f; + } + + public void ResetAll(TMP_Text target, TMP_MeshInfo[] meshInfos, TMP_MeshInfo[] cachedMeshInfos) + { + ResetGeometry(target, cachedMeshInfos); + ResetColors(target, meshInfos); + } + + public void ResetTransformationData() + { + offset = Vector3.zero; + rotation = Quaternion.identity; + scale = Vector3.one; + _topLeftShift = _topRightShift = _bottomLeftShift = _bottomRightShift = Vector3.zero; + } + + public void ResetGeometry(TMP_Text target, TMP_MeshInfo[] cachedMeshInfos) + { + ResetTransformationData(); + Vector3[] destinationVertices = _meshInfo.vertices; + Vector3[] cachedVertices = cachedMeshInfos[_matIndex].vertices; + destinationVertices[_firstVertexIndex + 0] = cachedVertices[_firstVertexIndex + 0]; + destinationVertices[_firstVertexIndex + 1] = cachedVertices[_firstVertexIndex + 1]; + destinationVertices[_firstVertexIndex + 2] = cachedVertices[_firstVertexIndex + 2]; + destinationVertices[_firstVertexIndex + 3] = cachedVertices[_firstVertexIndex + 3]; + _meshInfo.mesh.vertices = _meshInfo.vertices; + target.UpdateGeometry(_meshInfo.mesh, _matIndex); + } + + public void ResetColors(TMP_Text target, TMP_MeshInfo[] meshInfos) + { + Color color = target.color; + Color32[] vertexCols = meshInfos[_matIndex].colors32; + vertexCols[_firstVertexIndex] = color; + vertexCols[_firstVertexIndex + 1] = color; + vertexCols[_firstVertexIndex + 2] = color; + vertexCols[_firstVertexIndex + 3] = color; + target.UpdateVertexData(TMP_VertexDataUpdateFlags.Colors32); + } + + public Color32 GetColor(TMP_MeshInfo[] meshInfos) + { + return meshInfos[_matIndex].colors32[_firstVertexIndex]; + } + + public CharVertices GetVertices() + { + return new CharVertices( + _meshInfo.vertices[_firstVertexIndex], _meshInfo.vertices[_firstVertexIndex + 1], + _meshInfo.vertices[_firstVertexIndex + 2], _meshInfo.vertices[_firstVertexIndex + 3] + ); + } + + public void UpdateAlpha(TMP_Text target, Color alphaColor, TMP_MeshInfo[] meshInfos, bool apply = true) + { + byte alphaByte = (byte)(alphaColor.a * 255); + Color32[] vertexCols = meshInfos[_matIndex].colors32; + vertexCols[_firstVertexIndex].a = alphaByte; + vertexCols[_firstVertexIndex + 1].a = alphaByte; + vertexCols[_firstVertexIndex + 2].a = alphaByte; + vertexCols[_firstVertexIndex + 3].a = alphaByte; + if (apply) target.UpdateVertexData(TMP_VertexDataUpdateFlags.Colors32); + } + + public void UpdateColor(TMP_Text target, Color32 color, TMP_MeshInfo[] meshInfos, bool apply = true) + { + Color32[] vertexCols = meshInfos[_matIndex].colors32; + vertexCols[_firstVertexIndex] = color; + vertexCols[_firstVertexIndex + 1] = color; + vertexCols[_firstVertexIndex + 2] = color; + vertexCols[_firstVertexIndex + 3] = color; + if (apply) target.UpdateVertexData(TMP_VertexDataUpdateFlags.Colors32); + } + + public void UpdateGeometry(TMP_Text target, Vector3 offset, Quaternion rotation, Vector3 scale, TMP_MeshInfo[] cachedMeshInfos, bool apply = true) + { + this.offset = offset; + this.rotation = rotation; + this.scale = scale; + + if (!apply) return; + + Vector3[] destinationVertices = _meshInfo.vertices; + Vector3[] cachedVertices = cachedMeshInfos[_matIndex].vertices; + destinationVertices[_firstVertexIndex] = cachedVertices[_firstVertexIndex + 0] - _charMidBaselineOffset; + destinationVertices[_firstVertexIndex + 1] = cachedVertices[_firstVertexIndex + 1] - _charMidBaselineOffset; + destinationVertices[_firstVertexIndex + 2] = cachedVertices[_firstVertexIndex + 2] - _charMidBaselineOffset; + destinationVertices[_firstVertexIndex + 3] = cachedVertices[_firstVertexIndex + 3] - _charMidBaselineOffset; + Matrix4x4 matrix = Matrix4x4.TRS(this.offset, this.rotation, this.scale); + destinationVertices[_firstVertexIndex] + = matrix.MultiplyPoint3x4(destinationVertices[_firstVertexIndex + 0]) + _charMidBaselineOffset + _bottomLeftShift; + destinationVertices[_firstVertexIndex + 1] + = matrix.MultiplyPoint3x4(destinationVertices[_firstVertexIndex + 1]) + _charMidBaselineOffset + _topLeftShift; + destinationVertices[_firstVertexIndex + 2] + = matrix.MultiplyPoint3x4(destinationVertices[_firstVertexIndex + 2]) + _charMidBaselineOffset + _topRightShift; + destinationVertices[_firstVertexIndex + 3] + = matrix.MultiplyPoint3x4(destinationVertices[_firstVertexIndex + 3]) + _charMidBaselineOffset + _bottomRightShift; + _meshInfo.mesh.vertices = _meshInfo.vertices; + target.UpdateGeometry(_meshInfo.mesh, _matIndex); + } + + public void ShiftVertices(TMP_Text target, Vector3 topLeftShift, Vector3 topRightShift, Vector3 bottomLeftShift, Vector3 bottomRightShift) + { + _topLeftShift += topLeftShift; + _topRightShift += topRightShift; + _bottomLeftShift += bottomLeftShift; + _bottomRightShift += bottomRightShift; + Vector3[] destinationVertices = _meshInfo.vertices; + destinationVertices[_firstVertexIndex] = destinationVertices[_firstVertexIndex] + _bottomLeftShift; + destinationVertices[_firstVertexIndex + 1] = destinationVertices[_firstVertexIndex + 1] + _topLeftShift; + destinationVertices[_firstVertexIndex + 2] = destinationVertices[_firstVertexIndex + 2] + _topRightShift; + destinationVertices[_firstVertexIndex + 3] = destinationVertices[_firstVertexIndex + 3] + _bottomRightShift; + _meshInfo.mesh.vertices = _meshInfo.vertices; + target.UpdateGeometry(_meshInfo.mesh, _matIndex); + } + + public void ResetVerticesShift(TMP_Text target) + { + Vector3[] destinationVertices = _meshInfo.vertices; + destinationVertices[_firstVertexIndex] = destinationVertices[_firstVertexIndex] - _bottomLeftShift; + destinationVertices[_firstVertexIndex + 1] = destinationVertices[_firstVertexIndex + 1] - _topLeftShift; + destinationVertices[_firstVertexIndex + 2] = destinationVertices[_firstVertexIndex + 2] - _topRightShift; + destinationVertices[_firstVertexIndex + 3] = destinationVertices[_firstVertexIndex + 3] - _bottomRightShift; + _meshInfo.mesh.vertices = _meshInfo.vertices; + target.UpdateGeometry(_meshInfo.mesh, _matIndex); + _topLeftShift = _topRightShift = _bottomLeftShift = _bottomRightShift = Vector3.zero; + } + } + } + + #endregion +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs.meta new file mode 100644 index 0000000..613cdbc --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTextMeshPro.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8fb0d65aa5b048649a3a785b82b8f8db +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs new file mode 100644 index 0000000..2ead751 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs @@ -0,0 +1,247 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2014/10/27 15:59 +// +// License Copyright (c) Daniele Giardini. +// This work is subject to the terms at http://dotween.demigiant.com/license.php + +#if false // MODULE_MARKER +using DG.Tweening.Core; +using DG.Tweening.Plugins.Options; +using UnityEngine; + +namespace DG.Tweening +{ + /// + /// Methods that extend 2D Toolkit objects and allow to directly create and control tweens from their instances. + /// + public static class ShortcutExtensionsTk2d + { + #region Sprite + + /// Tweens a 2D Toolkit Sprite's dimensions to the given value. + /// Also stores the Sprite 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 tk2dBaseSprite target, Vector3 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, endValue, duration); + t.SetTarget(target); + return t; + } + /// Tweens a Sprite's dimensions to the given value. + /// Also stores the Sprite 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 DOScaleX(this tk2dBaseSprite target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, new Vector3(endValue, 0, 0), duration); + t.SetOptions(AxisConstraint.X) + .SetTarget(target); + return t; + } + /// Tweens a Sprite's dimensions to the given value. + /// Also stores the Sprite 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 DOScaleY(this tk2dBaseSprite target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, new Vector3(0, endValue, 0), duration); + t.SetOptions(AxisConstraint.Y) + .SetTarget(target); + return t; + } + /// Tweens a Sprite's dimensions to the given value. + /// Also stores the Sprite 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 DOScaleZ(this tk2dBaseSprite target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, new Vector3(0, 0, endValue), duration); + t.SetOptions(AxisConstraint.Z) + .SetTarget(target); + return t; + } + + /// Tweens a 2D Toolkit Sprite's color to the given value. + /// Also stores the Sprite 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 tk2dBaseSprite target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a 2D Toolkit Sprite's alpha color to the given value. + /// Also stores the Sprite 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 tk2dBaseSprite target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a 2D Toolkit Sprite'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 tk2dBaseSprite 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 tk2dSlicedSprite + + /// Tweens a 2D Toolkit SlicedSprite's dimensions to the given value. + /// Also stores the SlicedSprite 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 DOScaleDimensions(this tk2dSlicedSprite target, Vector2 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.dimensions, x => target.dimensions = x, endValue, duration); + t.SetTarget(target); + return t; + } + /// Tweens a SlicedSprite's dimensions to the given value. + /// Also stores the SlicedSprite 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 DOScaleDimensionsX(this tk2dSlicedSprite target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.dimensions, x => target.dimensions = x, new Vector2(endValue, 0), duration); + t.SetOptions(AxisConstraint.X) + .SetTarget(target); + return t; + } + /// Tweens a SlicedSprite's dimensions to the given value. + /// Also stores the SlicedSprite 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 DOScaleDimensionsY(this tk2dSlicedSprite target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.dimensions, x => target.dimensions = x, new Vector2(0, endValue), duration); + t.SetOptions(AxisConstraint.Y) + .SetTarget(target); + return t; + } + + #endregion + + #region TextMesh + + /// Tweens a 2D Toolkit TextMesh's dimensions to the given value. + /// Also stores the TextMesh 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 tk2dTextMesh target, Vector3 endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, endValue, duration); + t.SetTarget(target); + return t; + } + /// Tweens a 2D Toolkit TextMesh's dimensions to the given value. + /// Also stores the TextMesh 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 DOScaleX(this tk2dTextMesh target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, new Vector3(endValue, 0, 0), duration); + t.SetOptions(AxisConstraint.X) + .SetTarget(target); + return t; + } + /// Tweens a 2D Toolkit TextMesh's dimensions to the given value. + /// Also stores the TextMesh 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 DOScaleY(this tk2dTextMesh target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, new Vector3(0, endValue, 0), duration); + t.SetOptions(AxisConstraint.Y) + .SetTarget(target); + return t; + } + /// Tweens a 2D Toolkit TextMesh's dimensions to the given value. + /// Also stores the TextMesh 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 DOScaleZ(this tk2dTextMesh target, float endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.scale, x => target.scale = x, new Vector3(0, 0, endValue), duration); + t.SetOptions(AxisConstraint.Z) + .SetTarget(target); + return t; + } + + /// Tweens a 2D Toolkit TextMesh's color to the given value. + /// Also stores the TextMesh 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 tk2dTextMesh target, Color endValue, float duration) + { + TweenerCore t = DOTween.To(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a 2D Toolkit TextMesh's alpha color to the given value. + /// Also stores the TextMesh 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 tk2dTextMesh target, float endValue, float duration) + { + TweenerCore t = DOTween.ToAlpha(() => target.color, x => target.color = x, endValue, duration); + t.SetTarget(target); + return t; + } + + /// Tweens a 2D Toolkit TextMesh'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 tk2dTextMesh 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 tk2dTextMesh's text to the given value. + /// Also stores the tk2dTextMesh 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 tk2dTextMesh target, string endValue, float duration, bool richTextEnabled = true, ScrambleMode scrambleMode = ScrambleMode.None, string scrambleChars = null) + { + TweenerCore t = DOTween.To(() => target.text, x => target.text = x, endValue, duration); + t.SetOptions(richTextEnabled, scrambleMode, scrambleChars) + .SetTarget(target); + return t; + } + + #endregion + } +} +#endif diff --git a/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs.meta new file mode 100644 index 0000000..c909f96 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/DOTweenTk2d.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b590cd7c24ffa5d4faa5b6fa993cccad +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor.meta b/Assets/Plugins/Demigiant/DOTweenPro/Editor.meta new file mode 100644 index 0000000..e9164f7 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 34ca5bde92f87fa4dbeb9593d201fde2 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs new file mode 100644 index 0000000..0f99454 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs @@ -0,0 +1,764 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2015/03/12 16:03 + +using System; +using System.Collections.Generic; +using System.IO; +using DG.DemiEditor; +using DG.DOTweenEditor.Core; +using DG.DOTweenEditor.UI; +using DG.Tweening; +using DG.Tweening.Core; +using UnityEditor; +using UnityEngine; +using DOTweenSettings = DG.Tweening.Core.DOTweenSettings; +#if true // UI_MARKER +using UnityEngine.UI; +#endif +#if false // TEXTMESHPRO_MARKER + using TMPro; +#endif + +namespace DG.DOTweenEditor +{ + [CustomEditor(typeof(DOTweenAnimation))] + public class DOTweenAnimationInspector : ABSAnimationInspector + { + enum FadeTargetType + { + CanvasGroup, + Image + } + + enum ChooseTargetMode + { + None, + BetweenCanvasGroupAndImage + } + + static readonly Dictionary _AnimationTypeToComponent = new Dictionary() { + { DOTweenAnimation.AnimationType.Move, new[] { +#if true // PHYSICS_MARKER + typeof(Rigidbody), +#endif +#if true // PHYSICS2D_MARKER + typeof(Rigidbody2D), +#endif +#if true // UI_MARKER + typeof(RectTransform), +#endif + typeof(Transform) + }}, + { DOTweenAnimation.AnimationType.Rotate, new[] { +#if true // PHYSICS_MARKER + typeof(Rigidbody), +#endif +#if true // PHYSICS2D_MARKER + typeof(Rigidbody2D), +#endif + typeof(Transform) + }}, + { DOTweenAnimation.AnimationType.LocalMove, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.LocalRotate, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.Scale, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.Color, new[] { + typeof(Light), +#if true // SPRITE_MARKER + typeof(SpriteRenderer), +#endif +#if true // UI_MARKER + typeof(Image), typeof(Text), typeof(RawImage), typeof(Graphic), +#endif + typeof(Renderer), + }}, + { DOTweenAnimation.AnimationType.Fade, new[] { + typeof(Light), +#if true // SPRITE_MARKER + typeof(SpriteRenderer), +#endif +#if true // UI_MARKER + typeof(Image), typeof(Text), typeof(CanvasGroup), typeof(RawImage), typeof(Graphic), +#endif + typeof(Renderer), + }}, +#if true // UI_MARKER + { DOTweenAnimation.AnimationType.Text, new[] { typeof(Text) } }, +#endif + { DOTweenAnimation.AnimationType.PunchPosition, new[] { +#if true // UI_MARKER + typeof(RectTransform), +#endif + typeof(Transform) + }}, + { DOTweenAnimation.AnimationType.PunchRotation, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.PunchScale, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.ShakePosition, new[] { +#if true // UI_MARKER + typeof(RectTransform), +#endif + typeof(Transform) + }}, + { DOTweenAnimation.AnimationType.ShakeRotation, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.ShakeScale, new[] { typeof(Transform) } }, + { DOTweenAnimation.AnimationType.CameraAspect, new[] { typeof(Camera) } }, + { DOTweenAnimation.AnimationType.CameraBackgroundColor, new[] { typeof(Camera) } }, + { DOTweenAnimation.AnimationType.CameraFieldOfView, new[] { typeof(Camera) } }, + { DOTweenAnimation.AnimationType.CameraOrthoSize, new[] { typeof(Camera) } }, + { DOTweenAnimation.AnimationType.CameraPixelRect, new[] { typeof(Camera) } }, + { DOTweenAnimation.AnimationType.CameraRect, new[] { typeof(Camera) } }, +#if true // UI_MARKER + { DOTweenAnimation.AnimationType.UIWidthHeight, new[] { typeof(RectTransform) } }, + { DOTweenAnimation.AnimationType.FillAmount, new[] { typeof(Image) } }, +#endif + }; + +#if false // TK2D_MARKER + static readonly Dictionary _Tk2dAnimationTypeToComponent = new Dictionary() { + { DOTweenAnimation.AnimationType.Scale, new[] { typeof(tk2dBaseSprite), typeof(tk2dTextMesh) } }, + { DOTweenAnimation.AnimationType.Color, new[] { typeof(tk2dBaseSprite), typeof(tk2dTextMesh) } }, + { DOTweenAnimation.AnimationType.Fade, new[] { typeof(tk2dBaseSprite), typeof(tk2dTextMesh) } }, + { DOTweenAnimation.AnimationType.Text, new[] { typeof(tk2dTextMesh) } } + }; +#endif +#if false // TEXTMESHPRO_MARKER + static readonly Dictionary _TMPAnimationTypeToComponent = new Dictionary() { + { DOTweenAnimation.AnimationType.Color, new[] { typeof(TextMeshPro), typeof(TextMeshProUGUI) } }, + { DOTweenAnimation.AnimationType.Fade, new[] { typeof(TextMeshPro), typeof(TextMeshProUGUI) } }, + { DOTweenAnimation.AnimationType.Text, new[] { typeof(TextMeshPro), typeof(TextMeshProUGUI) } } + }; +#endif + + static readonly string[] _AnimationType = new[] { + "None", + "Move", "LocalMove", + "Rotate", "LocalRotate", + "Scale", + "Color", "Fade", +#if true // UI_MARKER + "FillAmount", + "Text", +#endif +#if false // TK2D_MARKER + "Text", +#endif +#if false // TEXTMESHPRO_MARKER + "Text", +#endif +#if true // UI_MARKER + "UIWidthHeight", +#endif + "Punch/Position", "Punch/Rotation", "Punch/Scale", + "Shake/Position", "Shake/Rotation", "Shake/Scale", + "Camera/Aspect", "Camera/BackgroundColor", "Camera/FieldOfView", "Camera/OrthoSize", "Camera/PixelRect", "Camera/Rect" + }; + static string[] _animationTypeNoSlashes; // _AnimationType list without slashes in values + static string[] _datString; // String representation of DOTweenAnimation enum (here for caching reasons) + + DOTweenAnimation _src; + DOTweenSettings _settings; + bool _runtimeEditMode; // If TRUE allows to change and save stuff at runtime + bool _refreshRequired; // If TRUE refreshes components data + int _totComponentsOnSrc; // Used to determine if a Component is added or removed from the source + bool _isLightSrc; // Used to determine if we're tweening a Light, to set the max Fade value to more than 1 +#pragma warning disable 414 + ChooseTargetMode _chooseTargetMode = ChooseTargetMode.None; +#pragma warning restore 414 + + static readonly GUIContent _GuiC_selfTarget_true = new GUIContent( + "SELF", "Will animate components on this gameObject" + ); + static readonly GUIContent _GuiC_selfTarget_false = new GUIContent( + "OTHER", "Will animate components on the given gameObject instead than on this one" + ); + static readonly GUIContent _GuiC_tweenTargetIsTargetGO_true = new GUIContent( + "Use As Tween Target", "Will set the tween target (via SetTarget, used to control a tween directly from a target) to the \"OTHER\" gameObject" + ); + static readonly GUIContent _GuiC_tweenTargetIsTargetGO_false = new GUIContent( + "Use As Tween Target", "Will set the tween target (via SetTarget, used to control a tween directly from a target) to the gameObject containing this animation, not the \"OTHER\" one" + ); + + #region MonoBehaviour Methods + + void OnEnable() + { + _src = target as DOTweenAnimation; + _settings = DOTweenUtilityWindow.GetDOTweenSettings(); + + onStartProperty = base.serializedObject.FindProperty("onStart"); + onPlayProperty = base.serializedObject.FindProperty("onPlay"); + onUpdateProperty = base.serializedObject.FindProperty("onUpdate"); + onStepCompleteProperty = base.serializedObject.FindProperty("onStepComplete"); + onCompleteProperty = base.serializedObject.FindProperty("onComplete"); + onRewindProperty = base.serializedObject.FindProperty("onRewind"); + onTweenCreatedProperty = base.serializedObject.FindProperty("onTweenCreated"); + + // Convert _AnimationType to _animationTypeNoSlashes + int len = _AnimationType.Length; + _animationTypeNoSlashes = new string[len]; + for (int i = 0; i < len; ++i) { + string a = _AnimationType[i]; + a = a.Replace("/", ""); + _animationTypeNoSlashes[i] = a; + } + } + + void OnDisable() + { + DOTweenPreviewManager.StopAllPreviews(); + } + + override public void OnInspectorGUI() + { + base.OnInspectorGUI(); + + GUILayout.Space(3); + EditorGUIUtils.SetGUIStyles(); + + bool playMode = Application.isPlaying; + _runtimeEditMode = _runtimeEditMode && playMode; + + GUILayout.BeginHorizontal(); + EditorGUIUtils.InspectorLogo(); + GUILayout.Label(_src.animationType.ToString() + (string.IsNullOrEmpty(_src.id) ? "" : " [" + _src.id + "]"), EditorGUIUtils.sideLogoIconBoldLabelStyle); + // Up-down buttons + GUILayout.FlexibleSpace(); + if (GUILayout.Button("▲", DeGUI.styles.button.toolIco)) UnityEditorInternal.ComponentUtility.MoveComponentUp(_src); + if (GUILayout.Button("▼", DeGUI.styles.button.toolIco)) UnityEditorInternal.ComponentUtility.MoveComponentDown(_src); + GUILayout.EndHorizontal(); + + if (playMode) { + if (_runtimeEditMode) { + + } else { + GUILayout.Space(8); + GUILayout.Label("Animation Editor disabled while in play mode", EditorGUIUtils.wordWrapLabelStyle); + if (!_src.isActive) { + GUILayout.Label("This animation has been toggled as inactive and won't be generated", EditorGUIUtils.wordWrapLabelStyle); + GUI.enabled = false; + } + if (GUILayout.Button(new GUIContent("Activate Edit Mode", "Switches to Runtime Edit Mode, where you can change animations values and restart them"))) { + _runtimeEditMode = true; + } + GUILayout.Label("NOTE: when using DOPlayNext, the sequence is determined by the DOTweenAnimation Components order in the target GameObject's Inspector", EditorGUIUtils.wordWrapLabelStyle); + GUILayout.Space(10); + if (!_runtimeEditMode) return; + } + } + + Undo.RecordObject(_src, "DOTween Animation"); + Undo.RecordObject(_settings, "DOTween Animation"); + +// _src.isValid = Validate(); // Moved down + + EditorGUIUtility.labelWidth = 110; + + if (playMode) { + GUILayout.Space(4); + DeGUILayout.Toolbar("Edit Mode Commands"); + DeGUILayout.BeginVBox(DeGUI.styles.box.stickyTop); + GUILayout.BeginHorizontal(); + if (GUILayout.Button("TogglePause")) _src.tween.TogglePause(); + if (GUILayout.Button("Rewind")) _src.tween.Rewind(); + if (GUILayout.Button("Restart")) _src.tween.Restart(); + GUILayout.EndHorizontal(); + if (GUILayout.Button("Commit changes and restart")) { + _src.tween.Rewind(); + _src.tween.Kill(); + if (_src.isValid) { + _src.CreateTween(); + _src.tween.Play(); + } + } + GUILayout.Label("To apply your changes when exiting Play mode, use the Component's upper right menu and choose \"Copy Component\", then \"Paste Component Values\" after exiting Play mode", DeGUI.styles.label.wordwrap); + DeGUILayout.EndVBox(); + } else { + GUILayout.BeginHorizontal(); + bool hasManager = _src.GetComponent() != null; + EditorGUI.BeginChangeCheck(); + _settings.showPreviewPanel = hasManager + ? DeGUILayout.ToggleButton(_settings.showPreviewPanel, "Preview Controls", styles.custom.inlineToggle) + : DeGUILayout.ToggleButton(_settings.showPreviewPanel, "Preview Controls", styles.custom.inlineToggle, GUILayout.Width(120)); + if (EditorGUI.EndChangeCheck()) { + EditorUtility.SetDirty(_settings); + DOTweenPreviewManager.StopAllPreviews(); + } + if (!hasManager) { + if (GUILayout.Button(new GUIContent("Add Manager", "Adds a manager component which allows you to choose additional options for this gameObject"))) { + _src.gameObject.AddComponent(); + } + } + GUILayout.EndHorizontal(); + } + + // Preview in editor + bool isPreviewing = _settings.showPreviewPanel ? DOTweenPreviewManager.PreviewGUI(_src) : false; + + EditorGUI.BeginDisabledGroup(isPreviewing); + // Choose target + GUILayout.BeginHorizontal(); + _src.isActive = EditorGUILayout.Toggle(new GUIContent("", "If unchecked, this animation will not be created"), _src.isActive, GUILayout.Width(14)); + EditorGUI.BeginChangeCheck(); + EditorGUI.BeginChangeCheck(); + _src.targetIsSelf = DeGUILayout.ToggleButton( + _src.targetIsSelf, _src.targetIsSelf ? _GuiC_selfTarget_true : _GuiC_selfTarget_false, + new Color(1f, 0.78f, 0f), DeGUI.colors.bg.toggleOn, new Color(0.33f, 0.14f, 0.02f), DeGUI.colors.content.toggleOn, + null, GUILayout.Width(47) + ); + bool innerChanged = EditorGUI.EndChangeCheck(); + if (innerChanged) { + _src.targetGO = null; + GUI.changed = true; + } + if (_src.targetIsSelf) GUILayout.Label(_GuiC_selfTarget_true.tooltip); + else { + using (new DeGUI.ColorScope(null, null, _src.targetGO == null ? Color.red : Color.white)) { + _src.targetGO = (GameObject)EditorGUILayout.ObjectField(_src.targetGO, typeof(GameObject), true); + } + _src.tweenTargetIsTargetGO = DeGUILayout.ToggleButton( + _src.tweenTargetIsTargetGO, _src.tweenTargetIsTargetGO ? _GuiC_tweenTargetIsTargetGO_true : _GuiC_tweenTargetIsTargetGO_false, + GUILayout.Width(131) + ); + } + bool check = EditorGUI.EndChangeCheck(); + if (check) _refreshRequired = true; + GUILayout.EndHorizontal(); + + GameObject targetGO = _src.targetIsSelf ? _src.gameObject : _src.targetGO; + + if (targetGO == null) { + // Uses external target gameObject but it's not set + if (_src.targetGO != null || _src.target != null) { + _src.targetGO = null; + _src.target = null; + GUI.changed = true; + } + } else { + GUILayout.BeginHorizontal(); + DOTweenAnimation.AnimationType prevAnimType = _src.animationType; +// _src.animationType = (DOTweenAnimation.AnimationType)EditorGUILayout.EnumPopup(_src.animationType, EditorGUIUtils.popupButton); + GUI.enabled = GUI.enabled && _src.isActive; + _src.animationType = AnimationToDOTweenAnimationType(_AnimationType[EditorGUILayout.Popup(DOTweenAnimationTypeToPopupId(_src.animationType), _AnimationType)]); + _src.autoGenerate = DeGUILayout.ToggleButton(_src.autoGenerate, new GUIContent("AutoGenerate", "If selected, the tween will be generated at startup (during Start for RectTransform position tween, Awake for all the others)")); + if (_src.autoGenerate) { + _src.autoPlay = DeGUILayout.ToggleButton(_src.autoPlay, new GUIContent("AutoPlay", "If selected, the tween will play automatically")); + } + _src.autoKill = DeGUILayout.ToggleButton(_src.autoKill, new GUIContent("AutoKill", "If selected, the tween will be killed when it completes, and won't be reusable")); + GUILayout.EndHorizontal(); + if (prevAnimType != _src.animationType) { + // Set default optional values based on animation type + _src.endValueTransform = null; + _src.useTargetAsV3 = false; + switch (_src.animationType) { + case DOTweenAnimation.AnimationType.Move: + case DOTweenAnimation.AnimationType.LocalMove: + case DOTweenAnimation.AnimationType.Rotate: + case DOTweenAnimation.AnimationType.LocalRotate: + case DOTweenAnimation.AnimationType.Scale: + _src.endValueV3 = Vector3.zero; + _src.endValueFloat = 0; + _src.optionalBool0 = _src.animationType == DOTweenAnimation.AnimationType.Scale; + break; + case DOTweenAnimation.AnimationType.UIWidthHeight: + _src.endValueV3 = Vector3.zero; + _src.endValueFloat = 0; + _src.optionalBool0 = _src.animationType == DOTweenAnimation.AnimationType.UIWidthHeight; + break; + case DOTweenAnimation.AnimationType.FillAmount: + _src.endValueFloat = 1; + break; + case DOTweenAnimation.AnimationType.Color: + case DOTweenAnimation.AnimationType.Fade: + _isLightSrc = targetGO.GetComponent() != null; + _src.endValueFloat = 0; + break; + case DOTweenAnimation.AnimationType.Text: + _src.optionalBool0 = true; + break; + case DOTweenAnimation.AnimationType.PunchPosition: + case DOTweenAnimation.AnimationType.PunchRotation: + case DOTweenAnimation.AnimationType.PunchScale: + _src.endValueV3 = _src.animationType == DOTweenAnimation.AnimationType.PunchRotation ? new Vector3(0, 180, 0) : Vector3.one; + _src.optionalFloat0 = 1; + _src.optionalInt0 = 10; + _src.optionalBool0 = false; + break; + case DOTweenAnimation.AnimationType.ShakePosition: + case DOTweenAnimation.AnimationType.ShakeRotation: + case DOTweenAnimation.AnimationType.ShakeScale: + _src.endValueV3 = _src.animationType == DOTweenAnimation.AnimationType.ShakeRotation ? new Vector3(90, 90, 90) : Vector3.one; + _src.optionalInt0 = 10; + _src.optionalFloat0 = 90; + _src.optionalBool0 = false; + _src.optionalBool1 = true; + break; + case DOTweenAnimation.AnimationType.CameraAspect: + case DOTweenAnimation.AnimationType.CameraFieldOfView: + case DOTweenAnimation.AnimationType.CameraOrthoSize: + _src.endValueFloat = 0; + break; + case DOTweenAnimation.AnimationType.CameraPixelRect: + case DOTweenAnimation.AnimationType.CameraRect: + _src.endValueRect = new Rect(0, 0, 0, 0); + break; + } + } + if (_src.animationType == DOTweenAnimation.AnimationType.None) { + _src.isValid = false; + if (GUI.changed) EditorUtility.SetDirty(_src); + return; + } + + if (_refreshRequired || prevAnimType != _src.animationType || ComponentsChanged()) { + _refreshRequired = false; + _src.isValid = Validate(targetGO); + // See if we need to choose between multiple targets +#if true // UI_MARKER + if (_src.animationType == DOTweenAnimation.AnimationType.Fade && targetGO.GetComponent() != null && targetGO.GetComponent() != null) { + _chooseTargetMode = ChooseTargetMode.BetweenCanvasGroupAndImage; + // Reassign target and forcedTargetType if lost + if (_src.forcedTargetType == DOTweenAnimation.TargetType.Unset) _src.forcedTargetType = _src.targetType; + switch (_src.forcedTargetType) { + case DOTweenAnimation.TargetType.CanvasGroup: + _src.target = targetGO.GetComponent(); + break; + case DOTweenAnimation.TargetType.Image: + _src.target = targetGO.GetComponent(); + break; + } + } else { +#endif + _chooseTargetMode = ChooseTargetMode.None; + _src.forcedTargetType = DOTweenAnimation.TargetType.Unset; +#if true // UI_MARKER + } +#endif + } + + if (!_src.isValid) { + GUI.color = Color.red; + GUILayout.BeginVertical(GUI.skin.box); + GUILayout.Label("No valid Component was found for the selected animation", EditorGUIUtils.wordWrapLabelStyle); + GUILayout.EndVertical(); + GUI.color = Color.white; + if (GUI.changed) EditorUtility.SetDirty(_src); + return; + } + +#if true // UI_MARKER + // Special cases in which multiple target types could be used (set after validation) + if (_chooseTargetMode == ChooseTargetMode.BetweenCanvasGroupAndImage && _src.forcedTargetType != DOTweenAnimation.TargetType.Unset) { + FadeTargetType fadeTargetType = (FadeTargetType)Enum.Parse(typeof(FadeTargetType), _src.forcedTargetType.ToString()); + DOTweenAnimation.TargetType prevTargetType = _src.forcedTargetType; + _src.forcedTargetType = (DOTweenAnimation.TargetType)Enum.Parse(typeof(DOTweenAnimation.TargetType), EditorGUILayout.EnumPopup(_src.animationType + " Target", fadeTargetType).ToString()); + if (_src.forcedTargetType != prevTargetType) { + // Target type change > assign correct target + switch (_src.forcedTargetType) { + case DOTweenAnimation.TargetType.CanvasGroup: + _src.target = targetGO.GetComponent(); + break; + case DOTweenAnimation.TargetType.Image: + _src.target = targetGO.GetComponent(); + break; + } + } + } +#endif + + GUILayout.BeginHorizontal(); + _src.duration = EditorGUILayout.FloatField("Duration", _src.duration); + if (_src.duration < 0) _src.duration = 0; + _src.isSpeedBased = DeGUILayout.ToggleButton(_src.isSpeedBased, new GUIContent("SpeedBased", "If selected, the duration will count as units/degree x second"), DeGUI.styles.button.tool, GUILayout.Width(75)); + GUILayout.EndHorizontal(); + _src.delay = EditorGUILayout.FloatField("Delay", _src.delay); + if (_src.delay < 0) _src.delay = 0; + _src.isIndependentUpdate = EditorGUILayout.Toggle("Ignore TimeScale", _src.isIndependentUpdate); + _src.easeType = EditorGUIUtils.FilteredEasePopup("Ease", _src.easeType); + if (_src.easeType == Ease.INTERNAL_Custom) { + _src.easeCurve = EditorGUILayout.CurveField(" Ease Curve", _src.easeCurve); + } + _src.loops = EditorGUILayout.IntField(new GUIContent("Loops", "Set to -1 for infinite loops"), _src.loops); + if (_src.loops < -1) _src.loops = -1; + if (_src.loops > 1 || _src.loops == -1) + _src.loopType = (LoopType)EditorGUILayout.EnumPopup(" Loop Type", _src.loopType); + _src.id = EditorGUILayout.TextField("ID", _src.id); + + bool canBeRelative = true; + // End value and eventual specific options + switch (_src.animationType) { + case DOTweenAnimation.AnimationType.Move: + case DOTweenAnimation.AnimationType.LocalMove: + GUIEndValueV3(targetGO, _src.animationType == DOTweenAnimation.AnimationType.Move); + _src.optionalBool0 = EditorGUILayout.Toggle(" Snapping", _src.optionalBool0); + canBeRelative = !_src.useTargetAsV3; + break; + case DOTweenAnimation.AnimationType.Rotate: + case DOTweenAnimation.AnimationType.LocalRotate: + bool isRigidbody2D = DOTweenModuleUtils.Physics.HasRigidbody2D(_src); + if (isRigidbody2D) GUIEndValueFloat(); + else { + GUIEndValueV3(targetGO); + _src.optionalRotationMode = (RotateMode)EditorGUILayout.EnumPopup(" Rotation Mode", _src.optionalRotationMode); + } + break; + case DOTweenAnimation.AnimationType.Scale: + if (_src.optionalBool0) GUIEndValueFloat(); + else GUIEndValueV3(targetGO); + _src.optionalBool0 = EditorGUILayout.Toggle("Uniform Scale", _src.optionalBool0); + break; + case DOTweenAnimation.AnimationType.UIWidthHeight: + if (_src.optionalBool0) GUIEndValueFloat(); + else GUIEndValueV2(); + _src.optionalBool0 = EditorGUILayout.Toggle("Uniform Scale", _src.optionalBool0); + break; + case DOTweenAnimation.AnimationType.FillAmount: + GUIEndValueFloat(); + if (_src.endValueFloat < 0) _src.endValueFloat = 0; + if (_src.endValueFloat > 1) _src.endValueFloat = 1; + canBeRelative = false; + break; + case DOTweenAnimation.AnimationType.Color: + GUIEndValueColor(); + canBeRelative = false; + break; + case DOTweenAnimation.AnimationType.Fade: + GUIEndValueFloat(); + if (_src.endValueFloat < 0) _src.endValueFloat = 0; + if (!_isLightSrc && _src.endValueFloat > 1) _src.endValueFloat = 1; + canBeRelative = false; + break; + case DOTweenAnimation.AnimationType.Text: + GUIEndValueString(); + _src.optionalBool0 = EditorGUILayout.Toggle("Rich Text Enabled", _src.optionalBool0); + _src.optionalScrambleMode = (ScrambleMode)EditorGUILayout.EnumPopup("Scramble Mode", _src.optionalScrambleMode); + _src.optionalString = EditorGUILayout.TextField(new GUIContent("Custom Scramble", "Custom characters to use in case of ScrambleMode.Custom"), _src.optionalString); + break; + case DOTweenAnimation.AnimationType.PunchPosition: + case DOTweenAnimation.AnimationType.PunchRotation: + case DOTweenAnimation.AnimationType.PunchScale: + GUIEndValueV3(targetGO); + canBeRelative = false; + _src.optionalInt0 = EditorGUILayout.IntSlider(new GUIContent(" Vibrato", "How much will the punch vibrate"), _src.optionalInt0, 1, 50); + _src.optionalFloat0 = EditorGUILayout.Slider(new GUIContent(" Elasticity", "How much the vector will go beyond the starting position when bouncing backwards"), _src.optionalFloat0, 0, 1); + if (_src.animationType == DOTweenAnimation.AnimationType.PunchPosition) _src.optionalBool0 = EditorGUILayout.Toggle(" Snapping", _src.optionalBool0); + break; + case DOTweenAnimation.AnimationType.ShakePosition: + case DOTweenAnimation.AnimationType.ShakeRotation: + case DOTweenAnimation.AnimationType.ShakeScale: + GUIEndValueV3(targetGO); + canBeRelative = false; + _src.optionalInt0 = EditorGUILayout.IntSlider(new GUIContent(" Vibrato", "How much will the shake vibrate"), _src.optionalInt0, 1, 50); + using (new GUILayout.HorizontalScope()) { + _src.optionalFloat0 = EditorGUILayout.Slider(new GUIContent(" Randomness", "The shake randomness"), _src.optionalFloat0, 0, 90); + _src.optionalShakeRandomnessMode = (ShakeRandomnessMode)EditorGUILayout.EnumPopup(_src.optionalShakeRandomnessMode, GUILayout.Width(70)); + } + _src.optionalBool1 = EditorGUILayout.Toggle(new GUIContent(" FadeOut", "If selected the shake will fade out, otherwise it will constantly play with full force"), _src.optionalBool1); + if (_src.animationType == DOTweenAnimation.AnimationType.ShakePosition) _src.optionalBool0 = EditorGUILayout.Toggle(" Snapping", _src.optionalBool0); + break; + case DOTweenAnimation.AnimationType.CameraAspect: + case DOTweenAnimation.AnimationType.CameraFieldOfView: + case DOTweenAnimation.AnimationType.CameraOrthoSize: + GUIEndValueFloat(); + canBeRelative = false; + break; + case DOTweenAnimation.AnimationType.CameraBackgroundColor: + GUIEndValueColor(); + canBeRelative = false; + break; + case DOTweenAnimation.AnimationType.CameraPixelRect: + case DOTweenAnimation.AnimationType.CameraRect: + GUIEndValueRect(); + canBeRelative = false; + break; + } + + // Final settings + if (canBeRelative) _src.isRelative = EditorGUILayout.Toggle(" Relative", _src.isRelative); + + // Events + AnimationInspectorGUI.AnimationEvents(this, _src); + } + EditorGUI.EndDisabledGroup(); + + if (GUI.changed) EditorUtility.SetDirty(_src); + } + + #endregion + + #region Methods + + // Returns TRUE if the Component layout on the src gameObject changed (a Component was added or removed) + bool ComponentsChanged() + { + int prevTotComponentsOnSrc = _totComponentsOnSrc; + _totComponentsOnSrc = _src.gameObject.GetComponents().Length; + return prevTotComponentsOnSrc != _totComponentsOnSrc; + } + + // Checks if a Component that can be animated with the given animationType is attached to the src + bool Validate(GameObject targetGO) + { + if (_src.animationType == DOTweenAnimation.AnimationType.None) return false; + + Component srcTarget; + // First check for external plugins +#if false // TK2D_MARKER + if (_Tk2dAnimationTypeToComponent.ContainsKey(_src.animationType)) { + foreach (Type t in _Tk2dAnimationTypeToComponent[_src.animationType]) { + srcTarget = targetGO.GetComponent(t); + if (srcTarget != null) { + _src.target = srcTarget; + _src.targetType = DOTweenAnimation.TypeToDOTargetType(t); + return true; + } + } + } +#endif +#if false // TEXTMESHPRO_MARKER + if (_TMPAnimationTypeToComponent.ContainsKey(_src.animationType)) { + foreach (Type t in _TMPAnimationTypeToComponent[_src.animationType]) { + srcTarget = targetGO.GetComponent(t); + if (srcTarget != null) { + _src.target = srcTarget; + _src.targetType = DOTweenAnimation.TypeToDOTargetType(t); + return true; + } + } + } +#endif + // Then check for regular stuff + if (_AnimationTypeToComponent.ContainsKey(_src.animationType)) { + foreach (Type t in _AnimationTypeToComponent[_src.animationType]) { + srcTarget = targetGO.GetComponent(t); + if (srcTarget != null) { + _src.target = srcTarget; + _src.targetType = DOTweenAnimation.TypeToDOTargetType(t); + return true; + } + } + } + return false; + } + + DOTweenAnimation.AnimationType AnimationToDOTweenAnimationType(string animation) + { + if (_datString == null) _datString = Enum.GetNames(typeof(DOTweenAnimation.AnimationType)); + animation = animation.Replace("/", ""); + return (DOTweenAnimation.AnimationType)(Array.IndexOf(_datString, animation)); + } + int DOTweenAnimationTypeToPopupId(DOTweenAnimation.AnimationType animation) + { + return Array.IndexOf(_animationTypeNoSlashes, animation.ToString()); + } + + #endregion + + #region GUI Draw Methods + + void GUIEndValueFloat() + { + GUILayout.BeginHorizontal(); + GUIToFromButton(); + _src.endValueFloat = EditorGUILayout.FloatField(_src.endValueFloat); + GUILayout.EndHorizontal(); + } + + void GUIEndValueColor() + { + GUILayout.BeginHorizontal(); + GUIToFromButton(); + _src.endValueColor = EditorGUILayout.ColorField(_src.endValueColor); + GUILayout.EndHorizontal(); + } + + void GUIEndValueV3(GameObject targetGO, bool optionalTransform = false) + { + GUILayout.BeginHorizontal(); + GUIToFromButton(); + if (_src.useTargetAsV3) { + Transform prevT = _src.endValueTransform; + _src.endValueTransform = EditorGUILayout.ObjectField(_src.endValueTransform, typeof(Transform), true) as Transform; + if (_src.endValueTransform != prevT && _src.endValueTransform != null) { +#if true // UI_MARKER + // Check that it's a Transform for a Transform or a RectTransform for a RectTransform + if (targetGO.GetComponent() != null) { + if (_src.endValueTransform.GetComponent() == null) { + EditorUtility.DisplayDialog("DOTween Pro", "For Unity UI elements, the target must also be a UI element", "Ok"); + _src.endValueTransform = null; + } + } else if (_src.endValueTransform.GetComponent() != null) { + EditorUtility.DisplayDialog("DOTween Pro", "You can't use a UI target for a non UI object", "Ok"); + _src.endValueTransform = null; + } +#endif + } + } else { + _src.endValueV3 = EditorGUILayout.Vector3Field("", _src.endValueV3, GUILayout.Height(16)); + } + if (optionalTransform) { + if (GUILayout.Button(_src.useTargetAsV3 ? "target" : "value", EditorGUIUtils.sideBtStyle, GUILayout.Width(44))) _src.useTargetAsV3 = !_src.useTargetAsV3; + } + GUILayout.EndHorizontal(); +#if true // UI_MARKER + if (_src.useTargetAsV3 && _src.endValueTransform != null && _src.target is RectTransform) { + EditorGUILayout.HelpBox("NOTE: when using a UI target, the tween will be created during Start instead of Awake", MessageType.Info); + } +#endif + } + + void GUIEndValueV2() + { + GUILayout.BeginHorizontal(); + GUIToFromButton(); + _src.endValueV2 = EditorGUILayout.Vector2Field("", _src.endValueV2, GUILayout.Height(16)); + GUILayout.EndHorizontal(); + } + + void GUIEndValueString() + { + GUILayout.BeginHorizontal(); + GUIToFromButton(); + _src.endValueString = EditorGUILayout.TextArea(_src.endValueString, EditorGUIUtils.wordWrapTextArea); + GUILayout.EndHorizontal(); + } + + void GUIEndValueRect() + { + GUILayout.BeginHorizontal(); + GUIToFromButton(); + _src.endValueRect = EditorGUILayout.RectField(_src.endValueRect); + GUILayout.EndHorizontal(); + } + + void GUIToFromButton() + { + if (GUILayout.Button(_src.isFrom ? "FROM" : "TO", EditorGUIUtils.sideBtStyle, GUILayout.Width(90))) _src.isFrom = !_src.isFrom; + GUILayout.Space(16); + } + + #endregion + } + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + [InitializeOnLoad] + static class Initializer + { + static Initializer() + { + DOTweenAnimation.OnReset += OnReset; + } + + static void OnReset(DOTweenAnimation src) + { + DOTweenSettings settings = DOTweenUtilityWindow.GetDOTweenSettings(); + if (settings == null) return; + + Undo.RecordObject(src, "DOTweenAnimation"); + src.autoPlay = settings.defaultAutoPlay == AutoPlay.All || settings.defaultAutoPlay == AutoPlay.AutoPlayTweeners; + src.autoKill = settings.defaultAutoKill; + EditorUtility.SetDirty(src); + } + } +} diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs.meta new file mode 100644 index 0000000..d2d7eee --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenAnimationInspector.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e0203fd81362bab4d842d87ad09ee76e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs new file mode 100644 index 0000000..8ad8b76 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs @@ -0,0 +1,265 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2015/03/12 16:03 + +using System; +using System.Collections.Generic; +using DG.DemiEditor; +using DG.DemiLib; +using DG.Tweening; +using DG.Tweening.Core; +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace DG.DOTweenEditor +{ + public static class DOTweenPreviewManager + { + static bool _previewOnlyIfSetToAutoPlay = true; + static readonly Dictionary _AnimationToTween = new Dictionary(); + static readonly List _TmpKeys = new List(); + + #region Public Methods & GUI + + /// + /// Returns TRUE if its actually previewing animations + /// + public static bool PreviewGUI(DOTweenAnimation src) + { + if (EditorApplication.isPlaying) return false; + + Styles.Init(); + + bool isPreviewing = _AnimationToTween.Count > 0; + bool isPreviewingThis = isPreviewing && _AnimationToTween.ContainsKey(src); + + // Preview in editor + GUI.backgroundColor = isPreviewing + ? new DeSkinColor(new Color(0.49f, 0.8f, 0.86f), new Color(0.15f, 0.26f, 0.35f)) + : new DeSkinColor(Color.white, new Color(0.13f, 0.13f, 0.13f)); + GUILayout.BeginVertical(Styles.previewBox); + DeGUI.ResetGUIColors(); + GUILayout.BeginHorizontal(); + GUILayout.Label("Preview Mode - Experimental", Styles.previewLabel); + _previewOnlyIfSetToAutoPlay = DeGUILayout.ToggleButton( + _previewOnlyIfSetToAutoPlay, + new GUIContent("AutoPlay only", "If toggled only previews animations that have AutoPlay turned ON"), + Styles.btOption + ); + GUILayout.EndHorizontal(); + GUILayout.Space(1); + // Preview - Play + GUILayout.BeginHorizontal(); + EditorGUI.BeginDisabledGroup( + isPreviewingThis || src.animationType == DOTweenAnimation.AnimationType.None + || !src.isActive || _previewOnlyIfSetToAutoPlay && !src.autoPlay + ); + if (GUILayout.Button("► Play", Styles.btPreview)) { + if (!isPreviewing) StartupGlobalPreview(); + AddAnimationToGlobalPreview(src); + } + EditorGUI.EndDisabledGroup(); + EditorGUI.BeginDisabledGroup(isPreviewing); + if (GUILayout.Button("► Play All on GameObject", Styles.btPreview)) { + if (!isPreviewing) StartupGlobalPreview(); + DOTweenAnimation[] anims = src.gameObject.GetComponents(); + foreach (DOTweenAnimation anim in anims) AddAnimationToGlobalPreview(anim); + } + if (GUILayout.Button("► Play All in Scene", Styles.btPreview)) { + if (!isPreviewing) StartupGlobalPreview(); + // DOTweenAnimation[] anims = Object.FindObjectsOfType(); // OBSOLETE + DOTweenAnimation[] anims = DeEditorCompatibilityUtils.FindObjectsOfType(); + foreach (DOTweenAnimation anim in anims) AddAnimationToGlobalPreview(anim); + } + EditorGUI.EndDisabledGroup(); + GUILayout.EndHorizontal(); + // Preview - Stop + GUILayout.BeginHorizontal(); + EditorGUI.BeginDisabledGroup(!isPreviewingThis); + if (GUILayout.Button("■ Stop", Styles.btPreview)) { + if (_AnimationToTween.ContainsKey(src)) StopPreview(_AnimationToTween[src].tween); + } + EditorGUI.EndDisabledGroup(); + EditorGUI.BeginDisabledGroup(!isPreviewing); + if (GUILayout.Button("■ Stop All on GameObject", Styles.btPreview)) { + StopPreview(src.gameObject); + } + if (GUILayout.Button("■ Stop All in Scene", Styles.btPreview)) { + StopAllPreviews(); + } + EditorGUI.EndDisabledGroup(); + GUILayout.EndHorizontal(); + if (isPreviewing) { + int playingTweens = 0; + int completedTweens = 0; + int pausedTweens = 0; + foreach (KeyValuePair kvp in _AnimationToTween) { + Tween t = kvp.Value.tween; + if (t.IsPlaying()) playingTweens++; + else if (t.IsComplete()) completedTweens++; + else pausedTweens++; + } + GUILayout.Label("Playing Tweens: " + playingTweens, Styles.previewStatusLabel); + GUILayout.Label("Completed Tweens: " + completedTweens, Styles.previewStatusLabel); +// GUILayout.Label("Paused Tweens: " + playingTweens); + } + GUILayout.EndVertical(); + + return isPreviewing; + } + +#if !(UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5) + public static void StopAllPreviews(PlayModeStateChange state) + { + StopAllPreviews(); + } +#endif + + public static void StopAllPreviews() + { + _TmpKeys.Clear(); + foreach (KeyValuePair kvp in _AnimationToTween) { + _TmpKeys.Add(kvp.Key); + } + StopPreview(_TmpKeys); + _TmpKeys.Clear(); + _AnimationToTween.Clear(); + + DOTweenEditorPreview.Stop(); +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 + UnityEditor.EditorApplication.playmodeStateChanged -= StopAllPreviews; +#else + UnityEditor.EditorApplication.playModeStateChanged -= StopAllPreviews; +#endif +// EditorApplication.playmodeStateChanged -= StopAllPreviews; + + InternalEditorUtility.RepaintAllViews(); + } + +#endregion + +#region Methods + + static void StartupGlobalPreview() + { + DOTweenEditorPreview.Start(); +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 + UnityEditor.EditorApplication.playmodeStateChanged += StopAllPreviews; +#else + UnityEditor.EditorApplication.playModeStateChanged += StopAllPreviews; +#endif +// EditorApplication.playmodeStateChanged += StopAllPreviews; + } + + static void AddAnimationToGlobalPreview(DOTweenAnimation src) + { + if (!src.isActive) return; // Ignore sources whose tweens have been set to inactive + if (_previewOnlyIfSetToAutoPlay && !src.autoPlay) return; + + Tween t = src.CreateEditorPreview(); + if (t == null) return; + _AnimationToTween.Add(src, new TweenInfo(src, t, src.isFrom)); + // Tween setup + DOTweenEditorPreview.PrepareTweenForPreview(t); + } + + static void StopPreview(GameObject go) + { + _TmpKeys.Clear(); + foreach (KeyValuePair kvp in _AnimationToTween) { + if (kvp.Key.gameObject != go) continue; + _TmpKeys.Add(kvp.Key); + } + StopPreview(_TmpKeys); + _TmpKeys.Clear(); + + if (_AnimationToTween.Count == 0) StopAllPreviews(); + else InternalEditorUtility.RepaintAllViews(); + } + + static void StopPreview(Tween t) + { + TweenInfo tInfo = null; + foreach (KeyValuePair kvp in _AnimationToTween) { + if (kvp.Value.tween != t) continue; + tInfo = kvp.Value; + _AnimationToTween.Remove(kvp.Key); + break; + } + if (tInfo == null) { + Debug.LogWarning("DOTween Preview ► Couldn't find tween to stop"); + return; + } + if (tInfo.isFrom) { + int totLoops = tInfo.tween.Loops(); + if (totLoops < 0 || totLoops > 1) { + tInfo.tween.Goto(tInfo.tween.Duration(false)); + } else tInfo.tween.Complete(); + } else tInfo.tween.Rewind(); + tInfo.tween.Kill(); + EditorUtility.SetDirty(tInfo.animation); // Refresh views + + if (_AnimationToTween.Count == 0) StopAllPreviews(); + else InternalEditorUtility.RepaintAllViews(); + } + + // Stops while iterating inversely, which deals better with tweens that overwrite each other + static void StopPreview(List keys) + { + for (int i = keys.Count - 1; i > -1; --i) { + DOTweenAnimation anim = keys[i]; + TweenInfo tInfo = _AnimationToTween[anim]; + if (tInfo.isFrom) { + int totLoops = tInfo.tween.Loops(); + if (totLoops < 0 || totLoops > 1) { + tInfo.tween.Goto(tInfo.tween.Duration(false)); + } else tInfo.tween.Complete(); + } else tInfo.tween.Rewind(); + tInfo.tween.Kill(); + EditorUtility.SetDirty(anim); // Refresh views + _AnimationToTween.Remove(anim); + } + } + +#endregion + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ INTERNAL CLASSES ████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + + class TweenInfo + { + public DOTweenAnimation animation; + public Tween tween; + public bool isFrom; + public TweenInfo(DOTweenAnimation animation, Tween tween, bool isFrom) + { + this.animation = animation; + this.tween = tween; + this.isFrom = isFrom; + } + } + + static class Styles + { + static bool _initialized; + + public static GUIStyle previewBox, previewLabel, btOption, btPreview, previewStatusLabel; + + public static void Init() + { + if (_initialized) return; + + _initialized = true; + + previewBox = new GUIStyle(GUI.skin.box).Clone().Padding(1, 1, 0, 3) + .Background(DeStylePalette.squareBorderCurved_darkBorders).Border(7, 7, 7, 7); + previewLabel = new GUIStyle(GUI.skin.label).Clone(10, FontStyle.Bold).Padding(1, 0, 3, 0).Margin(3, 6, 0, 0).StretchWidth(false); + btOption = DeGUI.styles.button.bBlankBorderCompact.MarginBottom(2).MarginRight(4); + btPreview = EditorStyles.miniButton.Clone(Format.RichText); + previewStatusLabel = EditorStyles.miniLabel.Clone().Padding(4, 0, 0, 0).Margin(0); + } + } + } +} diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs.meta b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs.meta new file mode 100644 index 0000000..53780cc --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenPreviewManager.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 22292a5f27a9a644ba9e6ad1bf863531 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML new file mode 100644 index 0000000..472ed4b --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML @@ -0,0 +1,18 @@ + + + + DOTweenProEditor + + + + + Custom colors + + + + + Needs to be overridden in order to initialize new styles added from inherited classes + + + + diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML.meta b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML.meta new file mode 100644 index 0000000..f37a133 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.XML.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 753a4f4ed73b17143923101226957756 +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll new file mode 100644 index 0000000000000000000000000000000000000000..a97f9a285d31bfafb31ff74c1096b9af5f5e370b GIT binary patch literal 35840 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll.meta b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll.meta new file mode 100644 index 0000000..62ab8c0 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/Editor/DOTweenProEditor.dll.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: a6402d4311c862b4eb1325590d6466af +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/DOTweenPro/readme.txt b/Assets/Plugins/Demigiant/DOTweenPro/readme.txt new file mode 100644 index 0000000..379dbbc --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/readme.txt @@ -0,0 +1,35 @@ +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 (like TextMesh Pro) + +// 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. + +// VISUAL SCRIPTING (PRO ONLY) +- To animate a gameObject, select it and choose "Add Component > DOTween > DOTween Animation" +- To animate a gameObject along a path, select it and choose "Add Component > DOTween > DOTween Path" + +// SCRIPTING +- 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/DOTweenPro/readme.txt.meta b/Assets/Plugins/Demigiant/DOTweenPro/readme.txt.meta new file mode 100644 index 0000000..6a87c35 --- /dev/null +++ b/Assets/Plugins/Demigiant/DOTweenPro/readme.txt.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: aa8f07903bf128e44a7d0b91a63dedab +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib.meta b/Assets/Plugins/Demigiant/DemiLib.meta new file mode 100644 index 0000000..edcf2cc --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib.meta @@ -0,0 +1,21 @@ +fileFormatVersion: 2 +guid: 5a499e4809836274eb38cd99b370a2c1 +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/DemiLib/Core.meta b/Assets/Plugins/Demigiant/DemiLib/Core.meta new file mode 100644 index 0000000..86e5075 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 03513cf143bb144409fbb3a51ec77b1b +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..4ab2cf38d7001682e365dcdbcfbb3b0b50aa319f GIT binary patch literal 14848 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 Q88&@9vHx`a(M8}t0mTXY5C8xG literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll.meta b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll.meta new file mode 100644 index 0000000..1ed9199 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.dll.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 54be29b67d0d29a478da2c6e5c62f091 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 1 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + WindowsStoreApps: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml new file mode 100644 index 0000000..e6d7231 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml @@ -0,0 +1,231 @@ + + + + DemiLib + + + + + Class attribute + Sets the script execution order index + + + + + Sets the script execution order for this class + + Script execution order index + + + + Set when calling DeGUI.BeginGUI + + + + + Stores a color palette, which can be passed to default DeGUI layouts when calling DeGUI.BeginGUI, + and changed at any time by calling DeGUI.ChangePalette. + You can inherit from this class to create custom color palettes with more hColor options. + + + + + Converts a HEX color to a Unity Color and returns it + + The HEX color, either with or without the initial # (accepts both regular and short format) + + + + Global colors + + + + + Background colors + + + + Editor background color + + + + Content colors + + + + + Toggle button specific colors + + + + + Various Input utils + + + + + Returns a number key int if a number key was pressed in this frame, or -1 otherwise + + + + + + Extend this to replicate Unity's Scope system with any Unity version. + Thanks to Dmitriy Yukhanov for pointing this out and creating an initial version. + Expand this class to create scopes. + Example: + public class VBoxScope : DeScope + { + public VBoxScope(GUIStyle style) + { + BeginVBox(style); + } + + protected override void CloseScope() + { + EndVBox(); + } + } + Usage: + using (new VBoxScope(myStyle) { + // Do something + } + + + + + Contains both free and pro skins color variations, + and automatically returns the correct one when converted to Color + + + + + Used by DeHierarchy + + + + + Returns a list of all items whose gameObject is NULL, or NULL if there's no missing gameObjects. + + + + + If the item exists sets it, otherwise first creates it and then sets it + + + + + If the item exists sets it, otherwise first creates it and then sets it + + + + + If the item exists sets it, otherwise first creates it and then sets it + + + + + Returns TRUE if the item existed and was removed. + + + + + Returns TRUE if the item existed and was changed. + + + + + Returns the customizedItem for the given gameObject, or NULL if none was found + + + + + Returns the color corresponding to the given + + + + Must be univocal + + + Node position in editor GUI + + + Ids of all forward connected nodes. Length indicates how many forward connections are allowed. + Min length represents available connections from node. + + + + A serializable struct including a min and a max int value + + + + Min value + + + Max value + + + + Creates a new Range + + + + + Returns a random value within this range (min/max included) + + + + + + + + A serializable struct including a min and a max float value + + + + Min value + + + Max value + + + + Creates a new Range + + + + + Returns a random value within this range (min/max included) + + + + + + + + Returns ONLY the Components in the children, and ignores the parent. + + If TRUE also includes inactive children + + + + Returns the Component only if it's in a child, and ignores the parent. + + If TRUE also searches inactive children + + + + Returns a HEX version of the given Unity Color, without the initial # + + If TRUE, also converts the alpha value and returns a hex of 8 characters, + otherwise doesn't and returns a hex of 6 characters + + + + Returns a HEX version of the given Unity Color, without the initial # + + If TRUE, also converts the alpha value and returns a hex of 8 characters, + otherwise doesn't and returns a hex of 6 characters + + + diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml.meta b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml.meta new file mode 100644 index 0000000..473a9b5 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/DemiLib.xml.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: 9bf2564c9817bb34988453ae948954d2 +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor.meta new file mode 100644 index 0000000..11f8e33 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 77fbbad1c51d68f4c844d26743104b07 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll new file mode 100644 index 0000000000000000000000000000000000000000..483f860638b4b011f61d588bb2eb60911654f27e GIT binary patch literal 195072 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

qKeMLVUz+=`v^azQwKet1h`BGN#T)O$ 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll.meta new file mode 100644 index 0000000..aa20ddf --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.dll.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: 202f9ddaf2c1a8a429504f7f3cd7b84f +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/DemiLib/Core/Editor/DemiEditor.xml b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.xml new file mode 100644 index 0000000..bfca4c0 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.xml @@ -0,0 +1,2405 @@ + + + + DemiEditor + + + + + Utils to use the correct method based on Unity's version + + + + + Encodes to PNG using reflection to use correct method depending if editor is version 2017 or earlier + + + + + 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 + + + + + Returns the prefab parent by using different code on Unity 2018 or later + + + + + Starts an editor coroutine. You can't use normal yield new WaitFor methods because + those are Unity runtime, but you can instead use . + Other than that, you can use normal yield null/etc. + Returns an (which you can use with to cancel the coroutine), + or NULL in case the coroutine completed immediately. + + + + + Stops the given coroutine generated by + + + + + To be used inside a coroutine as a yield instruction: waits for the given seconds + (replaces Unity's yield new WaitForSeconds because it's not available in-editor). + Example usage: + yield return DeEditorCoroutines.WaitForSeconds(1); + + + + + File utils + + + + Path slash for AssetDatabase format + + + Path slash to replace for AssetDatabase format + + + Current OS path slash + + + Path slash to replace on current OS + + + + Full path to project directory, without final slash. + + + + + Full path to project's Assets directory, without final slash. + + + + + Returns TRUE if the given path is an absolute path + + + + + Returns TRUE if the given path is an AssetDatabase path + + + + + Returns TRUE if the given GUID refers to a valid and existing project folder + + + + + Converts the given project-relative path to a full path + + + + + Converts the given full path to a project-relative path + + + + + Returns TRUE if the file/directory at the given path exists. + + Path, relative to Unity's project folder + + + + Validates the string as a valid fileName + (uses commonly accepted characters an all systems instead of system-specific ones). + BEWARE: doesn't check for reserved words + + string to replace + Minimum length for considering the string valid + + + + Returns TRUE if the given filepath is within this Unity project Assets folder + + Full file path + + + + Returns the given string stripped of any invalid filename characters. + BEWARE: doesn't check for reserved words + + string to replace + Character to use as replacement for invalid ones + + + + Returns the given path with all slashes converted to the correct ones used by the system + + + + + Returns the asset path of the given GUID (relative to Unity project's folder), + or an empty string if either the GUID is invalid or the related path doesn't exist. + + + + + Checks if the given directory (full path) is empty or not + + + + + Deletes all files and subdirectories from the given directory + + + + Returns the adb path to the given ScriptableObject + + + Returns the adb path to the given MonoBehaviour + + + Returns the adb directory that contains the given ScriptableObject without final slash + + + Returns the adb directory that contains the given MonoBehaviour without final slash + + + + Returns the adb paths to the selected folders in the Project panel, or NULL if there is none. + Contrary to Selection.activeObject, which only returns folders selected in the right side of the panel, + this method also works with folders selected in the left side. + + + + + Sets the script execution order of the given MonoBehaviour + + + + + Gets the script execution order of the given MonoBehaviour + + + + + Precisely returns the last controlId assigned to a GUI element + + + + + Framework used to fix missing monoScript reference in GameObjects when a script's meta guid changes + + + + + Retrieves the GUID in the given meta file and returns it, or NULL if it's not found + + Full filePath to the meta file + + + + Fixes all wrong Component GUIDs in scenes and prefabs + + objects to use for the operation + + + + Fixes all wrong Component GUIDs in the active scene and returns the total number of Components fixed + + objects to use for the operation + + + + Finds all MonoBehaviour/Behaviour/Component in the given scene/prefab file string + that contain the given + and replaces their GUID with the one passed (if different). + Returns the total number of Component GUIDs that were fixed + + + + + Dispatched when Unity has finished compiling code and updating the AssetDatabase + + + + + Utils to manage UnityPackages import/export and file mirroring + + + + + Stores all file paths (excluding metas) found in the given AssetDatabase directory and subdirectory + into the given AssetDatabase file (which will be created if missing), + writing them as relative to the given directory. + EXAMPLE: + adbReadFromDirPath = "Plugins/DOTween" + file "Assets/Plugins/DOTween/aScript.cs" stored as "aScript.cs" + file "Assets/Plugins/DOTween/Subdir/aScript.cs" stored as "Subdir/aScript.cs" + + + AssetDatabase path ("Assets/...") where the list should be written + AssetDatabase path ("Assets/...") from which the list of files should be retrieved, without final slash + If TRUE ignores ASMDEF files + + + + Parses a file list created via and removes any files not present in the list from the given directory + + Label to use when logging the result + AssetDatabase path ("Assets/...") to the file containing the list + AssetDatabase path ("Assets/...") to the directory to parse for extra files to remove + If TRUE ignores ASMDEF files + If TRUE only returns a report log and doesn't actually delete the files + + + + Utilities for Editor Panels. + + + + + Connects to a asset. + If the asset already exists at the given path, loads it and returns it. + Otherwise, depending on the given parameters, either returns NULL or automatically creates it before loading and returning it. + + Asset type + File path (relative to Unity's project folder) + If TRUE and the requested asset doesn't exist, forces its creation + If TRUE also creates the path folders if they don't exist + + + + Check if the at the given path exists and eventually if it's available + + File path (relative to Unity's project folder) + If TRUE also check if the file is available + (file can be unavailable if it was deleted outside Unity, or if Unity is just starting) + + + + + Returns TRUE if the given is dockable, FALSE if instead it's a utility window + + + + + + + Sets the icon and title of an editor window. Works with older versions of Unity, where the titleContent property wasn't available. + + Reference to the editor panel whose icon to set + Icon to apply + Title. If NULL doesn't change it + + + + Repaints the currently focues editor + + + + + Prefab utilities + + + + + Behaves as the Inspector's Apply button, applying any modification of this instance to the prefab parent + + + + + + Returns TRUe if a prefab instance has unapplied modifications, ignoring any modifications applied to the transform. + NOTE: this a somehow costly operation (since it generates GC) + + + + + Completely removes any prefab connection from the given prefab instances, by desotroing the original object and recreating it. + Returns a list with all the new elements created. + + Based on RodGreen's method (http://forum.unity3d.com/threads/82883-Breaking-connection-from-gameObject-to-prefab-for-good.?p=726602&viewfull=1#post726602) + + + + + + Completely removes any prefab connection from the given prefab instance, by desotroing the original object and recreating it. + + Based on RodGreen's method (http://forum.unity3d.com/threads/82883-Breaking-connection-from-gameObject-to-prefab-for-good.?p=726602&viewfull=1#post726602) + + + + + Returns TRUE if Unity editor is neither compiling code nor updating assets + + + Calls the given action after the given delay + + + + Return the size of the editor game view, eventual extra bars excluded (meaning the true size of the game area) + + + + + Returns a value from 1 to N (2 for 200% scaling) indicating the UI Scaling of Unity's editor. + The first time this is called it will store the scaling and keep it without refreshing, + since you need to restart Unity in order to apply a scaling change + + + + + Clears all logs from Unity's console + + + + + Adds the given global define (if it's not already present) to all the + or only to the given , depending on passed parameters, + and returns TRUE if it was added, FALSE otherwise. + NOTE: when adding to all of them some legacy warnings might appear, which you can ignore. + + + to use. Leave NULL to add to all of them. + + + + Adds the given list of global defines (if they're not already present) to all the + or only to the given , depending on passed parameters, + and returns TRUE if it was added, FALSE otherwise. + NOTE: when adding to all of them some legacy warnings might appear, which you can ignore. + + Defines to add + to use. Leave NULL to add to all of them. + + + + Removes the given global define (if present) from all the + or only from the given , depending on passed parameters, + and returns TRUE if it was removed, FALSE otherwise. + NOTE: when removing from all of them some legacy warnings might appear, which you can ignore. + + + to use. Leave NULL to remove from all of them. + + + + Removes the given global defines (if present) from all the + or only from the given , depending on passed parameters, + and returns TRUE if it was removed, FALSE otherwise. + NOTE: when removing from all of them some legacy warnings might appear, which you can ignore. + + Defines to remove + to use. Leave NULL to remove from all of them. + + + + Returns TRUE if the given global define is present in at least one of the + or only in the given , depending on passed parameters. + + + to use. Leave NULL to check in all of them for the first occurrence. + + + + Returns an array of all defines in the current . + + + + + Sets the gizmos icon visibility in the Scene and Game view for the given class names + + Visibility + Class names (no namespace), as many as you want separated by a comma + + + + Sets the gizmos icon visibility in the Scene and Game view for all custom icons + (for example icons created with HOTools) + + Visibility + + + + Returns all components of type T in the currently open scene, or NULL if none could be found. + If you're on Unity 5 or later, and have DeEditorTools, use DeEditorToolsUtils.FindAllComponentsOfType + instead, which is more efficient. + + + + + Shifts an item from an index to another, without modifying the list except than by moving elements around + + + + + Expands the given array and adds the given element as the last one + + + + + Removes the element at index from the given array, shifts everything after by -1 position and resizes the array + + + + Nothing is being dragged + + + Dragging + + + Dragging concluded and accepted + + + Dragging concluded but item position didn't change + + + Dragging canceled + + + Dragging concluced but not accepted because too short + + + Automatically determines if dragged elements are horizontal, vertical, or both + + + Forces vertical drag + + + Forces horizontal drag (useful to avoid initial wrong drag indicators + if the users starts dragging an horizontal system vertically) + + + + Manages the dragging of GUI elements + + + + + True if a GUI element is currently being dragged + + + + + Return the current item being dragged, or NULL if there is none + + + + + Type of current item being dragged, or NULL if there is none + + + + + Starting index of current item being dragged, or NULL if there is none + + + + + Retrieves the eventual optional data stored via the StartDrag method + + + + + Starts a drag operation on a GUI element. + + Reference to the current editor drawing the GUI (used when a Repaint is needed) + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Optional data that can be retrieved via the static property + + + + Starts a drag operation on a GUI element. + + ID for this drag operation (must be the same for both StartDrag and Drag + Reference to the current editor drawing the GUI (used when a Repaint is needed) + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Optional data that can be retrieved via the static property + + + + Starts a drag operation on a GUI element. + + Reference to the current editor drawing the GUI (used when a Repaint is needed) + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Optional data that can be retrieved via the static property + + + + Starts a drag operation on a GUI element. + + ID for this drag operation (must be the same for both StartDrag and Drag + Reference to the current editor drawing the GUI (used when a Repaint is needed) + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Optional data that can be retrieved via the static property + + + + Call this after each draggable GUI block, to calculate and draw the current drag state + (or complete it if the mouse was released). + + ID for this drag operation (must be the same for both StartDrag and Drag + List containing the draggable item and all other relative draggable items + Current index of the draggable item being drawn + If NULL will calculate this automatically using . + Pass this if you're creating a drag between elements that don't use GUILayout + Drag direction. You can leave it to + unless you want to skip eventual layout calculations + If TRUE (default) automatically reorders the given list + to reflect successful drag results. + Note that will be different if you apply the drag to the list or not + (in the former case it will reflect the current index after the change, in the latter it will reflect the desired position) + + + + Call this after each draggable GUI block, to calculate and draw the current drag state + (or complete it if the mouse was released). + + List containing the draggable item and all other relative draggable items + Current index of the draggable item being drawn + If NULL will calculate this automatically using . + Pass this if you're creating a drag between elements that don't use GUILayout + Drag direction. You can leave it to + unless you want to skip eventual layout calculations + If TRUE (default) automatically reorders the given list + to reflect successful drag results. + Note that will be different if you apply the drag to the list or not + (in the former case it will reflect the current index after the change, in the latter it will reflect the desired position) + + + + Call this after each draggable GUI block, to calculate and draw the current drag state + (or complete it if the mouse was released). + + ID for this drag operation (must be the same for both StartDrag and Drag + List containing the draggable item and all other relative draggable items + Current index of the draggable item being drawn + Color to use for drag divider and selection + If NULL will calculate this automatically using . + Pass this if you're creating a drag between elements that don't use GUILayout + Drag direction. You can leave it to + unless you want to skip eventual layout calculations + If TRUE (default) automatically reorders the given list + to reflect successful drag results. + Note that will be different if you apply the drag to the list or not + (in the former case it will reflect the current index after the change, in the latter it will reflect the desired position) + + + + Call this after each draggable GUI block, to calculate and draw the current drag state + (or complete it if the mouse was released). + + List containing the draggable item and all other relative draggable items + Current index of the draggable item being drawn + Color to use for drag divider and selection + If NULL will calculate this automatically using . + Pass this if you're creating a drag between elements that don't use GUILayout + Drag direction. You can leave it to + unless you want to skip eventual layout calculations + If TRUE (default) automatically reorders the given list + to reflect successful drag results. + Note that will be different if you apply the drag to the list or not + (in the former case it will reflect the current index after the change, in the latter it will reflect the desired position) + + + + Ends the drag operations, and eventually applies the drag outcome. + Returns TRUE if the position of the dragged item actually changed. + Called automatically by Drag method. Use it only if you want to force the end of a drag operation. + + If TRUE marks the drag as successful and applied it if set so, otherwise simply cancels the drag + If TRUE changes the list contents to reflect the drag result + + + + Abstract dynamic class used for every node of the same type + (meaning there is only a single recycled instance for all same-type nodes) + + + + Used to fill + + + Called when the node needs to be drawn + + + + The connectedNodesIds list will be automatically increased/decreased when adding/removing connections + (otherwise connectedNodesIds will have to be increased via custom code) + + + + + Requires only two connectedNodesIds (no more, no less), + uses regular CTRL+Drag to connect connection 0, CTRL+SPACE+Drag to connect connection 1 + + + + + Like , but with an extra connection as a last extra index, which is set when pressing CTRL+SPACE+Drag. + Must always have at least one element in connectedNodesIds + + + + Layout, Repaint, LayoutAndRepaint + + + + Stores cloned nodes for pasting + + + + + Returns a list of pasteable nodes, with their GUID recreated and their connections adapted + + + + + + Returns a deep clone of the given node but doesn't clone UnityEngine references. + A new ID will be automatically generated. + + + + + Always connects a node from BottomOrRight side to TopOrLeft side + + + + + Always connects from BottomOrRight side to TopOrLeft side. + If ALT is pressed shows the delete connection button. + Called during Repaint or MouseDown/Up. + Returns TRUE if the connection was deleted using the delete connection button. + + + + + Always connects a node from BottomOrRight side to TopOrLeft side + + + + + Always connects from BottomOrRight side to TopOrLeft side. + If ALT is pressed shows the delete connection button. + Called during Repaint or MouseDown/Up. + Returns TRUE if the connection was deleted using the delete connection button. + + + + + You can attach to this + + + + + Use this to add a content group to the Help Panel + + + + Regular note + + + Editable note (activated by setting to TRUE + (but you will have to save the result somewhere yourself) + + + If TRUE shows the textArea + + + + Add definition. Supports rich-text but also these special tags: + - [b][/b] + + + + + Add key, automatically formatting these special keys: + / + + + → + + If TRUE and there's other keys/targets, adds the new key on a new line preceded by a comma + + + + Recalculates all rects based on the given Y shift + + + + + One per . + Partially independent, mainly controlled by process. + + + + TRUE when read-to or dragging nodes + + + + Resets the interaction state + + + + Returns TRUE if the given node is currently being dragged + + + + Returns TRUE if a repaint is required + + + + + + Main class for DeGUI Node system. + Create it, then enclose your GUI node calls inside a . + CODING ORDER: + - Create a to use for your node system (create it once, obviously) + - Inside OnGUI, write all your nodes GUI code inside a + - To draw the nodes, loop through the list and call for each node + + + + Distance at which nodes will be placed when snapping next to each other + + + Full area without zeroed coordinates + + + Position with zeroed coordinates (used by all node GUI since it's inside a GUILayout(area)) + + + Contains the nodes passed to NodeProcessScope ordered by depth. + You should loop through this list when drawing nodes + + + + Creates a new NodeProcess. + + EditorWindow for this process + Callback called when one or more nodes are going to be deleted. + Return FALSE if you want the deletion to be canceled. + Can be NULL, in which case it will be ignored + Callback called when a node is cloned. + Return FALSE if you want the cloning to be canceled. + Can be NULL, in which case it will be ignored + + + + Needs to be called when loading a complete new series of nodes + + + + + Call this when the layout/size of one or more nodes changed because of external intervention + (if a whole new range of nodes has been loaded, just call instead) + + + + + Forces the refresh of the area calculations. Useful if you need them before the first GUI call has run + + + + + Shifts the visible are to the given coordinates and repaints on end + + + + + Shifts the visible are to the given coordinates and repaints on end + + + + + Resets the node process scale to 1 + + + + + Scales up the node process area (if not already at max scale) + + + + + Scales down the node process area (if not already at min scale) + + + + + Tells the process to repaint once the process has ended. + Calling this + + + + + Draws the given node using the given T editor GUINode type. + Returns the full area of the node + + + + + Opens the Help Panel + + + + + Closes the Help Panel + + + + + Opens or closes the Help panel based on its current state + + + + + Returns TRUE if the given area is visible (even if partially) inside the current nodeProcess area + + + + + Captures a screenshot of the node editor area and returns it when calling the onComplete method. + Sadly this requires a callback because if called immediately the capture will fail + with a "[d3d11] attempting to ReadPixels outside of RenderTexture bounds!" error in most cases + + Screenshot mode + A callback that accepts the generated Texture2D object + Screenshot scale factor (only used if screenshotMode is set to ) + If TRUE (default) displays a progress bar during the operation. + You'll want to set this to FALSE when you're already using a custom progressBar + and the screenshot is only part of a larger queue of operations + + + + Removes the node with the given ID from the list and removes all connections to it from other nodes. + Doesn't mark things dirty nor prepares them for undo + + + + + Use this to encapsulate node GUI operations. + Automatically manages various operations (press F1 to see them). + Sets GUI.changed to TRUE if the area is panned, a node is dragged, controlNodes change sorting or are deleted. + Wraps all content inside a GUILayout Area (nodeArea). + + The to use + Area within which the nodes will be drawn + Area shift (caused by dragging) + This list will be sorted based on current node draw order, + and changed in case one of its nodes is deleted. + IMPORTANT: this list should be part of your serialized class (MonoBehaviour or ScriptableObject), + so it will be stored as a reference and modifying one will modify the other. + Usually you want to pass all nodes to this except the eventual start node (or nodes that can't be sorted nor deleted). + + + + Set automatically when a selection ends up selecting a single node, + reset when deselecting all nodes, selecting multiple nodes, or resetting the + + + + + Returns TRUE if something was actually deselected, FALSE if there were no selected nodes + + + + + + Returns key modifiers currently pressed. + Requires to be updated at the beginning of every GUI call. + + + + Note: ALT isn't correctly interpreted as OPTION on OSX, contrary to what Unity manual states, + so using Command instead fixes that + + + + Call this method to update data required by softCtrl calculations. + Automatically called from within a . + Returns a object with the keys that were just pressed and just released + + Required to have the correct for the given target call + + + + Returns the given as an int, or -1 if it's not a number + + + + + Used code from Celtc on StackOverflow: https://stackoverflow.com/a/54044197/10151925 + + + + + Gets all fields from an object and its hierarchy inheritance + + + + + Perform a deep copy of the class + + + + + Does the copy + + + + + Returns by . + Contains properties and methods to manage non-layout scrollview better. + Remember to use or to increase or set the full content height + + + + Area used by ScrollView and its content + + + Full content area regardless if visible or not. Its height should be set manually based on the contents' height + + + Content area currently visible (scroll bars excluded) + + + Current scrollPosition + + + + Returns the current open, or an empty one if none is open. + + + + + Sets the width + + + + + Sets the height + + + + + Increase the height by the given amount + + + + + + Returns a Rect for a single line at the current scrollView yMax + + If less than 0 uses default line height, otherwise the value passed + if TRUE (default) automatically increases the height of the accordingly + + + + + Returns a Rect for a single line at the current scrollView yMax, as wide as the max visible rect width + + If less than 0 uses default line height, otherwise the value passed + if TRUE (default) automatically increases the height of the accordingly + + + + + Returns TRUE if the given rect is at least partially visible in the displayed scroll area + + + + + Contains both free and pro skins GUIStyle variations, + and automatically returns the correct one when converted to GUIStyle + + + + + Plays the given clip in the Editor + + + + + Stops playing the given clip. + + + + + Stops all clips playing. + + + + + A stopwatch whose time can be changed manually via + + + + + Start or resume playing + + + + + Stop the watch and reset the time + + + + + Restart measuring from zero + + + + + Pause the watch + + + + + Send the watch to the given time + + + + + Util to determine Unity editor version and store them as comparable numbers + + + + Full major version + first minor version (ex: 2018.1f) + + + Major version + + + First minor version (ex: in 2018.1 it would be 1) + + + + Assembly extensions + + + + + Full path to the assembly directory, without final slash + + + + + AssetDatabase path to the assembly directory, without final slash + + + + + GUI extension methods + + + + + Clones the style and adds the given formats to it. You can pass any of these types of values: + + Format:Rich-text, wordwrap + FontStyle:Font style + TextAnchor:Content anchor + int:Font size + Color/DeSkinColor:Font color + + + + + + Adds the given formats to the style. You can pass any of these types of values: + + Format:RichText, WordWrap + FontStyle:Font style + TextAnchor:Content anchor + int:Font size + Color/DeSkinColor:Font color + + + + + + Sets the border of the style + + + + + Sets the border of the style + + + + + Sets the border of the style + + + + + Sets the background of the style + + + + + Sets the background of the style + + + + + Sets the contentOffset of the style + + + + + Sets the contentOffset of the style + + + + + Sets the X contentOffset of the style + + + + + Sets the Y contentOffset of the style + + + + + Sets the margin of the style + + + + + Sets the margin of the style + + + + + Sets the margin of the style + + + + + Sets the left margin of the style + + + + + Sets the right margin of the style + + + + + Sets the top margin of the style + + + + + Sets the bottom margin of the style + + + + + Sets the overflow of the style + + + + + Sets the overflow of the style + + + + + Sets the overflow of the style + + + + + Sets the left overflow of the style + + + + + Sets the right overflow of the style + + + + + Sets the top overflow of the style + + + + + Sets the bottom overflow of the style + + + + + Sets the padding of the style + + + + + Sets the padding of the style + + + + + Sets the padding of the style + + + + + Sets the left padding of the style + + + + + Sets the right padding of the style + + + + + Sets the top padding of the style + + + + + Sets the bottom padding of the style + + + + + Sets the Y fixedWidth of the style + + + + + Sets the fixedHeight of the style + + + + + Sets the stretchHeight property of the style + + + + + Sets the stretchWidth property of the style + + + + + Stores a GUIStyle palette, which can be passed to default DeGUI layouts when calling DeGUI.BeginGUI, + and changed at any time by calling DeGUI.ChangePalette. + You can inherit from this class to create custom GUIStyle palettes with more options. + Each of the sub-options require a public Init method to initialize the styles, which will be called via Reflection. + + + + + Called automatically by DeGUI.BeginGUI. + Override when adding new style subclasses. + Returns TRUE if the styles were initialized or re-initialized + + + + + Extend any custom subpalettes from this, so they will be initialized correctly + + + + + GUILayout methods + + + + + A button that triggers an immediate repaint when hovered/pressed/unhovered + (which otherwise doesn't happen if you set a background to the button's GUIStyle). + Requires to be activated. + + + + + A button that triggers an immediate repaint when hovered/pressed/unhovered + (which otherwise doesn't happen if you set a background to the button's GUIStyle) + and also assigns different GUI colors based on the button's state and the given one. + Requires to be activated. + + Content + Default color + Style + GUILayout options + + + + A button that triggers an immediate repaint when hovered/pressed/unhovered + (which otherwise doesn't happen if you set a background to the button's GUIStyle) + and also assigns different GUI colors based on the button's state with options to eventually auto-generate them. + Requires to be activated. + + Content + Default color + Hover color (if NULL auto-generates it from the given one by making it brighter + Pressed color (if NULL auto-generates it from the given one by making it even brighter + Style + GUILayout options + + + Shaded button + + + Shaded button + + + Shaded button + + + Shaded button + + + Colored button + + + Colored button + + + Colored button + + + Colored button + + + + Draws a button that returns TRUE the first time it's pressed, instead than when its released. + + + + + Draws a button that returns TRUE the first time it's pressed, instead than when its released. + + + + + Draws a button that returns TRUE the first time the mouse moves over it while the mouse button is pressed, + even if it was pressed outside of the button first + + + + + Draws a button that returns TRUE the first time the mouse moves over it while the mouse button is pressed, + even if it was pressed outside of the button first + + + + Toolbar foldout button + + + Toolbar foldout button + + + Toolbar foldout button + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Begins an horizontal toolbar layout + + + Begins an horizontal toolbar layout + + + Begins an horizontal toolbar layout + + + Begins an horizontal toolbar layout + + + Ends an horizontal toolbar layout + + + A toolbar with a label + + + A toolbar with a label + + + A toolbar with a label + + + A toolbar with a label + + + A toolbar with a label + + + A toolbar with a label + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values. Auto-determines object type from the field's type + + + Returns TRUE if there's mixed values. Forces field to accept only objects of the given type + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Vertical box layout with style and color options + + + Vertical box layout with style and color options + + + End vertical box layout + + + Horizontal Divider + + + + A text field that becomes editable only on double-click + + EditorWindow reference + A unique ID to use in order to determine if the text is selected or not + Text + Style for default (non-editing mode) appearance + Style for editing mode + + + + A text field that becomes editable only on double-click + + Editor reference + A unique ID to use in order to determine if the text is selected or not + Text + Style for default (non-editing mode) appearance + Style for editing mode + + + + A text field that becomes editable only on double-click and can also be dragged + + EditorWindow reference + A unique ID to use in order to determine if the text is selected or not + Text + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Style for default (non-editing mode) appearance + Style for editing mode + + + + + A text field that becomes editable only on double-click and can also be dragged + + Editor reference + A unique ID to use in order to determine if the text is selected or not + Text + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Style for default (non-editing mode) appearance + Style for editing mode + + + + + Creates a Gradient field by using Unity 4.x hidden default one and Reflection. + + + + Scene field + + + + Draws a dropdown for choosing a SortingLayer ID + + + + + Draws a dropdown for choosing a SortingLayer ID + + + + + Global Demigiant GUI manager. Call to initialize it inside GUI calls. + + + + + Default color palette + + + + + Default style palette + + + + TRUE if we're using the PRO skin + + + + Call this at the beginning of GUI methods. + Returns TRUE if the styles were initialized or re-initialized + + Eventual to use + Eventual to use + + + + Better implementation of GUI.BeginScrollView. + Returns the modified scrollView struct. + Must be closed by a DeGUI.. +
EXAMPLE
+            Rect scrollViewArea = ...;
+            Rect drawArea = scrollViewArea;
+            // Decrease the full drawing area to exclude scrollbars if necessary
+            if (_scrollView.fullContentArea.height > scrollViewArea.height) drawArea = drawArea.Shift(0, 0, -11, 0);
+            // Begin scrollView
+            _scrollView = DeGUI.BeginScrollView(scrollViewArea, _scrollView);
+            // Increase scrollView area correctly (or directly set it with SetFullContentHeight
+            _scrollView.IncreaseContentHeightBy(...)
+            // End
+            DeGUI.EndScrollView();
+            
+
+ Visible area used by the scrollView + target. You'll need to set its size to the correct full content height + (either within the Begin/ENd ScrollView calls or before them) + If TRUE (default) resets .height to 0 + after beginning the ScrollView +
+ + + Closes a DeGUI. correctly + + + + + Exits the current event correctly, also taking care of eventual drag operations + + + + + Removes focus from any GUI button/text/element that has focus + + + + + Changes the active palettes to the given ones + (or resets them to the default ones if NULL). + Returns TRUE if the styles were initialized or re-initialized + + + + + Resets the GUI colors to the default ones (only available if BeginGUI was called first) + + + + + Sets the GUI colors to the given ones + + + + + Opens a panel that previews the given texture (if not NULL) + + + + + Gets either black or white, depending on the color that would be most visible on the given one + + + + + Gets either black or white, depending on the color that would be most visible on the given one + + + + + Sets the GUI cursor color to the given ones + + + + + Sets the GUI matrix to the given ones + + + + + Wrapper to set serialized fields with multiple sources selected: automatically sets GUI to show mixed values when necessary + and contains a fieldInfo which is set within the wrapper. + Note that you must set the property within the wrapper so that it's assigned correctly when closing the scope. + + + + Multi property scope + Name of the field so it can be found and set/get via Reflection + List of the sources containing the given field + If TRUE validates EditorGUI.EndChangeCheck before calling it + (fixes an issue which happens with advanced Undo usage in DOTween Timeline and ColorFields) + + + + A button that triggers an immediate repaint when hovered/pressed/unhovered + (which otherwise doesn't happen if you apply a background to the button's GUIStyle). + Requires to be activated. + + + + + A button that triggers an immediate repaint when hovered/pressed/unhovered + (which otherwise doesn't happen if you apply a background to the button's GUIStyle) + and also assigns different GUI colors based on the button's state and the given one. + Requires to be activated. + + Rect + Content + Default color + Style + + + + A button that triggers an immediate repaint when hovered/pressed/unhovered + (which otherwise doesn't happen if you apply a background to the button's GUIStyle) + and also assigns different GUI colors based on the button's state with options to eventually auto-generate them. + Requires to be activated. + + Rect + Content + Default color + Hover color (if NULL auto-generates it from the given one by making it brighter + Pressed color (if NULL auto-generates it from the given one by making it even brighter + Style + + + Shaded button + + + Shaded button + + + Shaded button + + + Shaded button + + + Colored button + + + Colored button + + + Colored button + + + Colored button + + + Toolbar foldout button which allows clicking even on its label + + + Foldout button + label (not intended to be used in toolbar) which allows click-to-foldout/foldin + + + + Draws a button that returns TRUE the first time it's pressed, instead than when its released. + + + + + Draws a button that returns TRUE the first time it's pressed, instead than when its released. + + + + + Draws a button that returns TRUE the first time the mouse moves over it while the mouse button is pressed, + even if it was pressed outside of the button first + + + + + Draws a button that returns TRUE the first time the mouse moves over it while the mouse button is pressed, + even if it was pressed outside of the button first + + + + Toolbar foldout button + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Button that can be toggled on and off + + + Scene field + + + + Draws a background grid using the given grid texture + + Area rect + Offset from 0, 0 position (used when area has been dragged) + Texture to use for the grid + Eventual scale to apply to the grid + + + + Draws a background grid using default grid textures + + Area rect + Offset from 0, 0 position (used when area has been dragged) + If TRUE forces a dark skin, otherwise uses a skin that fits with the current Unity's one + Eventual scale to apply to the grid + + + Box with style and color options + + + + Can be used instead of EditorGUI.PropertyField, to draw a serializedProperty without its attributes + (very useful in case you want to use this from within a PropertyDrawer for that same property, + since otherwise bad infinite loops might happen) + + + + Draws a colored square + + + Draws the given texture tiled within the given rect + Rect + Texture + Eventual scale to apply + If not NULL, colorizes the texture with this color + + + + A text field that becomes editable only on double-click + + Area + EditorWindow reference + A unique ID to use in order to determine if the text is selected or not + Text + Style for default (non-editing mode) appearance + Style for editing mode + + + + A text field that becomes editable only on double-click + + Area + Editor reference + A unique ID to use in order to determine if the text is selected or not + Text + Style for default (non-editing mode) appearance + Style for editing mode + + + + A text field that becomes editable only on double-click and can also be dragged + + Area + EditorWindow reference + A unique ID to use in order to determine if the text is selected or not + Text + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Style for default (non-editing mode) appearance + Style for editing mode + + + + A text field that becomes editable only on double-click and can also be dragged + + Area + Editor reference + A unique ID to use in order to determine if the text is selected or not + Text + List containing the dragged item and all other relative draggable items + DraggableList index of the item being dragged + Style for default (non-editing mode) appearance + Style for editing mode + + + + A textArea that becomes editable only on double-click + + Area + EditorWindow reference + A unique ID to use in order to determine if the text is selected or not + Text + Style for default (non-editing mode) appearance + Style for editing mode + + + + A textArea that becomes editable only on double-click + + Area + Editor reference + A unique ID to use in order to determine if the text is selected or not + Text + Style for default (non-editing mode) appearance + Style for editing mode + + + Divider + + + + Draws a dropdown for choosing a SortingLayer ID + + + + + Draws a dropdown for choosing a SortingLayer ID + + + + Draws a Vector3Field that can have single axes disabled + + + Draws a Vector3Field that can have single axes disabled + + + Draws a Vector3Field that can have single axes disabled + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values. Supports using an int as an enum + + + Returns TRUE if there's mixed values. Supports using an int as an enum + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values. Supports also uint fields + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values. Auto-determines object type from the field's type + + + Returns TRUE if there's mixed values. Forces field to accept only objects of the given type + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values. Supports passing int values as bool (1 = true, 0 = false) + + + Returns TRUE if there's mixed values. Supports passing int values as bool (1 = true, 0 = false) + + + Returns TRUE if there's mixed values. Supports passing int values as bool (1 = true, 0 = false) + + + Returns TRUE if there's mixed values. Requires a SerializedProperty representation of each UnityEven field + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + Returns TRUE if there's mixed values + + + + Returns a new color equal to the given one with changed brightness + + Color to evaluate + Brightness factor (multiplied by current brightness) + If set applies this alpha value + + + + Returns a new color equal to the given one with changed saturation + + Color to evaluate + Saturation factor (multiplied by current brightness) + If set applies this alpha value + + + + Changes the alpha of this color and returns it + + + + + Returns a new color equal to the given one with changed alpha + + + + + Returns a HEX version of the given Unity Color, without the initial # + + If TRUE, also converts the alpha value and returns a hex of 8 characters, + otherwise doesn't and returns a hex of 6 characters + + + + Returns a HEX version of the given Unity Color, without the initial # + + If TRUE, also converts the alpha value and returns a hex of 8 characters, + otherwise doesn't and returns a hex of 6 characters + + + + Replicates parts of DeExtensions.ListExtensions for internal usage + + + + + Shifts an item from an index to another, without modifying the list except than by moving elements around + + + + + Shuffles the list + + + + + Replicates DeExtensions.RectExtensions for internal usage + + + + + Adds one rect into another, and returns the resulting a + + + + + Returns a copy or the Rect expanded around its center by the given amount + + Indicates how much to expand the rect on each size + + + + Returns a copy or the Rect expanded around its center by the given amount + + Indicates how much to expand the rect on each horizontal side + Indicates how much to expand the rect on each vertical side + + + + Returns a copy or the Rect contracted around its center by the given amount + + Indicates how much to contract the rect on each size + + + + Returns a copy or the Rect contracted around its center by the given amount + + Indicates how much to contract the rect on each horizontal side + Indicates how much to contract the rect on each vertical side + + + + Returns a copy of the Rect resized so it fits proportionally within the given size limits + + Width to fit + Height to fit + If TRUE (default) only shrinks the rect if needed, if FALSE also enlarges it to fit + + + + + Returns TRUE if the first rect includes the second one + + If TRUE, returns TRUE only if the second rect is fully included, + otherwise just if some part of it is included + + + + Returns TRUE if this rect intersects the given one, and also outputs the intersection area + + Intersection area + + + + Returns a copy of the Rect with its X/Y coordinates set to 0 + + + + + Sets this rect to the left of the given x position, with options for margin and width resize + + Distance between this rect and the given x position + If greater than zero resizes this rect to the given size + + + + Sets this rect to the right of the given x position and resizes it so that its xMax remains the same. + + Distance between this rect and the given x position + Extra offset to add to the resulting width + + + + Returns a copy of the Rect with its values shifted according the the given parameters + + + + + Returns a copy of the Rect with its X value shifted by the given value + + + + + Returns a copy of the Rect with its Y value shifted by the given value + + + + + Returns a copy of the Rect with its x shifted by the given value and its width shrinked/expanded accordingly + (so that the xMax value will stay the same as before) + + + + + Returns a copy of the Rect with its y shifted by the given value and its height shrinked/expanded accordingly + (so that the yMax value will stay the same as before) + + + + + Returns a copy of the Rect with its X property set to the given value + + + + + Returns a copy of the Rect with its Y property set to the given value + + + + + Returns a copy of the Rect with its height property set to the given value + + + + + Returns a copy of the Rect with its width property set to the given value + + + + + Returns a copy of the Rect with its X,Y properties set so the rect center corresponds to the given values + + + + + Returns a copy of the Rect with its X property set so the rect X center corresponds to the given value + + + + + Returns a copy of the Rect with its Y property set so the rect Y center corresponds to the given value + + + + + Returns the value of the given property (works like a cast to type). + Improved from HiddenMonk's functions (http://answers.unity3d.com/questions/627090/convert-serializedproperty-to-custom-class.html) + + + + + Returns TRUE if this property is inside an array + + + + + Returns -1 if the property is not inside an array, otherwise returns its index inside the array + + + + + Returns the height of a UnityEvent serializedProperty + + + + + Uses code from FlaShG's GitMerge: https://github.com/FlaShG/GitMerge-for-Unity/blob/master/Editor/SerializedPropertyExtensions.cs + + + + + Uses code from FlaShG's GitMerge: https://github.com/FlaShG/GitMerge-for-Unity/blob/master/Editor/SerializedPropertyExtensions.cs + + + + + String extensions + + + + + Returns TRUE if the string is null or empty + + If TRUE (default) and the string contains only spaces, considers it empty + + + + Compares a version string (in format #.#.###) with another of the same format, + and return TRUE if this one is minor. Boths trings must have the same number of dot separators. + + + + + Converts a HEX color to a Unity Color and returns it + + The HEX color, either with or without the initial # (accepts both regular and short format) + + + + Nicifies a string, replacing underscores with spaces, and adding a space before Uppercase letters (except the first character) + + + + + If the given string is a directory path, returns its parent + with or without final slash depending on the original directory format + + + + + If the string is a directory, returns the directory name, + if instead it's a file returns its name without extension. + Works better than Path.GetDirectoryName, which kind of sucks imho + + + + + Evaluates the string as a property or field and returns its value. + + If NULL considers the string as a static property, otherwise uses obj as the starting instance + + + + Texture extensions + + + + + Returns the full Rect of this texture, with options for position and scale + + + + + Checks that the texture uses the correct import settings, and applies them if they're incorrect. + + + + + Returns a clone of the event + + + + + Utility class. You can either use it as is via its constructor, which automatically retrieves all serializedProperties in the instance, + or you can extend it so you can add as many public SerializedProperties as the SerializedProperties you want to access + (their name must be the same as the serialized field they refer to) + + + + + Automatically retrieves all serializable properties on the given serializedObject, + or only specific ones if propNames is specified + + + + + Draws all property fields. Remember to wrap this within serializedObject.Update + and serializedObject.ApplyModifiedProperties + + +
+
diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.xml.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.xml.meta new file mode 100644 index 0000000..d199425 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/DemiEditor.xml.meta @@ -0,0 +1,4 @@ +fileFormatVersion: 2 +guid: d4a42b2e4e6f64d4ba01d35c5a3dafed +TextScriptImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs.meta new file mode 100644 index 0000000..24b1340 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 1efb03f507a60b949a70ed828ac18eb8 +folderAsset: yes +DefaultImporter: + userData: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquare.png new file mode 100644 index 0000000000000000000000000000000000000000..6fbcc5130cedc76f7566a958195e3703ada2eab4 GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMkesKB zV~9m>a!NwNkMjanMkesKB zV~9m>a!NwNgp>sg28IC~ZoCqv30E2pCNeNHGpw>anMkesKB zV~9m>a!Nu%K=J|x1H%9gH(m+TgewgP6B(G98SdR+aC^Gv{4tanMkesKB zV~9m>a!Nu%LBawC1H%9gH(m+TgewgP6B(G989d|}5-xj9E&?iL@O1TaS?83{1OVO4 B8T|kN literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha25.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha25.png.meta new file mode 100644 index 0000000..2d94303 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha25.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: f7ff421f40d548444864a01cd7f47112 +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/DemiLib/Core/Editor/Imgs/blackSquareAlpha50.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha50.png new file mode 100644 index 0000000000000000000000000000000000000000..700b9debeaead0d7b26b31ed60c7e84dbf788ae6 GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMkesKB zV~9m>a!NwNiu45x28IC~ZoCqv30E2pCNeNHGq@`;%)dF?xDTk5!PC{xWt~$(69Dad B8jt`0 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha50.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha50.png.meta new file mode 100644 index 0000000..e3040e1 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha50.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: aa1d42dc6ff3e894da2208c6929d2165 +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/DemiLib/Core/Editor/Imgs/blackSquareAlpha80.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blackSquareAlpha80.png new file mode 100644 index 0000000000000000000000000000000000000000..f4a47c3701daa735d11da1c8e1e3c6f752d222c9 GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMkesKB zV~9m>a!Nvi#bF1=gro%mJyHf)2UajPA7)@anMprDMW zi(`n!#N-r@>Vpnk2}ufqJy{Z04MI!|3>X;nS1{&fnF;m*)iHRw`njxgN@xNAT}&7% literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blueSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blueSquare.png.meta new file mode 100644 index 0000000..490a921 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/blueSquare.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 05cfe010378336646ad6c721f66543d1 +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/DemiLib/Core/Editor/Imgs/circle.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle.png new file mode 100644 index 0000000000000000000000000000000000000000..3ed059a404fad33f34ed81321288c886dab0c6de GIT binary patch literal 455 zcmV;&0XY7NP)pGc}YY;R9J<@m%&QIKomt^ii;xRPP(g9TCLFFH;B-M`aR;lD{<2g zaNAFCQxLzQ1aTvR-H6szv2H3p?@gkK1x;I%c?T{t5IXl}I!xa4WKL9d4Z{(10PR7W z&_?`t1U*0l=nA^@JnvQV0LI(U1vJt5nZ&=T{l~Zrok3Gwo@u;Bc~SEQG|>FuTD5u2 zeQ2cl!!`XZ^Ljz%=@47Lne#snw0P+8eI`n&3>~N?#nXztLc)6hiRu_`p%rn%JG6tl z;{Iy~PQ;x#q1P!V9^QT(<0G^xZh3<$+<`-JZ%*iW%m8h%qs;)m*x@rkRqUwp5USYm zQ4(Vq;92Z=VSu67F=T*1>_&^{M@cpt!bMS9|8sBDvMf)9U}KVJh0L`YvIrWTiF37R&1Ql$b@}GBnYI2R x?Ky8uw&(kjwC9!h@slL&`L#st`8a!3kxvBIUpIp~UK{`b002ovPDHLkV1h6R(RTm< literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle.png.meta new file mode 100644 index 0000000..bc2ac36 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: af28470bd0e2e9543a6dfa9a1a4b348d +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/DemiLib/Core/Editor/Imgs/circle_dashedBorderEmpty.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle_dashedBorderEmpty.png new file mode 100644 index 0000000000000000000000000000000000000000..f8294610e43490599de063ef2cf1c11e2d17279c GIT binary patch literal 673 zcmV;S0$%-zP)pHQ%OWYR9J<@mraO`VHC&DohD7vZSoa0U0Gn^Yi6M)BV~b@WMOP< zgtBF0DaMouF|!fP#$6Ci$;LuaiX=*;Ff}zOMNN`4rknEko$mkEd#}d*d>{Y%%`?x} zIp=-mdCz;s>QM+`CtQYS@CAOssOILuN!SPTEe&CKCX{Oy&T4LJV%*nVftAfT>wt^! z3A#153l71C%BQ5?rn$RNP$1rRHR5~~OeCJByUzW~VFd0&wqEDGFfHd#Js4|JIytws zzS_do@Kw(9ezB|t!p;fV^asoRYvG_4j#&$(`*BOQ-}wESYvBUe;~T8S3dPs-xq=w3 zoXkR>r7Zo4f56Ski5rS+v!yJ5ealXmPN&{iPb!@jLCP_GrOp98{cVdRe4Uoh0Y8d< zjYkUreN?-{1Mv6qH$1X|MqVI6oD{9tjkAC5tXpTIp0_FFs+sD0qau@I)< zj71QBmL*bu)?y2%r<4P(dcQ3(;U{q%7N;A6OwB($g$t4k_MCKW_J z1^eeqk6w7g!SH!)wZd?Hy^?MGE z!jc98cr52{VU0B+HeQnvKap`bSQ$(xmRMeJ9)U5~r18Bl6q@;GRVQ#=0hBbEaQrI# ztqZl<&(smfBAVT>9p3Tz9@d4L0MBUe;UzqTJIw#AZq@7$@4LV9X(+GG00000NkvXX Hu0mjfCz(G_ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle_dashedBorderEmpty.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle_dashedBorderEmpty.png.meta new file mode 100644 index 0000000..0055f30 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/circle_dashedBorderEmpty.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 522b0133a9838674ca9a12e0c6e5a59c +timeCreated: 1625322295 +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/DemiLib/Core/Editor/Imgs/greenSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/greenSquare.png new file mode 100644 index 0000000000000000000000000000000000000000..63ef49a76b220d4de80807510b94f406c525e5cb GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5he4R}c>anMprDMW zi(`n!#N;V^PaSgLN=Q-=?8%b2Y7k;#V8Fnje2P&lc>$vzP#uG(tDnm{r-UW|fY%uC literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/greenSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/greenSquare.png.meta new file mode 100644 index 0000000..774d702 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/greenSquare.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 789ef07ba2573f6448fa8b5dc5224c44 +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/DemiLib/Core/Editor/Imgs/grid_bright.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_bright.png new file mode 100644 index 0000000000000000000000000000000000000000..5c2feae19dcc914919ab80fb84485e00a07e4699 GIT binary patch literal 222 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$&H|6fVg?4j!ywFfJby(BP;i2$ zi(^Pe~gvJ1Rc= z?Ot!qiO>2DOF9@gq%oXjn8j$qoWXX1X90@9arT z#W5tK@$F4Rt^*1J3(_vMzVA+9hCAwRC4IicbTxXen@yoZH)$TLp zrW-e;F`Q+X#c0Bu!FGXXfusY9z&d`5^RH({?s9+MdcCA?-!-jS@BSaK$Ep;j_wA>K a4t9SLo(F6Gt~w8N6@#a%pUXO@geCx~6HWdA literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_dark.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_dark.png.meta new file mode 100644 index 0000000..9baf726 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/grid_dark.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d542f997a51000946873268e3546b6ba +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/DemiLib/Core/Editor/Imgs/ico_alert.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alert.png new file mode 100644 index 0000000000000000000000000000000000000000..9242a22984b08edaeef4a97ca09251719599f746 GIT binary patch literal 540 zcmV+%0^|LOP)pG&PhZ;R5*>TmA^{@VHn4s_q;MC!-&SVNGQ<|XQe4zN*5>Bi0B8_ z(B#-6L6L|M{Rb{Vi#3V6gP0CRo1=x1WNCN4J&&ne`ihtMh3DS)?w;?*_nzm@7ewNm zNBRGBF5)l&co~PsW->XW`d^7=YV2ZK$Vt}(`*N5OAf<+A_H;Q-!fjD$0z5v=(< zNJ~q12;bJ;lls6LIQZ+Qr@Fvx59U!mYOCWHBylcbJT}v5{$er>gjS;ah<3I)od2#FpCA|3k6_{i&xm(Fx7bluOHSUk)dF{B0q6Z`^053cwF=zqZp!gO@D;0000anMprEOz zi(`mIZ*qzP(;s%G5<@oyhKoKtB29tJD-syEdm8mueQ3PsAj8w}ant&b^`}8BSioJ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignB.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignB.png.meta new file mode 100644 index 0000000..dff6533 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignB.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 8b6b31f71cd528243b053cfc488e73f5 +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/DemiLib/Core/Editor/Imgs/ico_alignBC.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBC.png new file mode 100644 index 0000000000000000000000000000000000000000..3118ab10593c1b69d6e1d48975d2ada785dd2902 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`kNVGw3Kp1&dmC>Y@B z;uvDloBZYD$DijNTn`*^NIk%moO5$i>qMdE1iPiXxZQbWObf0!Br$N?c}}jZitt`! z>^Z&Q*>6FKwhHez;*R|ry1ds+KAfpAHTJ{-1_rYXzK^{pYK?$qGkCiCxvXqMdE1iPiXxZQbWObf0!Br%-sUf`b4<~c#m vYh|(8OQFchYLzxcJqMdE1iPiXxZQbWObf0!Br$OBl=6M{a^aL9 seF?e7mlI{$mQ1^|!N8e4q)d^SnPH0pZ@U)rX^^c9p00i_>zopr0Qs6O7ytkO literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBR.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBR.png.meta new file mode 100644 index 0000000..c3dd648 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignBR.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: eeac3acbf7d1cd54fabfb1c4a12f9fc8 +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/DemiLib/Core/Editor/Imgs/ico_alignCC.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCC.png new file mode 100644 index 0000000000000000000000000000000000000000..c5f85ccf8c0fca414c90e664cda7f5db110bf004 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`kNVGw3Kp1&dmDCp(s z;uvDloBZYD$DijNTn`*^NIk%moO5$i>qMdE1iPiXxZM{t>ikggefBcZHz<9Q-ou^) w7d<3f*dFz!)@FVdQ&MBb@035_LApigX literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCC.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCC.png.meta new file mode 100644 index 0000000..75090ea --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCC.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 8f0cb66458819764b94b93250bae94b6 +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/DemiLib/Core/Editor/Imgs/ico_alignCL.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCL.png new file mode 100644 index 0000000000000000000000000000000000000000..39e15460bcb8572d222b8c9f81b7ea7042045945 GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`kNVGw3Kp1&dmC>Y@B z;uvDloBZYD$DijNTn`*^NIk%moO5$i>qMdE1iPiXxZM{t>gYGgHA<>ER%x7k?sG|X zlTxNh5Zl5=9ii7x4)AzwmgDJh<9eE~Vfqao9tO^d0!J#qMdE1iPiXxZM{t>O9FZnYp}u(w#U18>Y*P xCmM0^s#s4uuM+EYa@FF<{;Grx({J$bFz|=+F9@hFv;-Q<;OXk;vd$@?2>|{=G4B8X literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCR.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCR.png.meta new file mode 100644 index 0000000..6223c1c --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignCR.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 6f504a3fa8848264bb4fb9bb7d582dd5 +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/DemiLib/Core/Editor/Imgs/ico_alignHC.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignHC.png new file mode 100644 index 0000000000000000000000000000000000000000..dc638a7f4794363ae5117c54dbd4656672539c99 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprEU# zi(`mIZ*qzP(;s%G5<@oyhKoKtB2A6v4XnowJom3j5U6;#Y5m9gm`O)Y1ioRaPanMprDnf zi(`mIZ}N^e*?;6)Bu}vT@Q5&pl{Ef$XwW;x!LoyA!41~K2N-%Bj)*7RV5nUrC@;}_ ftg+vXjg8^anMprEs- zi(`mIZ*q!)aLhN;fBcJPN@%d?{80JN%(zQJSwP{lX4ydl1BQHsMeGu04m-IwxQf~t oNcGNWXq~a*5W7YRBQrCD=nbx>q?xC$0*zzvboFyt=akR{0RQPILI3~& literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignR.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignR.png.meta new file mode 100644 index 0000000..884fe5f --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignR.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 727ba41e4cc95fe4a98b07301e3ebfc8 +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/DemiLib/Core/Editor/Imgs/ico_alignT.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignT.png new file mode 100644 index 0000000000000000000000000000000000000000..b4397c60a97aaf24c2506005053933d6469f947d GIT binary patch literal 129 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprEm* zi(`mIZ}Ofu*?;CYG95T#@Ptvh=c7D_fl6b;1ev3W20T0ojfM%0PFfPYM;gr=8W|a! Xt+|SMR787$+8I1u{an^LB{Ts533wwe literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignT.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignT.png.meta new file mode 100644 index 0000000..30bc025 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignT.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: b4785ec6d937dab4fa59da70b69afc9d +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/DemiLib/Core/Editor/Imgs/ico_alignTC.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTC.png new file mode 100644 index 0000000000000000000000000000000000000000..de6a933ded8177badee0cc96a9aa1a2fbbf3f089 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`kNVGw3Kp1&dmC>ZAH z;uvDloBZYD$DijLnD=m0wS>kb&6Uy9V!Z literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTC.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTC.png.meta new file mode 100644 index 0000000..0d20edc --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTC.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 0f79253104349f44cb73978f6c8e93de +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/DemiLib/Core/Editor/Imgs/ico_alignTL.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTL.png new file mode 100644 index 0000000000000000000000000000000000000000..627b907d345cf01adac7228639ef5ec9126558dc GIT binary patch literal 153 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`kNVGw3Kp1&dmDCq6! z;uvDln`|<3`S?L|7swrOvz3R3LGvN^CyAfE+CXC&JYD@<);T3K0RSeKFSq~z literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTL.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTL.png.meta new file mode 100644 index 0000000..cf3e9ab --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTL.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 6efe1c8569d975640ba0c9f2ac4a9d61 +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/DemiLib/Core/Editor/Imgs/ico_alignTR.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignTR.png new file mode 100644 index 0000000000000000000000000000000000000000..6a0d89d4ab8ee1f7bb014545e12b133563639a3e GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`kNVGw3Kp1&dmDCq0y z;uvDloBZYD$DijN*eV3SaICfvW}eE(-LoanMprECv zi(`mIZ}I_lz28#**%NEBW=LqT^t@pD-^j3@O~K(=@SCQ@1co?=`57uAxh)4WOoSLp dI^5XU7;GfO7!~URp8*YF@O1TaS?83{1OU0VB-Q`` literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignVC.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignVC.png.meta new file mode 100644 index 0000000..52134bf --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_alignVC.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d1d45eadab0e41c4a82cdffb6396b1d7 +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/DemiLib/Core/Editor/Imgs/ico_camera.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..f1465163efb49c68c56e9ba1105e270d1f95f79b GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^+(695!3HFgJ}hYlQk(@Ik;M!Qe1}1p@p%4<6rf;( zr;B5V#MER5_W%F?e`kFp9`L4HFOq-iiuO__%H znoN1md1U*78^W=L?2}%eU{JZn7^=*0q}!oq{{KSe33KdEyj9>+?nqD&GBBLL;Luh7 za3cH3ql_Qf4ftPlabCFKz^<^7Gr&{`XyJVZhG}PS7ZpG4M{{nR2Y?okUwsNPz=U-&>$pGlQm0E&;jvafB_CrG0+>(T%ot< z-i>x(?}B=UDB`~qiM=aBNQ4AMQD5yyVL+(;27Z3_XUm3g6H!X<6h--L+x8x~2R@`} z`gJL4n&w)Tbudk{!Ps$}A`HVbh#_s;&c{h$I%ZkM%Cck_!(`TV9YZ1Uef9GA5d>ju zmSuSt1i?>T*Bla7*1>) zsplTR{8j8PRaJE%`fj*?cSQN#q5%X~1DT<1wGmEJc=Z4P002ovPDHLkV1jVXlTZKv literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera_border.png.meta new file mode 100644 index 0000000..234280c --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_camera_border.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 358cddede8023574191e0aae610a4645 +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/DemiLib/Core/Editor/Imgs/ico_cog.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_cog.png new file mode 100644 index 0000000000000000000000000000000000000000..b7f481e9d866280ded3971b2fa8d5c7ffad6c8ec GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4aTa()7BevL9R^{>eBfcF0TApGDoI2^R2Y?GW`Kg2n3z^kQPFj>va*-t<>ggXR8&q|Sy}O4zI=Hv zNS+C%@csMuamB^O{My>un?Sg*u#g`p77deU3=R&?`19va4$vfxNs}fqzj^ZpEFmHy z!jPAj_xJJR$2VA5Sf((zxVU^+w{G2kpyL0vwYAsH&CL&jFo+Ej1IdBZFflSRX71d% z^Ec2M1|a?JC*4wvlPiF)MOUI{ApQ02L6r?6hn1I_eFyQ6o z^=QkME&tQg)Bk|*wr$(~dwY97hFc9|0IgZt-`}74`}glC5dY4dJIf>_B$hyA85jUh Wy^gC3zEAG}0000anMpkR`x zi(`ny)MSRn|NsB*{?p!YJmb%DA0B}Owx#?FKk^?Cv2c3%SfXZup^w8K$*d)EQ~nDc zOK;%%*Un|6_|b9J42Q5Aj=k1LPn`I{-&xOegk5t(3)h?WODk$7Twma}E8&x*1jEX* Wyo)>cM1}xuWAJqKb6Mw<&;$SlB|xwM literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment.png.meta new file mode 100644 index 0000000..1e64e47 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 622fdb780ae13e840938631c5ed708f2 +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/DemiLib/Core/Editor/Imgs/ico_comment_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment_border.png new file mode 100644 index 0000000000000000000000000000000000000000..d61a35d12f89898b1bb6a87f416d2a361fc9df45 GIT binary patch literal 426 zcmV;b0agBqP)pGTuDShR2Y>lkilxgKoEvE8+S1qdrBSz(Z+Tuo@I4L}>6}4;Jg8U@aoq#-#rS2Zo*5{bv7}5y;M})vAjl4Nt-E zf*@E@N*}^7WXS(0hbomyW)Ify_j9#cjRG?B`TR|*)k-&;O$EqH1S*PhUMiJ-dF;Aw z$QZLXn~hd3mr1wV{ls;T?v$?@jYe!Xn-N)-zvA)uK1@j_lf*Pl5em-{h+Yg`*N+^> zA(AA$ilV5a9WF`c^Lb`88aW({;o+oMEXtiuhb2%7r+wD6TpQ@^Q zipIZrwQbwX^Sqw#`xm@F%d$Qo`?gc1m#7Zb>or-eRvvy>0zNDh3Z&g``(U0T5Uv}B zksFW4B#}rAG0Yh@5bbv|nWRu;@mSC_jgK!0f*?cY777Q*@8Nu1KZC*Gm=Hq#0Ta-T U6;Ga>XaE2J07*qoM6N<$f-3^I)&Kwi literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment_border.png.meta new file mode 100644 index 0000000..2f10151 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_comment_border.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d98b8847646169c4fb5af28dd84c4179 +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/DemiLib/Core/Editor/Imgs/ico_delete.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..85bb2483c4ab2d98a3c48823b1d38c1d34308331 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqoCO|{#S9F5he4R}c>anMprEs- zi(`ny)Z`!k|L^AzkY`BBWz%5TxG+hHCxDG(Pn%bU^G$_<21efpwjzg36{I;QH)yhW o8yN~Pv8+`%HnC#Q&v+Jwhi|t0e|4ql7|=KdPgg&ebxsLQ041|4GXMYp literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_delete.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_delete.png.meta new file mode 100644 index 0000000..31ad788 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_delete.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 6b1f9e1e1c2cf004b8e3bdd3033a8e75 +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/DemiLib/Core/Editor/Imgs/ico_demigiant.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_demigiant.png new file mode 100644 index 0000000000000000000000000000000000000000..3445065c4b6b03dfa8849bcbb2bcfa2d4b2e2c70 GIT binary patch literal 605 zcmV-j0;2tiP)pH4@pEpR5*>5Q_pJ?K@|RGH*N#jG^J~^0YM@X2)zi>o?1O92%fwY zPoj8`sE7Oo9zFGB6>L?g=s`Sq@gPMHD(Xo+`lA(;Dyb$d{#wU0-R@?5Z_*9BjTL;b z%=_NV_syHP?+I+OLZL7$gs6~vNGY|0V}zGzc|iC|y~kz`%wevX&1Rsod(n%aFjA?&3S3+)E7L)Tc8XI)`XLee}Vj{OV9vd1->_wQkH7?#9 z1Jm;ohvIl?wVv3kHNQmeeZ%+t8Sb#$(anMpkRWh zi(`mIZ}Ofu*?;CYG95VLz{^m?YBpU!*>5Aa#D8YSE(U>yjHIKQWd{um8d#^ZXk17L zT)O+GjanMpkTSD zi(`mIZ}N^e*?;6)Bo{oePZT)Vz#=ixw7KEjGGm?}2PVJMYU6J&Klsy!X9|emq_GlszP2N)P?_LrFKH{mS>I)TB{)z4*}Q$iB}C&NWd literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeVAlignL.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeVAlignL.png.meta new file mode 100644 index 0000000..50dfd23 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_distributeVAlignL.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 32eaa0efb2b38774ea9705b40fdcc00a +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/DemiLib/Core/Editor/Imgs/ico_doing.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_doing.png new file mode 100644 index 0000000000000000000000000000000000000000..ed34625f97e77dab025300deffeb49f096398fbb GIT binary patch literal 838 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VXMsm#F#`kNVGw3Kp1&f6fr06V zr;B5VMQ_gOgPaWpBCH21C#VH=ly*#QyE4%!$LUAh9*&!zb8=R#YU5Vt`_g|mVupn0 zy!(CP3=IGOA2Rsx|Nno5=3V9S|CjFh^~S%gd3&9q&Ho?#I_f9SA4yn$?3h5-nR5?T zoh+N)*tl@Y#EFHrF~-cy%s{vN|KBA2~wbpq5D!Cw`O%YJli)GTZR^#N7L-`-1HaYJRX43MwibIC^A*Wpu+qx7MxQ6DMw* z)7aR^2sWJwZ2Erd_5brsa;x39BpNUneJPnL(A=f5*MV$r1K%)ZrQvW z`~UOs2yXr;t)_b53{c4j9Zyd_MpG0}cksX&W90AO7|EM{L^S zL#KdB3;3W)ci3I(VRkh-HD_|7?=A-CZ=3vi6pihTbnF~0L|tYV8yOfFtN|su|NogJ zcbs!=emk$1OFAYfdQxlRv4#0O`u2a7Ul?_~zTx2cOpclPFf<|-Z9!F*3wKbLh*2~7aw$Y&P- literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_doing.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_doing.png.meta new file mode 100644 index 0000000..9d3c5d9 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_doing.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 4dd24a9f658e7a3438d4fa08fb85aba3 +timeCreated: 1648211899 +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/DemiLib/Core/Editor/Imgs/ico_end.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_end.png new file mode 100644 index 0000000000000000000000000000000000000000..b71eefe4f8ca86bf8b5f34072ab4d52fa6be39da GIT binary patch literal 475 zcmV<10VMv3P)pGjY&j7R5*>TmCtIzKoG`fV--CJ^&m!XMGzlA=vh377bTbWF+}VIz)j$g_qya>y zop}kHp=;!G064)3@C^E9OaOch77Ct$IF4ZbmQ5x@=4$06Tv|4m;WJ;1!nK;)#0GOV zQ|b_g2v@6sjVzXJ_U-5$&d8VMa0qm_FI~T=ef_V&+Q&>wCjV@(KK}&}eF3^_XtWu^ R>+Apk002ovPDHLkV1l}g)4%`# literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_end.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_end.png.meta new file mode 100644 index 0000000..3580f68 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_end.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: a248c8288afb9184f953d9aa07a696b0 +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/DemiLib/Core/Editor/Imgs/ico_flipV.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_flipV.png new file mode 100644 index 0000000000000000000000000000000000000000..f4525da66a574728188a6a2a06bc798a8bfa3803 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^AT|#N8<337)>#0gI14-?iy0XB4ude`@%$AjK*2~) z7sn8ZsmTqE|Ns9#-ekaR#}KlB@kso_2n)x|NsB@I-K$EJNDOM4`avM4=a<8EEDXk=IHn>At`CUXmzsE1BMA}xi{YQ z^HBCX;N&2;Jh(8EMUy4d;)sKeg0&T!c0vLJ!+BG+jF~?Te*w*A@O1TaS?83{1ONcS BGUfmP literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_closed.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_closed.png.meta new file mode 100644 index 0000000..fab01a6 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_closed.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 301c130dbb4bbba4e87072804939c861 +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: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + 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/DemiLib/Core/Editor/Imgs/ico_foldout_open.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_open.png new file mode 100644 index 0000000000000000000000000000000000000000..50a913a971a434d3144fd70243f25abeee47e062 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa&H|6fVxZVz5N14{zaj-F7~|>U z7@{#TS%R@aaOUU#|NmDhJZ*4(%jo8I%uS-5)3=C8p#I3Bm&zf1jH}%ibSkj^jWGG< z{8XagCdZ{30S{RRAu9$^WuAt*r|ge-1J0ax;9|(yz@FG9$SonkaDh*WN!Xr08fXuL Mr>mdKI;Vst05vx;wEzGB literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_open.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_open.png.meta new file mode 100644 index 0000000..cc34f91 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_foldout_open.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 18a5a7cde794cc04b9b446f0feedb3a0 +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: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + 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/DemiLib/Core/Editor/Imgs/ico_heart.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea0c06f4746fde06696146f5fc58c0bd2a4705c GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4aTa()7BevL9R^{>ytLPfU_N>xK}dN*#rXpV6b>{n zCna{u>aU14wYq1NoD~D zm^$_=Ycg%r-C)I{A;@#2exZfL`qhnGMGg|7QyLi=n7I$IoRxdH4Co#PPgg&ebxsLQ E0P#aag#Z8m literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart.png.meta new file mode 100644 index 0000000..072d281 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d173388c1d9c32a418b5b777dd89d71a +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/DemiLib/Core/Editor/Imgs/ico_heart_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_heart_border.png new file mode 100644 index 0000000000000000000000000000000000000000..a53308482c1c4eba9d0d1029a8ca2efecf1d5546 GIT binary patch literal 307 zcmV-30nGl1P)pFMl_cq?D9T1v)q7DC+rIA~x~?DU zx>nen+P2*h%d+-C5YVpcC=`Zai-AW5h7O9ivMecARaL`qf!Vfw6$z6p%Y;kQG%^+# z>k9(&Q5?tQpWZAY>@hRfbuW3I(_bM2LuWX}_FQLdk&vvS@a=_E)L!3HEN&baUbDb50q$YKTtzQZ8Qcszea3Q(}X z)5S4FVrnu&CR${#usG2zMNh8rRs{)bs+ lOi=mRxP!%unUR^9Vf*65*esbtbAfgpF)=5M`R2Y?GWB>vK0|Qq=H|Zl=FOYpbLYcKQg#~|NehVOUv6#K(>mq zvN8iQkd>8X0GcAg^!M-IeS7xo`GYLEWXY1BEG#U08ML*vh3xI^U!6L23Tz~Z2J&A3 z9Vq}-sjshZ7!nfl2P7FB9Q+697(EnwfDZc&l5})*{0$RhfiXUR{`}w6)RcjlnHg?B q6O6&m&VH1QjqN9p-VYIBU;qGV6Kn1Qa9Ml+0000_o}_+Lvyv%WI`uW@8dYxngml%7+dnComzjliO;w-JtD?B; zu{7`9V>>@xzdqA4{ol;}x4%BR6vcj_S@%w^>F)!RQ+SPc91xgwpL5)(?L0_geb8ifvwV9VGnOl3`K%X*ry85}Sb4q9e05qY0+W-In literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock.png.meta new file mode 100644 index 0000000..b7bc6d4 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: e3d0592dad579e141924133869455c53 +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/DemiLib/Core/Editor/Imgs/ico_lock_open.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_lock_open.png new file mode 100644 index 0000000000000000000000000000000000000000..be8544366616d44dfba55c5524d3f756ad308cbe GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp@K+MO%1|+}KPrC%9I14-?i-BT?L74G){)!Z!;B`+I z#}JK)$qsD)|Nl>Ceq^MukMD?m;}0=`>kUUFH!v<>;TFhee01L74)>8xhdVq+2ZPkyRh;F7Hb7t z;SN^Lj0fzGq8;Y&ZL0cL|K@=x-^ZT{&o?fZ`HR2fu7srI(S|L?0{FVdQ&MBb@03Tp9dH?_b literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_nodeArrow.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_nodeArrow.png.meta new file mode 100644 index 0000000..aabc040 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_nodeArrow.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 4aa34055b1d36ef479af3d7b5701b28a +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/DemiLib/Core/Editor/Imgs/ico_ok.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ok.png new file mode 100644 index 0000000000000000000000000000000000000000..b4d864a5b768bfbf4595d3b76ff9ff5d676a2b38 GIT binary patch literal 715 zcmV;+0yO=JP)pHeMv+?R5*>5mCsKTQ4q&xmn{jc7L8b-{%C16#;aP3L5PXoBs4{g zMB{-NjUGIZ22B3~V+rvOFvb&HM4C4EBS?allu&An9y}OB<%briURu~SX4|ea>vq$w zyQNMtncbQ9{p7v3@69rxW0E9s82soybPsx~Qd&n(qDRof48!ELT1E#(ppiL##yypr zfCV828F5{%*-Wj_Ztj9^Yaeu4E-Ybc2%%wJAc9y7_gBQ!@KE|DEbuX?X6=?P7_mPB zhshPf*C2w6THu4^ulVr5stn#7?L%mkRX)JO!1o*f1>4K*lOt(JOAKPszV*%vv#z8NuNijIdDDrT9<)R9Ww#~!1=e=jeCM@vRuoIn zPrpAvQ=JVO7&FB9*Kp@sKNO^b?#xc(-lM%IVAyBv|7So6x?S9YAGpW2*7`t{L@+Xc z<5dbz8RcMqzO;N!_bfJXHiU1Z3x+T{8PA+=Quug`Ra(&C=z+)bHPYJ8e5NXlG^8a4 zvE;8zcM$Jlh%UMwv>J>wq$LLB%8yNuy2f+YqTHHxG8#i;NkiIF-l)NjzU8OeUgRdL xHQ2A13K%w64Yd3h;6-m%N}K2jF#H7o`~gtZ6gst;c2NKT002ovPDHLkV1lxxN7euU literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ok.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ok.png.meta new file mode 100644 index 0000000..029aabf --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ok.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 34f39b5a760ddbb4d8b8749852868335 +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/DemiLib/Core/Editor/Imgs/ico_optionsDropdown.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_optionsDropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..1d89e2aff67e6b03ae1ebb542f654799b30f9ba8 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~o!3HGD9`RZNDb50q$YKTtzQZ8Qcszea3Q*9} z)5S4FV`B0G5rapQ|NQ^|-*(R|Ny(`RT%R4gCKlM8)N9CMdf4eOS$)zICKG25rYoGy ffexGr2@DK}AFAEl?xoNRG=#y^)z4*}Q$iB}Ky4`= literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_optionsDropdown.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_optionsDropdown.png.meta new file mode 100644 index 0000000..560af25 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_optionsDropdown.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 62a48d93e78c63b4ea9b46537c7c0091 +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/DemiLib/Core/Editor/Imgs/ico_play.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play.png new file mode 100644 index 0000000000000000000000000000000000000000..0608dcb7ab4d0a1a5d2e56b3e7affa340ee4d695 GIT binary patch literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k&H|6fVg?4j!ywFfJby(BP;ir{ zi(`n!#Hm4!T+IdoF+Tj2&H5kaJ@PIRX3^it@z=+0!u<{pTkc<7_iR*NM~Q@a-?B1j zJYz8XjoJogLDi3rIi2f!-!AifprEK~XV`buyYgvWxf936fd6)#(`Ky>4Si_hyD?xd zo7Fmvr3UAVw_JNFW<$T%X&MBcEjH{|{-0xuic+ORkMZ}fy zn8bun1{WVLez{4fQ0Dl0-+1ZQPur8v{{3jmAeR59;KbVEH5EYDGkCiCxvXpGG)Y83R49>^k}+$8Kp2L<>f+`ggtSveOC}W@9EARWZf*^NOP7M; z?{IW04ia$@obne0hoTM{>X5;yTc~5j>gCRwgS11*3y0qOKHul@oi{LRwOVn4AUxyO zC%o=w`yH?Ncs#x~P4h*JsX&sXJBDF)x~|Kc%?3nKoanl)VY}TzmSyEQj*nGUeN3Gd zMJa@_iq5T}OSw z5SGD570+irYZwLy!w?L^fIQD9Z)QXW{t<3|v1fjUQD2xW%Ytc|kR%Ccnnou^9;6_Q zqKLxl^%~+h2HUoQ<2dTiOnCKJ*|u%Jm&@g@D2fOC+1tfp0X)w`-}kWJ@4@ptNYiw> gIGlf8`D*~20Kj|d@@JyvGXMYp07*qoM6N<$f*&fV3jhEB literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play_border.png.meta new file mode 100644 index 0000000..e57aa67 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_play_border.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 45e128e1cf00555479ee7934ab11cadf +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/DemiLib/Core/Editor/Imgs/ico_skull.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_skull.png new file mode 100644 index 0000000000000000000000000000000000000000..7e5397545d7a45641ad23338850e6cb0b88f03dc GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4aTa()7BevL9R^{>pF{z*hZR2Y?Yk-ch#Koo?JKZT7=Dr<|Ru+S*cI!};iN$D#HVr47% z0zx1*7Pq-w2&A%zsAaIwG=d62H#-tT;F5ubVdmSzSymt}!!WKCMR^oO@j=tH8)RMA zy>Hw0v@Ax^2p$zK-1YJrzYkS(eeduKR&Uh7OF(FTb^IdmDx!sj5nnB%z=f4aTa()7BevL9R^{>$+Q-p%fJeONQYMtD+`qRv0zM#G2+ELR(T@C*1i yf7-ktN#oik#*bPGVQxafZCx7;4Gatz7;bn?UAF3X!Zn~n7(8A5T-G@yGywo>oJJ1- literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star.png.meta new file mode 100644 index 0000000..59f2768 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 645aafe2260b2884a9df05b4bc01b1ec +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/DemiLib/Core/Editor/Imgs/ico_star_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_star_border.png new file mode 100644 index 0000000000000000000000000000000000000000..4615829ffcca351f0e09b4b4287cdc14d2044f1c GIT binary patch literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4aTa()7BevL9R^{>)M{{R2qJVSfp(U}u0Sy@^6Vq#)0-MMq;l7iVL z8RZMJ0@Bjbj=#UZ|FuokmlHeIt?TRV?Ce~)Z{NSwd-nXX^z%EXUH|{z-SZP>&%T|L zo&CH1`nuTv^7eIq)X8ka=i3vN z|L1da37PP;Ic7OlIaD2NgB!)v{t#%^-@5yIcYj>CQuFZretAwdZli=}&(kN^*UoAT zjl4O3;>1E>u)RqwZU@dDFDvu9-zTSf(m>+Drfq2xY)f9qF*7$?fmJa5w0&{=-`^Bz zHYSC=3dRx=5`Q4>V3L&hk@+%c6K^x)21y>Cg)q^KPk%2ccJcnHd&0pCG(`|%O6&Y1 z^TqW8RIdL2r+R9_>@#NyzRgcR4>V0;2}I)|ANwf`Y;2%N0fqjp||mt zk50nGNl6I_2^An&uq4m&xw1#~9&gzQ43-27c8IX#j(Pe1l;XP%eV~E6A}d4z4oR69oM;; d3+P6O9%hDpu_`PY7uyel_@1tQF6*2UngG<66KDVc literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_todo.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_todo.png.meta new file mode 100644 index 0000000..6f04add --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_todo.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: c561c878c05ceb1448966fe706740008 +timeCreated: 1648211899 +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/DemiLib/Core/Editor/Imgs/ico_ui.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui.png new file mode 100644 index 0000000000000000000000000000000000000000..afdcff35bb27ff174e62435029f72e3767458eb4 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4aTa()7BevL9R^{>QNTh{iU<7c&ovDsNyG-pFXZWAl?kyu6|u-FzmI#H8}* z^_TBTj@Dn`_Sx{kQ}dxkU*eUhjk&ikyeTw$;QHP+GCMMeqjAeM=gr3@Hz!Q87o8fk zV;%S2@;T2rHJ`qJv}>J!(*cQQ3FSG(_a}dOwlDwI_qkEo^4&$}LcAoaK0Q1j9IKVF Uz+qRVG|+Jjp00i_>zopr0G3Bs*8l(j literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui.png.meta new file mode 100644 index 0000000..0d3bf2e --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: cb46e1d925af22d43a6f8bf0e1d459e6 +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/DemiLib/Core/Editor/Imgs/ico_ui_border.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui_border.png new file mode 100644 index 0000000000000000000000000000000000000000..6613a3d325a527ada017fedeaa3447d3728e9eba GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k&H|6fVg?4j!ywFfJby(BP;jfK zi(`n!#J!Ug`C1GFT>tAy=rt%l~V#R=!D_zopr E0AM_3LI3~& literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui_border.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui_border.png.meta new file mode 100644 index 0000000..2ee6aab --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_ui_border.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: c0c40ceac3c6df146a0fcd4e6b226540 +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/DemiLib/Core/Editor/Imgs/ico_visibility.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility.png new file mode 100644 index 0000000000000000000000000000000000000000..56a1324846d22c617d1340eebbd88925cced18a0 GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~e!3HF=pW8M9Db50q$YKTtzQZ8Qcszea3Q+Kl zr;B5V#>8X?_W%F?e`k5*>QKYpvES*V?1~xc%z6w{uCP41{GXF~f|TzJJGT{S+6r5R zJMJ@mEK<0~e&l>Z1mmiAi~`<_8-)ejnKl{->^3$sl4H&kV|=vRVGi#RodD*$jX#tp ztyS1&9n#0TN^FTci^>JAQpPjdOc}E#@;-D9N@qTD*2m#n_=aGC11udsH?RnMoZ)#_ z?siPs;gz+pSgQ?>3d01(niFvhP0S8|IJ=`J+>n%Df5NJ8l#~0&?pGAxT6*R49>klD$d;K@^2&C2VORq!1K*fna4~2mvceC2Xs&;2TK5 z!Xn8_SOwohEKRVq5{*AtstJfTJATL9)n%Q%@a@msnR9369;fi$$8Z5(un#LRhB>^! z4V=NAaxN4kYVZyz>_Q!8{(nrNQC!@H4QRp#yhy-u+Rdg_AHf4Gppz|Dr8`LMUm~CI z3e~_)D{ut2KSg*9f7Sjbo!EAt%FfJq7f$ujFPU&|B3G^?$Q?^P4JD%}I^;EhZHbkM zNMN;igk0>vBOK^hh3Z|c&0nG}rV`j@)h<*Q+qAL7*3`2}9c#@!46J4AIT00kwidUn z N002ovPDHLkV1mOvm^uIe literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility_off.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility_off.png.meta new file mode 100644 index 0000000..a0db454 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/ico_visibility_off.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 0c0132429106c8a4d89d9d0a6b723ec3 +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/DemiLib/Core/Editor/Imgs/orangeSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/orangeSquare.png new file mode 100644 index 0000000000000000000000000000000000000000..c272180edf95f9229ae13d1eb1c0362d92759ab5 GIT binary patch literal 104 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5he4R}c>anMprDke xi(`n!#N(E8hH(Gnn1k=)1;xK#l381?e NJYD@<);T3K0RYm0RxJPk literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_atlas.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_atlas.png.meta new file mode 100644 index 0000000..eddd2e8 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_atlas.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: e2279677842a8064fbae0bc889fb85ab +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/DemiLib/Core/Editor/Imgs/project/ico_audio.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_audio.png new file mode 100644 index 0000000000000000000000000000000000000000..90c521249c6777aaef0ba7a53c81f9744892bc82 GIT binary patch literal 338 zcmV-Y0j>UtP)pG1W80eR49>SpcP=lCBcYGLS0>bnzOUB$=$nmpa1>)_YX*H&z?Q4 zKW_m;x3Y8lPUfcI`8W5fKq_?B&aspZ@*($BwK3mqu|_RaG7k zW7e!$CO}Of+ZY4|1^408XbHr2KwEx-I4f4Hc<}l2=igAdZCI^QP*9k#dGqFnPoF;h zdhz1Lw;+FMX=%*^O4$Ih3=Y>ZIPKfF?igP)pGyh%hsR5*=e7;wOdM@|`tO@R0(5O0Ul7=Rgzm=O@i@i>Hc%ZiId zO7L;|{Qv*o@B8=f-+ZI7zKTe>(l-zB+JC`?;nHEy`u~g=hrhZy}bMJ z<;$11U%!668K|xan+uE-6cjS~S^g`CzPiTqmz9Izhp-&OcVR__*II52KPA*SxPO1; z{Qu@L*RNl{E&in(*|TS{f`WoCj_uigll{hF7O8tjco`U(7`_QeGyMMX{qt94 zGY*Yc=M-MNc<~gd{t&v~YyLyQ&!0d4u3x|Yfr*L9F#!RAqk<9T?-*v>{mNy75FpRP!^4u5mBsLbjaBeH$hkkiF#P@d_cxIF8K#zrfds(v z<1+)ug+S(CY%X{Y1V4dcz>chmk&%&w_3JwZg#%L%#14U#J4L~u4HCn zV&d1*(h^{2XJ@{5@80JfJ9e<}eS5{t_Ui7>w{KqG28u2D_wU~_p!$!vT&gA}Cf3!~ z)^=&ts#W)tm6ab#OG{q@8r;eNNu4MFUs9F>VowG{Qhv!W2mu2F08Rp}xKNEjp#T5? M07*qoM6N<$g8J0>{r~^~ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_bundle.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_bundle.png.meta new file mode 100644 index 0000000..66ef715 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_bundle.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 58676a985ae875646b7be748cf4499fd +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/DemiLib/Core/Editor/Imgs/project/ico_cog.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cog.png new file mode 100644 index 0000000000000000000000000000000000000000..fd589a0f316096bff8afdd0b9fbe51b3138d5466 GIT binary patch literal 406 zcmV;H0crk;P)pGNJ&INR49>S7%;$$Ma)P_N~-w(|NnNse*L<~!^2Y|A|m4T`Sa&D zK)L6H46J$i^5wVFr%%7Csj0aDqCtF+I6h5sK%5a47Pjy2-@pHn0f-M02g+vxu>yup zet!Pet5>hS`}60|Kahrt7cah@K7INP5Dnsk#IIeu_8z1TriTU200NLAW@cu_%a<>| zGd4D!2-L6*DC~9a+_`*RU0tDnKmbyQ&Do-bg@tE82F#v4`zDZY4iz^C@j>D_IXS0+ zd_fGIz))>Dd-m*WkfKYMF1-a>PzMw?0ns2nNc_r`D{qB`g*!2v&Bw>bAuTP<4Rjd; z$caFM@{b)m7G-5+B?{t$0*w&}fL{57&DlmkToVxyaR5(fXD~ow1t%ano*A*Z0GPs} zK7IQ1Hok0944~0%+A3JOBUy07*qoM6N<$f=el@ A5C8xG literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cog.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cog.png.meta new file mode 100644 index 0000000..fa51749 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cog.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: fb605a2688b31194887f2e7a6769235b +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/DemiLib/Core/Editor/Imgs/project/ico_cross.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_cross.png new file mode 100644 index 0000000000000000000000000000000000000000..a34a3e8a0f23b3390c7b578fa3b0db5b4157e266 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^{2anMpkRxq zi(`n!#AFE*hqn3i_w%|4YxV^sBqVHj@bmNY`=?HwI>-34Euhd@KwgD!((x>Y6Dbp# z{yTj5{{H^|0A?RYlMa3+g~}D&2Dxrw9E+~6jsDIsliyTe`DNaTybX*hy=^=!4Nsq) zoh`4F&GympQH#l>T;rd0%Ph8>>`R})_+*(u6%!j9gI(_3o%sQ3VLpGHc3Q5R2Y?GWPkz*2?=i?RSLvLP@!``-2LLki>)9IGl&ou7jI@_ zVwxes&!o_m$;a+x!NGp&`fr8rzZjypxw%=se*L>OK3}WmXZ3a#~{He%CPhKL53fHe|}*B34XG$Wca433081#!+HkYAG{3B#t@4XxMdh7 z-kit41oGW~7G}5||5;cV*qPbkd{!n_a0oC1ef5t0<;zG0U_f!*yv4xz-~q$SA8#1m z{Cv;w_}g=a#Shjp{P^=Tj}a+&Y8bG9fB*iqynOkx7HlUdoPZ{S0$2)&g@O1N5TE$} i|9>7((F_I#1_l6)Drz~&RO5yK0000anMprD7R zi(`n!#N-r)Cg0g+f71^z{`vFAK}6ZiQjLv^LD??)BjbYZBM~1oKYaaqRQ+$4QTl&& urcEYBMnPf;i)VSVEHL>!-)1cj55t^we1F}Q<{1OcWbkzLb6Mw<&;$TUXf4VB literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_folder.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_folder.png.meta new file mode 100644 index 0000000..e0a5072 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_folder.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 4f2c4b43188596b47866d41e1dc13c8a +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/DemiLib/Core/Editor/Imgs/project/ico_fonts.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_fonts.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce1a4de4485e5d4ab57c8f94b8523f6b9c46436 GIT binary patch literal 465 zcmV;?0WSWDP)pGgGod|R49>S7&L&92sOfvj*io%q@*MsKYslD(4j-AK(S8*H32a{ z5C^QX-eF^7v(?hll3u=i`MJ4s=U({(1i)Ak z1j)U6_3FE*s3`l37caho_&_h304W8SUgRi_Yiw+sz{SPI0Wtt+C~JItJgb0!0F$h& zZ2$A;&tK{3>8W14crh8|MP+5>Y@nVcAdM_YhHP(cZdTIP*0%fb;luN9-@d&ADzpG07*naR49>S7%;$$#@AL2C2ox#U20gKydEdxi=gf9E~6v#0QCkDPZGFn|91TgZHnJV+geW=BWIHUH7T=g*&iqlDm zAoD@;Aa&UMY_M$Evb+EBfTc^9-T|q@rWs^Y%b7E0USZP+5(mjM-~r5%l9GKur+q@! z2;zgp88D+31BmMC>dt%f=FNAIMi33+gTxt#1PV@0PV3&id-ub|#bqOi&p;wj5*8Nj g0MQJC3@|VN0AR)IPx# literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_heart.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_heart.png.meta new file mode 100644 index 0000000..ead0de6 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_heart.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 20794834c0a413f408b80110d0fc73b8 +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/DemiLib/Core/Editor/Imgs/project/ico_materials.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_materials.png new file mode 100644 index 0000000000000000000000000000000000000000..5a4b7eb1bf282c87f82b1f2ce362cb37312ff6ff GIT binary patch literal 355 zcmV-p0i6DcP)pG6-h)vR49>Spc`OB<1+)Xr?9Ya0xvJG&Mv~hz(7<`P!KG5{rdISYuBz_@#V{xLYPKoBuze+mX_6~rlz8*s;Ugi z%E}Dl;^GWKLPFd?pmg!##p^&dw?GP6U^;+KikFd*0ox!cDaoLzsR=g?$QBh76N?8r zbu)<11d{+dO$MLmfwsZr;WmB${{0Ei-RAG#zh`*<{5f1Phz%0^^y$+R3{7v}zFi2E zw0rdEktm4&=FJGjL`r9002ovPDHLkV1i2c BpN;?k literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_materials.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_materials.png.meta new file mode 100644 index 0000000..8e57f77 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_materials.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: e02713e10d7aced44a7a651231f0adef +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/DemiLib/Core/Editor/Imgs/project/ico_models.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_models.png new file mode 100644 index 0000000000000000000000000000000000000000..42f1f236a8149ffa2b1cc8a076f7e4449356632e GIT binary patch literal 380 zcmV-?0fYXDP)pGE=fc|R49>S7*HU^#KcsmqocD0L<9K}=n5E-IqdB0ozBkA?)LWf zssaK6T<_n%|9a@qp*wr`?%nzG=g)GOI%XJylaq5|WMrg2P?H9b%?1@?Q&(3P2O1#p z?AbHbZ{NOcN7f{zsi|23l$1Gm@Zjw~fBt+E6cpsTc=6)nU%!4m&d<-6`u+Pi&++5O zw*b|CW`Sz@2qO4_Ku=Fk_xtzn-xe)ebaLCaZ6*>D5{e)>ph5qE)H@KH30p`2oyBEr zY%B=Wz=cg7rs*rty`TR90bBwIU~FI@{C)oX`DY;W2TDKyL+b3EJ9qxGu&@XMUCGDH z%>35D!9j5D+_|@-qN0``J9exEsO&XJEh84&jetQPAucYi|MlzFb8p|iT@4gF$1nhZ afdK$^w{jgtX~#DJ0000pGpGibPR49>S7%;$0KwcDxzX7of5QhV?8W2AM;-BaWH8?mp8hChk znt^O1Cnu+!jg5^LfnpshDk?jkKY#x9=FOY$#l*zAFsx8eP?-4U&71G<-@pHo0^)gdwF?@ZQHi( z-S6MO|LN-LUVr=c?XP3Uj`d*kpHX07;Lga%$YVfuO;J(Nnb)shf8V-w>mz1n=8f6e z*{4Cy#}`0>7cX9X1JZc!-n~ySr&d>2UjWeu4<39DRO13u%!H;{{lbL{?;k&Y{A1Im zO;11qmoHy_w`|$6i(9sAc{FR*touNrYgjc01O#{hLs^2CmzM=-+Xe{A8CT{P{P)z1q>tt jCm=2cVgrUj02mkmkjv85ZQi$C00000NkvXXu0mjfR!rc{ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_particles.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_particles.png.meta new file mode 100644 index 0000000..560f0dd --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_particles.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 8003873ab749935489bb11f23f830856 +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/DemiLib/Core/Editor/Imgs/project/ico_play.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_play.png new file mode 100644 index 0000000000000000000000000000000000000000..c441add0cc7487b51a19627c59917815d371bcb9 GIT binary patch literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^JRmj)8<3o<+3y6TI14-?iy0XB4ude`@%$AjK*4TL z7sn8diOCD(A3S`RIc@6Hx9motA6F)~8H$LAIO)agnDFoQb^Y6qkN4ZNbKPZrRButb zYUN7bzx=G}=jK%A=H=~^&{*R=g-zhc&(F{AcM7Y=F?&t;ucLK6VN2Uk!4 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_play.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_play.png.meta new file mode 100644 index 0000000..2bef6e5 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_play.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d8306b1e159c72c4ebc9a4fc31debe60 +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/DemiLib/Core/Editor/Imgs/project/ico_prefab.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_prefab.png new file mode 100644 index 0000000000000000000000000000000000000000..abc435323589096e2a85aec7d8960643efc53863 GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@)1s;*b3=DjSL74G){)!X^21ZU# z7sn8diOCWH3P%qe3VQzb?Os+F=AS|pp`Sm0F28o=N=(JCFE6kEclhw*<70gVI}e%F zY=wm%JG;g8_kDhTet!M`i3}b46Am`rcKGROu=R|A`qJgg!&z8ZPWa5X`}+-~%+uSu zIQPzuk00B3rRAzCD?R`I`r7>*Xk2tdmi=LqVsTN?xvew*{rUNMeO_K3yQ7JZj=uhT zo&Z^P4?|(I`PCvKSA87ZhSFd(4En4n3w<^}rF_9@CPI}n{!S1(iNl8h94r};L{@%I0 lJwKfJ=s80khJ*wLhVlgy_8;k}Y5;~5gQu&X%Q~loCIH(^ly?9C literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_prefab.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_prefab.png.meta new file mode 100644 index 0000000..47f7775 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_prefab.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: ed3789262161efa4fa33c85ca534590e +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/DemiLib/Core/Editor/Imgs/project/ico_scripts.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_scripts.png new file mode 100644 index 0000000000000000000000000000000000000000..c79b66833bb38b3cfcaf1efcc4ec2e967c4e7067 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^f*>{r8<6y`Y?T61oCO|{#S9F5he4R}c>anMpkR}y zi(`n!#AJyt2RuSUOQpEEy=^;~7dh5Uu-M3ULQ+CPr{d?Qr`vOHZ?jEHPR?e!s9@(I zqvF4X@qc5&$45uY8iW`Q}D}Sb9lNz@<`{|2@AZZ>+NOL+*A7c8oPqMkguJP z3g0C5mCP%b&-8X^cw}(UpySSsM#iqoCmk5r*ci56nAf>4>xd7~H4L7velF{r5}E)W C9Y0fhdEP)pGElET{R49>Spc!C9;~Q!V80V|{QCX$%LAuB|9CqGD1H|t z$%3R%ug+-7G9TkijW2>s44(uT7+$h{u+6TJ{Q2k4j|LRQObjdm7OtskkAxT)X74FJ z%Pb_w${@hS0#tYmrUtI~AH$zd_hf(k`6J24Ce7+AwR2JJxu+M7Oae;nf~jFfa>n~t zY#*(7y`3cfnW^$=#rUdm@-rDfJaF_lQ0@h~V)B;3EGl1gf7-$R_ Z7y#{EYeavV3rhe1002ovPDHLkV1h5QtNj1~ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_shaders.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_shaders.png.meta new file mode 100644 index 0000000..1d860ee --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_shaders.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: f252c69cd0163714eba038403f61b09e +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/DemiLib/Core/Editor/Imgs/project/ico_skull.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_skull.png new file mode 100644 index 0000000000000000000000000000000000000000..22930f4dff4fb6b1a715519097b639c0214e6677 GIT binary patch literal 368 zcmV-$0gwKPP)pGB1uF+R49?nQay@;Ko}i^41#Q%Gz!~Ut&Ng9q{#qHiKe5>XW8pyLLIjyimz zo~Lmf|29p-ilVr9c3GATI_mI=!W7eVT{rCe{_i{t4*fW7N*=)UeSg6Rv^frN0}lP# zI1q&2_%nBDnr=aGgG0YIiZ+b!&6=yKI@B~x;l1v=u3Pg>`y?*{LjD0_ZSpkwGZC%; O0000anMpx|Xs z7sn8diOCXk8rs{Jx9arj=;)NP^UKxnE%MxEqN@7zNxcHYMFl&Kr4ssH!qr+B1sN5AfsnHN}ldU`@`+_*90 z-{0TI3!a^sd0j#32z#gSl{G6@t}J?WWo7ugckf>N`1($EFzHyoaN)uu4jdmof8Nfd knQxMqzv9ON1|A-Ulj|3ped&L9JJ5R!p00i_>zopr0A1^Qv;Y7A literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_star.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_star.png.meta new file mode 100644 index 0000000..f872413 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_star.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 21820ec6fc9dd0b4fbf42a3b93fdad4e +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/DemiLib/Core/Editor/Imgs/project/ico_terrains.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_terrains.png new file mode 100644 index 0000000000000000000000000000000000000000..750996d613ae7009e2760d9c4d8789612e9702dc GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^0w6XA8<1SE`<)7q;w2AI7y-w-3hMR0zr8&_RXhA%S7+zf zrW^kkDyXSF;|SoCxBEM7wt0RX$K?sLW>pp4-BtQM@efd7AN#7#150O~K72U&@%{bv ziLd_KSATo+x?5a--(PnoPft(vhAh^Nk^)Rc-|Cqje0zIaej?M%M%H5t$F?4AV&#@& zn8`1}!2ncu@OZy`^Ua=&A{(9-Mh$`ah5_sb1`G_E#Y+NQ;_7vQUS{xg^>bP0l+XkK Dah`nL literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_terrains.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_terrains.png.meta new file mode 100644 index 0000000..946cabd --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_terrains.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 4a091a7609ef2d34bbdfaa1a886deb18 +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/DemiLib/Core/Editor/Imgs/project/ico_textures.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_textures.png new file mode 100644 index 0000000000000000000000000000000000000000..6aae96483f84bee1755eeed1b1ccb872539b13bb GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@)1s;*b3=DjSL74G){)!Z!;0aF` z#}JK)$qMWSi#}FfxDh|$N4$ZFq_nhtK}pG#){p1sSblzgYiqVofo%M~n1A2iMl*Gs zWfFb7VcWKAFWhD|01=Nzy8^W$Uv z!-o&^6NTQqd9z*M!7V>PNjU{YK6;Q{02{q_GJ)CB|uRqf8WsAOSp zZ~y<`!^7?Nli%8O{rU3v_4W1Pa`tsR{pM+D&-O1}x|Bch&tmufIL4LC8&7%(rZBLv ZG3=K0P3}1Foe1<3gQu&X%Q~loCIG7cdr<%Y literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_textures.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_textures.png.meta new file mode 100644 index 0000000..c18d4ea --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/project/ico_textures.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 3e6b96a975eba1c43b2bad66fb7f8b4a +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/DemiLib/Core/Editor/Imgs/purpleSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/purpleSquare.png new file mode 100644 index 0000000000000000000000000000000000000000..dd219ac3778c1e3f6361c363ad6d5f6856c76813 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5he4R}c>anMprDMW zi(`n!#N?Q@#q%3Q4jge%lDKNHDse?dLIMLro;2e%hOPfU0o5^hy85}Sb4q9e0KFI- A82|tP literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/purpleSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/purpleSquare.png.meta new file mode 100644 index 0000000..96df50f --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/purpleSquare.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: dc0ca9b32ae9fd049911671cf1a480bf +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/DemiLib/Core/Editor/Imgs/redSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/redSquare.png new file mode 100644 index 0000000000000000000000000000000000000000..798457f49eef9b7e8c27d20db55a3570fd2c4074 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5he4R}c>anMprDMW zi(`n!#N?X8Cr>(XB_t^b_GC$1H3%^=FkoP?Wnq;2uXyMdP#uG(tDnm{r-UW|hN&5< literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/redSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/redSquare.png.meta new file mode 100644 index 0000000..299f17b --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/redSquare.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: fbdd7ecf39c13bf48a5bd02a1159c90b +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/DemiLib/Core/Editor/Imgs/squareBorder.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorder.png new file mode 100644 index 0000000000000000000000000000000000000000..51afe67326b5bbb4358d880a8eec9d5a10cc769d GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprDSY zi(`mIZ}K0079J4>F@eHwZz4CDNJ~o_8yE&~xbaGuCR}0QSYTjnY{0;anMprD$k zi(`mIZ}K0079J4>F^#o;%l^&w;Sp&HWOn0~FlAuUICGANhk=EGQanMpkSG& zi(`mI@7u|STnz?149RRC*_Zz8viO-(Dzrc71^*i7zopr0L67hu>b%7 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved.png.meta new file mode 100644 index 0000000..32d19bd --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 4896b5aa9d63dec498136c21ffce735b +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: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + 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/DemiLib/Core/Editor/Imgs/squareBorderCurved02.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02.png new file mode 100644 index 0000000000000000000000000000000000000000..a1ed49d445d61396bf5e07beee7ae57f73a6d825 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMpx|jw z7sn8b-nWwv@-{1ow8>X|RN!mid$4hKMA*vW8=3qE*yFR!<+w>I3vJGOX8UH&y4Nbu zoABe*hsE!II~Vwego>)TecE;KWO^b?^}&YL2T5y}-gvMwLGi@2)K0M<(&>}x&ctuv zj0-we9pIBc&3R@8%;d`;VQPAAyZRt1X8*cN}bWtEMVj*aM977LTh&(*zsT&!pJ bDn&8Aja;eBwVt^Y=q(0MS3j3^P6;G|$ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02.png.meta new file mode 100644 index 0000000..180331a --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: ff88be84254fb1f4b9a81a27ae0b2e81 +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/DemiLib/Core/Editor/Imgs/squareBorderCurved02_darkBorders.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved02_darkBorders.png new file mode 100644 index 0000000000000000000000000000000000000000..2b313e46258bbd042a3eb1048f101f8cc698c393 GIT binary patch literal 336 zcmV-W0k8gvP)pG0!c(cR5*?8lQD{eKoo}GM9?N1(8?32rR|;~30^_%LpmEfI}_Me zkD!DcL>$3lJ%RR{LTx7R5jRx=%C`H%@Md(rZ$|JjnBuzbmN9n3VdL@xUgt*$!EwZC znqHqzJLZ^JM)RaJdzng*(>f+R^VLHg9Xt|3VhXxsLL_3PQr*j;-p ihdJ$x^^EWZ0N@Uw6N6qYJeYg{0000anMpkTSD zi(`mI@7u{6xeh4sxCrmw^5{vJ#*hE=pFVk}vMu=Xl8_e}1z#U1G~StAanMpkSJ( zi(`mIZ}N}-|M!asyk~nf|9>aD{lcmxGbAJ=#27zjDm+V95o)-?^f7Wn+yc$}jWe1X zT^KGg7jbrcoZslfaOw0B2So|fgewd)80}B^o^p64exhNqLyUWuV!&2jhng9O-u#K@ aVpvkPqanMpkTMB zi(`mIZ!$yU|NsAu84Ilh=CePV|G%(#et@aMR-Y5IrZawIR_J3%a%7WXP+<@K%&@Ax zlQHX-vw~Qnf>6U1r>{$l9p;K0b5LS<)yeRZ)o>s4Mg~bXj)pHy68|Mnu>60h=*cKy z%8+z`zi6@G67iG+yb5K?hl|WN#AO8S^Y;u|reo}=dg9DE9v%k48O%2poxC~+=qv_L LS3j3^P6anMpx|sz z7sn8b-nYSyT!$3|?(lMcv2?VVHs{xiOExOYFQuy}Hon#ASvfsO^*Ucq*SVgqbrxrI z8p;c{-Jh|N_vD@C)mIPO?q%anMpkSA$ zi(`mIZ?cb<*QBJx#K<52|JPf)xw)CKDKP}R)n9PSx&GguPWD%+kxyQ}eEH__#{cyM_8UjPhKR+;*eEaTkEK|kyY}5V^>;=vqM~3(gJ}VDT6GA zGY#?ww)k#xn;;jkj7hSfgTe~DWM4fq-Ic^ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBorders.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBorders.png.meta new file mode 100644 index 0000000..db7c113 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBorders.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 25da15ac84743244ab4c860cf8798ec8 +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: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + 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/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBordersAlpha.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBordersAlpha.png new file mode 100644 index 0000000000000000000000000000000000000000..4ddd37ad4450952bb5dd03637b99f6e8afcc5281 GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMpkS4! zi(`mI@7u{6IS(iZxSm%IJ1LTB<8~)FIO3=*tJ&TQkWnE^Zu!b#Q u<*Gj&xY4SW`DFF~9+z8&8?7tP3D~RGm`MM&30nws1%s!npUXO@geCyThex9T literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBordersAlpha.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBordersAlpha.png.meta new file mode 100644 index 0000000..a248e7c --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderCurved_darkBordersAlpha.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: f536c51d3da3f2e4ca93ac8773ec2ad8 +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/DemiLib/Core/Editor/Imgs/squareBorderEmpty.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty.png new file mode 100644 index 0000000000000000000000000000000000000000..188ed94dc5c375d5925ddcd7fd22b51cb1dbc595 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprDGU zi(`mIZ}K007M>{#UOWshQanMprDGU zi(`mIZ}K007M>{#UOWshQanMprE#= zi(`mIZ}K0079J4>H8w6r?w*4jEK4$4cFsu>?~yXdI`F_CVL`DnGc&_Jb{%V(} P+88`t{an^LB{Ts5H+UYQ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty02.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty02.png.meta new file mode 100644 index 0000000..b2dcd93 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty02.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 29b0e8156f6fb774faf129c83bc9ee33 +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: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + 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/DemiLib/Core/Editor/Imgs/squareBorderEmpty03.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty03.png new file mode 100644 index 0000000000000000000000000000000000000000..ca376a89c1bc8fe52bea75c4d9312d7d03e7d85d GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprDSY zi(`mIZ}K0079J4>H8w8Bqih=#iX|EwBz#ZYldI70kuuQXk@z&TvyqYEi~^4&*Vda$ Qf%+IcUHx3vIVCg!08kDdzW@LL literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty03.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty03.png.meta new file mode 100644 index 0000000..e9f14fb --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderEmpty03.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: c0a56b88a1b449045b3fe5f561aa12fa +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: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + 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/DemiLib/Core/Editor/Imgs/squareBorderThickEmpty.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickEmpty.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9ead73db0edfdbe31bc68ee6b8b2f164137618 GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprE#= zi(`mIZ}K0079J4>H8w6r?w*4jEK4$4cFsu>?~yXdI`F_CVL`DnGc&_Jb{%V(} P+88`t{an^LB{Ts5H+UYQ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickEmpty.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickEmpty.png.meta new file mode 100644 index 0000000..89331d1 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickEmpty.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: c456d5ac01d2aa843a63985497b04931 +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/DemiLib/Core/Editor/Imgs/squareBorderThickerEmpty.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickerEmpty.png new file mode 100644 index 0000000000000000000000000000000000000000..ca376a89c1bc8fe52bea75c4d9312d7d03e7d85d GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprDSY zi(`mIZ}K0079J4>H8w8Bqih=#iX|EwBz#ZYldI70kuuQXk@z&TvyqYEi~^4&*Vda$ Qf%+IcUHx3vIVCg!08kDdzW@LL literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickerEmpty.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickerEmpty.png.meta new file mode 100644 index 0000000..7365c26 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareBorderThickerEmpty.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 7acc6bd588627b046bc1c9b3cd78a6c7 +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/DemiLib/Core/Editor/Imgs/squareCorners03.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCorners03.png new file mode 100644 index 0000000000000000000000000000000000000000..38dc1bb8015f9a79cc3209cb6d4f0dc26efc98d9 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprE;@ zi(`mIZ}K0079I-*Wr2o_nyeWT8Z08x4Ubr7Oy*=vv1NYG+QlnTVIakwk=USU$zmkT a%*anMprEOz zi(`mIZ}K0079I-*Wr2o_nyeWT8Y~6k2Xd6f4txoG)0CKS;6U@mj3sGt2edqY-#KxB Zfk8H0fpdrTc0r&444$rjF6*2UngB35CO-fG literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCornersEmpty02.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCornersEmpty02.png.meta new file mode 100644 index 0000000..7f51fb8 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/squareCornersEmpty02.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: ca2f91cc405eb144dad970eb23db2f72 +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/DemiLib/Core/Editor/Imgs/tileBars_empty.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..8e17561d53740055d922d1c24df9d17e43f6853d GIT binary patch literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4j!ywFfJby(BP;j27 zi(^Pc>)UINTn!2$EEg=dZs|~naaq2Nho$>Va=f(C-B&-@1V!}h!%~jfT^e* zN!VYsf_J}mLhFYJ;r(I;OA~eF#1}kR=#X7=s`aA8^iRtk&p)gyY%c5nL|xI|`G!OD zYJWbcz6*~wPq4o$8FH-K-Z6^-W|B ZusuG#)AVYPb|TQF44$rjF6*2UngBkaQPThb literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_empty.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_empty.png.meta new file mode 100644 index 0000000..890be39 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_empty.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: d1278357b25e10442b6ca6c24edc9781 +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/DemiLib/Core/Editor/Imgs/tileBars_slanted.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted.png new file mode 100644 index 0000000000000000000000000000000000000000..c8cfc7fff7801ff59d70a57f7721f9e2828ae25b GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4j!ywFfJby(BQ1HB` zi(^Pc>(OZ^IS(5MFqmg5w*S`GKekfwVgk>x9~a^-9cZ#U-DBspJ>Kz6PpaDSe+A__ zyPu}YU271qWcPNMA+v>XVbKMameUK(6kPdC88eG^aCuBU9OgTe~DWM4f@ZM@O literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted.png.meta new file mode 100644 index 0000000..7edd20d --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: c99a391f381fe534c80a193fe9f307a0 +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/DemiLib/Core/Editor/Imgs/tileBars_slanted_alpha.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileBars_slanted_alpha.png new file mode 100644 index 0000000000000000000000000000000000000000..776309196aee7c5b4c5d5fdc8b19fd8e71cb8f62 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4j!ywFfJby(BP;if@ zi(^Pc>(ObJT!$Ta7^ZGf{Qv%w=i{o)!4f?mH?A&rSm1VMO4ZhDb&JwpZkBqtKmYK? z$a~Kh^A=3poWXSGiGlP3t@fD=<(55cEhiFH6nyyn85b7q;O3ZqIMks_<{ZanM1_nlZ zPZ!4!kItl;FE1|Evk5h{hi@w4jh2FfL{XUPI|fq*)C>=)gD|ICcK-k4RVvGtDnm{r-UW|@z8kW literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileCheckerboard.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileCheckerboard.png.meta new file mode 100644 index 0000000..acb7d17 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/tileCheckerboard.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 1954196ce2bc5c3478b215b39212c3cd +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/transparentSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/transparentSquare.png new file mode 100644 index 0000000000000000000000000000000000000000..c745068069d056de1fea32d17179ce4c6f8ab2ab GIT binary patch literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprEj) pi(`mIZ?XjI;slW%CWC|o1_l-Z2F7h=jf_BP22WQ%mvv4FO#qDR6tn;U literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/transparentSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/transparentSquare.png.meta new file mode 100644 index 0000000..cdc61f9 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/transparentSquare.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 4d338c631fa36f345b72a36f1c91ff9a +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: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + 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/DemiLib/Core/Editor/Imgs/whiteDot.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot.png new file mode 100644 index 0000000000000000000000000000000000000000..768a2da31056ae9e904f3987d24054a50562d5d4 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqoCO|{#S9F5he4R}c>anMprD(l zi(`ny)MSRn|NsB5X8vfU@Q>xF!Zs_PAl{Dq|BtgM7>cs3$cjmjRi5yJ$E2g3(fY@s sBMuA=B5#f<@1H$E`6@@nY`kL{fF?3{y85}Sb4q9e0HxC}A^-pY literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot.png.meta new file mode 100644 index 0000000..afcc984 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: ed7cb8f9a27664e48896c904189f0e2c +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/DemiLib/Core/Editor/Imgs/whiteDot_darkBorder.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_darkBorder.png new file mode 100644 index 0000000000000000000000000000000000000000..705c72b68d0556f94b5f925f92a5b1705dd36d7e GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqoCO|{#S9F5he4R}c>anMpkS}3 zi(`ny)Z`QfCRCSvfE$zna!EegGc4~5eJ3_kvI3YUi>`1jZP@GR48iDiCse|`M^{{BOjJ(Vxj81DZrT*FzgM+xXK N22WQ%mvv4FO#pS3SUCUy literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_darkBorder.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_darkBorder.png.meta new file mode 100644 index 0000000..2758634 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_darkBorder.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 27df4ca974a8eaf40803907859421506 +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/DemiLib/Core/Editor/Imgs/whiteDot_whiteBorderAlpha.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_whiteBorderAlpha.png new file mode 100644 index 0000000000000000000000000000000000000000..2a081f6b2ab16c16b320321417083ca3aee328c4 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqoCO|{#S9F5he4R}c>anMpkR`x zi(`ny)MSRn|NsB5X8vfU@Q>xF!Zs_9KF$*X%$M35en<$cb~5a!<Hq)$ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_whiteBorderAlpha.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_whiteBorderAlpha.png.meta new file mode 100644 index 0000000..8bfeba8 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteDot_whiteBorderAlpha.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 039dc89c76661c344b7776f8a47cc5a4 +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/DemiLib/Core/Editor/Imgs/whiteSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare.png new file mode 100644 index 0000000000000000000000000000000000000000..afc2459caaa4d1c9fdb4366d6e09313f89bb081c GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5he4R}c>anMprE9u wi(^Q|oa8_M|JyTbHgu|7T`c8h%A?845Sq&@Ya68K3{=G6>FVdQ&MBb@08(HWlK=n! literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare.png.meta new file mode 100644 index 0000000..2a4aa36 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: dfe6e0ac3e5f24740a17e14b65e08406 +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: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + 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/DemiLib/Core/Editor/Imgs/whiteSquareAlpha10.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha10.png new file mode 100644 index 0000000000000000000000000000000000000000..6480ee22a955b1ab75ba087e81c747a94a62cdfc GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprEX$ zi(^Q|oa8_M|J&;`vo>@Jon6eCIS^Qc)I$ztaD0e0stQU B9U}k$ literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha10.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha10.png.meta new file mode 100644 index 0000000..1134262 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha10.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 93b68213089b05943a651574eb7e2fb5 +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: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 100 + 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/DemiLib/Core/Editor/Imgs/whiteSquareAlpha15.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha15.png new file mode 100644 index 0000000000000000000000000000000000000000..e6f3c427d4cf110df50530e7da40f311824d3a74 GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMkesKB zV~9m>@}K|z_e(LeHgq;R8Dt$;!MK=>hmTo8g5hrxv-7Tm-Nrzr44$rjF6*2UngB%K B9GCzA literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha15.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha15.png.meta new file mode 100644 index 0000000..8dfc149 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha15.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 5510cdd48a6aaaa439c95ef5b2fe9e28 +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/DemiLib/Core/Editor/Imgs/whiteSquareAlpha25.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareAlpha25.png new file mode 100644 index 0000000000000000000000000000000000000000..5219f2a0fcdb4ad7dfefa5b057bc22afdc753bcd GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMprEX$ zi(^Q|oa8_M|JSQ9vo>@Jon6eanMprEX$ zi(^Q|oa8_M|JU0xvo>@Jon6eanMprC@M zi(`mIZ}Ol2|Nl#}aWM!pwanMprDhd zi(`mI@7tb(f(!~AhgT`@kg+z{y}_wfa7sUa(e-~q6QQk&T=WnM6{yLex}w&TewplJ-Au6{1-oD!M<#m_AD literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved.png.meta new file mode 100644 index 0000000..8a6304e --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: 070edb62059c27b408e16f28cb87f941 +timeCreated: 1604057757 +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/DemiLib/Core/Editor/Imgs/whiteSquareCurved02.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquareCurved02.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ed49b005c6aff08c0586d66c4bb87d4f88a749 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMpkRTg zi(`mI@7u{6c@HS?u*hn$ot)PZ8_}vdsl)fdV}6lLCDk2gJ^MBOsGEy19msAanMprEOz zi(`mIZ}Ol2|Lx70SsPe8Ts2J{dV-i;+V?RoPIO3=XqfaV+>7^ze35@zthVZO@Ib4c)I$ztaD0e0st)ZB(VSh literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare_fadeOut_bt.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare_fadeOut_bt.png.meta new file mode 100644 index 0000000..27a1460 --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/whiteSquare_fadeOut_bt.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: a40dc0d6372a9084fb45976308087290 +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/DemiLib/Core/Editor/Imgs/yellowSquare.png b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/yellowSquare.png new file mode 100644 index 0000000000000000000000000000000000000000..c41f635d6173527df46ed81874904da9d02e1052 GIT binary patch literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9F5he4R}c>anMprDMW zi(`n!#N?XdmdTAG2aY%>NnABpmAE1!A%TIRB8Kti3H`P6f$A7MUHx3vIVCg!0K2#w A?*IS* literal 0 HcmV?d00001 diff --git a/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/yellowSquare.png.meta b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/yellowSquare.png.meta new file mode 100644 index 0000000..54af05b --- /dev/null +++ b/Assets/Plugins/Demigiant/DemiLib/Core/Editor/Imgs/yellowSquare.png.meta @@ -0,0 +1,47 @@ +fileFormatVersion: 2 +guid: 517a5bfe18f2ee04d9925db10be034e2 +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/readme_DOTweenPro.txt b/Assets/Plugins/Demigiant/readme_DOTweenPro.txt new file mode 100644 index 0000000..379dbbc --- /dev/null +++ b/Assets/Plugins/Demigiant/readme_DOTweenPro.txt @@ -0,0 +1,35 @@ +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 (like TextMesh Pro) + +// 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. + +// VISUAL SCRIPTING (PRO ONLY) +- To animate a gameObject, select it and choose "Add Component > DOTween > DOTween Animation" +- To animate a gameObject along a path, select it and choose "Add Component > DOTween > DOTween Path" + +// SCRIPTING +- 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/readme_DOTweenPro.txt.meta b/Assets/Plugins/Demigiant/readme_DOTweenPro.txt.meta new file mode 100644 index 0000000..ef7a8e9 --- /dev/null +++ b/Assets/Plugins/Demigiant/readme_DOTweenPro.txt.meta @@ -0,0 +1,19 @@ +fileFormatVersion: 2 +guid: 24123b2fcdc15c943bed44e0c6beeec7 +labels: +- Tween +- Tweening +- Animation +- HOTween +- Paths +- VisualScripting +- VisualEditor +- iTween +- LeanTween +- DFTween +- Ease +- Easing +- Shake +- Punch +TextScriptImporter: + userData: diff --git a/Assets/Resources.meta b/Assets/Resources.meta new file mode 100644 index 0000000..a936ef2 --- /dev/null +++ b/Assets/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: edff7c9c5dfec49dbae75dcfc0b847d3 +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..467fc64 --- /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: DOTween.dll::DG.Tweening.Core.DOTweenSettings + 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..92b64f3 --- /dev/null +++ b/Assets/Resources/DOTweenSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f3fb915957f684d8abb924862bfc3cb3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/TakeScreen.cs b/Assets/Scripts/TakeScreen.cs index e2ff785..b25b34e 100644 --- a/Assets/Scripts/TakeScreen.cs +++ b/Assets/Scripts/TakeScreen.cs @@ -1,43 +1,28 @@ using UnityEngine; using System; using System.IO; -using System.Windows.Forms; // 모니터 식별 및 스크린 정보 -using System.Drawing; // Bitmap 관련 -using System.Drawing.Imaging; -using System.Runtime.InteropServices; using TMPro; -using Unity.VisualScripting; -using Application = UnityEngine.Application; -using Screen = System.Windows.Forms.Screen; +using System.Runtime.InteropServices; + +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN +using System.Windows.Forms; +using System.Drawing; +using System.Drawing.Imaging; using Graphics = System.Drawing.Graphics; +#endif public class TakeScreen : MonoBehaviour { - // 캡처할 모니터 인덱스 (2 = 첫번째 모니터) public int selectMonitorIndex = 2; public int takeNumber; - int monitorIndex = 0; - MONITORINFO selectMonitor; - int selectWidth; - int selectHeight; - - [SerializeField] - TMP_InputField inputPrefix; - - [SerializeField] - TMP_InputField inputResult; - - [SerializeField] - DirectorySelect directorySelector; - - // WinAPI 구조체 - [StructLayout(LayoutKind.Sequential)] - public struct RECT - { - public int left, top, right, bottom; - } + [SerializeField] TMP_InputField inputPrefix; + [SerializeField] TMP_InputField inputResult; + [SerializeField] DirectorySelect directorySelector; + // --- Windows 전용 구조체 및 변수 --- +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN + [StructLayout(LayoutKind.Sequential)] public struct RECT { public int left, top, right, bottom; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct MONITORINFO { @@ -45,109 +30,107 @@ public class TakeScreen : MonoBehaviour public RECT rcMonitor; public RECT rcWork; public int dwFlags; - - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] - public string szDevice; - + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] public string szDevice; } - - // WinAPI 델리게이트 private delegate bool MonitorEnumProc(IntPtr hMonitor, IntPtr hdcMonitor, ref RECT lprcMonitor, IntPtr dwData); - - // WinAPI 함수 - [DllImport("user32.dll")] - private static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr lprcClip, MonitorEnumProc lpfnEnum, IntPtr dwData); - - [DllImport("user32.dll", CharSet = CharSet.Auto)] - private static extern bool GetMonitorInfo(IntPtr hMonitor, ref MONITORINFO lpmi); - - [DllImport("user32.dll")] - private static extern IntPtr GetDC(IntPtr hWnd); - - [DllImport("gdi32.dll")] - private static extern IntPtr CreateCompatibleDC(IntPtr hdc); - - [DllImport("gdi32.dll")] - private static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int width, int height); - - [DllImport("gdi32.dll")] - private static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj); + [DllImport("user32.dll")] private static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr lprcClip, MonitorEnumProc lpfnEnum, IntPtr dwData); + [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern bool GetMonitorInfo(IntPtr hMonitor, ref MONITORINFO lpmi); + [DllImport("user32.dll")] private static extern IntPtr GetDC(IntPtr hWnd); + [DllImport("gdi32.dll")] private static extern IntPtr CreateCompatibleDC(IntPtr hdc); + [DllImport("gdi32.dll")] private static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int width, int height); + [DllImport("gdi32.dll")] private static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj); + [DllImport("gdi32.dll")] private static extern bool BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop); + [DllImport("gdi32.dll")] private static extern bool DeleteObject(IntPtr hObject); + [DllImport("gdi32.dll")] private static extern bool DeleteDC(IntPtr hdc); + [DllImport("user32.dll")] private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); + + MONITORINFO selectMonitor; + int selectWidth; + int selectHeight; + int monitorIndex = 0; +#endif - [DllImport("gdi32.dll")] - private static extern bool BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, - IntPtr hdcSrc, int nXSrc, int nYSrc, CopyPixelOperation dwRop); - - [DllImport("gdi32.dll")] - private static extern bool DeleteObject(IntPtr hObject); - - [DllImport("gdi32.dll")] - private static extern bool DeleteDC(IntPtr hdc); - - [DllImport("user32.dll")] - private static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC); - - private void Start() { - Debug.Log("=== 모든 모니터 정보 ==="); +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, MonitorCallback, IntPtr.Zero); +#else + Debug.Log("macOS 환경입니다. 시스템 기본 스크린샷 기능을 사용합니다."); +#endif } +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN private bool MonitorCallback(IntPtr hMonitor, IntPtr hdcMonitor, ref RECT lprcMonitor, IntPtr dwData) { MONITORINFO mi = new MONITORINFO(); mi.cbSize = Marshal.SizeOf(typeof(MONITORINFO)); monitorIndex++; - if (GetMonitorInfo(hMonitor, ref mi) && monitorIndex == selectMonitorIndex) { - int width = mi.rcMonitor.right - mi.rcMonitor.left; - int height = mi.rcMonitor.bottom - mi.rcMonitor.top; - bool isPrimary = (mi.dwFlags & 1) != 0; - - Debug.Log( - $"{mi.szDevice} 모니터 \n" + - $" - 해상도 : {width} x {height}\n" + - $" - 위치 : x = {mi.rcMonitor.left}, y = {mi.rcMonitor.top}\n" + - $" - 주 모니터 여부 : {isPrimary}\n" - ); - selectMonitor = mi; - selectWidth = width; - selectHeight = height; + selectWidth = mi.rcMonitor.right - mi.rcMonitor.left; + selectHeight = mi.rcMonitor.bottom - mi.rcMonitor.top; } - - return true; // 계속 나머지 모니터 순회 + return true; } +#endif public void Take() { - string fileName = $"{inputPrefix.text}_{string.Format("{0:D2}", takeNumber)}.png"; + string fileName = $"{inputPrefix.text}_{takeNumber:D2}.png"; string savePath = Path.Combine(directorySelector.selectedFolderPath, fileName); - - Shot(selectMonitor.rcMonitor.left, selectMonitor.rcMonitor.top, selectWidth, selectHeight, savePath); + +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN + ShotWin(selectMonitor.rcMonitor.left, selectMonitor.rcMonitor.top, selectWidth, selectHeight, savePath); +#elif UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX + ShotMac(savePath); +#endif + inputResult.text = savePath; + takeNumber++; } - - void Shot(int x, int y, int width, int height, string savePath) + + // Windows 캡처 로직 +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN + void ShotWin(int x, int y, int width, int height, string savePath) { IntPtr desktopDC = GetDC(IntPtr.Zero); IntPtr memoryDC = CreateCompatibleDC(desktopDC); - IntPtr bitmap = CreateCompatibleBitmap(desktopDC, width, height); + IntPtr bitmap = CreateCompatibleBitmap(desktopDC, width, height); IntPtr oldBitmap = SelectObject(memoryDC, bitmap); - - BitBlt(memoryDC, 0, 0, width, height, desktopDC, x, y, CopyPixelOperation.SourceCopy | CopyPixelOperation.CaptureBlt); + + // 0x00CC0020 = SRCCOPY, 0x40000000 = CAPTUREBLT + BitBlt(memoryDC, 0, 0, width, height, desktopDC, x, y, 0x00CC0020 | 0x40000000); using (Bitmap bmp = Image.FromHbitmap(bitmap)) { bmp.Save(savePath, ImageFormat.Png); } - - // 정리 + SelectObject(memoryDC, oldBitmap); DeleteObject(bitmap); DeleteDC(memoryDC); - ReleaseDC(desktopDC, memoryDC); - - inputResult.text = savePath; + ReleaseDC(IntPtr.Zero, desktopDC); } -} +#endif + + // macOS 캡처 로직 +#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX + void ShotMac(string savePath) + { + // macOS는 시스템 명령어를 통해 스크린샷을 찍는 것이 가장 안정적입니다. + // -x: 소리 없음, -C: 커서 포함(선택) + // 만약 특정 모니터만 찍어야 한다면 -D 옵션을 사용합니다 (예: -D 1) + string args = $"-x \"{savePath}\""; + + try + { + System.Diagnostics.Process.Start("screencapture", args); + Debug.Log($"macOS 스크린샷 저장 완료: {savePath}"); + } + catch (Exception e) + { + Debug.LogError($"macOS 스크린샷 실패: {e.Message}"); + } + } +#endif +} \ No newline at end of file diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index d712d2d..7eaf417 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -5,7 +5,7 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 m_Scenes: - - enabled: 1 + - enabled: 0 path: Assets/Scenes/SampleScene.unity guid: 8c9cfa26abfee488c85f1582747f6a02 m_configObjects: diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 2daa1e1..8fe1345 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -12,16 +12,16 @@ PlayerSettings: targetDevice: 2 useOnDemandResources: 0 accelerometerFrequency: 60 - companyName: DefaultCompany - productName: ScreenCapture + companyName: Cooney Studio + productName: Screen Capture defaultCursor: {fileID: 0} cursorHotspot: {x: 0, y: 0} - m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} + m_SplashScreenBackgroundColor: {r: 0.8, g: 0.8, b: 0.8, a: 1} m_ShowUnitySplashScreen: 1 m_ShowUnitySplashLogo: 1 m_SplashScreenOverlayOpacity: 1 m_SplashScreenAnimation: 1 - m_SplashScreenLogoStyle: 1 + m_SplashScreenLogoStyle: 0 m_SplashScreenDrawMode: 0 m_SplashScreenBackgroundAnimationZoom: 1 m_SplashScreenLogoAnimationZoom: 1 @@ -42,8 +42,8 @@ PlayerSettings: m_SplashScreenLogos: [] m_VirtualRealitySplashScreen: {fileID: 0} m_HolographicTrackingLossScreen: {fileID: 0} - defaultScreenWidth: 1920 - defaultScreenHeight: 1080 + defaultScreenWidth: 480 + defaultScreenHeight: 320 defaultScreenWidthWeb: 960 defaultScreenHeightWeb: 600 m_StereoRenderingPath: 0 @@ -83,7 +83,7 @@ PlayerSettings: androidApplicationEntry: 2 defaultIsNativeResolution: 1 macRetinaSupport: 1 - runInBackground: 0 + runInBackground: 1 muteOtherAudioSources: 0 Prepare IOS For Recording: 0 Force IOS Speakers When Recording: 0 @@ -91,7 +91,7 @@ PlayerSettings: deferSystemGesturesMode: 0 hideHomeButton: 0 submitAnalytics: 1 - usePlayerLog: 1 + usePlayerLog: 0 dedicatedServerOptimizations: 1 bakeCollisionMeshes: 0 forceSingleInstance: 0 @@ -107,8 +107,8 @@ PlayerSettings: xboxEnableKinectAutoTracking: 0 xboxEnableFitness: 0 visibleInBackground: 1 - allowFullscreenSwitch: 1 - fullscreenMode: 1 + allowFullscreenSwitch: 0 + fullscreenMode: 3 xboxSpeechDB: 0 xboxEnableHeadOrientation: 0 xboxEnableGuest: 0