From db3fc6ee832aec967d3115c76251bc49f63014b4 Mon Sep 17 00:00:00 2001 From: lishuo Date: Mon, 29 Mar 2021 20:32:30 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AA=91=E8=A1=8C=E7=95=8C=E9=9D=A2UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/DOTween.meta | 8 + Assets/DOTween/DOTween.XML | 2769 + Assets/DOTween/DOTween.XML.meta | 7 + Assets/DOTween/DOTween.dll | Bin 0 -> 162304 bytes Assets/DOTween/DOTween.dll.meta | 33 + Assets/DOTween/Editor.meta | 8 + Assets/DOTween/Editor/DOTweenEditor.XML | 107 + Assets/DOTween/Editor/DOTweenEditor.XML.meta | 7 + Assets/DOTween/Editor/DOTweenEditor.dll | Bin 0 -> 57344 bytes Assets/DOTween/Editor/DOTweenEditor.dll.meta | 33 + Assets/DOTween/Editor/Imgs.meta | 8 + Assets/DOTween/Editor/Imgs/DOTweenIcon.png | Bin 0 -> 1565 bytes .../DOTween/Editor/Imgs/DOTweenIcon.png.meta | 92 + Assets/DOTween/Editor/Imgs/Footer.png | Bin 0 -> 4409 bytes Assets/DOTween/Editor/Imgs/Footer.png.meta | 92 + Assets/DOTween/Editor/Imgs/Footer_dark.png | Bin 0 -> 4429 bytes .../DOTween/Editor/Imgs/Footer_dark.png.meta | 92 + Assets/DOTween/Editor/Imgs/Header.jpg | Bin 0 -> 22787 bytes Assets/DOTween/Editor/Imgs/Header.jpg.meta | 92 + Assets/DOTween/Modules.meta | 8 + Assets/DOTween/Modules/DOTweenModuleAudio.cs | 202 + .../Modules/DOTweenModuleAudio.cs.meta | 11 + .../DOTween/Modules/DOTweenModulePhysics.cs | 216 + .../Modules/DOTweenModulePhysics.cs.meta | 11 + .../DOTween/Modules/DOTweenModulePhysics2D.cs | 168 + .../Modules/DOTweenModulePhysics2D.cs.meta | 11 + Assets/DOTween/Modules/DOTweenModuleSprite.cs | 93 + .../Modules/DOTweenModuleSprite.cs.meta | 11 + Assets/DOTween/Modules/DOTweenModuleUI.cs | 634 + .../DOTween/Modules/DOTweenModuleUI.cs.meta | 11 + .../Modules/DOTweenModuleUnityVersion.cs | 403 + .../Modules/DOTweenModuleUnityVersion.cs.meta | 11 + Assets/DOTween/Modules/DOTweenModuleUtils.cs | 155 + .../Modules/DOTweenModuleUtils.cs.meta | 11 + Assets/DOTween/readme.txt | 29 + Assets/DOTween/readme.txt.meta | 7 + .../PlayerBasicAnimator.controller | 115 +- Assets/Prefabs/PlayerInfoPanel.prefab | 309 + Assets/Prefabs/PlayerInfoPanel.prefab.meta | 7 + Assets/Prefabs/PlayerItem.prefab | 432 + Assets/Prefabs/PlayerItem.prefab.meta | 7 + Assets/Resources/DOTweenSettings.asset | 50 + Assets/Resources/DOTweenSettings.asset.meta | 8 + Assets/Scenes/Ride/Config.png | Bin 0 -> 5989 bytes Assets/Scenes/Ride/Config.png.meta | 104 + Assets/Scenes/Ride/Device_1.png | Bin 0 -> 5494 bytes Assets/Scenes/Ride/Device_1.png.meta | 104 + Assets/Scenes/Ride/New Account_back.png | Bin 0 -> 2559 bytes Assets/Scenes/Ride/New Account_back.png.meta | 104 + Assets/Scenes/Ride/Ride.unity | 63687 +++++++++++++++- .../Ride/Scripts/LoadingPanelController.cs | 78 + .../Scripts/LoadingPanelController.cs.meta | 11 + Assets/Scenes/Ride/Scripts/MainController.cs | 42 +- .../Scenes/Ride/Scripts/PlayerController.cs | 5 +- .../Scenes/Ride/Scripts/PlayerItemFactory.cs | 33 + .../Ride/Scripts/PlayerItemFactory.cs.meta | 11 + Assets/Scenes/Ride/Scripts/RouteController.cs | 21 +- Assets/Scenes/Ride/Scripts/UIManager.cs | 41 +- Assets/Scenes/Ride/Searching.png | Bin 0 -> 2998 bytes Assets/Scenes/Ride/Searching.png.meta | 104 + Assets/Scenes/Ride/Speed Meter_0.png | Bin 0 -> 25641 bytes Assets/Scenes/Ride/Speed Meter_0.png.meta | 104 + Assets/Scenes/Ride/Support.png | Bin 0 -> 5008 bytes Assets/Scenes/Ride/Support.png.meta | 104 + Assets/Scenes/Ride/pin.png | Bin 0 -> 3200 bytes Assets/Scenes/Ride/pin.png.meta | 104 + 66 files changed, 70766 insertions(+), 159 deletions(-) create mode 100644 Assets/DOTween.meta create mode 100644 Assets/DOTween/DOTween.XML create mode 100644 Assets/DOTween/DOTween.XML.meta create mode 100644 Assets/DOTween/DOTween.dll create mode 100644 Assets/DOTween/DOTween.dll.meta create mode 100644 Assets/DOTween/Editor.meta create mode 100644 Assets/DOTween/Editor/DOTweenEditor.XML create mode 100644 Assets/DOTween/Editor/DOTweenEditor.XML.meta create mode 100644 Assets/DOTween/Editor/DOTweenEditor.dll create mode 100644 Assets/DOTween/Editor/DOTweenEditor.dll.meta create mode 100644 Assets/DOTween/Editor/Imgs.meta create mode 100644 Assets/DOTween/Editor/Imgs/DOTweenIcon.png create mode 100644 Assets/DOTween/Editor/Imgs/DOTweenIcon.png.meta create mode 100644 Assets/DOTween/Editor/Imgs/Footer.png create mode 100644 Assets/DOTween/Editor/Imgs/Footer.png.meta create mode 100644 Assets/DOTween/Editor/Imgs/Footer_dark.png create mode 100644 Assets/DOTween/Editor/Imgs/Footer_dark.png.meta create mode 100644 Assets/DOTween/Editor/Imgs/Header.jpg create mode 100644 Assets/DOTween/Editor/Imgs/Header.jpg.meta create mode 100644 Assets/DOTween/Modules.meta create mode 100644 Assets/DOTween/Modules/DOTweenModuleAudio.cs create mode 100644 Assets/DOTween/Modules/DOTweenModuleAudio.cs.meta create mode 100644 Assets/DOTween/Modules/DOTweenModulePhysics.cs create mode 100644 Assets/DOTween/Modules/DOTweenModulePhysics.cs.meta create mode 100644 Assets/DOTween/Modules/DOTweenModulePhysics2D.cs create mode 100644 Assets/DOTween/Modules/DOTweenModulePhysics2D.cs.meta create mode 100644 Assets/DOTween/Modules/DOTweenModuleSprite.cs create mode 100644 Assets/DOTween/Modules/DOTweenModuleSprite.cs.meta create mode 100644 Assets/DOTween/Modules/DOTweenModuleUI.cs create mode 100644 Assets/DOTween/Modules/DOTweenModuleUI.cs.meta create mode 100644 Assets/DOTween/Modules/DOTweenModuleUnityVersion.cs create mode 100644 Assets/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta create mode 100644 Assets/DOTween/Modules/DOTweenModuleUtils.cs create mode 100644 Assets/DOTween/Modules/DOTweenModuleUtils.cs.meta create mode 100644 Assets/DOTween/readme.txt create mode 100644 Assets/DOTween/readme.txt.meta create mode 100644 Assets/Prefabs/PlayerInfoPanel.prefab create mode 100644 Assets/Prefabs/PlayerInfoPanel.prefab.meta create mode 100644 Assets/Prefabs/PlayerItem.prefab create mode 100644 Assets/Prefabs/PlayerItem.prefab.meta create mode 100644 Assets/Resources/DOTweenSettings.asset create mode 100644 Assets/Resources/DOTweenSettings.asset.meta create mode 100644 Assets/Scenes/Ride/Config.png create mode 100644 Assets/Scenes/Ride/Config.png.meta create mode 100644 Assets/Scenes/Ride/Device_1.png create mode 100644 Assets/Scenes/Ride/Device_1.png.meta create mode 100644 Assets/Scenes/Ride/New Account_back.png create mode 100644 Assets/Scenes/Ride/New Account_back.png.meta create mode 100644 Assets/Scenes/Ride/Scripts/LoadingPanelController.cs create mode 100644 Assets/Scenes/Ride/Scripts/LoadingPanelController.cs.meta create mode 100644 Assets/Scenes/Ride/Scripts/PlayerItemFactory.cs create mode 100644 Assets/Scenes/Ride/Scripts/PlayerItemFactory.cs.meta create mode 100644 Assets/Scenes/Ride/Searching.png create mode 100644 Assets/Scenes/Ride/Searching.png.meta create mode 100644 Assets/Scenes/Ride/Speed Meter_0.png create mode 100644 Assets/Scenes/Ride/Speed Meter_0.png.meta create mode 100644 Assets/Scenes/Ride/Support.png create mode 100644 Assets/Scenes/Ride/Support.png.meta create mode 100644 Assets/Scenes/Ride/pin.png create mode 100644 Assets/Scenes/Ride/pin.png.meta diff --git a/Assets/DOTween.meta b/Assets/DOTween.meta new file mode 100644 index 00000000..6535abac --- /dev/null +++ b/Assets/DOTween.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa9582dc2d6c01042b6153f6512a9cd5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DOTween/DOTween.XML b/Assets/DOTween/DOTween.XML new file mode 100644 index 00000000..11e9215f --- /dev/null +++ b/Assets/DOTween/DOTween.XML @@ -0,0 +1,2769 @@ + + + + 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 + + + + If the Sequence contains other elements, kill the failed tween but preserve the rest + + + Kill the whole Sequence + + + + 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 + + + + + Returns a Vector3 with z = 0 + + + + + Returns the 2D angle between two vectors + + + + + 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 + + + + 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 + + + Behaviour in case a tween nested inside a Sequence fails (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 timeScale. + Default: 1 + + + 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 + + + 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 + + + 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 + + + + 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 + + + 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 and playing tweens. + A tween is considered as playing even if its delay is actually 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 SetUpdate 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 + + + + 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) + + + + Path control point + + + + + Path waypoints (modified by PathPlugin when setting relative end/change value or by CubicBezierDecoder) and by DOTweenPathInspector + + + + + 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 + + + + + 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 + + + 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 + + + Kills the tween + If TRUE completes the tween before killing it + + + 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 + + + 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 + + + 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 + + + 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 + + + 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 + + + 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 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) + + + 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 + + + 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 + + + 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 + + + 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 + + + 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 + + + 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 + + + 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 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 + + + 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 intervale 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 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 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 + + + 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 + + + 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 + + + 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 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 wil go backwards + + + 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/DOTween/DOTween.XML.meta b/Assets/DOTween/DOTween.XML.meta new file mode 100644 index 00000000..b7f40302 --- /dev/null +++ b/Assets/DOTween/DOTween.XML.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 09f387794b6672a46b09476bbb0171be +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DOTween/DOTween.dll b/Assets/DOTween/DOTween.dll new file mode 100644 index 0000000000000000000000000000000000000000..6ad855fc1e6c6dd1f3c53247bf0bd481083f3261 GIT binary patch literal 162304 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

Z|x4|T@p>5ag)-cF10J$*i3(wWZ} zO(v+FVfg-p4Bf_08Pw&W&iK6Y64);9ndD`f-V+&@rl)%>p=Q!)HJMgO0RLJ*9hVL)PaIZJX%v0J(rx>3`9Agf& zMcN6m!j-W;jCKMW3To4a&VP`O+xSlgb$O^WK2L81w)M6n#`eiAwuy)>>9p9k`~%i? zg4(%;?|+fuUhljZq4QgWTJjUCMJTfKwWM=_q4P`9aT~v4P?v`~XeFthgR#0}B=LbaTCVAyA2V^C0=F|>ZK zv}!S0SGQ;(pJmC9>=t&F^gtp!TWB-y9NI^a_BDp~AC&epVzi$b(H5#Y_>0pXifA+M z9NH74eXXJWN2UF&813siXe)y_?G+Ji=55hd{ca-dx}p6irM){wyAjcbkLl1aaa*)h zzwlW>t!ZfeS!rD#qcz*2bpZV`?;P6LxE9o&ZD{{RX+I}M`?(SA1L>D}=g>Ziw4Y~a z|5a%}KSuk84%++CFY~r&yVi*?qN7Rs1%~!srTs$EJ5Qa$ix|hCojx4n0y+g^g&6OZ zR*&qyfX%G&8%#%~Z6z#@;m}rt+KUa%M~QtU#v^E~FNqO;X^b!ieI*bURCE;dHf&#% z5A=fCjfNIZ8?nvb6eIJp7#SlUvGyz9Hqv~#q1i=jBi}1xg#Rf<*vKcSG5OdB9z$9; z8(Ox?_s`5~+W#vVkGFrXPAuALYaVwz=p0KruQGHTU@Yx&9EU3B?ETd-inl}*ePi)n zo%n`g0$1L+xC zeqO$N5s*Z3&h@k3wzi25;wdMAZ*Wc!;28XR&n%F>BjHaB6`<)7D!u< zBi}a}zDbbOHR9OZ`X?Q8&^J>KV?Y1GxY`fq)_i@9zJoMmR)~4xli~5D?RgfaAly?K z)ZSuvr554^PZXQSzct3|u7!A!hVWvWR30aj$J-2#^g=v_+&GW7$9TMBAs(dB;*qqT zhH`8tk9Qg#8KkS7#&p)X9`Ua+9`EYlk;fq!U5_A{*krn;JkH;r3Z9QA&vzT1*#q-@ zPmJe#J9vU621%$XQdx*4beWWOms7~|Zo{*CA)Y69*v9)}Jn!k?*pp{~1N z!7`}5-|)&EnAZnlygt~$tF=BsDsfg)t}1kiDRxl%km0qY&Fc`^Zt+r7Z&!FRT8i1u zl%9Eihsk_6#`+^2tlPyT)j7PioS4!FwT~L!J#F6YwX9BN_r{pr*TJk+PEwi2>xEqw z$8ACFV}@4%ES#6iBS;k1IE5aE8zn5Ov6Kmj&feGPV>I9BWguI@8~u#JJ%2nV#wQ{% zB)|F#anCt7F)+Prhm3WGARY&N%h^qoxRy{tVj+Y(D1qK5Nh1L>3^ArHH40=?7iN3C zPsMnBI^yN+rsQ&FO4!Pe;VKLV48wvlJeq^ez20YHv_2crY7;P2F#t`+X|3p_wN(bL zlrhvObs1s+UTR|g;qnk$X|-3ELhSWEM>bM4%pD15vBb`+s1q!k2DQ%vg=^shNI{(} zM-bJCS0}Lg6iB4!zz!k~Bu4cNF`94SRdiH6%NVW8?_Tc4qAVM?U)*%lIGL^YWo3F7u93>Ox05}>>GSJH-H7=p!QYZ zQ1>g4lvAxI!Vjsnd@UyF*CR<24v#z5F2XQT`nZx;XI}bkbh?+IqHvz|2im9l*3;3X z&^-pVe=~fB7vS@a7@r6C!-sk2^HHXS#(yZ!gzSSxHyqTyX?U(=K2xS|#dv)?;)MY- zdTW$KFxw?bXhBd0j@7W9$^Sv^JBIGTF}nXAqx;=?bOm!R-44Nphprc6tu&~8&+u3U z9;nKPNYc!Azt4E*e3w|U`EEka0AP#})E+i;4h07GDKn^|15I;DEZx(kPOojr5|dNM zjYE|456BH&1jn{NWE?J=GYq&e={cb_5|t%3+LrRhQfE;6k>R~sc{8YDz_1A3Bg*^7 zG2V|X%$r1Gyx#~tVu>NB{lxGNNy%*-&Y&(2b;jqdwGe35TA-#FA}n|j0v|^Dd%d5= z1pZk|U|l=rFaydWX%(2dqP$oJ32Hw#@|H-*ZIl_*<)O~_yfqpE%^D5ljUnz_l)OdK z-|PJ%ChvbNEH6n%^12)=SXhG!YX52E9VH>zs@bS0&Ho}DGbH{c#_>7 zhA=oDq~aWsw6UfY)P7}XuWi#_qqKh=qy69eqs^>w+K|D*I#W>lA47XgXkQ9tHP$KZ z-;kb}Ui_Bv*z|(umr-}jBy)^tcJUkaIj%+e$Q#stXXvkQ(;rv*{~M$K`-SN<(?aw; z8D~SDp!Nqte5scWy!Ofuoc(KRQ;`V()ZaKd95!L~arYIw!fJW;vT zKrm&M6ifjn#1uwC48OhNM%n2(dtV4Iq=e9mNis?#A-pH|@yW4CJM__$={xh3^;MMT zLX^k0`$p1@-KaXRQOB>{T!!C9L!xktZllSl{`Fyx9;|2!JmH2JEfYE&8g#uYY$cq>)G+r!_VM1QQsCeJTOBu~KZq(o=27Qf}F=zt8 zZM*)eA`Qko@U9kRgw~g3kYzHEO zv_;#3vgHrRA^>nM2TsKo5lTrsUxDXcDhzHeFsYOZsg6k%`Hb+z8|>i`r8e&fq!tfn zaa$M$!lH@#if6{F$CTDpEzU(lo|u)EFyPW2|b8N&N{G zsSk-sl}JqLvN&4vU|+M>Aye@SdZMm86gyc5<;oen`bU9Lwxbhs1>HmXSh6@K%c~3* zL)dJniU>Q6TSWc?VcohYtlI>OzS-g0nc9Ptr+i4fka<(c4+0-YNc+Mn?W$E;XL;@Y z7%YY##}Bs@|K0T51?X{Xb`jgQ$~RX%yad53AMRW;ipgwRkvzS?sFHN#GM$p=Rj*_- zxSPcmGEU<)Mg<}>3{CzFkNsBk+%{+Ey}dZ zfCHrPMp1K*iW_A_zGh+dc9Jkz_U{r3x|O}Se=Nsf-KEm)L;KR3I^l<o<(83eo}uP!H@BEUNc;Ew{-ryge>h~2+#M4t@oZEaj8@7wRokId{}Sh0s;3!o3c5 z+{$qpO?Tw%hn(Xu06DD@_cU@+Lw$weL024e#Eu-?Q0K<^fn#9~Ab(17F#{i`&cT{f zZ{oMZ8aQU{um+CdI;>%qfVee0n}9v|iAwYw0^-)d@m+^CaG2L&4IJ%tSOW)r9oE3H zXNNU#;MZXd9LjfC!;1-Mcl1u3m?VCAbS^j8j8Eo=>Sj$_3docc|ORz^*h z4QPXf@ti*CnWd5$>dDfs7);3wvNUgp4RMmvVMCm%bl4Cl1jdGbVV8UKL;!BGXpNAa za*re3c{%CmVMh)m9X)j-=lgKg#Md56*6^P&_Cuz}$nRN@G~)N*g8bZak84DA+oEFJ zakDaPE|?2*-+w+p`YSd4t_AbsmZ+FQ;CflMH}4Nsj36|auUZh(6`~N`V4;1-=78c5 zaIi!|EwSkwq}nQG7*hW{R3?N3vCw!ko;6dx`fN_bZLIq{7N(u@r%8V!U8l07gLKJA zq(C{w1|Jx){e+Eirb>=8Se%XVK7^LMMpW#Hu3m*HfXJC>pS@p9UQu%U$B{Ku(3??u z4=qjr$I%!2iE1s919upA>T41GvL5Xi?^9)5(}(jfSaD$ulvXLsiTMj>u9qn491YXB zcs(te@7}Jm<5mtmFr(7a`2w1IWKQYiy1gm8V2Gt{>&zZ+ps#*u8}lHM#6V2m}WC= zH}Twt;?1RT_M$EJK1a6?}ZNIuE8tfszoeq$T1i_Ov}9 z%f0jvF(SxMI;$f(aio3H+KyYQKs((BFKdJ`bXxL62>Ya=ehH%&`CCvUKSar$!qf>4 zP*&i75B}TuU)p5L%SpHK6JX#hygVfuKjqUwId@gz{a>BHsXhihumb87FEW2dMaD9k z1i$f1Ch$#Y_%!IXwXU_a%d(zA-L@(ir*9!wf_3QGQ{G4Lm~itAOe_3A$&f@GdzW_ z2Y|yX`FKur=o_c$IIb?>@Eg^Ex8RH`qU6h5xM#R$2JdOA_?D3oV&|dAX|sPao3!A7NnI`H@U` zCD8ba;$DD!x!6JyvW-swklZ!WEz5_gaE9cVqwy)h{3J=J2%lzDFJZ9z8=u8faY#}y z96)>bt?g)2Po*yPcq>l+KLgY%JO*9GUJkEvQlfH#U8qtPJqKCF6$Ub;*Ynp=_r>$w z)D@E%n&a8AWVxLO)lKO$xI=y#I6PIJz%hPAN^1@JTHs*N$aJ4@9QW4w z(h{E;a6Wtu4vAla%LW`dGpq9I#ARd7oT}H;v`56t0%ee9el3Vo)^aCqMyp3j)>&V; zut37{5$04g-e^fqPWp*ZT48j6F|ufK6>V%Uu0k+3Q~b@hiuHQQ%E{)!fR#oUqo_qT z%l^@_LiBNLMU3|bb32)-wbp$}a=~z~Z+o~9A@CA`UwtNwhxaDv!P#<<7#Ky>vZb}G zxvWYUZzat?N~v2UqG<;UMvQ1AXfY@Z-oONY@_* zx&z_e7jXTt4$! zuajZ;qJ6MRnamx$Qa#ps^137LRQnqrrXo80iydAEiQ(=Gjn9jg>Zl1_TS5;Ze>kh3 zMmNhhmgy3%HeiU)M{qY@Nq`2FovHYE_k9C3!24sc=8}frz{*J4PViMKsFMi193Yivs-Zj)jhyO0z|vN+l9R5!3_pA)n||nwc6HXF znz;Q)b?Wt5VmX76q&p3ueIw`0WRW-@lz%n`=dLCq+7ye&MJmTkRJ%I zg-u~X4?b*bzef0U>ex}E$m<+VvTlMQ;G&4REEAj1@+{T)1^ZRdL+3?0Uo{gZJ9Qpw zv#NP>X{%H~K`Njx^Uyi_rT;e<-Y=>jn6QSQWF5n{N!?$IV(nCW6WwE2kd_gOr%Ew( z;i{%oy9cO}glHXAk}$Vh(UA95CCe}$yAm>7N*P4$X%8cJm$iWZhvI)P{%^ql(((2+ zYfytB)||b{5pZ%x+1CsaFhRg-07?e1iGY3ph74dc0WJWkLgt|aQLRWHDF03?kr#dF zc?s}>32Yk2N zKE+cp5{u>KQ#_TX)27TPlS&I}^A&rF@s-pTUrCMemDCnrNsaN9)D~Y!jrd}EZmcxt zN;8YhDd)HCDN=*U6t{k$wdet@6-Su_EtfFlv5)OelogGEZDEULS(i&Y$8b^F`5O^d z--I7d9kF>I!5UPV6?(b{Zipu$)y zzsR5u-d}sTYi5FR~2?WmYd6;{jR#a8(nirMtA8T1Qt%9l@5-9oCh} z%^<2P=9ao5F<0rZu7s=5o)ihBuG+vUF3@OQaR4Lj=^67I6xXM|qE)rH_H@N#t*a{* zTUSDvbrpUXlIM~V9I(zpSXw&#D1R`{ONaO2N0o%?`xqYdJirjjh;d$kL$cg>`*9?2 z6%Acm+T(hK)=k3N2E41Jo|(jtBlxfS;tGMDzOXF8Tu107j*PDfthtbL7Q__?tBx(zv> zSK0Tba`OGvP#sS@joWZ^8Go@TEGe>j#OA zUNSYAEv18OCWlXdWlQ+XmwxOkaPc{{Sih5;Kkn-FociyfgR$wc*b`JuWb-WwdW_XEi29C^ ztLQ;IX&ujI)HsX>>33Y~K3L~7ga^jN?$x6}sD24FF%7+hq<;u#VSI&o`VSgppbuX4 zejqgd6ClHMHQqCqyD{3NPz{zbE^J2O*`yH{AF{(zJzAuv5Opzr_z0))sRFKMl`r2J z&X17uDTjlgt}oK%8ATD*~@Mjx(BjeR%p%Kg9-CyLx{ z9Nfj(SP2P1w^5YPYm^wqN@b!yLIM5iQ)nZid9RA$Lb~xQs@DJ>06-dEUerrm9Z^ zQNCqy>u{Uyk@un@XtdV@RNhy)^)~^y=?#*^{Jp-buR1nrnG53;C0s#I^$8&GgARrj zSSkb@_3bIYQCdDMz?u|Z8uTl1H%RhiQE9cgR~4UREKIHa5x#ipp=(IB(NYF2MKC_N z>5e@TQE)X$#wqurZ@yOQWKLTPFGbCw-zkh|(UY*st6v2~bw)jycifl~^3n=^Ow^h< z8`Kg`{U^Y#J%^?;2DR(6SN$3Q;irYhFM&`&MSUGl<{AunQ=6IS1qG-6Q>2^EJKIW< z5TOvK+X60<_&qknljd33=G1=%lJdHJ!+0){5D$>39}a^5=kw=h$S-Bo1j^%X&PzHiWsqBa@ZpxzzYRlI14$- zkkCXccu&RJ#@i|*vgR4kJR+Vr)~u=*;|=kU%bYshqG}Z$QJ#|3e*<;Q*ME$pO=yhJ zJ);BX4~##~OIE*uR1OdzINlLUH-|3X7KBl@fsq8r3@NlPaOvDxEuNXhp6zJeM=W?$;@yuVk`XGL~OIi8g zt$A7s*F+B`9Ml06#@E0ETUNQopJjeJQK#IEla~a4#OZv}$2axN$-$hvc9)22x z==u+8oe!QY@HQSITmV=Lg_CYC)-okiT8cY{b~74Z?EF5S{p!Q`m9YUlhVa!j*cMOD zZDX7m#VO8Z2xQHOL=)xpT!U@#Ef2e&_&ess}}+TWd*+TvKJnMb0vI@seFF0J*#ib$sA8)yg!MOu33FE1ry) z#m+quj1dESeFS5~z+Mx<7$Hm+ETuj%f~UPe_gI8vGS(jrR%_`|5Mg>hL^4dTwf0yS z+xroqv^})`bQP{8%?)DhwGuvHtpr^KY7dSazl>MmQzJV@KWCAau9dXt(4I_g2GLpx zbIV!@iMdLLYbC-}Xitg+vR2XtPH~Ttu9YkWzbyFeYwhuaNatTPep$J{wa3^}$>|+a z(PI~0dR**E3F$uOMXjBx4%8LAN2{)&C~LRW6n;@ z_}@`9sXi`}gS<*ZPBMnkl96eSCtqAwdF%f}2nQ``Ay|dzC^gsePJ_4&wW&2Rp(0we zt(fqP!dHC?f%qy?OklDh4BQy)RoHe$eaRai(V22*PLU~UAMb+iX;SBHoo>DaFjed3 zX+}i?OcL1vN~f|Bd+TD4=gMqbC!Dc#cF*#7uJ+VX7kl?{n*WG)I-@$O(-B!lC-cZ{ zS!+}Ja7oG2NS6Ka`r|f^EbZz*6JE)w5|i&fE;)6Hh~>)^zeR~c2_;54C>e3da6Tm_ z`cVN?Cdw?780ny73brsMCOUrOw+M>Iu{A1PMOt(p66bM% zE(9YAw&(8Dz*J$wby#<0!^5=N6@hD4cX^Bo&{~`cl zja2{IPGoelx;K{iXgiV7$*R>wQkt_%;uNCF=wuZ;(~*e1@dl;pA}Zso2aU`*chd(D zm8C-!*$AdWdL8nSvdZU)l#yr(r#xOYE|tP5iWd{eolhDd7Bx;4pt%GAnoA4s-&u6& zvsp}6OL(0ta=Sv+6+*7$ttF@c6qtS-Yf$p1H4)Vc>FuM`s^@(a-6Sqtev{a)6_vr0 zyQL@u9EjALT1HETDFarU5HO<=n9O2)BQV*-I8I5a8?;}k`y;^b*|6(`lw?=@6=_1W zv@4^twe^mFNyhW0eV=c(a7{!SFM#N~d<*x%$anIZm|3}aLruBGiX#BU6w8eOlvS)X z0#Hh^P~-fzK_-lg(A{BPKX+R~MsjH#<&weT(`YJ0CSz|BHikAcE0$@eTvVNg~eye!s0VU#Xo@4#!9uwA}YjN zO${+{*VXKunn*1&QNp>2R3sB6oSR5pGEu^IqL`pIPB>ZIXp_dpBS{3aG$0*UWzZi! zhyJ#nLITJAX@pgP(+xu4N3#g%M|U$a5_S{1n`siA408g|#3k)SMkm9bSYpslWOOpb zp$CxCoW1QtMkhnO>p+8IB4(J^qWE<Shc;PjH z@*tsI@Fn&F^a-3to4|Q=37kh0ew*4%l&hSx|DS4fj_()ii7bgS?L&!b8~aeCNnBW& zCb6y1`M$qx!UmZYIb|%HYL0P_z+@KV8-d9t#&N1v0H85|AMyReFd)uPF%%^M1k8{g znTDJ1^zoi`kn!=+;PhGhbk0kB)!>q(XwS#DQKcymPVoU}AaJ$@!i9ZO0)ewZ5Kei3 z&p_a86UHgOeXdh}&EMyg=ZKx$hu8vNKx~08Ahy6&>;pODITD}_7SbER3-Bj+0rmu| zBT*-{#9!jib5a6iokXrj=>wDX5&@MufUJ!ONZPWEnT~5(c%2spu(bmGLc13ZzU?o7#{|Ua_xcb?NlwkchVk1Ie=|)(SEe2#z!dQ zcx??*b4MtTVXM==xaE>4%z@Sur`0@KH1GjZ%B=Mu@kx!tU{UUFzOUqYjBb`z-{5}iM# zWi8m@gz=|@g>Yg;L>v$)Bd;&njI~Q{!k8n1G49my;uGC8UVBFN`Z-e;UAu0TgZ3Je zo>8m^u_Uq{L=h63UM99UuP_IdHpVo96(%=Uri11twTou6TNP@5N2$0nPH9z5s(U`G zt-D-IDm65^ed5JX8CKKTDqsUxO{Yy`nS}w|y%?#?^WAdaLI%uDzGA3`NOq|WBGfR5 zFdz}pJr@f|#8!CR;`!=Zh~SL@8Ou6~k$@YonO|Ur;5kO3;u35Q5>X>+%p^c!MnJ}; zTM-`c5^DjFF$;XH^#bt`>j0vU7(-Yc#}D7hw|xX3yl_3?IMoQdB>)ZK8Eqdiv^EVt z5x`FzT-uRbF}fx>+%vkRbUNJw^YD9`X?_YkT{^A>JAyF&l-9IhI1-xXFbS!WcU8xUh z>4`olrX5D%gQzL-L6kMI3Bv{ShYKnzEIkv-I-1IQV(GG21&B*(>+FehliI4An48qr zARJjsQX$w@q&PAW>Hk27ba+&aR-PIXpP^i?*J5&M{9Q{&X>Vw4H+6vowYfQjj^Re- znrw_3ue)H5cs4OBZ3v7`#d&CRGP>DRV+z&rCfA|j~p&T%5$OC5M!);)+YAQ7>O z$i+MIUGWwXK~1DOi1fNkvA8FW2UKVgq#{P5RQi`<7tcJ$gpDSy(m}Vt66!L%W@lGH zfprP69Kmqb}tv={@G^QGj#xB0!Ril*PCJNiza6E}f645S`C40H{y3 zExc2(UL^g`v4FDwISygFX7!MYTdXiz&R$}i*9$KfZ+zt-f3PwtQ9r3c=Po=H3~ zGs*0QG+fOdy@L?m`VQhGr1BjE*(z7@O|E>42W+^G%(Mm(9k~X^sgw51g=y=`nXB*< zo{UGi45neBuaA(JVL>D;$hkdFNW@# z-$0hU{8qP9fXCx!b)tMtG)TK_U$Y>&m0;ZyBr6u0PhmdnuPpT{B&iU5<6d@AVUOBR zmCI_X)|dD^zNQ4&7cPom5vU7Pp_D9z^~*Z4M@7r{i=O}N%qIPHuAeP=$^05SpG}m{ z>yX^3V`bMZmvad_m(1e~02zk(I*aEgr*Od)KG))f_!@{O_xY+F%*Tx-{w)MOf6D95 zuUnej!nh=u*rGnRCmcuC8xUQ3bs1wuUVD!)~vvo(Fj~|QY8l)%VXlN#=0`= zI3^n36P$;>;3cSke6zk!(s@7G6Ih4xRBS%TJf{MXPdlP?Z1T%;L7R@ z0Psb1P)viv6A{eR*ecFK3|nZu>e+~F`fr%JxA_kI2JYrpvt6}VW24#d#p8VgH)0z= z*GPW&klRNJ!x!IYEsF|kNvc+h}9-U5?n3;d}Tm_iJv z4fZEmU`i#@$W2@#u*Qh5F``HeB4K>$ihsTd<+t^y(2(uloW<_Gr$DG~+qY9U-)^Up zx0{ncKh$-w?Z}I@hrr3N#g&ZMH=1t#JLqOg$-L&w_yQRHwLi-Q?8P7Oy)iqF8*TiX z)ow^pY{wbZ~r zR>ry;6HG5ncg#m#Ag5z;NABt-A6+AC@!)*NP-YOV5i)n8e8_x8X*c50CD&o{9gXJbQOc z(g}%(%LEhjbc0efGUSF5!bmEDF-{n%L@>sk`jwz(&M#>@fS#q?Iv;P9nf4hgDWmZ{ zViYT}=@ZDiK*0}2!6!;*#55>#W(un1$4tA$NayEFqR=JGv^$g9+K`#HX!#$k2+pdd zibdP9e@UtwYdZ<+BPgS;A+{=*Ylz*LPjAFj`uqtj{BR0Q0#e1X+K$hKLl*HWAhl-C zl7oddIT$t5;JL`Fzyq3=98!;JQH)N>U8aVz8lzf`Y?4(AD|aR@IwZ2wat$a^Yog`eB%*<<-CDh2#HJeeoBa# zv)=lc*V_}rOCgzDVF+UAig;t-e=^87{!0UFJOwF1`xT=~d_G=?QXGRD( zmP3AQHZdyTWYd$mYjF$GZ9F2N(*hCp#W#S)&D0-vo4eOkFiyv9Ox#hM@neTIGWPBZ z0IRbQTxw5asl6|?Vsr&xAZhtop{1ediM3kFMo+9x-;iM8<$wnlOk@*p)=tWvU0kOn zcQ#!Cnf_U1s-dR!lp`7|=Z`OMW?%r7 zbghKa%`z^4?8I|GD2{x%|G-%h9pqZ7x$eO(-dV;4kexV1axHJMnD8HHKP;JfCFef8 zr)}a8AU3;|$ahJEaRFo}d?9jBi^%dOHttZyF3QNb0J0MgaeDi}<6?-eBCaAL<4yi# zC*CKBeKEwGB7T9a8E^6@JMmIM+#W;p6!GgsWW33r>;z^kV2xcNMwiQ*Sw&2fHRA%v zPT*Ao5D$(aE>Xl^ks{+w{$wWtL0lC>#MT0q`Vk^B-sDeq;%6{9?}2k-h`u8JfryMZ z`IDWvPY_RtA%X`f;w!A)EaOf7WG7%Spy=ZED>aP4X0Iat6Dcw-fNbeX?|~<^$PG4= ziuFcfF)n~?X}kBpWDF~%SnnVf<4yi#ONV+7Otr8I&4gmThFFXXAe$`v$!m^+-4*+E z-US<^pO4#jv!7XW!+kX@f23#mgp~^h-qJ4KDVZ+&{x#6ovSJ8QCApwJqX>TWSx7gj zy=%MV`{Q6?^@;iPNtO4BQv0NceNu!zvBExSFMU$mePY0UVoQBet$k8weWK?+X(N5A zN=jBv3;*hM;Es0dSsz60--2=_%Ge!VVu74I79KFKlo#fF#9EC>E4!RJdV~Jtn2$B7 z!E?)*_F?CufOg;(2szE%jTM-w8;?cZHVy^ZRNjr9M=r>bYaIA03daFlsXE!~l}^Hu zRUCCR#~NdfMqZp_i3o}2oFrm$Ub1!uZ0e0Ey1dZa1k%P2HTEjFkr;W;Bmd zV$a1Ifg*Bu@$A+VjwGj2(>NUo;pK`91UM- zI*s$JEpU*5_F7L`j)e7El;bv(1DT*J;p^_&k#TRNx6NwMt)m@NrK<7j*-%EWi{tvG z<8Y3C*L1IE2Uve#^+I2)6h-kpREQfkAl+m-@OybC9@XUSNip>HL<`gCn8)tHn}QJ% zNOBL03xf&~NdNm2h=r*mV7Mm?H!2HI{ZQQo2{c{g%9GCYno zM9Eli3(^$kB$m#Kaxa+dM&2spx5?8L;2bW+Dfmgz&>X4`>~?{+KNWBL)2+6ju;4_k z+ZWmPljTgy-b&rM4u|GOjv>)*`d)HiQhdr<;gaQ~HSh7QF%E__OGcOocd3%I&txjqHS zTbv^>P$*2{Cxcf(aIU=TDmnIjMeuIvcF?i9dT&bLPWL8U9ogWD5#Myb3167u0tg=_ zE^R2$9!tRIxorQ|>mZ+q2d}5SQpVSQQ=fI1gIS+f3Ke1oQ6nko4|>@*PNutY14ZEP ziTVY9?CVOUb$J!bHxMLHj9d5)7uS;n32(=qsBHe&kJ|kvyAKCfrBF3dAK#!c;14(c zQ-|!zX1B(E#>dCE>gV9cnarC@(&%6g=0l=E&$z@5o9MuC?>b`FBi0a1w-8oFPDZG__DnR(?vf$yf7BmK+v;9ju6aS}o1HT^S zvGsZs+c9gg$8lapL!aGx4BiD}2rPr3X>rt+UQ>}3Lt~4EFGV>yFuG}{T%&}0ljSk+ zZt*sTwzLYwaYsIp5W@}uFTd{4=(#X;OSY76;bkJj3ld}Z__zZtaFbIzQvMWPvUI6b z8+m$ob}K$Fy+qq1zM(=vkghi7$Q{pjn)W)o^@vQQy~30!p*+O%1CJ) zF3e{fCZ0*+qNni`zA~09q9J3RGq%L{Hnsr-W7?A%`(hq#(UEV; zND@%=oaqcEQZjy`(F~{Ly}oPX!vS(d3|^OGG}^9uf8F=EHbmN(;975t(H>4ugFGgX z@(}`tH|@lLZZv1(S2#2X#EpO}{axO!9a!g59;gl`_$gtdFB#W;SH@3I0FO6;hc=+X z{08)FG@#X3<5RnmFPpP!xzUB~+>=2g(#ZfzePWrQ$u@-5D(lT6e;J8od={aC&>4qr z2*4^91G%Ftram%?#!?DaUnah=Rkuc=bZ>BBif25W@5CI{L7<{;Anm5!_OR5_+CiRA*EL#SP;uj+f&KY&$C>Tkt zDT%`uvrJmI%d~DKVXlXaXt9aNEGPo7S!fL#_N;TM_y~i>AXB9XK!4Q`r=>C^)HF=~ zbxh??gg!<9e-xm;P2<|WUF%3Tci53zUh80(Z=2gMX(+IDd>w=_-_ag4X5wRy@JkI$ zq))f`?F0EU{fkrfoPp8d(&i>MF>}f4Le#-5jN1Y+iOV%{2NM~$ zoBY*8yg8@>u4_sh*ZqsM1!}O;1>P&6tD{h34OlZ6qKUxmGANwwp0~>eo+9%D^o_I&18+f^fw;tu> zo{9sW`H?M?xY#ay38=SjP4K-nnZt=mHM=_VSD^6d@vt{nBTOO@u0i&q$5(x(F z>W#=lgAFf+Ad$Wu*z?;U$3AHcf`%T6-E=Qxc6g_;+qc(&#<6zA80P6%{c+{PSh7(p z>-iTXFOcIlaj9m`$Y4c(H<Dj;D@0~d)yGVSIYHX$k z{66`7PjPJKD|pcFg5Y7YJC>t4;VI%gfZLUEAZ4f3elNm{V-ptL24-ZuF z#v$F;SG^g*>f&>Rs~v({y1W!)>tlpmn*(KZv)1=qSf z^xuSC#X3edF4DDm(!5Hwa6?YU3Fc%FqUOiEds z0kW0Hn^%x>eH=jl5YK1aB%Xsn2%`2IyR9L(;Xz(mQY)bx`SCPQ> z@KunXU6!?R%fLQ~Es!7?cWB9_v_ju*_3_OC$XWKK;BY!JW~sg!%utzKMRfOl0`jZ3 z04ATI(&6mb&)Cnp*5l!q-T_;(>#RpyU8~v(XKqK`Ur*J9w<70^pT{G0B9Gy1fQ2uB z^5ru;n|_Xh$%k{o_lX_lw|o{5K>-=7AQ&DCQS1n#?+*=M{FY~G)S$u8s8fI6d2mY z&H371$MQy;#*sD>@aVeoxWzoC_3;=!o|CWj=;QHt9B~^b7-(LhCn@w~LP2S{LQmo2 zn~h76#@$t%`2dPudkyM(Bz!IH=V-jDlL8lSieoO3hic0Qs8YE1^bX|0yvc6e4TG{B zkFwddRbb1b24;z)aiT1Sy$$)I)! z$xSmFzK%RMM_)Vs2<*!)t_D2}Cnc8GkDKW@6Xs{VlfLv^v_s+}Al4)k`Pn#ofCm*hAKS>lmG5pAZ)h!1U8K;91*iH(sG#u_#KoU= z@!Yiht^5;$*}7}zkIi0A0F!RSILV&9K1$ceSv=O>1d6lIj__)4<|C#B znyvOPe8dRe?VrW)7{3^z;uk|q{9^R!hHoJTm&IhBk1DeMm3DC*Ao(p_cwBh<#sg1= zrN}G#Y?E}lWtU%*BBgHQd5`ilF!+2QY|k6N46%C<^T#hj?EQ!($0q~#>T!@53I82R z)O>w+3aKWg8!e{fVLT^6VM?Se^`#_rJS#zAQc5Di0)sLau`tuENQJ4RFXQ&|-2gYK z(5>%=CWV#IH0%uNI1$MLICGY+Zxbj?ja?;_dJ|1nO|Mr7ABOm5@NxFcm*6;NzCUDL zxir!4KbCshdAt>x4)4Ox%p<_Ko)Wc@t|z@VUX^${hN`^{QI%*?BvO^JO(rbvtKgis zSx5H#x>ZeDLiO#)!KRFBTSU7|L~$4tn+^Pm^e9bLN|Tny%)q|NVztG@T{-L*!@spG zuRu>B5}@iRNV_ahBa9922F5owpP`rxBu-3@P)h5Y*Ju(0i8G0#9~?2jehsRPfy9|KgNIIe zoJy}sGC3;(i3mlfFj{a1##bxr$yt#=covoA@gT2T@(24j7hhr5B z)*Ccy;LneU^w>Wl-a{Noeile>=kA)RdrkY z5Z;G+eGluE-;I(rNrvWIq*z_ig4*@B0J>=zkoAMMDA`%b!Zx%EORUYNOPZ3Fq{`rV*S0!(JuX`g84#}QZmT3( zrwlx-=w#y#&(2rT4`Hg0`ZslGTOWn}y_a=Z*_uz6#>Ke2+cJLnP@g9Syz+9~vd?V3 zsbmd({opeC;I!9d?>6@7{|mbeKL)c8KdH7)HzR%%O$k2Jwz!tfKlSVEG}P0pXQX|p zMy1xI1*up4SK9fASf11d+5_!CDpF}X{GL6(O%^oS9AGHYD%eWw>bsB~qak^4s_(`V z^lqNsgD0oXaRHB)UW|~Rpd8#VWQX^o6swC7a9{&QYF`r29hzC_atfqe-U~{rmHU)% zFK(0(#qgMnsUsbnKn38>cGfsf4}wV5{nJ;iX!$B`AoVIJ8$J#cejDi>KI>bUAN2|G@Owy;SalOx zv4^pVE9Vd~pa_~V`h{7#oP652Jsv#dmQ7)pysbO6>33-HDd{lmZ9ix0XN~07d8zO_ zV388zt#lW#L4e{+d`8eeNl)})Mho%{^HiN3PsPEPtKAeoB#C#jXq~G*dc+MI)?;my zk@p=9rw3M_A?E3+RQ=P4;5!~wxOw?t1g62W_ibpi+5vQAWi4zujalX6<>mgAev`ag z!<4q5lzjHI(x1|AowupQA z7~>55+xRkQ)BOP8;|BDhn?8;>UJE($>DdHop&S37ga0K|^2ER4r_h_4_!4Wpd@#P9 zz?I5!kBMNj%suoeU7#?5K|S|xE=AgHKngtALuvvGTHsa3-cBsr;uXEbs_#dx$}&9R z1%rVzCUElslGMbLgz1I|>rh0<-7qcp;rrM5R+PJ3E#(=Kq)MIKP!D3KhB`l)LrNfGEqJC11c4T-5H4>V`?ge z@8xtBPF~ebL7h~!5nf;?;8~Q}gN=)EZ4Tl|vWgjfV zu+8Ycp++456*6M+FtiilPA9N-Kn>r88tlaf=he5s8uQ^7-~Lm2;Z#vJV|{UamqXKfB@&Q&$)?0 z_(fo@7A%O#tnBqRVZV)LeWe1~J8pVW1e{gimjNt4lX**5A>&v0_;h)^C`e*UYxn>m z=LqC4v#p;;FUvpTm@x)ip>N&CPjUf9)6W6$&dNDWxS8( z{!#Ice*e*Ze|hv#zkIxQV;r3#p}RDqHPJ0&vEE#etA7}I`$zpCCj{y^gm7}owOLwR#uKC`0o*y;@j8$DOXg#IO2(RR0TL>o( zg<`&VBC@|4Na#5l3=74(%-7HHN=G}L0jJWh6q1Gl)>K+^6qox0EKKe(&L>ZP_Fi}w z8tf859!=A2e423)R62=uORyJ(V($n)Al?i6$`x=f-YjY#HHg=JjE&*VCPTdFWRC3r z$KIR3M^S8j!_~|5Bq3zqH?n7#nS_u)2uUDem9Pg9NkBvt5m5rTp+H1IT&}1HA}S9e z;);6Fiwn50BPuE?DhjeFA_^iRDrl7Ne@@lR^Z@$$+R_=h>|<~`xZW+P8rJ#Vq)C!f?J zUbu#EX4mMiaxGx9kKg7xunTi-D%&UGXWRFp>!6tot4h!tKLqg%Smn#?FLg&QTlnCN&^9vs&I89>0*9d|TMEf?zay6H zaj8Nz&~?QKW@`L|V)XQDNE8+(Dy<2L9BMMq(El7h*s^4cGMr!u+)MOZpoX{uzKlhk z62k0WpW;y1f7hWliBN|r8-95pM0Z_@;nCyPb=S>E$g`s%!8L(^Ki+yWx zy#7v?nw4mCyQ`<#z-Mrj4SW(I4pTgAgV5!Cp#^%Irwiep7+p>l!V+8Ra;iW-5$L&` zU5a+xPy6M)^-ga}v?V8I{Zt~vwGtzn7w@@;dRrooXAovlipLAU(}x_qmcS|3Dw2#d za7nRb^MzpU#x?Z4gJ6~1A(uK(Nt510l5Kh6UuesqdU^^1ZAnuVy)?$~hNw<+nnBI_ zVUWfCYVhZ)lg`e`=L0k^Sw(HlccL+(5qD6uBfy$MYvBF|wsMZ3a(O|#g~hkNIF+2| zhs(6rasuKUZfQArz1-rvV!G?<(E@cn4+o-}-xFPezjV(6^Sn+`gTIkD=vkx(huc|! zsl4!Avz!%JXu?3wS52H2m(j_goN`v&&XTTcY?+~6yt}~CSn?-ncc}LgoY^FU&co9_q!3DDTljyw$!t_@La@dLo9V>8p7rlJ5?|b76I(AA$|6K|JbTgXe&>HhOv- zw~3x~5X;HB>n;rN3A|{hC(0F^rc`vSTsmz^qa@wM>Ky)gyoxuCrXCyzoT)ESORI6G zFKBvd18b^DSW|VKzOd=ZKYeA>6Lb2~CfmZ=2(2%wYeob=l13h_Gh$hU)*ONO53f?n zI5%i-lz`K69W5tY;Wg6er zDdR?=1%yJ2Cw^I>Ay)mVjfSkyB~mhOiM-z|*%agpk8@e@c?x{id2qtEZ%?#t@$@f| zr(am<3A5sh5Blo31cCet$@9!G%(r5pyVlVKKb|`+QLex8)10CZ_Sil&fP9f$V2AuQQl9?EJhkZVX)$S; zUtWe#J%z?mQPf}9bcl;oi0+JAqAp0se0};ZWbT9vR;qBzW{$(zzoxojEHBNuUcoro zf}g?o^08V+nc>(Jg9nU7Ii6AryYRWFb11LT@p2qz@RFRT+6sXHJwyr_%FB12LVS*F zXmBAr{}ctRiurOS@RZd*tjxvmfS=d+Djc(h%9X!&^eKxGB^cxlZ(I`^0<#dzg(#0V zUAQ^Vi)mXRi^sDZv`09#S$6wh?xNvGSur}RHkfi2?hxp{4Cgmpd(gk0tVtayLYi(zUs(6^o-G%a z74hK$ukLiyXksxB+x9^-#IN zoE1RR);Raw$-Z~y`oKQknVU3@|0YfP8~vS5{_vcL+LHe1^x~7HZ^gA#KFOW-Jo-)F zI>L`}*#ySCU-4fgoFJcf%f|!s400}XJw<)VKf3OX_ix2oP3^!t%XGKV_$KNQhB+xI zEgGtX`ukt>>y^$dLG`U$@{Bg6oGyW~jid*nM z=r?7+8QeAhbiZ-$Ib2<-G4B7thlKj-IpuZ>3+12Q!D|_6u z_b5MZ+WYh;LE1^=T|4g7VofAMAKgFdQ%J7y1CV_B{z%v^J<*NeKJ_~x*%;=!Q9I&M zGR}DqU5iqS!^Ow=yBd1%Jx5GbX_>-?gw^;F;I6A$s53l!k_*3m?rfZi(bd^_6Vq9sbcY%y&syFLm*`r7 zMo0|b)#+a_n?N5-k?oKrI*kw&7}K>&Y2>dq^m;iK@O8j-0>mdJKu0z$EbpYP6tItPwW95h!g!7%^_-Jf5AV=0cm99Nq{OoWkJa4f?SX(1MI6yWHI zV-SuJI4;FegQFBj`9u)YG0cr4dq?CO)%bqF$B3XR1h4kexGEMk$aLB6(4iNs~YNR|A~c#cvYb`-#6B1?pAGbGB-Cko;QNwJhlm z1Xj%A2*E(X)7w6mT@F&%MfI-FyzKMpAepsF20i2xBimdn{GDFy3$A+g8+)9I&harN z<_`9WoT1~=A%*~Eg=T|KP?lA0NhZmu&J2>Gs39KCAN~Uy{;2k~W&{VMC=GScYcri2 zqA)bD)^;)cC(2}r={3W`JjqDn%&U=+9bw{}`jon;AuPfSY9L=D+8U_AbTnA?T)ZKI z&PF~*8xXMnJ`Y>`v4<^A@epyN;)@(}p6(b|9$|ipcLe=ogQz(}D~`E%|DUyD_#gWi zt{R?B1hM)QhyS2SLr(X+0pHUL>WwpmD^>aoMP=sD9zWo z2uEWCEzPmhKDLH^(m59FO4G zh~rBf4qOZKaP+`I*U6i3Jc45*jxTXIbntQXz%d%fO*kIGu@T3YI2;D}IC|h1jpHU9 zkKovd<4YV4Tu<|G&{l!+kswVM)Ashl#QdhwNc?W)V`KOgc%p3OO(%}KX-qJ`AiyV% zyXlf(zAL~dj=Kpj4chg$4)BTNZn`v>?+);Z<8B%k%=ZNN#Bn!W7R>hs_{4EHT^`IY z4DgBLZWz!ThoSpE%fI8qDty;1kE)G&z`G9^ezl z-E?g*zhi(;9Cy=o!TgE8qBW^@QLFt z(pzO>!y@iP6R_&y`#uL&>uAl%;P+A2^1Ul%=~IX{?!Z(6-|^pxKlIkoXZVX3aED>F zkl0SEp>Y?oP~H;VFs81f^2RW;!L{2j>BQpsxQ2SX@tJg9p%ITwDdYGz;qgoL4&8}- zJ*2@otflF|VrZz#K?6MQxh&D=U(g4oPFy2|-f+5Jdgk=c`svd1t+udfMO9a8nL;ROJQxvZ2U&C2pEkA6$|S)X5%5nB49Lrt5~>yHyaNt z76GI2JH^6MkJ)%cu?QHA-xKPoPr(wD$={D{ya*BCMqBxFjK-r%2x~;A2>EjYLRdml zLO)P3EME9?4A=Ki-gr!@!|Kv0lKvdKB$^g$1!m*Lo5qWeKH#WEXzQDrfbnT=zVMFK|Suf#&b zU~oeaVLUS%v8EE{?r+aB8k?0EMmC7ygfJVi)W>3hETi!^We9N?Fhn3=2w?^d2(N&l zKvuvILJndGwSb{OmNEpl5q=Ou*qM#LlWn*i$TAwSnWIK)`5pDh-HUXh77OjUh@y zAj@bBRbq%_h#`W_#xNxo$TAvRC^1AY#1M>TW4ICvWEqVuDQ}WK1yPC996%)_k>nq| zbl)L!j43X(QDc-}#F)~WGNMTVngkJPHpUP@lMpZ(V-*YWX*RyEqKSaf7^heW)&Pq@ zfQ8Tvum}WLh~of@K!Ak^HswhSHwdUx6CNUh11tgo7NR!5A`oC9QUfdk0Tu$uY{Uam zt}+3m@jXJYg?I|E2n1M&E0e!JO$|lBkV67WA-n=C0s$6+&1{TU%}c;&Oi*oz$P2It z1Xzf`0E<9?g+L6j2n1LN%K(c&fQ1+h)Qdo%UWnB|LlFox6hbzjkU&5oLKoi+QD+~4 zQ^r1oaX>49fL4TafJGp{LR1H|5;#RG0zJSda0(yMA8?pJz+s#K0TzJ(3#URLED5Nv z9HHw|{5*aLI}Ila%_l8!Bd))gf8bdN&K9$xLfROw|NF};v;Z{1$H41d-5Lw3ZpN&b7@Si*c zRExq#^7RJ4ugT!S*Mw=5fUl`k(C2F!fbumRN%qyBH!X!qOz~Sf%~#1Mg}n7I;3^fd z?*bE^Jc@qYwL$0KT*Zn#Y%L%asa_ynds6-WkeMp1(W+eM&x;rwg(w z&sSrVFOcO;(J5e`^8Doq;A3=5Tc48V3%F9q*KH_tLk5pl_<4>^CuRF}640l3n0il1 z^VMGI_FA|79yrdH(VQ z@XaPJPkpb-^V|*P+xp7a!amlv$Ufz{jzE^bQAAEqjy|OXl!tZPzfs!h3`of@DLJ`> z9PFXI6hglG+4NI(pd{(19DPbVP`&^_Kc)XrKhG4QzdeL}`sp0pMB~L&%H>TSDoJO& zN_L=1Z3j`?K;+I3wb_I6t$<%G;1{XF9uZKkHy-a&IwT|@C2NdV-B8$H?+y_1`DN=D z%J%mQ0ewn2XdYj_RKH;CqHjF-Zm&DCCfZBe7xm*kW>Y8+zoUn3YelKp4<0{_GVt}Y zxM>wgV4Nh34dIf3FUA1MS2*zyn1I~T{%!)Dr&Pq9as`IKu9jRO zH9=~JYQH~}732?Pus=0Oz#qcw4<+y&7*O`7a3@=;Je3+tG{$cUPGjZIC=YDm`kLl;q_T zjpfyYVxs}##9B?V{Ggb>N=l_HpdwT4*?|Zt(9USzZzJ~Tr2w=H}-*j1mMxW zt7$AHKXV&+f*R0sdL44P4ng|6s1WeEqn>jG$*ff}=tG~_XwpOv{V6)JSw#h5(8FEy z-XtHF|6;)o-Q$zN`DuzFzB-&1s_A55wJaYfB=smKC6naniJVO}GvJ(Trw1VrPICd0 z^gn5qF0-Vs;nlJqzLTq-H1qTL>D9gm%?1nbgXSb80}q<%X)zXC=sB|^sO5aEYiqd% z!wfuTrqh|vay(|{x!42$bG{>qG!PoKGa@eJS0mQSDm ziI$Z?*shvPto~=4xxpP=@(iK<2OT79rrKbLFW?qcKnztNa8M26H_ygch1=&JV&E_=pyH=b85TeZyIoJ8{n>&HI5=-{L`_6>)Z!l z@Pwj__(dxf3G%%e%>DUWLbpNyk9Nc(*dInBnE8oeaPJNr$mTs@gPDiGLm=56l+}3YGkIwWS&dDrYP-0=OO!S<*1tk&UWYq_`mT2vwoGG?kH$&gqa+N`KOa=q1o;iNt*JYFkI5 zZ7Xl@A0eJB`5-q&gcfz~Zi$Pc$+w$QNq#|pqOChqsrpW1zghf-% z#(e69eZ{1+dO+vyF=BrO`R1)8Zqq=@eznesH$ogoJ6qy8_Om{RxSP>p6kCfB(G-LD zk6`{~RQ7EI3a*0|(HcGTB zEhwyqWVE;eT3l@jc`!RCdq3xs1rNRFG|A z*NG+U*@s;uvNYnwGVgAYp^-0#I+2CD#UI+1zV(9%`x6e)}>NcIHE(H}xjZ|Hs<2ECoa zt3#>SlXqSB9zcaUMconb`iZ>?H8c7_6ftj9590kK+Atc==x0&PD1y;1qAjB&g-RHe zGWu1NGOA(JEZQ-8fi3)oU$-UedCb$bGWN4?>`)Berq%)VixMw%8Jb_ui0Uv>@hVyJ zjdoJ9TBn$}IYvrWbGe@?CBoe#c#A40=7(zuS|2?$D@y#*cVd1&k)+k>)4{6-uU@2R zxV;1F&ypz`?(2YVV3ekvr)!x};-w;zOw&ej>weyDX}8{@oi>53f0b1UUVH62Zrux_ zD)Y|~9knTpE>q}wo#NV2MUox08LZ{~K9%`ITIrxes>czWSDx>}m zLR+;AMqe>{Ps?I7-6G!mS}vnx%uwpZ2U-E6=NN6%+>G#q4ZIIEe6b02zzqS=M_MtX zo7uCEwNgg3KfN9j_{cgWX=h!%_(bc-Xa#%rsaD14LiS~+R?VoH(Pvs$M)$C1yR{yS zirAOES}#V`Z2fbs41D21(` z)NW(+1|y-*W;B_7(e%3*VdElNP}k=&`iYUD&u8=q`(o<%F~Xz+k`8?#qmLO``h$!n zurE%138Nd>mk|9CMp#BfxlsLaM!Ok>>B|`1!M?Q6pJ9YeXpjuopJf!z)?4Z;7`@CW zLVuCbV74BquVVBqqbU7VMzh$LXnhT%d)b#H{S8L){L9eaWAr2Y(n{aPXes-WsejDq zZ1yEf|CCWSThG=%WAq-Q9DNTXddH$3yHCGhWU%!DeLtgxjNJOyjGks+3iU&bhO_lH z`ge?4u=Te3QAVp6mFhn-8q2=4*N-zQXX_pGUm0n5OB7?W{yU?;F{;u{lg_^$JoZ%U zVT{(|DpW7J>QRiETM+80CouW|H#+sAx1MHVKodn}*a<88>Di`^YsdWV#H&;2Pz9ku zdXDLUWN1D~4%c%TeU00e9^wKZBP&YWnMjhOfnp(fBdqrmx9PnZ{T_ra@*~R{n>Z(S z$n;-w=Yh_wCVKu^M59aQ#Rj+wkdvH9w3g`@roSdEh_%GT#D$mEHpJex!5{WFB)mpxaxK{tMHIx-wpmjTN~mb3l(L6OHS? zCAL%ysCf_ROH&tvK2f;XU%Q#T*P~u}l|)zN5?#-9Ez@zylyfE1NlfP^QqF%deSqoy zew1^B>0zcFn08@W%`~loWb&BiFm01WIps{tn671QZ!>*MrrVIrM@+XdeJq1=o@2V4 zX<8BGL^4fgn#i<}t!yb-@2~0P>`x%sk7*mG!ZeHbH#hyb0JhudSj(chL{3Z5w2m60| zEf$rLho{y>6U%Xq*z00(T`XA_5uZE=gJ=8jIMgvJn&^AolAhD=|SL3DU=cAPK&Q1Q!X;fD%{4oM|ywk6s%`5rx5U~(MSR=iW`0e!5d zIIc__Y1;v`IiF};0nr6rI>bebEz}GC5wa3iUMM1Zw1nu0j+JQVC9M$o;$R-7GrG`t z*pg{!5%uZi9cz%Umv#po0PB``tpnvhkzR|OL*aNKc^kh2RQvG(|b7QA*Mf<5;u<1ZDkJAc$VzR^g^Z+IDaFj zcc4_=^w+x0p%K2@5VZeUoi7C4(qk-qz9ErnG#k{OA1y{!j)$!~E3W{3wsJCLKB=KP zF6%iKwMfg~i&`w_2-ywIhPa~Fg~-364Yl6Y9Fyy_`XT2XrbqjeOrTXYaWZ!rqBm^7 z9K__t${UgXj$`-;yfVbi=s`Ru?szlkfvSb@{8-^#NYBX22CXkAE902bs1hx@4Vn{M zH@(LII*WT&k^*GU=gNW5qR)j1^m8 zD^?7H-B@ugrw1@?!#Rh#lFTIZa;%um>5G{5;G8Vh)0Op{#CQ@bQaD}8`R8!@6`V)0 zqPgoT^i=d&s}O0S)vG}p`hOeSR*dVi8Tr?Aq4=DDu`61fi?cOajNtTrOrK`zEvEbz ztGA)-u)0stRy#b^h9$C?4q&>kdo0>~Ow|#mCB|2sa2n#Hc3(K_rk`JfURI+@bjdD^ zBr}qT)-avfnbPN0?edRi-7+3VgtP_qmD=R`0y1BBB)YhQ=s8RuD4_JW1Bl+2PIN_Q zq8?5=nC|LFIoGjdY2g=sE5GEXBmY1zqTgf^{iTrTUFGREnFGj~S#iLhlj`~wIp}HP2Tfr;0lLG}igR+9y8Lw2 zAUZ>Ts->L63Gy2Kzvlk+Qc|;B-k$bZEM$KqrEAAewg0=*j)~N3uhr6c(v8#GdL_g2 zEDw$OkCm2iji?rXBqKHaaZO3XxfOIL@>4DKqc2UpV^7QWwCBiHJ-329k@|zvbfxy? z+tX)~*Tf(fjg9a2)lq7G|C0EBE(aqsMzGV%T4F^;%i^KAkm&GYqW9;Q#rwF0)s@I; z9!T^sXqmV!p(Z{-TyI9jC5X=9M3bY5mc|fm8A~)hj_6{hRq>QI5{Nc2#R@jkFSQ_g zXB5%fS;J!1a5ZZf&SiHq9m^VWxa@;m_ERqVESG(T%dX?H3%G0(mrCJMik(wCEXnsh)@*eSqxK*L6I`oKli02fFtLq<+ zr3w5qxEwx!q|hcUBuf)m9AMri&Bz)OA3!HEN5tb54d#(OuZ~xP8Bw_=eEQypjI4{| zqy31=;RjUk&u0${6^y9d_;@T8C}d<^9gn@K3Z2NjF+NMYmq~bj$caw3#Al1`3War^ z4fKsdUnRB0NUdc_$={Ra#^;DoiNwj?3*vJ{4Wl{Y*WSzH3&iaTo$S2=s40ibiO=fZ zjrWL~6>3#EH@;BZ#b~Z*Rrz6jk!X`EB~!XCk1rNw3jMuc2T&)4-YwV-biP7n#h39V zVw@j|gfelBAEhQ#h#7uVme5(;=|^=5UBv@_bXh`A@t7aooX}hR!;h9E^cSoBXkEe} z@s=Nbo-jmw>_>WHgZRRavJ*#$@BFB1;wbT}AB{=8SUB@!ZOw}5iI<8vh1zskme?rT zDRgDxmc%Q?aKGfi#K~f*LcbNBNSrFRVU-B|C%(;0OS%#FH9l06bel*kAT$TOi<0Ju zsMeAbYew_M$8C4SKPD;_T3qp2(qm$fLhrUcko341sn9tU zhm)QZ^xNrFqgP=4X)()>eoT5stWs!v$;U~{#V&;&gN5hB5rrNo_$=u;;q*u?ElYO9 z|3f4z^zDGplKvrz{ir!xb3VD2O8ei4EvUg#E)J`{wc__<0OWEn;c@$Ystq&y^`GI z+L-){xX6#*O8!-BQD||+#^m2bW-*nUFZT7`nEboAQlWDy-cLR$4kP-@AKpkZGu9c^tX~* zXqy#sK(eKl)=o-ZSFkZTLYttFyWcm-k=mN}l2=)NG&x55PNCfNqsg&a2G*Ua4r5A= zCdX<06w2xOOLDw6O`-lBjg&;~X@%bH7oL)=?Nq3~XIx5()~rz3z?76!Et7Zt%oj%o zq@<*2-4(j0EHfoto2O85YGz6+?U+IrWM-yhX_L#PFZX1oq~vINM~P~@1u3~&q(b+1 zE=bAK+9p%)qTg95ZMClSvIJ1~wsk4( zw2=yx0F`N*6&hSzpHi;HbtcL6dg{Pck(F9+h0=O!qDs3`p}!Y21N~j0xJp7VD)eya zg(+3qW=3H z%05rIMqA)V-=$2`%s!I$Sk-SSGqk=64IC7cI!l|U&~2>PuQko#ajJq@}&0P4}b3 zv^Cmsg}(9@rftx=V;3Fu*u6RBX`8j%6&ma9o%WWtT_G!RWZJu0yR)TaF3<Gek=M2HsEF?FvO^J(PAr+vZ0vq%~`~=PJpB7t&5@(-lfhd?8KOcPi8e$f1`H zm6E%Ay_puGFIVW@@?B{y^|X4)Taa}qEmohd&_`v5(vtLj3QaFRk(RCxZIF`F%bn@D z`WA&Yl_jKm^zvbnx2Y^Ay{*1fp~S3&^bUIFaLG%|%1Q5}->%Rj6>ZbI>6s%W?jb z+>h=}AE#eAN=klQwIqGKo_nDWJ(E63-=@%A16HM9truS;c}sw<({ESk!U3DooAg5p zT?2HZ-gmT=+>bV!rLR$F;D8U(|E9-XEO{5ZcBS88L;KV3($f{Muw+;I-8Qs8eV(4L zc#A3yr_Z;cAJgyEixjVKMRWQB8**ekpqDG&go4BAi)`q}^au4C#oIXGaQb2!`Z4_> zy_e!W*ZFYz5*zw4{b7Be;@z8mIDM%N{h0oUK2-5`_S=>Is15B;e_X#<@m^2cmHwm+ z?N5J7rx*O_Z2U6qaQZVg^ke$p^=lMwGU~A0hJH+cR==Kka)$JrewReJ>xsyCPQQE% z>6|6Hmc#;GqtKg4$r=C9Z&2vd+T@HC`rj0q)3a5^^ZF|a9n1G-yr{=rBDEaLug+Md zm-*3I887R-6f(18GhWdL`H(9%<5hi(AN9|8O`ojL>V88q*624Xv~9qUjJ5jh3dN)k z$yle)SLkTLkc{>EVufbAhGcBepH%1?ppE(ph1!)2$=Ia7rqD~7=ViREZ&s*u;Fyff z`uhr{d1Eu)(03|yG9@tGIr?0 z$4SXKJ)g+C!o~RSP5MN{QBBX4TRdq0mb}k;Ytw_O$Pu5^cPr z(69a6tzr%HDp{^4=2;0wu0rjAl8o*OHMeQkD#d72=nznvai2m%iaWK+FxDuv4)Ky@ zBwa0au0y!7HGVX@mCJ~_#wR(WmDlK{Q0c&jS``~>{OHM6B}Ua`DVgT| zG`YPo&yOz8C^HTzbTZ}BT0~>N6oFe8$bC`ROVSm%yrVjxjnKoYmEv&D$DF^4ELj6nf;B)e$rmz>V}TzfXI*S;@}rJf zV~st2G$!kEBW9|!cc9lTSrZJGAFar`(iqBUjyTZkgREexr0X>?Mkq+{2xnMPlQX7+5x z_v}U~^m#g=OBvk|@_l+d&=rdJFtp4vrZAcjvK(4w88aEJH)!U6vq7HVuE0q%|C^0X z*E2Hc9wES^`+!^gl5`(%i?Nj@=Zdo{3bOAoTr;TLT#;5>l6|+az>g}j=NaZq;?3lH znR^W{BY9_YuhO~6G2K&}9Y9Cj1GDe*^NzZQW-s)kTWikGUZl`^=jxI%*$)|2tds6Z zF3(YPo+;oC`zyiUJov%VnbJ>xj@ zHi^|GkLJ8@be}EltuA>!XPeFXrkw4@ZHlLP7UXt!-`K1-=X_%MmL3OfQ}hM z6&h96G51GfvO<}4U2~5cHFpK98)l&8N9G!4FXoZ;@wuis&yS|%T4tc-@5l`^KUF-< zGcq^a{7#`7pq8dNM|w7@?7wm&%v^;s>mJRGHcv8=EuUtF+$|;3dT+>0^ZT;8v=9vc+ssYM3Yv%f_$K(~5wy!JMGgYwF3=%T!GvjukQHPz_MEIpaQ` zFAwI`n0G0ZS@&dKH#7GE_C-8a_D)`Z^YEg8XM_FL(|Yg88*CnD9`(wRymQP64@#Y@ zOSJrRZM_noKg`^(c$#NV-g)Lpg=&CCn1S=bm4CjOv{-7%tSiYMWsZF)VEuBN^}+d< zn^!WAtdGhcZ?5s9iTM+3)^E(e(zKRHotkHG{?%rxLN!3wn8gZ>Dw~r(*&L`)X5Iby zQ_T2>1J-BRtiO~$%gkgRS>K$0vl+KkT3B83N&c;7qe62$-{#LYCo80RUdq4IoTpF? z&|T)hM`gKDWujn?Ib5O4y0C(I=F!Ij)*m#R8Bt7l3m!CcANSeoT(H>O?niY6OUzYI zNZuUJB?XU~I~CGA-h#)?kxxoq4bT(jHibr&U0?8|nY2vuGV5+Dc-lPoX+rXRc*#7U zk(~X$WNV4#1uvPGF^^heUBOCo<}*?Y&Xt0fZT)blV70mZ?~C33HiLRaIK!q~vu5;}+hddv!{*BH00@pX@Nam6C$6W_a?+a4P z>XMbNZ*A7!c71Qs&ppzW1Y@%62Qy6}jLEKJ=A#OYD%<1w(OjWWX5BZgaweUo{_J;`xEp}WeDxUcZnsJ=?` zT|7zbET=Rr^++*^Z&x2+bEO+Z6%5#AvQq&~|zJ zY)A2j#9OcTF6so{@sA|R>etJ2mt)Pxgl344nxUR~j!U*n^aap-N5dzCWWO(PjAA6u zl?9IL{JfE#1&-So(f)!lr({q1`LN@d zLL~X9!@HAs($6Oy+Y}-{p9=Ex8AtLil9YZv<7mrB>U_pAR3Xy&tm8N%sq=YtR?QHk z^Ti;YD;-OBlTK=hD?BS5g?k9eJCs))!zB{Ei)MOWbr^e@C$jp@_N;Mu722M-Dsr78 z~(fL#b}OL)_P! z(HQcP=N-pzKl;kE)i#Fw>e=RaQt>p;CeKHX^$OJheeBq#(5SKq?{>#Ag)-}sygMB2 zz9tJYmi7nr`+klP-yRSjqCFr^?SSIRJtqNlBD2E#O;EXmeo5MM@~t1yo|D6VM0-xY zcT}-2^FwL|?TA0>=q8c)vapAF)G<||&V^mPKREvO4S79ZwCdEu{L!&ip`89b%%2?J zE2IPc?8rJOCHs_aOg`=?Qm6{(gricS+kt*@^ipUl(65ej6q-Azm$%t*i68az{^ppj zP<5w4-rpT_6>rsW;4w@aWTbmi(Ab!ZygkjYlB42J0AN3=2nL?@fN~U3zeJgnz z3Ye$RON_QC^iU7t#T}NC?Gb~9HSRk?v&0<*@j%NM-5|_9_<*Ffg3*3#`Fbtcv|eL0 zLsXX6;}cnLE0mjF?{!)`6&h1g?+vjIDwNan0&l3L9U%)dME{PLdRthD3ccH}-rLg3 zXEax2yOzgCSOXPG${=(lBNcXlfC)k*^(yw zOl+J)Ar}@c@WxoZ6q*VYYfWK<(X?opH_p17(X5bL&l+zeS@$!#A!ONE4v}O%taxvO zmuxLlyf45@wpJ+K3Gh;^R}?RzmqVmj8x=37*LWkU@;E zo+WA_nQje}2;=@3G<(`lcHDtgK5EqTN%4)@FrLUEg~Pt#-f5 zas$gwc#Ewq*kedF+T;o?>|nJvBwAcikWyh)DzvZnTgjEyB?_HW5nI^F!UhK}_dr2G zN*AlULf;N3NapuP;2aC>2K`|ky`d)A4{Ee zb||4a*ukYvE+88>96)tq)GI8W_#M^)JIY)w+_=7r1BE#P!x@B}wa_*IUgB(fa50mIHfd zX~sh9pVO@sCL721D}oAj!?vFvSZG8)I#@E?4N` zi2ae9gCyUurrRXnus_1VTh?BielvM`IG7^L3Z5+wPy6{mQQqL1FTvJ~=0bq#wvNb()4jpAK_mVd{pQYZ|O z{7#VMyH;<-n;5pe@Lg+=LO(}*24rvft=2fdTHp%y_`)rc$ z1xdbdJ#CYG-&$jnd_PF?18bY&og1>u`oP+&(Bbe8B0mU{+-7}eliX(M^dSedCrNG# zlKjw0P(0H4q1D6R@xKkSRbomRF&X^{tj>^eWQ%50LKS+zFF&w?a(S?4KU8T{O3 zU8m67@N-v?9CE=8>&b2FWk1M1|glZ_0i-Di}tP+KufS>zD&=lzWGDvd2HB9m1V12)Ji9*XDxj#tq zE9+{->ki4UtQiXJfaF&}k_W6giuZZQ@X!O+B89GPIUC5{?_XO_Dc)_N!$ZHeRw|Sg zF&oG(`Hl6u;(ZUD-&orex&=DF36eZ$eXe*9L+3&3JB2Es^I(wVA?r8Ay9hNpWQBQU zKm3Xs9SV~C)=E-5lKj@nvq^p%Bzf2>RlL{H@`tS&g+@T<;ULNHtp1AkGbF#WhADIh zB)BBHQ}G@N8y@<-HAf*&VbA`r3=dmEkAFUr1kFKyk zT6&>udAh>>7$o_V6{UD2`ID7yll&=2@@LDVcyxvR*(z6vuCPA`NglWQ*d&izLv51B zgCtK_;}mZa>VCqStWYTGej-Tn7i*SH@)v8aP4br@$zQF96mJk}^sDuZLfhfzuhuIH zb;Jy?*)Mr^%owZLFIgD7KQh4U6gS5D&CgpCw?FbXYn#$C9JB7>Q0y9T>wel*JXhC90}^cu#O@F2;S&ifQ^5F}eVmnyU!k}ZQI zBb+A`?_2bHgwy1&bj}bn5s?u=l9A3iiq{H$MmiTN^ayGc>Dbh zo6eXZodF){jB$Qu(-{+_GuC;?rZd*rpD?f^^0^H`{c^JKMJp_!%FhGr%LA@y<>xDgBHO(wX4wE48qn z3C^W9oe4oY13c215ELN^&ZqnqG?C!^n2}snIaTrt=FJednB(IUoCg#-D|~!>ic>3- zXFzuJ`1lNGtU^^WAD%2x>e0+)X9)-da z#>baApH}E*pbF;!g<6R5@tvJNDYUM|`1r2Q=nm4C`=Z9j_jC?aXg)ma?HsAllklv+ zbE-nq;n^VPn+jbFUxqkODD*W@gVR+mbzT9_MmV2Us1Ux4a=xq36Y%9?=OKmm!Iw*& z13SucFT1=gFKdlbrr^&6ditEA+U zK(m}f6&eL!ZgXCw(0=%GhjW5L>FA@ool_P19=^;NoG+Qz2h65N#87<&ic=s?_h2CMvzUL&sJ2FCR}}@qI7(FBq|DDN$N~KY^@>v zE_i4lpY+T8@9HT3tvV`oHqw&n;_gC9@5~|YgPs}ERWr^@Xr|Mi(78PZR zXWIm1M)it{a*Cg8qM|~?*#4)>lg`uS|5%c~C*Hk+zOOy1mk^{`h!ByRim&3GLH{&x zO>tiLQ|KlWq&a+GKwJ1gviN;RdnwAHd=vSn%LlCZd?2q@6q01W z{*sc+jj5FXIqUDoee_f9sX1pli>a3>8a45HiEI;!9~z5He5d8q{402L%F6rWe24h2 zet*WzhXzZHZ+44PGril4_bAa~G-guE6lYP+${th~FZ;8y2XPm$q)dOEPcpvIjMDSD z1&I3MA&?`vf!>$$q+j;+sgeP0BxCQv`DlO23AX6dpO3hr=sFYEC)1&)kBdI#sQ7d1 z*C=_id#1EcTfpZ(&e6pz^aV+hw&l1w_)1-aYlN=aFpxIHRQ6EjoYR)%Pfyb|(I;8X z=g54N(#1LO+z=t4rg*HJMt}sIW%%AYU+K1C9MD97!a7PBT*~B94lZSJDJiLoI}izm zm=9`lzC#Q~gjnMI0vfOG#0aB_i#QUbW_g~{xFI9lcjo@j=FoU+@c3!+nC!r)NF%cx zKc&xdZa`z~pUM1t^!#(Jar$-V&s%#Ht~jlk>OUvh+ZL;K4fgzhZY-6h z{`y#PL|xG+Chd{-SMu%WkzL-N|K}0wD<#{L<`QxSF6W>2w47hbd|%qv3%;@4Hz)Vy z2hY=JWRQ}7l?G;L(ypAX{c-wq{WQnU$Bc#M*a7bSJxTLQo(X#~-_UXAPUn%lbC<8f44JeAzxS zEobkPmNn88ehuA z-9d2d1@!wQ1M#V=5lMO_M<+SQ*2$+ZNS! znbW=6T~4J=^88bJUQw0h&yOf5$FhVs+5en{C+}<$fC?Km0g)HC5dY)>#|0tQd|pcUJYYyFC!++pnTcR z_OdtjpqiH8j@S?bPzqNZ&LJ84EvTd`cGT^-yT=?^M&T*rZ|cxI}WiB=aFx%=|5)#Jt_Fl=<%PCmga~5xhnmiaIO3+ z*KXh3`~RDH1zFKWJ3QT>U+ADH`ke1cX$02937%blgq1O!xrWO5&)ECVjJ@`|EqnT} zM1`*A^MRK4%_{%B^UM_P>t(z?P>L(BCfrzg(DB}Gx|L=4B3l(eViewfu9pJ#rKY}cvd zHyubD={fzmt&U%k@^O8o?Dy36IqEn(D>nsw;rC4U-Le!#6zW*+YZ>24seQff)YUMu zOKtTu*GTT?k>0+{u_s%=UQ^Pb^PV3=Bw#<1CLZ9Nw?XOm*ZBO!-MT}BU|)eH*5X;D zQw+lVAz+K{%IT@Duh!Cs`P}l-x^H!t&Wm74d#QlVaNf@#_e=cI)Ao_f+12r5N> zp1KR-)ErrNJH3_1BAFx8zx&s?ba5<=H2=Mt^mOAm4D4IbL|gPA)`39{(Vtgz?c-Qy zj=kXZ4U+e*Y{+$wz*@)Y>l^<{S-Cbs>km55^b8?${`z{3eFxgB=vh+?Ic;a!U&)uf zPuhHYOQO+|4z*gI#gRtqz=j|h`NY$~d*OV0MdUiOq;mDx?%QlWk52cEto-?II*l#< z_1$+^frn0=J;!gBVg6%^o3L`_5ZCivRi7G)mj1l!LsGk+c7N&p;I4W>di{qlN zC>GC({y4tG@wIpk>F1Ds4(Wd&{ST!7f%FQbS0KFt>F1Gt9_izLLvy@2UhrV~Nq#kHKif$1DjO(bhXvzR{1bR}q% zcu(t#H(cJ}wf^?jY%8~nYoH?;M5J7Ou(gc)spp# zliO=giP8AV?o(om+o`SK^a@UA={bW&YHfA;Qq{Bky{gvw(O%=V@8Qo$?G-`4kN6PM ziTVamufB!p_o6zpkN&+V&Kv+*U3M;LWyJ{4{`f`M`?TjW7a+YGIeUfCWf5px-J{4^ zJLn$J^`P5W^Gvk@CJC~iu>3N*a z(i72xS^5<@_|}+4-|tw;^cDV=$5U)~1=ClUE@irb=@zD~^_vD=;cTtvw;69x?@va0 z^1vqNOf8|06OoWJ=sxH7B9ZAM=_62!#!gMfUJ>5mA?K~ycGv5m{W34rZq-(%U#hj% zPxN}*xs8AMjM6)u3pM&p&4n8M%H~3ier0o^#=Xg3xZ0=DH{lj)^xK^KH2NakK8?Nv zw~&2Xs8I~;)97n(hq%-s)>Fl04{@nOEcp&nheUPfdl19N3yIE# zOgKl;G1hjBwKcQ0W325MYcO^Ciqh^&4D<`_W_o0wn z*0zn$h;4i>Y~x=u{T^q%h7UPi)q!YS-2mOob!o>f;N?=yEZL0bi$|OjwV2W&p<}h9 zeTIbA>hx8wv0A4N!;w>3GsYUL_3khm>4!T~dUplUh<z~T{FJt|C1^GOct?U(-6zqaODOF#FPGyT%vc;)vu`g>F%-ROC-N9^YFk2ta z)}#NQ_TC0Q&g!}ozRxq?(rBcS4cJ6Batw+2u(7`UL5z_s$wtPuWJ?Cj$4cXwku-QT zGoBCIB9M+Cq#+>uJINNbnb~ zApQIJSZ36EwUhYYcH%v<)H5OVjB<@P^x6Ffz8V~pvPiMi^HS&MrOs_q=jWxiA?t4r zTw{lVfY`zGewOv9U^1>VFQxT_&8d7hR$PfMORNuF;b&);Y`EqT5zdA==qzAakdZMBHM zAbVQ!Pe}f6BcJm?;W~O7rTj+2+fvHgDCO~nqLlKYl=7mK@?mN3i<19~lFvQT-WMf@ zl>Nk-KWVtnqGY?zy6v);fiJWz3jAfm{Wdkl#r9WrH#FXFQ+M2NQ)}FBQ&U`Q-?*{4 zF=dA~t!zAQUwidCYR>-q%i0<*2D}9D#*LdB@3Vfne@o-t_KTO?Vm)Nd@7~#XpZ$@} z0Z`O1OI&EX202p)-6l1^PiDpaHs{7??Oh``G*VX{YkW*v^q92hdBqWYOj`7qwCF`p zKIC~!TJ&Mv&msX%%ZffNtNS$G4ZIyVE%MXj?r-*mqoL5$HAP1FuU zO~a5$FX3@7TYMp&#^^L&4ea&4>&q{B?QlXn?B@u zN$^+gdq;lX^Q!&H&QSPO>D5^Cpl8+ldz;X%%*^9~gwPpGf--5Lpbj$ZST z$i=X}H08G=ugbWDJpb*$vBp=`69+S%kmqBA4*-6->jBT3>gm0I5P4I*xc6It9qa#C z@IQ~drDm?SLLtwej{Gn(XT6NCj72@CyM7Az!d3qmvFttT|8JD|@$7hZ!8>)gEI51K=s>(SCa`}f`torpX?a2QgzU493H^4VKXDo9e|#C~ z9~gQCsfLFB6W|vFe*$<4e~a!v1FjW~b}2O4kkx$U51NOpn+{!L4_UVy+SM>*eH@Z@ z$od^f+Jn}w?Db)N^R zK-r+?054M?X=%lG&87iAE%39#`Bi~WA|D(3o!J#Z^|YitEx9d74$rHPBZu#(djVfm zp9cJ%x6XsHXw{9;FA>&(t%3zfgY!_>TG$ zKxMrM=(WBN7_|NaVA%RAz!qx}aHaKQz*W|N0c^AW4zS(&8Q_K1+khLae*wJA@32Ecove_=vzK1U@D3+XCN`Jl_TktADod0Y79C@FoxOC~#Y? z7I?9TGv_i7XV*qRjEH9jc!%KK9+tRWcys_!D!Rz5FV)FkjCFY9@+m-XxbZmU7iG5X#Y!8t3G zIe~Wr2GvvE&$UF<8{SK!5f${^1{n7JcGOmVKBl_g_s5t&pYi<}=nwe57Y(a<-`})` z)l)u>!Z&>!muGw&g=c-t?fXLcp-^4{C9Hl7JgD9j`cH-amT+2r8B;&ghWsB}5m6)l zziq|L^s^6d^0R*?{A_Q+&$&A7=UmN6Y*Auw6TB?=hlTT_!g-Hy-s|VAzTeMT{TV-J z^#gv+>UlqB_2*G~P<_GAmHU{VEB8ss?P|${6(~Jdw^p!B=Cs9l)zbmcMJTiz()bmw*mIU4+U-va&~n9 z2322>{Wcil#6Bzh-xtach4PAU{#f#VQ|Lbx`dh+jg=AzyGO{7gz;z+kb6bdWb-Um@ zLLA@T5XW~2^q|@=l!HjystyY!DKI7U8KEB+N>Sh`q2DGsltY{$b3*y3#NH$Ly%KvL za9jNt<=X1!Qo65!C7vVjq6XIX;s*BTl?~(>6u4jDVSy=uC4mn%utkpud|cpD0$%`Z zRj(k=R`nx+KL)hbTN3-vlJ=rTroC9;XT!uF470>X1%F)dZwmg5;Jzltt`@jaU{4dr z?qCy3ISgp46zD-!0*)RKc$dW9C-Bn(9~bz9z!wC5SKwO$e-3D?w~p%l+~*_>(;DhDHj26RXwYjwol-Gz_5A`^ z=zlHrH-T@$JK>p@O=^W|+_Xu(N38^0uety)RXYR@3;Z_%X9V6R@E*V}^}B!{P+tM; z7kG_&3izndZ&c3%j|=^nz=HZIC?8bkT^`4`6lYrcZI=G9z}E!c=_BRN(8J(=E<}8N z_*3K*7#Db_z=s7sC-60ao+fgx7uYW_F0kArc?v!+_``xP2>zVli-Nx|Mzc`vsp6JT7=y@H+*c7yMzt z7X*J!@aI>49BCJY@|sZ8Ia2>~q<;ioFLjm!>ykGDM!Q+CL1;119dBGnRd_nN%1YZk1*!{)Tlh0&7zM%C3EnGspWqXM#{@46J}3CR;13DD zAo#O_FADx6!PP~Q|3#9&;JpGT1eOKP3tSMmC{VpmS|PAk;Do@kzTlvmoW$HGFg3suM@mi z@Ckusf%5_v1TG3x8zq&%UV#$=7X_+K5-YG*pz4>}3S1Z?z9>)~7W!fG_X;cvoENwt za8aPTR`L|sD{w;K!ms>*xe0796Ymu`A+RiPUf`lYHAkLyfxQAJ1kMXw5V$B%-65O; zCj^!S&I?=+xG1pwPAOO5gut@Ed4Y=p)rTcFfqeC$aNBI*tVOA3;N#hx`a}4q;C~Be z4mVmC*xT(7*-sUwHr8Yx{z}h;OBDyYDLB zHNJzsn|w!o)4q(a=)2Wd_If8-&-owmf7SmD{~!7P-2amQFY)!@|LT7W-%||-?hJe)@WsH_ z0t3f!{&m%u-|o0OlgA$(FO1Bd=Q@UQIg;05sC3T(Za_!R>G`I-Rm59}lSU&n*$ zQQJmszX*sk7qkO!T>))a_CDY%0d1UE1%Tt84)`rr2>3BT8)sOJz-IvQjW??aFl#k~ zk^{u|@T@5CJRrW4XRiQ!%svN{#{q5iW&1qfUjf87gzVM8p8&Mg*X;KI|2m+pEbkgX zkM{z=fOj2W$h#h}$$JrCv-kagE4&v2p5wg~aJ6?M;CsB6176_m09@zo!ifA!;8H*p z+z4m~F9-AnI{^K`E{s(}@KV4qV!x&$h{fn3_G_vYv0qo`BKGTQ6=J`x&PVLmRU2Zz zuGS*TE} z`wg`NvENWT5&I3*i`Z|dU5Gtjy&tRpN_DlmRwdMNb(^|deMbFT)aqL}BmE2YH|p;o zE?TU8)~MyTFS0xBe`o)|e!~uX&i8b9COofre&jjVdx3Ya_mKC)-g~^SdH<{TeBXP0 z_xSGjeaW{9U;Fh1S_AJ7bO){q>TzZv}9;G@BB2A>c9 zS@3k|PeOklYHT>aVSU3j4c9i@-0;nYg$8fqcN@Rg_}7j9(D-2ZoTiSZUo@#mTSPT` zn*Gh|ny+fkG=H}_cQ4MYtSG_aV4nfh)t!!QBCOC)|hO?t=RW z+^@oY6z*=gkHLK$?jE>L!2KHBC*kgeyASTy;XVa-KisF`egp0|;XVWRS-9VV`)#-f z;2wng9k|cI&BHwe_q%Wp!+jp^5xC!j`?qjkfO{0~i*R3pdkpSzxG%$f1@5bGPvB+K z*WkVm_axj?aNmIYeYGDa`1{p2;r;;f?%!e0ep>w-XsZ}BRSdH;CZiEnZ=cICIHEof zrdB(m&c%7>D)@gfK>7)xTkuJz{}%%uq4#z({#FxztHd+h+fCVYt4aSMlkbO2z8@00 zg+61sHu_AL|3$<1MZ@<+ll~b)f5y`k#y@8K8RKV-f86*5~f5`YhH@?rK^YeLhem;-R zFJR~aLk}2w$k0QE9y0VsLvJ+nMni8h^d>`ZGW2FcZ#ML1LysDI)X<}bzQWK~82SoB zzt3y>!)yA(%lfydPkDRgyT+eFJmuM^5bwdf|CGclwcn@b)38scANJ|=!#>^qgNA<4 z&<`4V!O#naUI6_x?u}04*66hQFx)+G_rpB^_j$O-;JyL30QaYGFTwpsxc>t8Pu7U9 z2p6~a`7-ut6^DDl&inoeH?seP_Z>gCGq&wH3bzw(FT#86H{oya?nTUA`+oTU2zQBZ zuYDcd1HS9kAHx3*+?&3Az6X3Gp#K)!0l0+l*q#yOm9}s4r{Q0(^8UT{?fwJ4m#hQ6 zZ@~R2T-?6b`%hL2>d*@J>)uO4KeMx;$L;quzGZvEAMkvPeS_a3-5xHWKV;Vyt{hg%2tUbyve z7s6cx_ddAy!)<`O8153dOW`hq+X%M_?sB-za2;@+a9wcSa6NEa;I_hTgWC@6a|PU$ zsMD3G(@xN?g6oCrgWCny54Q*Ldl0`D{$BX|;S-L)AAwJ)I|~0=_}9We0{;m7o8aFB ze;oce{0ZEL#(~FyC-83y_!RJ4;NJp&2L23u{I_H0_VMxV@s7=E$5?hSR!HtHW#YwD zHna1nq4#g=?&;gMd23(aw!!|bU0Zv$4)k~I+PrnJuX}q}N5|$Z9lHky2K)QEdir+n z9^Bs1-_yOddvNo%j_&Q9J)1i>tMT#CVyu{o_vQ1k*`Z9TI5wM0j;3x+UfFThSVWrI z5vx}_(yxo9io3Jr%VwQoHL?d+JiR)TM5%ORY=n=%`!Wy40?^)b6^} zp1Ra6b*WqHQtJ~t>sGfewW}_*yDqh-E_F*?>ejl{y2OsIy49^q?W#-du1oEyOWjhJ zy0tE~F0rG#ZguNYyXsQA>r#8_Qn%ElZq-zgK4(~=b=FtitU7w?Hm5GNt1h*>F14pF zbxU39*1FWX#Eva>t6P`aRhQabm)cX8x}`p~UKKjF)}waTrFPY&cGso$)TM5zORY=n z*jBeQd_xJGR%YSY2vYU21n-YEND2mbz3S4h)aRW9j7e)Y@1! z1H=2XC#pjGvWTrE3ICBA{z}N@uaJcQh8q4#$mOq)cE=J)ms=87LesHh$y(A_YGw&# z1a`>uawa#E-LZUsI+Ytq$1;_24kYVQ4`pG0RG6f)OK9vHH*2>wE@e1hoX*l@aVdwA zh3eo~DxJzqxv?X$;}n{Z)3HSMN*`Pp|bgmF~MXot7=>)7P%cu zO4{l)(tpdSyVA)_B6c*LtRF2|jbsZc#{!h%g?9;cw3yB9&sMRGW!(nvEzRWIfYiN) z(w|Ld^KQIbqgwK{$#}7f3wGVHzM@IAJDrU=_`q;&=n&Gmd5@${CDS#OzCx~=VR&+~ zkgV|UP9@Wc;mK=L$&+p#ZvA8~?wVa5p@*$rOx3v6i{_-ON0($vB8M`?WCr8nlyA)T zj{1gi2k4rk^9&rM8`IexS(?pm!mcwU1ic9RJv%w(vYvqx|tqQ+L z9hbina``JH85NN_E`KHD@>fWXSgI7p0o9=zu_UA#u_TmQvE(wjnJg7c!m&&&302P< zH>Ff|3C$5p!tb`mO;RJ4be^tQl3+zFNzf5OmF#LL%f*t;Q^aSj;Hl)GYg{LGnOM?Q zpjekQMpy~eU1ZC|l0+{POO>qL$*V_EOCgDNWR3)+?`kNnxRH3b0=49d6f(IuQV2m; z?nqQ^$dNe`RU?IjQjtOutVki9Rjm{fnp?jrDO4Mw$3cse+L)?|RWG_CXzCHx*T0+ z-~hdQaQEgdTetLecWl|Uy}y5VN5|IwuC3d44fOBY(%;kHw|TH{d(Y;cj-KwpuHBn= zZ|(2j*0XhU=eC}KU0b(r*-|N@ek~DS=@|*s^h}rH`O-v}o-fIKe>R^)sBhP(OrVi; zX)2WgLHCJUSVwpL(nvRbat4l0m!s)r@ymvbKkZtUH#kpdj`6? z1_ru&x;nS_Z`r-IyL&6n>pD9J`+5etw+!}e>)JN3ZJ-<8<{r0*Gn4>wr9UK4(;sf~ zjxA?sCFrJ=XW-~`InKZUa-|9qsHuXRykqMbssOr?7X8_oTskTCEX*J#Fm*da(oUD- z3=AMw>gF)hJY*R^Y~vuE4ZEnD3p&QO9I-?9A+ zH3!|){F+ocE%gS;)cXvHI)%gGIs+5P`?HBsI=K^n;whgxfo;(c2Wcjm;dyd4GmtFC zQt84@)t8w{Cp!n!ST;A1J(&SEno1-K@q9L&hM*mQ&`GDe22?Je%_Z~2*&(p1>!^@q z(+ouHQus1|oPfk0F|qXB*dwYy?E>QiA7YR_1f#VrYWQ!c=D$Imh^0%(@o^Q8p_YB= z+;mL!$EX5T{HU5K#IyNy>L@xSu7)!GrK2hO!=<7|M`sJg}Ol$Jeu3%Uf65VB;M%w`9YM854>;A$pWl!_E~%_8JZq=ed^%E;z)IvGo-G`FdO4P-OL zfh2k&J39;p#0_O&B-2CR33eUEJkfV5Rp?73luRurkSdHOkC&2}coO-?GO?-Ta7K#- z$HKa9I+^K9=TYXYjsWL4C&HmjVl;`s?o>WGH0fB!{nN3`6j|a1afiVvsBkD5i%*kf zf9#ZQsY7vj%}BVcag@*5h`Jv`N+{7}KCSWMvCe_P3~fVn*7R&46)#i>iR5A20?iJd z!j?9XOgManTs~DyI-yd^!4k>7QX-Xgg0bpAF?p)EKUtU_$-D8UIENjJWO@u-P8fZg zLkI1`RhLYfst{H%W?-?D8z{jvMZ+}H2~4nTUgPGPNhS4llN!&(O3Wx#-~{hWr?V#! z+KqDu^hbf0U8z_a(;pnwcwu)ctC%QFJIGXc-SVmk3G9EUSl zd1r`E6=ePHDy7m1h)|hxoGE#97?ku(ECX_OB%jP-@~FO?cmuQJ@>2-&bd zi37rfn$cbQngT76oQ##yMc%C%O0t6HG*7Akox?%S=2<7Sn^kl|lwOl2=1>x| zBc2qAhK`OO8_P3zIG2EWJb(i^1WMHbCaz2EIZH=KP*;#Vajbi@T!hNg$t9#2 zwkySHs+VX17vZPk=@MHm(~Nt`!ZhahaJ~=bQL4zOs!3Njo?TEkB3m!Fn42%IzGrg# zV^dfJEQXV7rX~boT!6m9O3=O$m^3VCwjm~+nuMJ_!^Pl`9Gk>&m^1@WVPfsX(p9{N zsLAjt499lSstv1k34sQEET2SQiON&#a31ifzLSK5Fj+DuvcPsFvE?+lvEi`(gjWnY z3L)oqLZzlMv@6^&JAjSRoVq(w8S0x--VnLsW@1Z-nA|l?s9jAM0>HihkY0vf#Z-Yy z$`Y;$viQOnRjtC|KJF7tAXV7q9QJd6t=AIN5gDmP;sD18O9|#i=|$nDT*8Wz5ZQfIvQ|0)3`+`}N;-#eS;P?EW@M#W zP!AW+mX5ixS`@$uN;Hb7!(Ug@GdFn&j*xWERA)OgS}P$`m-{iGgIg z7~`xHX(!68LSlx6I<$nF2o{{yaZtRHpJe6cu0z_A5ghwZQLk8!5~g7(;u-pYy9!o> zr51^BehWf*T)C4&8)}ZdB|)b8eoj)>QkdyvbtcTbhA@zio!pnoP!nJfj6x6$Q{yNp z+P2JKQDdAqKXJyCEfpD*=?e2M3;Y1VxM%>`P^SCSq*Mt`P69|15;6s1tC5pf>@+lj$%7d# zw8;v(N6%q3oKJBOSx&ZsA{H4zZ^rYfoQ`!=DC~TF!bzGWHBf?#zZ- z;7I^2YD^jvs|`c7A0{j+R=}n1OywvSlWbk?CcmH$3g?gAP+q>t0T9S zQwf)l&A8}rX0({hxxs90aH!zMq$((c93JEu^`YVpLP4VKrBUoDMZZAE=H=7`HA?gq zaYk{pgs45GR8>g!9#d3q6%OQnZK{x}p;2~IypN@d)vPW#56g5WmdBm7Q;yC#nZG)f zK<`%Q+}q${H(Nz=a-m+pe5)UcgPqCLl-a0OvUAeHfS1Kxld+==3#L6diE`_Qr7~5h z1lgr2ZZx?KO2LXT1R`7%sCf*D^j!u6Gdq>f=8XL!% z;fzN6fXU?3LG~raeL6dpkL9LQaX!kCa+VPXhKHS3JCs#&F%GK%C!NESI8`f7PdY+; zY#Lj_1oRmA^o=><^T)9LrtvBCiaJA+9kqu;yQ%A9c&dYx9HSf&jvS9a)oAIcJ_xN* zhE#Ez&}3mX$DLx1nsXS);3^$(u#_soa+!jmQgHEDx`0`nj2|1C9Fn69GO%Ct!3IOz z;nT;i2rWQ0v7yJIsG=&ynH3>MSGE``$BhO%1aK%L8WTPaDK$D$DoE@!I)^$M6@;b4 z;|&JlLJDl1GXC}Bs7qO+`ms1~U) zfU*y;UUi^Q9VqJMRAH0FQDLkKGLw^%9dpnaY5QbvrK(mq#~DUL!o*b8+mZ;@)$lMQ z*!tL{p*OL`ta=3|wJ+3?Sc9b`^Jq+skDbhp;M31Jis)E+_~${V~^es8F=HsDz8On}rv%OZ<2#pVvwsLXI<9 z&Q&q>;}9WfSp0c2Y!4if^AX9$`H(Vmf1<`v6SpCHrY>*FSXB5tT z67UXWIqM*V#6#iYPm(rtU~KTvfxdm?{bK7&u1B*)nEjHkK`~WfmEqJhQ^1+(jJ~p| z3Ui4T-B`X;5e+qzQLJz>mT|g-(*FSL4|7AsAgp{E=+a}V_F&U!JFP7>1Jh?k6js7$ ztPaGqmeG?7b|wdb#|}Kz7|8NGN!kach)1MFL(vaP^nMF>J$z@`X+q|ai4&*qG-@Ne zY9pPXPT5@>=>*M_2UL?sE)GwkI;7R16Qxz63GK^frVM%*V!^@3tMO7*fRfbk?@8ir zlv_Fz9+Dn1fg*d$;3L>IR$iwW;y4yH&xIg54Mn=niItu+0eQ&dL`?GKsR`hO%t3L_ z>Ea~o2VG7gM%GYJ_W^w=U|1kI40af@!%0_#mMXY8ixM;1;nbtqRZYvuOB%Ho*Sk1q z0&uo#mA(L}YU5T#H+v2_Kr@?B9G$>$!E&QDQeZNw9jxW?!x=nm(xx#8`ZNNUSI*%D zkH#ujY|h1+n#4qR16V`um79VQ>qaEZ_J+nvmHohT9L%;GWXH*BnB&^2aLqeH#P5RE zUH%!PP7}qgg9Qpsfn?U4>{N1Zm+>OgpiTb zZN~~dl$rgT@ z!ku6KsUv)V$g7_`c6Mx=BgcoGy*i0TrW=h!3T6X@p1d7LZK4oOk7Gd$L1~*$JY%Y6HeT;OK`{7rMP44Qpm%}>JrFOLnvn5 zIMXF=SnC=$m=@LJ1|dnz#jJVw;0DdHk?u*>Am=c$bT@!E4(1I$)M9b8l;hDI&c05? zlVTOZ!Y*XfIQqoc7$d>hucG0{vigV|zCJ-4%1mZel6Sv?4P^#T<+9qG)R?1SZ%F2| zqJC~Aaw2sU2bEc@GMXPy1>zma&Sn*Cf7S<69fN*dt|~mr-6<&X95f>zJn`s9LD?5m z{XD9dARqUqa>$rZE#b-V2|kj|!3L-ppHdrihpbZiqd4u!3AL2d>q+5;4UdWNv;sH$ z5`$eIio@j%PJvM%Dujpuy;T4sFPq};+75^ zuDRk+#vv$;1>=x#;(=QvC#3UsLgQ&E$_dKrpIymYQ^~wT8jtgF&=Ok0ls~?!G&zZS z9Mv8dHH=$ay5;qIODCZ922T+r&N-S=RpqHc^i`hHTNEo$*7OjhD2{=VT^{GMZV0!- z{8>dduLmU0sUS~%DY>9$+1vCmd+FVR(H!Bis)7irn6#P1Aq-7k%t{zl*`l7vkZs6M z^s|iGQS5Q1ARw`Ip@AbKzLZua@J+(htuuHFMSj#wBdD8+#G;D3d1(x4AG|QpupJuU8iHJUO3BZP`qA4ew)}yfZ}0KA)Uq=84Oi27!!a1-2 zj#*O`gcYQ~p4)oUsKh>*cT=(^$4b z+-0MeE2o%p8MleMTd;7qi=HzEo7AhIRbRin2{aT)WExLg6NVz^8}b0o5MYq%#UL-> z4AEU7)kK$*w^vIUt7xw2oU9VDTo?MxL!Oc@E!>2;B&y@xdYJg}Saqy!9hM=ck71DJ z)ll48>oX(6=Vn|(b$N{dSjxPF%yFt6A~U?T!&bHD#WaFYson*H60cz>l#V7+CvbU% zSHOB&xYtdb#WZDfDOF^tr?a4{=yKl@FF`At3oGQH-zD?q%BDlfsZu(YhoJ~TpbK=i zZ!RO$t@D7nrd6h;n})?~1-p6A<%A1M!n)>8to+8p2^4W@jo&6RM~9TF!fCBJ^vaIc zp&ZCMm>335K&xaYBnJXcKz944)|hV&8Qtfg+|fI@&Peam9a`3;?#~wF-U{*tx4$y75f`76k%BDQ%U{#6}k0ZLWCRL(qSGz8WL zS^{UWh9H7dXDri5vQH-`bqfXA$JYZwpO#lW(sqMNe@HwlAny!#{KVe}rSQy`I5d&Q zG1PG!AAve#%tZ-sZ3;4+fiQ7i-SC!GHe|F!hq3LJ$J;P&`392LF1uzO+E5>_*U(Ei zw4n7%ZzffUW9y;%ld1F=vd2V&Aj@ksp);eQEiXB%9^3F5BIjO8iJ-?3p{u*`-h7I; zRjOK{yF~0vDQ=+#z+swLAvlH|3_`}U=W-f#A8ff=+4)&f^*q>N*!1+>xyf8P{6Ec} zv#^=pE}g9q*77VlR8P}t)*U-L$6*4=ort2Tj@6E1Ox%_fRjfAXY*i_AaKr2jtO%M9WW)z~=n+2&i*O%aaYq+|qCV zlw)m~AQ+qoTxV7tL>TJmab&j}&q5U5AIghj%4Rjr8$rR+3{GOdioTM&G{=|f;8^ZN z@&IImGodIaczNc|;Qh%=37-n3ilDr%{5oFd@?=$*vYZhQZ!fOeQIV#AZqsui4qc?d9^cyg4QN+phF6SLIL z_)TY~fS1rRHhPOTl(`y5ps{>>dRAUd^W`1eJ~T6vOr+$Ro(5s%(q6^*3(MgQ*m8OU zC%Cg)FG$ES$|RsI7eS#reSh-!T!Lju{0g-UoJIfI_T`ALN&Vn(0i=;3#M*nZDyUGRRwpkf+S{6rK}F^U>yv9c+Lj`_FVmLoIlS2sE8!Om(!GSl1u$B>ZHGfrP zaE!Jl-pbEdstX3xuo}acn(>Sb-*g@YEaG1ZI38yybxm!2yTqh~BZhB5r|^y8n1r%O z(T=ZvmXHe1d_kRrzaQU-PQbqcaq2yn0p<~kk<8QpHb>vJV z?G(Q8nZy@BV-RF`w1eF9n%{G=QssxnKx)S)J((q>IU>6dj=|3Z&H^vGO=B@^VgmfE zdI_O|aFfQ*nKJWAV|1L86GJo7xFRrJp(L;(aQX$LoDnQ7rA$eTYVN=XPdnkd0XO3d z^kaq}cRIqs4rSiB1w^1juv~L4P4rY zc63Y(aqpMRk4gnM<6EqH9E#H9j1)Nq+5vS~?ZdxzbQ<%WM!qFU8AsP7rOJ9{u#>Ah z*IHV+L(-l~Z@vpEH-ffg&>z$9vYz`ihqY3~@cx7eOo7VAPJ)Y)hN7D|yOpw33;H5DCx@<3gu^MvfUWE&F{VoYT9MAdZHrXhJRCIgVQIoP@7c!!aq7 zY`<$xu`vz-4|BR=>2ek3@GkOk-eLhFm{ok=@_c+G&oa;W%Hbg*aa+!zfnPJq=bg( zidQ;#93ZcsZgRW3GE z@Ekdayx5DJ)T|}j&$>HSDr-VFuxu`X*0e$za1kMN9}gN->LMtU8e@|kK@5*!5TA;KF3Gruv1x{2BkVSqRpHa zM^Qi8Rn<$jT@4{ej=Nr@H)FwC>zRUc4R03E)+z8Lmh!A24`Xp2u{?IPUQ2f2i~4L4 zE$f}8ymoa6?HGZcIwUjZ4=!5T21guQhnMC#iSgfx8P^3^$!`?j;@^!t+hOewqiw{_ zlIx8$f%Ocj7JxLVIj$5$T4~e@BU-T(N;)OYWr{8K#|c?!R9UM0tMxN?v{dziNF;(%+qUIm&KV_k<6T#EN6rGIybhIDJi?C>Z>Q3 z-b7YUH^%GX;+{@VOXf+FNw-p$a1yoSRO8yvN<1cVl014tn!>8(CX#$wn>hUS$|$<4 zQ}4g^8q?EKZ*mdBF;EE?|rowZ83UT9qNGm!D^kP+1ANf~*{^;=Lc%06mB zPH4(~Zn4SF)K1^9J-Teo;na^D)D~KkQijk>$-wFDyw=ZJ2Ul9hzM-iS6K>XPH%dGO zNBOJE)#F{=!(4crdz?Yl=O!Ezo`y`JE{*{_30}5~^!;HRhODN1?dIlxm>9`K3LnqT4_;0@*tO|pZX|Q@8)x8 zDh+-uTpjy@#b}jJ5vN6-7NQzb(9^VcHbz+p!&)VI(iP_QN_G@5Wdh4~HY8Mvj%u$~ zcT_Y}D9=%Z>}(D`tvGJcwQzPsK67XN^trI3Fbk-WGn5=E?z`J@NXoym{Y~5NuykD#YuHGZ(5G)>jAdK z$(gqXL=l*QK{WLu{UZ@9;)Y@x`6rW6wXOXP5ji-I z)_()?W8HO&Sv#%d9dnCIkz$DFFC06XXllG&=9eBJ)cIHbUN!sk$C# z925kHP50G`m`&!ssk*-Xs4KTWmAdIk?<_pln3IHET`fwq1z0=y%Eui&VTV%hXFj+g zN6yRl9qgwaaNzD)&NqNIR+e&gZQWEI%TsB4lD$(m#pTOW>_e+4lIrqzE$8QWJH1dh z&85rJRQNaztJ=MBIqxXyQoS**;*M&O&l4zpc)Ro_anlklr!MG2X&l8FEH9pmZN%U1 z(?|GujJVZx_V|q$0dBH6!kiz>%PRls5e%x{*03v_TQp8~hAAnvDNkP?6gcu-A9B@R zW9jV?*RVcP)Kj}wMli+Fj!{$nRV9u}ddh>!O(TsBy=*8cxFq$aiL(AA@^fTXB?arP zkBYU1Waq2Z?C@HRq&IzPyt)R1XnXZN=h;hN%3ZhQ;p+S=wbTYgy_QvayKa6;t@*>R z?ELrdO%DFvL;vaaA6eFaP@Z=D4eNHx3i<$|=Maq$*x_?p%kOxiE%;Y{xj_O=P0{j8 z8f|EB(Z)ugO`3alO>{O|{+<(Rom&+xKW}n67(M9b6bvGbp&w_G??fbn*7Du>A8|Su zE#D>oFX}==p=kL{L{L2iQ=|0DMZ{$6=xO(f9Zk($Am9)&Oc0bg1OU%D5*^eud8 zRH(s&Mzh((bc2ZL))UiRNlbTkBQU26fxEpMZ1AjAYpu1mzujYn@!vVEb7M}H9{&nE z(C!twFMyVQ6rD78p%wPE+g95u1~ypXXdoO8hSwl1hCB#7hz5q)OQ={FJw)G&ljhk5 zRKm=Q<_61@r02=Gfo7A5n+uX1xBX%KO?PC??2d<#zhsNnH3s}aBt@~oASRhqT4%*Z z>$!>w&RDI9rhqQXG*pNyr9JnAO*Lc`ybV_C2*#?l%?#WIFh%Fm_FAz4& z83;E9LL3h}2yU;!7@QMmLTu|?d$=`GL6Fc!E&*>);`|ty;0h(JyI}^A`RF z_z|b;^~?~a2L#Rw{Jg*~2z)H46PNEIg4E@^TAbw0bP~p|3Vae3wa|M~;H)WdR-&F3 zcv|3sz~=>iN8pPBzh_dmn3OGURrPoZ(@O$hhGeoMg1$-=-H7?QDDZWGZwUN}z`qyx zGn0MEWM6W#*K0|bej)H3!aJlJ@9>&rx0__QyUFx&6ILnz4p|uCuuxhAuH>Ye7Ic-s zHi7K|FBG^z;AH|g3+y%}9ycW(cT3dE+ALBXkQCeWnx`zQ;$={xcL?kiIN&m9xe>s0 zyW{GpjM5$Zgk?nFn854JTF~(~32j1PLZEJ2TJW5}qQFxEZxdK%CusH$L%y1_J}Tls zFOG^h&|yh-kHC8c-Y@Vo0v})=2L+uM_<1Y>%xl5FAh;fm$At1#ftZ>qdR)+_1)dhT z;0xGott(9<_i4c$W>oo`jhM${Mmz@FJ+0F#ESt)ZvPQ2RC>I1A=Fo%^Li9pe+HJ%Ve2Gt0qn^7egBZxi`r4)S}^4UPZ+qx2Rp$QTqXxsQd zIyWt1qx@~#*RERUHU^Y85@~B|g9KbP#J-Mhngg)RSWvpAMirvhF1h4TAyKj5sUw#GBM^>H8pr!%O7qkC#YT{cf}qv`Kxh=OL!hrvEo3H>o5o@o)d}h9hy|mo6Vf9R zVs*Geq$xy7G>uq(SktNIK}DW=^#~)E(d|tEe^?e2Lt+j9VQCRvgm@be;#7}BLV*A) zh+z!0V}iZ_wMymuLS#h%DmCb_VFG(?r`rhYE08BGG8n&APKABM%BMeS3;KO{va*qW3t>uR>(O{EeiZupM`Df+-Uj$)} zmY7eD}L3DzRE{M)zd|5K8!qp0o_MlW2X&@k_hUon@;gx{~@Ut0f zqI0G>!KOekdJtsR0O|-1cX+|{&HrKHS;6pd^A3u84TJ<(Jf#GJhX zJ-Wieh@y5P(Az|XJS)rp87w|bfG9Q$;SgryTqzQroAtNbZEb77=LvG6L0;oO-)0Vj z59)Gm^W_20k}b&DgAj17bGPgN!z~sBcnfFjS{0?mR zTLzfvQD`*hg=Q~Nz?ICLg9Kr4Hd;IvIw&$l4VO9#t}Q=L%#F{myLy^n$XRnwpp>9G&w~Kg{_ks={H47BI+a03Y?f z)*=Vd9>{0#(s~!gGRq}S4T3pnMYM0-FGFSt)dc4gyoaETU=6`qf(r=R3Dyz3 zmtZ}?g#;H7ocH_R-!`)JWzPTCcS~z)4`zA3RsA!7OU@p>$(+YAk@q{SWGBE}%fFsS z*PcgvpV|76p7KZD9cPx_ziNKrDuP~1VfL4=0_g1pcygCzk?<|sAN2U6bYZxIw%_*p zqjNVAb&#hwfOs5#tOT_iZX4VVxL&vc6PKW!2%foikH7VL z+usInr606a7RqgHLuTb?fs8Q21QMo6xtrhxvcXvL_}6$4TV6oyEF+!*avan!1HX_h zhhus8{8YhSKyuEt5UeEd609N!qeglQ#1JcR$0D-7<5gm>x1h`#MFwj58Dt10#VG1A zTK|qBLxGU*s7!O6Qm6fv5-g5D%Q9BD8b_d zPoQHGO!Nl9Pe8ik?`fiQd(#roh*+ODx5nBiKwEDP!O*;Ug+dq>G|iWAW4pigW+Iv= z+@YB&k9nH%j(y62*PN25jlv zDA}}06qV}+tFh6Ik`1y%aW?|PJ`%pbR9?0U3^J+}}} z{OvlPn+Z3)K3LKDAJ_39RpRyLU&kNR@gRjSbn549^)*NNF3lp;@G1=1v_xPbNd$cS zAHJl;1Fa34LT{rniJd*TaIe)S0VBihN^{aub{pa}6hj+^B`;Z-V+zS2>eMtGZZdU{ zaSy*&an9p}!W_+NZYMjmI~ZQCIN)buf%zS_?e%hga7G?(3G9m$XUExjZ2P@V?dw(u z!edQkDD+u^u5t@J98rQ4#v+2yf-OmF9JVIWHY}#>xF&^d>j*8} zH1`2uldhg?kFxVIeMEX;4;&7!G!!$@xi3B#hQt&$_sEUp@?BvR(mE~4FaesJfK1F~ z`8lgJpqiD7^x;T7Vldol zI8A4eZy70A=^&oAl;2=|N|owV5vwYx#Uoj7uTKqPs!B&Z!5LgTC?L6gpv9A%VT5hB zWiA!F!gHPGYLTm1qrGm|a;IH>iR9yzrnnhEHo1N162qYRI7&E+gDBJsX4VWhX&C%) zg#*W^Dj@7yj76M~%nNYJoOwzjolN8)LuSy3E(Te?*A;*I1RD`p8R6)T=r*%x4?^_o zd1-EhzyjWIbejkjcV1(++<+y67H|?8lyj?5ce>1|3LbRmY#Zt;10!wkHE9{ZVhrL) z8*85atVFODiqijhJd-=v}9jvyQlT~=mzOq-NP_+ zzzczdeI|U^H(-zEaIMJT$`CyiH;+#{ysd2x7R|Y-a<)TkU5UaZQ>m^?PPo|h zMxa3&I#O??OIo?6#iK_VRlv!b47f(u!V+8KOaa$~fHKrLRHz%PC$pI>qT>WAX?UH}$@Lg;uo?|t zb~cXatdSYUyWp(l&DtB!mKoM~ZEk0+J-F>l&z7Ad&P<*-kFIHbO(1M{yJnm2oSJBC z+2jm)NtT%U9(`DaSb4NjTYpG?=>KpK${Di6Ze7`$h+sZqqVuAuHG#{fb_{nL1Omp6 zCYA*8j)1{7o=LS%+n2U@{MBm%H9Mo()Y9THw{ChJg_~PEcxk~|uL*4}9^DOfmR$I3 z>oIJvJTDrk}}M0FO2t8kdw|wvAzI99c$-(^t-32G^I)WQI1zdnEfDr^g%?&~1BVJMCCKNRFhL zZII6U9v`Hvm+t$X(|y81bEruY}FWt|D`g~c0cA7ct}9Y=cX%jSBvG!+;zmX+cTPgBPW@= z+&8*fDtgeJy9bxfU3Y^?jaED6a&q8~xr8cXEoR$ogffkJbh}&T?Musaj-BLATgr5MPa8z8WS3yX zwp~4-3Am1vvUEuIy?#tJmwwbfDFiy|dm!Wn%T;N4F)UmY&Z&F_8CVY*j5q4Jj z1^gde<8jN8jip;F301~af-p)EukT1TLD%C|+ycuSe$}amd&-DCU(K4;=4PdT9fQ>E zUt^Efu33lZ_ODs9l`(Z?qPu3Bad4qW$H)mcYy^I&oyRtO5u-8QzhN7+0*_+V3QwfP zqouUA1R^b76O`+7tQ?%8uYxMDo7?%A0+@v7_(FhD;f&Xu0kTj{FRq6v6o zDbkQa4l~yw>YjZG?+*0LbuEWzMH+%vMibS+nfA>*b!x+jIO-T7Ky7iAh_fQpw)|sk zmMHk>JBYhG!`;GaSXxqpWj0(ZvVwZ7eu|6pORe1GVJ?cda0rhs!!gxLWRBvnP1FO1 zHt8ILa_EH}DfVnQ{lZN$kHMn3aJX6FF~Hme?gwz_ha35j^6(-S2ClJniGrELFxo`F zSz#{m_|JGDsU!&;B3wt%!=(V&F^=5CbLjE!I0i)8>E0YKC15nPHS2KT0vJb7M znh(29VvRT}jBaRcBaX6K+oBtIk`~>--oQ3IBxi}d5ytF|w#XD|AoL%w^A2d>cVZCw2u`$-Qxoczh(eBAa*Y?ito(}wOg@tx(+RT3}P^r}KoIg&VEpJ05-uX3Ky_2)m zq0xcS&z+uoZPP^?22P(^`@qjHf8E164qS25z@D4%$>kHtbT)U>`1s)iLt{s}#{2j6 zjgAhE-ZXwS{)Wd1e4j6gIMY0^n?GP@KE*eClM{mv@7{zz{hGuF`5fA&T;eEe^zQwy z_g+0uSi>8Lx7V-hzA8TaiVJ^rbReDHk1s2#nL-?Y`XDKP(2r^V`$fp3r4K&<>{tBe z#cs7nU5)P*>{ZvOefaIm0mYAc9aM+Zs2aoXpRQHct0U?LQ)~ym@Y02k!u6;v_?E^t zd~rk%?*Dv#{0dPVKlb1+l&0__loWnXe+<8`nUNpEl|9i&!cmKkV+-OG%afPql=>KpnWF(d$z#D+GkSl*a$={6e$DBhLJ^pr? z|KU~-a162hNfW;_z+Z{!ui^-U`l=VzMIQVak@E$aa%JSz=_yx24*NsndIdS~eRR%NY0DSWCKmIaK|0I$hB4J8}*^F0!ZcE6)-(0g^ z{F!N`-nDN^I3CsM_$?pK+zLN`Nx0c{EGLX|*i-svy!x|=mD<(jzX@xEKkZalAM25B zAM)o9`mFkuD44ZoJCsnMSGmZ@DUO!X2bpMSYz5aDMe_&SW4USdy7b_HM x$o{V7U)t--`8_zxg^Vt;Om8juQX1jCWBF{14v~AnX7D literal 0 HcmV?d00001 diff --git a/Assets/DOTween/DOTween.dll.meta b/Assets/DOTween/DOTween.dll.meta new file mode 100644 index 00000000..46b754f1 --- /dev/null +++ b/Assets/DOTween/DOTween.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 5e6e2c06c5086844cb05b97b1c7b71f1 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DOTween/Editor.meta b/Assets/DOTween/Editor.meta new file mode 100644 index 00000000..1905a301 --- /dev/null +++ b/Assets/DOTween/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b18d3779705ffa346b6911f7732f7085 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DOTween/Editor/DOTweenEditor.XML b/Assets/DOTween/Editor/DOTweenEditor.XML new file mode 100644 index 00000000..9ebc2317 --- /dev/null +++ b/Assets/DOTween/Editor/DOTweenEditor.XML @@ -0,0 +1,107 @@ + + + + DOTweenEditor + + + +

+ 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 + + + + 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 utiity function + + + + diff --git a/Assets/DOTween/Editor/DOTweenEditor.XML.meta b/Assets/DOTween/Editor/DOTweenEditor.XML.meta new file mode 100644 index 00000000..d38c7e13 --- /dev/null +++ b/Assets/DOTween/Editor/DOTweenEditor.XML.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d402daf07f910dd4b91db6ba3f33e46c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DOTween/Editor/DOTweenEditor.dll b/Assets/DOTween/Editor/DOTweenEditor.dll new file mode 100644 index 0000000000000000000000000000000000000000..67927145c02223e00446612194d970b1d0e57c8a GIT binary patch literal 57344 zcmeFad3>A2wKqO`BtMenC6*V-OA^aY929RM30qhK&TdG^VkaSNiDD~>h;5liHi
(~_3le&X=`F7Qt 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 P00000NkvXXu0mjftl$Bl literal 0 HcmV?d00001 diff --git a/Assets/DOTween/Editor/Imgs/DOTweenIcon.png.meta b/Assets/DOTween/Editor/Imgs/DOTweenIcon.png.meta new file mode 100644 index 00000000..9602236a --- /dev/null +++ b/Assets/DOTween/Editor/Imgs/DOTweenIcon.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: db982e210cd89da4cb2c1bd6d6b5120a +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/DOTween/Editor/Imgs/Footer.png b/Assets/DOTween/Editor/Imgs/Footer.png new file mode 100644 index 0000000000000000000000000000000000000000..e29d02fe18b777b1d316feb647b339803c5126de GIT binary patch literal 4409 zcmV-95ytL`P)pV>q$gGRCt{2oC$Q5#TCcD7amE(Ks303SwK{(RslVzXgwBDL5mBB zO!&X`s5NnMP!d66Squ>^lr3!+A3tD$YP%)tx0ZmANge>p%_kWr1 zoyo`dUVwn{Xzn?4X1+Uj?%bKVbLY;a!agi_i&ZSdg1<+SH4z7L^2^IbYtkPC@6BgdP2+RrVpf1yb$ z0t)aOqL&%)O5%eElifT`f&&gX;0=_i4~n!7)F9$TQeM(+3IA|u=ggVY4!V584ixx^ zU@-V0w8xloH)LjJ&i1K0IV&q`1!ab!tm{FYi5%}si4DoksWz*GwB7>X=?oP>`s!aLAAk zZFn!bx&`(#G-*X(P^CO~U`-=RjS_2+FIF1Mn8Uzt$C_UzYfi{Vp}#HJSQX zpv1S3zD+dnnF^o38rf=~znkPjgbrmf|)Q!gtr(BtI>gZ{; zMOOa=X4d&44m5Sot& zwaDP@mw20m26>c^mWBUxzSq#k4#;)^s2k((X@O>hrk)zDWS}pJGD}G4=cZ+?iMpny zroPICafxE`ZvlU}^3BGz1O=HyJpcOZuis{hu7c(`l~G`y@g^JBKiAaMw6iPLMwoDh ze0qIjfz_7&rrrp^yPs9$0%Tob(pnvkbn5{B6|&uH@?ItMcKv)-jpK>z3Fw8cxGxz> zXkR3msCT)(M~@z@N&gn#6Vz8ZIXN2}@6r}%4rtPffb!hTATPxQILx5r50{y|=_tiu zeB@Ou@e7F01sz7IZ6A3W;SuP5?IQ5;A3*6}qs%fsm$QG+L|c2!HP?J@?-Mp`*dV`q zB>AhrKckH*=vr2mJeNl92z)vaCsBti^4Y>;sc%D$*U8g~&KklH!oTp}zh?r>fo~3B znf4r%)BeSGl`&98TML;m3(dq^g=|r`PKN-xYanFraR;}+4+c%Xn99q`>xfbfBw0bc z1Z6l9%NN-<$f}}H7oh}4p)6~Qii#H4KE14YWo6}QvdT73od{88pjHp~eeCAT;wC00 zp6-5Y6@Y&~=zhuPrzqeemp@AUA^1O1Z%4U0gn3eQw+<#x8hM&zZK>lO@?LlIjNF%? z#OdTc2VH06e8*a~qCBAa1^K1$*M-;`+PK6%>YX}uYFGN@?b_Pfj;s(dCzMXh;Bk(P zgZGtAy>YSOKIlHN5%7OX$I`KQw?O0YgWk~okf4cxBK@JcHkLXzEiEl=FSiakDlrZ> z#G{XKv%Fi-aHj~H}!P~AA${(SQ+f+9Q0zYH&`Y1zMn4;U_y0u)w{W zvwqz!6Se-K>t(NUC{ZT+Al-`V1gu#1Gd^@(ph@xKb+fM+mp6;@x+MJ;+_yFjuIoWe z?krZjZLGLo+VpODFQh(EcyMB(b3z~-NDd`9r70C{K3YHg?5I1ZLkW1+YA6UM{4S4+1c3*jGNmIUA}rU zV(|AdAs(~nCPUNLhegC)W;MH?NSBI*go|tf6z?v|-UJWb&YvP2$~2z320I>iJ8j;J z8LdO1hr*7dePqxHgq;LFDpR&c%Nlu>!b9#|g9n>gSy{dHDnRM2Tel7(ns4XpwjNpf zP`6$+T<797fy^DuBVD?58DCRV)8IbF!(&sB4WA0PvG5gym;J2B-T?e>q2p#TTerlc zW3aMyj*o@;BpzLydXA>NPG&mm-4hmKnf-o9FGUsai#>y$mSDVgVEvZa=|;*Ni%h*( zsb=kNJ+$LV$}IHYbZZ{dx*1r9OlK*<{-GNKeHZ0&>4T26|4y3_{@wjqIB8D(y-Odg zeH+`_qF{PgrGtZARumgL%zdeIC{*`0dfz7C1n#K|I15_`oXvHiaC$fpd1linP|t6P zbYYpScVmucBDg^NMzaD;@mrCSlatGK?%Wxj^zd1%H*ADk_00sV4#MDWJue_$Z|HO; z{wRty21S~%JHo~T_+Cv#&ytKg5rENznS?!_2uvbfRE;P6+nlJh*Rdsdo!wt18r^6c z@+MCNCiWF{rmWX8`2LEtPNSAJQl_(>VvwA*yY+WPM6EfGm2^Yk2W$3?lx~n1Chsh)(QfTV$2|kPD^Mqb;riiN5I?-U92}_^z%W)=j#x{>mC7m9pF-@Ghs06N-?CAj;*%m(;%_pUB}bbg@a&Ar%)1y}(MhL-Vu)HOnr zmv{^oQBN|?HV*?G@b@e1Nqf9?V;Ohx`Kjx6!bC6LOH17gvBrbqwPk;SQ3U<2A%O{b zNn`W^bU^!q&(VV-(wAFVN^4)Rp3u&(tU#+l*ooW^6>e@g33eNBi!`>nm0ye;FQ~rl z+qa(^gIsUQPQ`#A`-lk}}xDk~}~ z2Jv0V_k-lgLTmPwFjIT$&5mAu>ZK-h$Cw9t52Hl)c@vhe0mRXmXs#B9d25YjOyA!|YAx$wCxN>zS8LY{oH%!2xZQHhOuQYz%6h9%U?-cU?d2A>D-_SNDG+Vk7GR{3Ia|SuFzL zP=$+PgFL`#-KxY5Tbz_L?3L$_(ZLWRw$yU-EYc0i%i$r1(4*sw25S+#GE2gQP$Y0pp( zuFKvqLf#CMY~Y{Eb@kGkG0@mo)YR0x5)1~bwZFkYX)jblU#!f?$mpRJhH+NE?Q)q% zkCxTPflL<{3I~?4jPwOLz_Ctv{J?k*+KX(nRxQ<)M%`x+@8WJT&T|=?8))l|=vZz% z{$7Z=BGB-oi8e$U5DIl=*RAIhYOs#rx_Vw{ZtxT@_u(hY5yUc0a04BwRiW5JrzKgN z_-kD{aQd~_3b{-^qJC+fSVW+zs_H%D?5n`%B4ee!vK)uicomuw_&y5Fu^y6*7Of`q z7W-+4TnHaIqVmMa+f$IS>E;P>Pio>or-QzLk<+1zULk9B zC~K@97knpz-q0Y(g|em*qJ)H5M1^uASf+F=_mrnd{NFM<^_@yoRa8`TJ~Owk0{k_5 zAMwzsgY}&IMwbq&q*Y_Q`!h@%;4z12m^(@28|oy)oQC+GRKa_$RvEcyY7c2|du;xi zWom0LsV?j8#tKt`kF&InJ(bU`&Wubqb!y zQu3YBD2bLM{mN?t9zW(s|097z%-$=NzK|QCbN^z-;7Ttc zefFUJO*``_6EP~#NBW4eIy%*>-fi^vayL)zVYvP`-@d@Aa9u*M)k)AibXY-QKR7K$ z*{Ynd(?6c@dZ_5s9}z!puf#h2Vl1?AzDg&Wa#MZl4TZ*<{Y6^5dTdCbfX>}7L~-PT z=-xmK^4aWN?4AbbIWy5HDwj(jf9)?cZlhKXD&0nYgKKfa)4e{IWvnp__E7qt%Y|7|`YBw+&_9_E5J5t~-<9JDrFT^n84yX={<2HZGIB3fa7N z;k%ze&mj(^uGxe;v^OBW6W6u}W3b*O0$(ax?ZxZ>Z3n0Rf>n7D7grlqt)P5QvlLTf z^{q}3^`T2lQ+E`!DpUt+x-(sL*pd#Be%i~#3u{w8x0O>DJyxguW}=8OX8g_*FK`9k z#z|*Pp8H#qQd2ex+FV07*0iC*%frZ7Y9sy+?8Q2{9e}yQ00000NkvXXu0mjfzsHtQ literal 0 HcmV?d00001 diff --git a/Assets/DOTween/Editor/Imgs/Footer.png.meta b/Assets/DOTween/Editor/Imgs/Footer.png.meta new file mode 100644 index 00000000..ebdade41 --- /dev/null +++ b/Assets/DOTween/Editor/Imgs/Footer.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: 986b3b79faf2e434c9d34fed89e6eb0a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + 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/DOTween/Editor/Imgs/Footer_dark.png b/Assets/DOTween/Editor/Imgs/Footer_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e48db5ef7a2b83eff50d6e3b5fe9ba3bcd4a5015 GIT binary patch literal 4429 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 TqmFO~00000NkvXXu0mjf{EM6C literal 0 HcmV?d00001 diff --git a/Assets/DOTween/Editor/Imgs/Footer_dark.png.meta b/Assets/DOTween/Editor/Imgs/Footer_dark.png.meta new file mode 100644 index 00000000..310a958c --- /dev/null +++ b/Assets/DOTween/Editor/Imgs/Footer_dark.png.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: ec1a532667f038d4987b3582c9d34c84 +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/DOTween/Editor/Imgs/Header.jpg b/Assets/DOTween/Editor/Imgs/Header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d710d719075150879b1ee76680af87791c4d3b3 GIT binary patch literal 22787 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 QE#Li`lK-oJv9mh=KQ4fgsQ>@~ literal 0 HcmV?d00001 diff --git a/Assets/DOTween/Editor/Imgs/Header.jpg.meta b/Assets/DOTween/Editor/Imgs/Header.jpg.meta new file mode 100644 index 00000000..17db4dd6 --- /dev/null +++ b/Assets/DOTween/Editor/Imgs/Header.jpg.meta @@ -0,0 +1,92 @@ +fileFormatVersion: 2 +guid: f3dcf4a4e13e0ed4fa870da2a023c717 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + 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: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 512 + 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/DOTween/Modules.meta b/Assets/DOTween/Modules.meta new file mode 100644 index 00000000..be1377a3 --- /dev/null +++ b/Assets/DOTween/Modules.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c30d0ca6f3ea94f44bd31fb82be57b8d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DOTween/Modules/DOTweenModuleAudio.cs b/Assets/DOTween/Modules/DOTweenModuleAudio.cs new file mode 100644 index 00000000..c195b6cc --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModuleAudio.cs @@ -0,0 +1,202 @@ +// 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; +#if UNITY_5 || UNITY_2017_1_OR_NEWER +using UnityEngine.Audio; // Required for AudioMixer +#endif + +#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 + +#if UNITY_5 || UNITY_2017_1_OR_NEWER + #region AudioMixer (Unity 5 or Newer) + + /// 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 +#endif + + #endregion + } +} +#endif diff --git a/Assets/DOTween/Modules/DOTweenModuleAudio.cs.meta b/Assets/DOTween/Modules/DOTweenModuleAudio.cs.meta new file mode 100644 index 00000000..70cca9ab --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModuleAudio.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3b69018c273d974288652c263f2dad1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DOTween/Modules/DOTweenModulePhysics.cs b/Assets/DOTween/Modules/DOTweenModulePhysics.cs new file mode 100644 index 00000000..08b07006 --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModulePhysics.cs @@ -0,0 +1,216 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true // MODULE_MARKER +using System; +using DG.Tweening.Core; +using DG.Tweening.Core.Enums; +using DG.Tweening.Plugins; +using DG.Tweening.Plugins.Core.PathCore; +using DG.Tweening.Plugins.Options; +using UnityEngine; + +#pragma warning disable 1591 +namespace DG.Tweening +{ + public static class DOTweenModulePhysics + { + #region Shortcuts + + #region Rigidbody + + /// Tweens a Rigidbody's position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMove(this Rigidbody target, Vector3 endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, endValue, duration); + t.SetOptions(snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's X position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveX(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector3(endValue, 0, 0), duration); + t.SetOptions(AxisConstraint.X, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's Y position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveY(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, endValue, 0), duration); + t.SetOptions(AxisConstraint.Y, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's Z position to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static TweenerCore DOMoveZ(this Rigidbody target, float endValue, float duration, bool snapping = false) + { + TweenerCore t = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, 0, endValue), duration); + t.SetOptions(AxisConstraint.Z, snapping).SetTarget(target); + return t; + } + + /// Tweens a Rigidbody's rotation to the given value. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reachThe duration of the tween + /// Rotation mode + public static TweenerCore DORotate(this Rigidbody target, Vector3 endValue, float duration, RotateMode mode = RotateMode.Fast) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, endValue, duration); + t.SetTarget(target); + t.plugOptions.rotateMode = mode; + return t; + } + + /// Tweens a Rigidbody's rotation so that it will look towards the given position. + /// Also stores the rigidbody as the tween's target so it can be used for filtered operations + /// The position to look atThe duration of the tween + /// Eventual axis constraint for the rotation + /// The vector that defines in which direction up is (default: Vector3.up) + public static TweenerCore DOLookAt(this Rigidbody target, Vector3 towards, float duration, AxisConstraint axisConstraint = AxisConstraint.None, Vector3? up = null) + { + TweenerCore t = DOTween.To(() => target.rotation, target.MoveRotation, towards, duration) + .SetTarget(target).SetSpecialStartupMode(SpecialStartupMode.SetLookAt); + t.plugOptions.axisConstraint = axisConstraint; + t.plugOptions.up = (up == null) ? Vector3.up : (Vector3)up; + return t; + } + + #region Special + + /// Tweens a Rigidbody's position to the given value, while also applying a jump effect along the Y axis. + /// Returns a Sequence instead of a Tweener. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations + /// The end value to reach + /// Power of the jump (the max height of the jump is represented by this plus the final Y offset) + /// Total number of jumps + /// The duration of the tween + /// If TRUE the tween will smoothly snap all values to integers + public static Sequence DOJump(this Rigidbody target, Vector3 endValue, float jumpPower, int numJumps, float duration, bool snapping = false) + { + if (numJumps < 1) numJumps = 1; + float startPosY = 0; + float offsetY = -1; + bool offsetYSet = false; + Sequence s = DOTween.Sequence(); + Tween yTween = DOTween.To(() => target.position, target.MovePosition, new Vector3(0, jumpPower, 0), duration / (numJumps * 2)) + .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() + .SetLoops(numJumps * 2, LoopType.Yoyo) + .OnStart(() => startPosY = target.position.y); + s.Append(DOTween.To(() => target.position, target.MovePosition, new Vector3(endValue.x, 0, 0), duration) + .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) + ).Join(DOTween.To(() => target.position, target.MovePosition, new Vector3(0, 0, endValue.z), duration) + .SetOptions(AxisConstraint.Z, snapping).SetEase(Ease.Linear) + ).Join(yTween) + .SetTarget(target).SetEase(DOTween.defaultEaseType); + yTween.OnUpdate(() => { + if (!offsetYSet) { + offsetYSet = true; + offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; + } + Vector3 pos = target.position; + pos.y += DOVirtual.EasedValue(0, offsetY, yTween.ElapsedPercentage(), Ease.OutQuad); + target.MovePosition(pos); + }); + return s; + } + + /// Tweens a Rigidbody's position through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations. + /// NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOPath. + /// The waypoints to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path (useless in case of Linear paths): higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOPath( + this Rigidbody target, Vector3[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, target.MovePosition, new Path(pathType, path, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + return t; + } + /// Tweens a Rigidbody's localPosition through the given path waypoints, using the chosen path algorithm. + /// Also stores the Rigidbody as the tween's target so it can be used for filtered operations + /// NOTE: to tween a rigidbody correctly it should be set to kinematic at least while being tweened. + /// BEWARE: doesn't work on Windows Phone store (waiting for Unity to fix their own bug). + /// If you plan to publish there you should use a regular transform.DOLocalPath. + /// The waypoint to go through + /// The duration of the tween + /// The type of path: Linear (straight path), CatmullRom (curved CatmullRom path) or CubicBezier (curved with control points) + /// The path mode: 3D, side-scroller 2D, top-down 2D + /// The resolution of the path: higher resolutions make for more detailed curved paths but are more expensive. + /// Defaults to 10, but a value of 5 is usually enough if you don't have dramatic long curves between waypoints + /// The color of the path (shown when gizmos are active in the Play panel and the tween is running) + public static TweenerCore DOLocalPath( + this Rigidbody target, Vector3[] path, float duration, PathType pathType = PathType.Linear, + PathMode pathMode = PathMode.Full3D, int resolution = 10, Color? gizmoColor = null + ) + { + if (resolution < 1) resolution = 1; + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), new Path(pathType, path, resolution, gizmoColor), duration) + .SetTarget(target).SetUpdate(UpdateType.Fixed); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + // Used by path editor when creating the actual tween, so it can pass a pre-compiled path + internal static TweenerCore DOPath( + this Rigidbody target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + TweenerCore t = DOTween.To(PathPlugin.Get(), () => target.position, target.MovePosition, path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + return t; + } + internal static TweenerCore DOLocalPath( + this Rigidbody target, Path path, float duration, PathMode pathMode = PathMode.Full3D + ) + { + Transform trans = target.transform; + TweenerCore t = DOTween.To(PathPlugin.Get(), () => trans.localPosition, x => target.MovePosition(trans.parent == null ? x : trans.parent.TransformPoint(x)), path, duration) + .SetTarget(target); + + t.plugOptions.isRigidbody = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/DOTween/Modules/DOTweenModulePhysics.cs.meta b/Assets/DOTween/Modules/DOTweenModulePhysics.cs.meta new file mode 100644 index 00000000..5de17a8b --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModulePhysics.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da2f35a86b7e58e4c9d9596140e0d138 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DOTween/Modules/DOTweenModulePhysics2D.cs b/Assets/DOTween/Modules/DOTweenModulePhysics2D.cs new file mode 100644 index 00000000..eab2cbf1 --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModulePhysics2D.cs @@ -0,0 +1,168 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true && (UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER) // 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.isRigidbody = 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.isRigidbody = true; + t.plugOptions.mode = pathMode; + t.plugOptions.useLocalPosition = true; + return t; + } + + #endregion + + #endregion + + #endregion + } +} +#endif diff --git a/Assets/DOTween/Modules/DOTweenModulePhysics2D.cs.meta b/Assets/DOTween/Modules/DOTweenModulePhysics2D.cs.meta new file mode 100644 index 00000000..ced6678d --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModulePhysics2D.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c580f710fcb2ef247878a0e24aa0caf8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DOTween/Modules/DOTweenModuleSprite.cs b/Assets/DOTween/Modules/DOTweenModuleSprite.cs new file mode 100644 index 00000000..549fff39 --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModuleSprite.cs @@ -0,0 +1,93 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true && (UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER) // 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/DOTween/Modules/DOTweenModuleSprite.cs.meta b/Assets/DOTween/Modules/DOTweenModuleSprite.cs.meta new file mode 100644 index 00000000..ed87c114 --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModuleSprite.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1303359a7c22b4349b406e78be5a58e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DOTween/Modules/DOTweenModuleUI.cs b/Assets/DOTween/Modules/DOTweenModuleUI.cs new file mode 100644 index 00000000..ee32bede --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModuleUI.cs @@ -0,0 +1,634 @@ +// Author: Daniele Giardini - http://www.demigiant.com +// Created: 2018/07/13 + +#if true && (UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER) // 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.Options; + +#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 + public static Tweener DOShakeAnchorPos(this RectTransform target, float duration, float strength = 100, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true) + { + return DOTween.Shake(() => target.anchoredPosition, x => target.anchoredPosition = x, duration, strength, vibrato, randomness, true, fadeOut) + .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 + public static Tweener DOShakeAnchorPos(this RectTransform target, float duration, Vector2 strength, int vibrato = 10, float randomness = 90, bool snapping = false, bool fadeOut = true) + { + return DOTween.Shake(() => target.anchoredPosition, x => target.anchoredPosition = x, duration, strength, vibrato, randomness, fadeOut) + .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 + + #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/DOTween/Modules/DOTweenModuleUI.cs.meta b/Assets/DOTween/Modules/DOTweenModuleUI.cs.meta new file mode 100644 index 00000000..66b5b5d4 --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModuleUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 290071827bfb3e74fa8ae7e219a5ff40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DOTween/Modules/DOTweenModuleUnityVersion.cs b/Assets/DOTween/Modules/DOTweenModuleUnityVersion.cs new file mode 100644 index 00000000..49a22bce --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModuleUnityVersion.cs @@ -0,0 +1,403 @@ +// 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 System.Threading.Tasks; +#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 + { +#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1_OR_NEWER + #region Unity 4.3 or Newer + + #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 + + #endregion +#endif + +#if UNITY_5_3_OR_NEWER || UNITY_2017_1_OR_NEWER + #region Unity 5.3 or Newer + + #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 + + #endregion +#endif + +#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 (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 Task AsyncWaitForCompletion(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && !t.IsComplete()) await 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 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 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 Task AsyncWaitForKill(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active) await 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 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 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 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 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 Task AsyncWaitForStart(this Tween t) + { + if (!t.active) { + if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); + return; + } + while (t.active && !t.playedOnce) await Task.Yield(); + } + + #endregion +#endif + + #endregion + + #endregion +#endif + } + + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + // ███ CLASSES █████████████████████████████████████████████████████████████████████████████████████████████████████████ + // █████████████████████████████████████████████████████████████████████████████████████████████████████████████████████ + +#if UNITY_5_3_OR_NEWER || UNITY_2017_1_OR_NEWER + 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; + } + } + } +#endif +} diff --git a/Assets/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta b/Assets/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta new file mode 100644 index 00000000..ecf12ef5 --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModuleUnityVersion.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ec7b086039cff94380c46b03f3f283a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DOTween/Modules/DOTweenModuleUtils.cs b/Assets/DOTween/Modules/DOTweenModuleUtils.cs new file mode 100644 index 00000000..8a1fb5f0 --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModuleUtils.cs @@ -0,0 +1,155 @@ +// 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; +#if true // PHYSICS_MARKER + Rigidbody rBody = tweenRigidbody ? target.GetComponent() : null; + if (tweenRigidbody && rBody != null) { + t = isLocal + ? rBody.DOLocalPath(path, duration, pathMode) + : rBody.DOPath(path, duration, pathMode); + } else { + t = isLocal + ? target.transform.DOLocalPath(path, duration, pathMode) + : target.transform.DOPath(path, duration, pathMode); + } +#else + t = isLocal + ? target.transform.DOLocalPath(path, duration, pathMode) + : target.transform.DOPath(path, duration, pathMode); +#endif + return t; + } + + #endregion + } + } +} diff --git a/Assets/DOTween/Modules/DOTweenModuleUtils.cs.meta b/Assets/DOTween/Modules/DOTweenModuleUtils.cs.meta new file mode 100644 index 00000000..7ea6c495 --- /dev/null +++ b/Assets/DOTween/Modules/DOTweenModuleUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 770a3604689a44e4697be48f0fa78776 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/DOTween/readme.txt b/Assets/DOTween/readme.txt new file mode 100644 index 00000000..37ff7ef5 --- /dev/null +++ b/Assets/DOTween/readme.txt @@ -0,0 +1,29 @@ +DOTween and DOTween Pro are copyright (c) 2014-2018 Daniele Giardini - Demigiant + +// IMPORTANT!!! ///////////////////////////////////////////// +// Upgrading DOTween from versions older than 1.2.000 /////// +// (or DOTween Pro older than 1.0.000) ////////////////////// +------------------------------------------------------------- +If you're upgrading your project from a version of DOTween older than 1.2.000 (or DOTween Pro older than 1.0.000) please follow these instructions carefully. +1) Import the new version in the same folder as the previous one, overwriting old files. A lot of errors will appear but don't worry +2) Close and reopen Unity (and your project). This is fundamental: skipping this step will cause a bloodbath +3) Open DOTween's Utility Panel (Tools > Demigiant > DOTween Utility Panel) if it doesn't open automatically, then press "Setup DOTween...": this will run the upgrade setup +4) From the Add/Remove Modules panel that opens, activate/deactivate Modules for Unity systems and for external assets (Pro version only) + +// GET STARTED ////////////////////////////////////////////// + +- After importing a new DOTween update, select DOTween's Utility Panel from the "Tools/Demigiant" menu (if it doesn't open automatically) and press the "Setup DOTween..." button to activate/deactivate Modules. You can also access a Preferences Tab from there to choose default settings for DOTween. +- In your code, add "using DG.Tweening" to each class where you want to use DOTween. +- You're ready to tween. Check out the links below for full documentation and license info. + + +// LINKS /////////////////////////////////////////////////////// + +DOTween website (documentation, examples, etc): http://dotween.demigiant.com +DOTween license: http://dotween.demigiant.com/license.php +DOTween repository (Google Code): https://code.google.com/p/dotween/ +Demigiant website (documentation, examples, etc): http://www.demigiant.com + +// NOTES ////////////////////////////////////////////////////// + +- DOTween's Utility Panel can be found under "Tools > Demigiant > DOTween Utility Panel" and also contains other useful options, plus a tab to set DOTween's preferences \ No newline at end of file diff --git a/Assets/DOTween/readme.txt.meta b/Assets/DOTween/readme.txt.meta new file mode 100644 index 00000000..283f2387 --- /dev/null +++ b/Assets/DOTween/readme.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c9272bb9c24032041b65b1642e4876ac +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Models/Cyclist animations HD/AnimationClips/PlayerBasicAnimator.controller b/Assets/Models/Cyclist animations HD/AnimationClips/PlayerBasicAnimator.controller index ad158902..dbcc368b 100644 --- a/Assets/Models/Cyclist animations HD/AnimationClips/PlayerBasicAnimator.controller +++ b/Assets/Models/Cyclist animations HD/AnimationClips/PlayerBasicAnimator.controller @@ -40,6 +40,12 @@ AnimatorStateMachine: - serializedVersion: 1 m_State: {fileID: -5166529910487830129} m_Position: {x: 290, y: 210, z: 0} + - serializedVersion: 1 + m_State: {fileID: 372171977578010894} + m_Position: {x: 290, y: 290, z: 0} + - serializedVersion: 1 + m_State: {fileID: 4518970819921576205} + m_Position: {x: 300, y: 370, z: 0} m_ChildStateMachines: [] m_AnyStateTransitions: [] m_EntryTransitions: [] @@ -62,6 +68,7 @@ AnimatorState: m_CycleOffset: 0 m_Transitions: - {fileID: -9164923412225952457} + - {fileID: 6431271733243048427} m_StateMachineBehaviours: [] m_Position: {x: 50, y: 50, z: 0} m_IKOnFeet: 0 @@ -92,6 +99,12 @@ AnimatorController: m_DefaultInt: 0 m_DefaultBool: 0 m_Controller: {fileID: 9100000} + - m_Name: ReachEnd + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 9100000} m_AnimatorLayers: - serializedVersion: 5 m_Name: Base Layer @@ -105,6 +118,55 @@ AnimatorController: m_IKPass: 0 m_SyncedLayerAffectsTiming: 0 m_Controller: {fileID: 9100000} +--- !u!1102 &372171977578010894 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ReachDestination + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: 3513795484857918862} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: be6220258cd02bd4f889c6d20719c23f, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1101 &3513795484857918862 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: [] + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 4518970819921576205} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.9381443 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 --- !u!1102 &4337543228220508350 AnimatorState: serializedVersion: 5 @@ -132,6 +194,57 @@ AnimatorState: m_MirrorParameter: m_CycleOffsetParameter: m_TimeParameter: +--- !u!1102 &4518970819921576205 +AnimatorState: + serializedVersion: 5 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: win + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: df01a7be7a3f59045bce91b19975dcba, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1101 &6431271733243048427 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: ReachEnd + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 372171977578010894} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.79310346 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 --- !u!1101 &7288097441030002846 AnimatorStateTransition: m_ObjectHideFlags: 1 @@ -150,7 +263,7 @@ AnimatorStateTransition: m_IsExit: 0 serializedVersion: 3 m_TransitionDuration: 0.76936924 - m_TransitionOffset: 0 + m_TransitionOffset: 0.028269805 m_ExitTime: 0.63192606 m_HasExitTime: 0 m_HasFixedDuration: 1 diff --git a/Assets/Prefabs/PlayerInfoPanel.prefab b/Assets/Prefabs/PlayerInfoPanel.prefab new file mode 100644 index 00000000..7654047a --- /dev/null +++ b/Assets/Prefabs/PlayerInfoPanel.prefab @@ -0,0 +1,309 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &105204436681154965 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2733246859565868725} + - component: {fileID: 4336285757273537202} + - component: {fileID: 4101579526560870655} + m_Layer: 5 + m_Name: Speed + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2733246859565868725 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 105204436681154965} + 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_Children: [] + m_Father: {fileID: 2085650016104907471} + m_RootOrder: 2 + 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: 35.5, y: -14.77} + m_SizeDelta: {x: 113.08469, y: 29.540802} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4336285757273537202 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 105204436681154965} + m_CullTransparentMesh: 0 +--- !u!114 &4101579526560870655 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 105204436681154965} + 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.6672303, g: 0.9245283, b: 0.8216091, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 11 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 90KM/H +--- !u!1 &2903428186747957796 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6215171426999291172} + - component: {fileID: 3759413064448916528} + - component: {fileID: 6712694289231264520} + m_Layer: 5 + m_Name: HeadImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6215171426999291172 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2903428186747957796} + 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_Children: [] + m_Father: {fileID: 2085650016104907471} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -58, y: 0.0000061989} + m_SizeDelta: {x: 48.72061, y: 46.53839} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3759413064448916528 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2903428186747957796} + m_CullTransparentMesh: 0 +--- !u!114 &6712694289231264520 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2903428186747957796} + 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_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: f1321adbaa6e24299bb58ab33ad3adf9, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4647989486956133887 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2085650016104907471} + - component: {fileID: 7507879320598329930} + - component: {fileID: 2422460918112391000} + m_Layer: 5 + m_Name: PlayerInfoPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2085650016104907471 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4647989486956133887} + 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_Children: + - {fileID: 6215171426999291172} + - {fileID: 4896608911687346385} + - {fileID: 2733246859565868725} + m_Father: {fileID: 0} + m_RootOrder: 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: 198.2732, y: 70.54947} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7507879320598329930 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4647989486956133887} + m_CullTransparentMesh: 0 +--- !u!114 &2422460918112391000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4647989486956133887} + 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: 0.3390172, g: 0.16402636, b: 0.3584906, a: 0.392} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, 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!1 &6297970859210200256 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4896608911687346385} + - component: {fileID: 4737048170253084309} + - component: {fileID: 2139698477190593386} + m_Layer: 5 + m_Name: Name + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4896608911687346385 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6297970859210200256} + 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_Children: [] + m_Father: {fileID: 2085650016104907471} + m_RootOrder: 1 + 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: 35.5, y: 8.5} + m_SizeDelta: {x: 113.08469, y: 29.540802} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4737048170253084309 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6297970859210200256} + m_CullTransparentMesh: 0 +--- !u!114 &2139698477190593386 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6297970859210200256} + 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.943, g: 0.943, b: 0.943, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Alan diff --git a/Assets/Prefabs/PlayerInfoPanel.prefab.meta b/Assets/Prefabs/PlayerInfoPanel.prefab.meta new file mode 100644 index 00000000..de452308 --- /dev/null +++ b/Assets/Prefabs/PlayerInfoPanel.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a602316cef5cb38458598253e28711f1 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/PlayerItem.prefab b/Assets/Prefabs/PlayerItem.prefab new file mode 100644 index 00000000..34990554 --- /dev/null +++ b/Assets/Prefabs/PlayerItem.prefab @@ -0,0 +1,432 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5549514346347886652 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5549514346347886653} + - component: {fileID: 5549514346347886655} + - component: {fileID: 5549514346347886654} + m_Layer: 5 + m_Name: Name + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5549514346347886653 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514346347886652} + 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_Children: [] + m_Father: {fileID: 5549514346831226103} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 9.4, y: 16.915} + m_SizeDelta: {x: -92.86052, y: -44.608032} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5549514346347886655 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514346347886652} + m_CullTransparentMesh: 0 +--- !u!114 &5549514346347886654 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514346347886652} + 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.936, g: 0.936, b: 0.936, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Alan +--- !u!1 &5549514346458199295 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5549514346458199040} + - component: {fileID: 5549514346458199042} + - component: {fileID: 5549514346458199041} + m_Layer: 5 + m_Name: Distance + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5549514346458199040 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514346458199295} + 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_Children: [] + m_Father: {fileID: 5549514346831226103} + m_RootOrder: 3 + 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: 65.131, y: -14.4} + m_SizeDelta: {x: 130.26166, y: 20.076561} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5549514346458199042 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514346458199295} + m_CullTransparentMesh: 0 +--- !u!114 &5549514346458199041 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514346458199295} + 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.986, g: 0.986, b: 0.986, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 11 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 590KM +--- !u!1 &5549514346831226102 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5549514346831226103} + - component: {fileID: 5549514346831226106} + - component: {fileID: 5549514346831226105} + - component: {fileID: 5549514346831226104} + m_Layer: 5 + m_Name: PlayerItem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5549514346831226103 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514346831226102} + 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_Children: + - {fileID: 5549514347077848902} + - {fileID: 5549514346347886653} + - {fileID: 5549514347428471598} + - {fileID: 5549514346458199040} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 5.200012, y: -3.399994} + m_SizeDelta: {x: 240, y: 69.961334} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5549514346831226106 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514346831226102} + m_CullTransparentMesh: 0 +--- !u!114 &5549514346831226105 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514346831226102} + 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: 0.42745098, g: 0.07450981, b: 0.2392157, a: 0.5137255} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5549514346831226104 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514346831226102} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + 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.2974442, g: 0.23429158, b: 0.6132076, a: 1} + m_SelectedColor: {r: 0.12415449, g: 0.8490566, b: 0.28121665, 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: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 5549514346831226105} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &5549514347077848901 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5549514347077848902} + - component: {fileID: 5549514347077848904} + - component: {fileID: 5549514347077848903} + m_Layer: 5 + m_Name: HeadImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5549514347077848902 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514347077848901} + 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_Children: [] + m_Father: {fileID: 5549514346831226103} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -94.093, y: 10.26} + m_SizeDelta: {x: 36.805206, y: 38.66394} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5549514347077848904 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514347077848901} + m_CullTransparentMesh: 0 +--- !u!114 &5549514347077848903 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514347077848901} + 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_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: f1321adbaa6e24299bb58ab33ad3adf9, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &5549514347428471597 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5549514347428471598} + - component: {fileID: 5549514347428471600} + - component: {fileID: 5549514347428471599} + m_Layer: 5 + m_Name: Speed + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5549514347428471598 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514347428471597} + 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_Children: [] + m_Father: {fileID: 5549514346831226103} + m_RootOrder: 2 + 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: -37.845, y: -14.4} + m_SizeDelta: {x: 75.68982, y: 20.076683} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5549514347428471600 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514347428471597} + m_CullTransparentMesh: 0 +--- !u!114 &5549514347428471599 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5549514347428471597} + 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.979, g: 0.98768294, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 11 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 1 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 90KM/h diff --git a/Assets/Prefabs/PlayerItem.prefab.meta b/Assets/Prefabs/PlayerItem.prefab.meta new file mode 100644 index 00000000..388fc08f --- /dev/null +++ b/Assets/Prefabs/PlayerItem.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bb012f4d387b8f24bbfaa45234bb71e1 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/DOTweenSettings.asset b/Assets/Resources/DOTweenSettings.asset new file mode 100644 index 00000000..f6aaf9f2 --- /dev/null +++ b/Assets/Resources/DOTweenSettings.asset @@ -0,0 +1,50 @@ +%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: 5e6e2c06c5086844cb05b97b1c7b71f1, type: 3} + m_Name: DOTweenSettings + m_EditorClassIdentifier: + useSafeMode: 1 + safeModeOptions: + nestedTweenFailureBehaviour: 0 + timeScale: 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: 0 + 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 + showPlayingTweens: 0 + showPausedTweens: 0 diff --git a/Assets/Resources/DOTweenSettings.asset.meta b/Assets/Resources/DOTweenSettings.asset.meta new file mode 100644 index 00000000..4ae358ce --- /dev/null +++ b/Assets/Resources/DOTweenSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 04b41b6473a00ee48bc1a12ce6438cdc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Ride/Config.png b/Assets/Scenes/Ride/Config.png new file mode 100644 index 0000000000000000000000000000000000000000..2f7be1f1b76f37d0866fd89e53c1d1bb5892a913 GIT binary patch literal 5989 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 TQNXs{00000NkvXXu0mjfIo5M_ literal 0 HcmV?d00001 diff --git a/Assets/Scenes/Ride/Config.png.meta b/Assets/Scenes/Ride/Config.png.meta new file mode 100644 index 00000000..c0364f31 --- /dev/null +++ b/Assets/Scenes/Ride/Config.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: e4a4fd64319299349a1256df29bb07ea +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 1 + spriteTessellationDetail: -1 + textureType: 8 + 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 + - serializedVersion: 3 + buildTarget: Standalone + 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: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Ride/Device_1.png b/Assets/Scenes/Ride/Device_1.png new file mode 100644 index 0000000000000000000000000000000000000000..375f4948363fd6956d5d389397033efcaeca28ee GIT binary patch literal 5494 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 literal 0 HcmV?d00001 diff --git a/Assets/Scenes/Ride/Device_1.png.meta b/Assets/Scenes/Ride/Device_1.png.meta new file mode 100644 index 00000000..cb673c13 --- /dev/null +++ b/Assets/Scenes/Ride/Device_1.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 23074bb08d89a834dbda25ce609d8b37 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 1 + spriteTessellationDetail: -1 + textureType: 8 + 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 + - serializedVersion: 3 + buildTarget: Standalone + 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: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Ride/New Account_back.png b/Assets/Scenes/Ride/New Account_back.png new file mode 100644 index 0000000000000000000000000000000000000000..50b35899add028cf274c48ee460b3cda0374f665 GIT binary patch literal 2559 zcmV|wqP)K;h2@Al&wu{cYu-otT76ZI63Dg47bgZDjW<%==G2W&e?$u} z2`4&Rr6G)s5>covc1m5kDlHglJR}6WR)tZYGi_5k-EIlb(GU(tZ#D&cL@@F8=NDE* z+S=O2Q~@>v7P|v(T&E&sKQOzZsV2+pl)x3XY{f z%dIqkmh}ZWfP_DBI#j zN+Q{=S<^CWn9&a~qX#9?R9ocdbBu`!qL*&U zQ4onVE$iuNe`Tsd-E>GjHyLK8kKko`AYdzi_Sd2PdO}F;)Gy_!4K;3Mf^8sP-rU?= zapdUxFsrE$SO(M&Ij>TgB zq0^aB36z22P(a8?Bz6rp&s&lZ?GR_YC7n*>_#Csn7pd<{plly8 zJ;yXNZ761L%|f$1`hY|7_pvD-&O)8N91EOi#wd)B9vl7%;`&A?x`A_Xf(d>=)A;se zvOVdhcaJ?4ghGwq!KdXHZU*-lR-7sKf9BI&U60!SS7~w-V6g&NEN9I(!QrlH9D+FO zOQ$+&R2cOg3hL@&D>FvsFIgf!sQdg&_wIf6L>89qA?lhDb=$KLmb1GZ3S{gOLq$2i zva2g`Tw(U?)`p_LV?x|JK`?|6t&+r!O$BW`;f4$8R6?7oa1zv;N_^d?X>}7q=Ldt0 z&r1ak3nZ}A7L~^~e0=UF{`r-<9*@TjhXoA{v8wv|=;fs#T!hg41VZyeLeM&-(;atALx){$aNW1uvOo%l_`&H4 zwI5)vgAdbJkc0N;MKX2}@Ef_{OEm~z;z3jpjA+^B zO&|_gIL;QM>gOk6%y>!1`5yS}lsDrz#$@aq_R2TC=%9Qt;ZWnhZY{Fv7Wtv@Vx9^d z6$;isl;J?uW-an1fw`ZQj5uB7&59B~wHCthl$ZG*vJ~vz{nQ6owA%>?v;5SS`ULCN zMtP6Qw#YbpI+bewv1G|{ zky->35lWWrx<0$Lr)S4m$wVz>-LVY&Ed;NT@O+l%C?Mi+c>P+kLNZR?@{#$KzDtq+ zbBgG^3Zy`!@H>%89>Xl>NSN9pQeI|$|6PUZ*n$dFVeUQ^Wd_TvAhTtV@FLfDIFUow2=Ni9=xa^AemP<3^+=<7R#D(S*yIJ_46Ekag<0v4)i3<|&Aof#<6o96%F**QfG!utGW=C5sXJI`z(=^owgzT>YAdDT z9CQ%?R2#mbcg=fnjrRcd!)J3@`IzqW)$QFI|7$LevVg~vJxXN>K>U1VrQV!xw`QrP z*PA#p(EX1i2_w7?B3&(arz=kbQMXiNn!^0OTaQoUw+=@r7$@4 zbj^w-m--}tT2vfQAkROEu3gkodJN32TGZY3$2V2lneH!KSp8o(^=?J)tfR+HjfYSu zblbJ?`ah5|0}27-8s8?EW)*%aywtuXj1P5P|9f|L{7fk_;NT-L;wqb$^KOodo~Loq zqgrO;KdKIvzYFKw)y2w37}j55KE^BN;!A zmi~$vrueg}TjT88jwQiqI);2-O|_0ni0{F#gW+ha3Y+OZZX|!{)XD#qN_9N$Fn|bB zsrVaoTMO&%$0ix3e2W!mO(zqNIt9$k2oXVl-wvStoT^ddz7`rgLP#a}f9QuocUPKh zWIt{ju2JXX)ASXn3jRj0f(D?Vq7wH`SbqYUV*~EnQC`o?gKGF0=yqJ>Vbhv87=Ib1 z^=on#o(ACiuo2&fpGrb%NdOpHQG@(Sg(); + _map.OnInitialized += _map_OnInitialized; + _map.OnTileFinished += _map_OnTileFinished; + _map.OnEditorPreviewEnabled += OnEditorPreviewEnabled; + _map.OnEditorPreviewDisabled += OnEditorPreviewDisabled; + + } + + private void _map_OnTileFinished(global::Mapbox.Unity.MeshGeneration.Data.UnityTile obj) + { + transform.gameObject.SetActive(false); + } + + void _map_OnInitialized() + { + + var visualizer = _map.MapVisualizer; + _text.text = "LOADING"; + visualizer.OnMapVisualizerStateChanged += (s) => + { + + if (this == null) + return; + + if (s == ModuleState.Finished) + { + transform.gameObject.SetActive(false); + } + else if (s == ModuleState.Working) + { + + // Uncommment me if you want the loading screen to show again + // when loading new tiles. + //_content.SetActive(true); + } + + }; + } + + void OnEditorPreviewEnabled() + { + transform.gameObject.SetActive(false); + } + + void OnEditorPreviewDisabled() + { + transform.gameObject.SetActive(true); + } + + + void Update() + { + var t = _curve.Evaluate(Time.time); + Debug.Log(t); + _text.color = Color.Lerp(Color.clear, Color.white, t); + } + } +} diff --git a/Assets/Scenes/Ride/Scripts/LoadingPanelController.cs.meta b/Assets/Scenes/Ride/Scripts/LoadingPanelController.cs.meta new file mode 100644 index 00000000..78f647cc --- /dev/null +++ b/Assets/Scenes/Ride/Scripts/LoadingPanelController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad0bd6432a7a35f4e92c526e8e970857 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Ride/Scripts/MainController.cs b/Assets/Scenes/Ride/Scripts/MainController.cs index 0f33072f..ab6c8af8 100644 --- a/Assets/Scenes/Ride/Scripts/MainController.cs +++ b/Assets/Scenes/Ride/Scripts/MainController.cs @@ -6,6 +6,7 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; using XCharts; +using UnityEngine.Networking; public class MainController : MonoBehaviour { @@ -29,9 +30,12 @@ public class MainController : MonoBehaviour void Awake() { //获取路书信息 - MapApi mapApi = new MapApi(); - //var result = mapApi.GetData(5492); + //MapApi mapApi = new MapApi(); + //var result = mapApi.GetData(5942); + var result = GetTestData(); + //StartCoroutine(requset()); + if (result != null && result.List.Count > 0) { mapData = result; @@ -41,19 +45,36 @@ public class MainController : MonoBehaviour { throw new System.Exception("fail to get route data"); } + //TODO: //获取当前用户信息 //获取当前udp信息 //获取蓝牙设备信息 } - + IEnumerator requset() { + string url = @"http://192.168.0.97:5081/Map/GetData?routeid=5492&m=20"; + UnityWebRequest request = UnityWebRequest.Get(url); + yield return request.SendWebRequest(); + string json = request.downloadHandler.text; + var result = Newtonsoft.Json.JsonConvert.DeserializeObject(json); + if (result != null && result.List.Count > 0) + { + mapData = result; + coordiantes = result.List[0].Point; + } + else + { + throw new System.Exception("fail to get route data"); + } + } /// /// 获取模拟的骑行记录 /// /// public MapDataModel GetTestData() { - string json = "{'Type':'LineString','TotalDistance':19.17906,'List':[{'Point':[26.092100000000002,119.33686000000002],'Elevation':7.6198},{'Point':[26.09211,119.33749000000002],'Elevation':7.5859},{'Point':[26.092170000000003,119.33840000000001],'Elevation':7.421},{'Point':[26.092260000000003,119.33921000000001],'Elevation':7.3133},{'Point':[26.092270002098761,119.33999000005943],'Elevation':7.2394},{'Point':[26.092280000000002,119.34077],'Elevation':7.2701},{'Point':[26.092240000956789,119.34129500009136],'Elevation':7.3416},{'Point':[26.092200000000002,119.34182000000001],'Elevation':7.4177},{'Point':[26.092083338752424,119.34270666844074],'Elevation':7.5033},{'Point':[26.09196667208499,119.34359333511317],'Elevation':7.2596},{'Point':[26.09185,119.34448],'Elevation':6.8727},{'Point':[26.091680000000004,119.34505000000001],'Elevation':6.4546},{'Point':[26.091536672044878,119.34593333550309],'Elevation':6.0312},{'Point':[26.091393338710645,119.34681666884185],'Elevation':5.751},{'Point':[26.091250000000002,119.3477],'Elevation':5.6373},{'Point':[26.091230000000003,119.34794000000001],'Elevation':5.6052},{'Point':[26.091225001411136,119.3485800001182],'Elevation':5.5997},{'Point':[26.091220000000003,119.34922000000002],'Elevation':5.6907},{'Point':[26.091330000000003,119.34997000000001],'Elevation':6.0231},{'Point':[26.091440000000002,119.35021],'Elevation':6.4916},{'Point':[26.09157,119.35095000000001],'Elevation':7.0092},{'Point':[26.091600000000003,119.3516],'Elevation':7.3641},{'Point':[26.091767507390937,119.35244499640774],'Elevation':7.4909},{'Point':[26.091935009859512,119.353289995235],'Elevation':6.9736},{'Point':[26.092102507405667,119.35413499648182],'Elevation':6.7797},{'Point':[26.092270000000003,119.35498000000001],'Elevation':6.5711},{'Point':[26.092405001867032,119.35571999903352],'Elevation':6.4206},{'Point':[26.092540000000003,119.35646000000001],'Elevation':6.3653},{'Point':[26.09269,119.35732000000002],'Elevation':7.251},{'Point':[26.092710000000004,119.35761000000001],'Elevation':8.2263},{'Point':[26.092703339253426,119.35853666675888],'Elevation':9.8464},{'Point':[26.092696672586847,119.35946333341218],'Elevation':11.8545},{'Point':[26.09269,119.36039000000001],'Elevation':13.6159},{'Point':[26.092665001414368,119.36103000007358],'Elevation':15.1102},{'Point':[26.092640000000003,119.36167],'Elevation':16.3984},{'Point':[26.0925,119.36225],'Elevation':17.1179},{'Point':[26.092270000000003,119.36289000000001],'Elevation':17.3805},{'Point':[26.092200000000002,119.36334000000001],'Elevation':17.3022},{'Point':[26.092180000000003,119.36363000000001],'Elevation':17.2282},{'Point':[26.092190000000002,119.36396],'Elevation':17.2224},{'Point':[26.092290000000002,119.36435000000002],'Elevation':17.1729},{'Point':[26.092100000000002,119.36453000000002],'Elevation':17.1065},{'Point':[26.092000000000002,119.36473000000001],'Elevation':17.0503},{'Point':[26.091910000000002,119.36502000000002],'Elevation':17.1392},{'Point':[26.09193,119.36525],'Elevation':17.2636},{'Point':[26.092150000000004,119.36569000000001],'Elevation':17.4486},{'Point':[26.09233,119.36581000000001],'Elevation':17.7034},{'Point':[26.092540000000003,119.36588],'Elevation':18.1077},{'Point':[26.092750000000002,119.36589000000001],'Elevation':18.5083},{'Point':[26.092950000000002,119.36582000000001],'Elevation':18.892},{'Point':[26.093110000000003,119.36572000000001],'Elevation':19.2643},{'Point':[26.09335,119.36544],'Elevation':19.6256},{'Point':[26.094033333311039,119.36542333352864],'Elevation':20.1707},{'Point':[26.094716666620165,119.36540666686258],'Elevation':21.2487},{'Point':[26.0954,119.36539],'Elevation':22.396},{'Point':[26.09605,119.36548],'Elevation':23.9715},{'Point':[26.09615,119.36567000000001],'Elevation':25.3392},{'Point':[26.096753333417059,119.36562333380944],'Elevation':26.626},{'Point':[26.097356666819095,119.36557666713746],'Elevation':28.1709},{'Point':[26.09796,119.36553],'Elevation':30.077},{'Point':[26.098260000000003,119.36556000000002],'Elevation':32.1094},{'Point':[26.09888000013564,119.36572999910875],'Elevation':34.3101},{'Point':[26.099500000000003,119.36590000000001],'Elevation':36.7362},{'Point':[26.099970000000003,119.36599000000001],'Elevation':39.7763},{'Point':[26.100720000000003,119.36591000000001],'Elevation':43.1691},{'Point':[26.101160000000004,119.36591000000001],'Elevation':46.6581},{'Point':[26.10181,119.36598000000001],'Elevation':50.4232},{'Point':[26.10208,119.36621000000001],'Elevation':53.9898},{'Point':[26.102210000000003,119.36674000000001],'Elevation':57.5845},{'Point':[26.101960000000002,119.36725000000001],'Elevation':61.2459},{'Point':[26.101530000000004,119.36721000000001],'Elevation':64.7154},{'Point':[26.100900000000003,119.36697000000001],'Elevation':68.1881},{'Point':[26.100415000136522,119.36697500001934],'Elevation':71.7923},{'Point':[26.09993,119.36698000000001],'Elevation':75.4172},{'Point':[26.099330000000002,119.36702000000001],'Elevation':79.066},{'Point':[26.09898,119.36725000000001],'Elevation':82.6214},{'Point':[26.098730000000003,119.36766000000001],'Elevation':86.2373},{'Point':[26.09861,119.36793000000002],'Elevation':89.5809},{'Point':[26.09861,119.36874000000002],'Elevation':93.0389},{'Point':[26.098460000000003,119.36911],'Elevation':96.3301},{'Point':[26.098190000000002,119.36928],'Elevation':99.4907},{'Point':[26.09746,119.36887000000002],'Elevation':103.3628},{'Point':[26.096970000000002,119.36884],'Elevation':107.3573},{'Point':[26.096780000000003,119.3687],'Elevation':110.9018},{'Point':[26.096580000000003,119.36793000000002],'Elevation':114.5406},{'Point':[26.096290000000003,119.36791000000001],'Elevation':117.672},{'Point':[26.096200000000003,119.36814000000001],'Elevation':120.5119},{'Point':[26.09617,119.36836000000001],'Elevation':123.111},{'Point':[26.09662,119.36900000000001],'Elevation':125.9004},{'Point':[26.09746,119.36924],'Elevation':129.0855},{'Point':[26.097690000000004,119.36980000000001],'Elevation':131.9769},{'Point':[26.09786,119.36989000000001],'Elevation':134.5568},{'Point':[26.098070000000003,119.36994000000001],'Elevation':136.8653},{'Point':[26.0985,119.37068000000001],'Elevation':139.8105},{'Point':[26.098650000000003,119.3708],'Elevation':142.5769},{'Point':[26.098830000000003,119.37083000000001],'Elevation':145.051},{'Point':[26.09898,119.37069000000001],'Elevation':147.3343},{'Point':[26.099090000000004,119.37017000000002],'Elevation':149.7183},{'Point':[26.09954,119.36972000000002],'Elevation':152.3287},{'Point':[26.099600000000002,119.36906],'Elevation':155.5478},{'Point':[26.099700000000002,119.36863000000001],'Elevation':158.5969},{'Point':[26.099880000000002,119.36856000000002],'Elevation':161.5755},{'Point':[26.100420000279684,119.36885999859783],'Elevation':164.7921},{'Point':[26.10096,119.36916000000001],'Elevation':168.3021},{'Point':[26.101480000000002,119.36936000000001],'Elevation':171.7078},{'Point':[26.10215333380841,119.36909666970033],'Elevation':175.177},{'Point':[26.10282666713865,119.36883333636827],'Elevation':179.1647},{'Point':[26.1035,119.36857],'Elevation':183.2877},{'Point':[26.103880000000004,119.36865000000002],'Elevation':187.1894},{'Point':[26.104670000000002,119.36827000000001],'Elevation':191.5371},{'Point':[26.10497,119.36850000000001],'Elevation':195.5448},{'Point':[26.10534,119.36938],'Elevation':199.9791},{'Point':[26.105710000000002,119.36991],'Elevation':204.3775},{'Point':[26.105780000000003,119.3708],'Elevation':209.0429},{'Point':[26.106375000150081,119.37088499958534],'Elevation':214.0787},{'Point':[26.10697,119.37097000000001],'Elevation':218.9387},{'Point':[26.107495000170683,119.37109499946651],'Elevation':223.5748},{'Point':[26.108020000000003,119.37122000000001],'Elevation':228.2484},{'Point':[26.10874,119.37152],'Elevation':232.9643},{'Point':[26.10922,119.37125],'Elevation':236.9616},{'Point':[26.10929,119.37074000000001],'Elevation':240.3459},{'Point':[26.109725000352633,119.37044500106211],'Elevation':243.2112},{'Point':[26.11016,119.37015000000001],'Elevation':245.6371},{'Point':[26.110090000000003,119.36953000000001],'Elevation':247.691},{'Point':[26.110300000000002,119.36856000000002],'Elevation':249.4299},{'Point':[26.110920000000004,119.3683],'Elevation':250.9021},{'Point':[26.111463334140218,119.36864333013777],'Elevation':264.003},{'Point':[26.112006667467366,119.36898666346715],'Elevation':275.0947},{'Point':[26.112550000000002,119.36933],'Elevation':284.4855},{'Point':[26.11315,119.36999000000002],'Elevation':292.4361},{'Point':[26.113750000000003,119.36999000000002],'Elevation':299.1675},{'Point':[26.114390000000004,119.37058],'Elevation':304.8666},{'Point':[26.11476,119.37038000000001],'Elevation':309.6916},{'Point':[26.115185000813142,119.36986500199586],'Elevation':314.3933},{'Point':[26.115610000000004,119.36935000000001],'Elevation':319.1974},{'Point':[26.11579,119.36929],'Elevation':323.2648},{'Point':[26.116000000000003,119.36936000000001],'Elevation':327.0489},{'Point':[26.11605,119.36958000000001],'Elevation':330.4413},{'Point':[26.115840000000002,119.36983000000001],'Elevation':333.5128},{'Point':[26.115330000000004,119.37017000000002],'Elevation':336.6577},{'Point':[26.114965000694809,119.37062000140982],'Elevation':339.6055},{'Point':[26.114600000000003,119.37107],'Elevation':342.2608},{'Point':[26.114070000274864,119.37073499841004],'Elevation':344.676},{'Point':[26.11354,119.3704],'Elevation':346.819},{'Point':[26.112940000000002,119.37076],'Elevation':349.0643},{'Point':[26.112480000722037,119.3703149982866],'Elevation':351.8838},{'Point':[26.11202,119.36987],'Elevation':354.7863},{'Point':[26.11166,119.36979000000001],'Elevation':357.4966},{'Point':[26.11182,119.37071000000002],'Elevation':360.7728},{'Point':[26.11156,119.37161],'Elevation':364.617},{'Point':[26.111860001116195,119.3721949983737],'Elevation':368.3455},{'Point':[26.112160000000003,119.37278],'Elevation':372.2967},{'Point':[26.112460000000002,119.37353000000002],'Elevation':376.5543},{'Point':[26.11193,119.37394],'Elevation':380.9228},{'Point':[26.112070000841374,119.37443499939415],'Elevation':385.1427},{'Point':[26.11221,119.37493],'Elevation':389.2231},{'Point':[26.11175,119.37504000000001],'Elevation':393.0503},{'Point':[26.111309999985217,119.37492499955135],'Elevation':396.7722},{'Point':[26.110870000000002,119.37481000000001],'Elevation':400.2684},{'Point':[26.110425000222772,119.37502500078782],'Elevation':403.9277},{'Point':[26.109980000000004,119.37524],'Elevation':407.6469},{'Point':[26.10913,119.37496000000002],'Elevation':411.8953},{'Point':[26.10835,119.37504000000001],'Elevation':416.9476},{'Point':[26.10761,119.37450000000001],'Elevation':422.2909},{'Point':[26.10703,119.37447000000002],'Elevation':427.2441},{'Point':[26.106640000000002,119.37422000000001],'Elevation':431.7245},{'Point':[26.106225001986182,119.37498500277395],'Elevation':436.3276},{'Point':[26.10581,119.37575000000001],'Elevation':441.2936},{'Point':[26.105570000000004,119.37579000000001],'Elevation':445.9765},{'Point':[26.105310000000003,119.37541000000002],'Elevation':450.2971},{'Point':[26.10459,119.37522000000001],'Elevation':454.7617},{'Point':[26.104360000000003,119.37476000000001],'Elevation':459.1275},{'Point':[26.103700000000003,119.37491000000001],'Elevation':463.7408},{'Point':[26.103450000000002,119.37575000000001],'Elevation':468.441},{'Point':[26.1031,119.37599000000002],'Elevation':472.7149},{'Point':[26.102850000000004,119.37651000000001],'Elevation':476.7919},{'Point':[26.103410000000004,119.37713000000001],'Elevation':480.8448},{'Point':[26.103585001156322,119.37769999926441],'Elevation':484.9601},{'Point':[26.10376,119.37827000000001],'Elevation':489.1789},{'Point':[26.103615001271109,119.37888500090267],'Elevation':493.5466},{'Point':[26.10347,119.37950000000001],'Elevation':497.8687},{'Point':[26.10328,119.38007],'Elevation':502.3131},{'Point':[26.103060000000003,119.38015000000001],'Elevation':506.1941},{'Point':[26.102500000000003,119.37995000000001],'Elevation':510.5886},{'Point':[26.101930000000003,119.38011000000002],'Elevation':514.9763},{'Point':[26.101360000000003,119.3798],'Elevation':519.3153},{'Point':[26.101180000000003,119.37981],'Elevation':523.1377},{'Point':[26.102020000000003,119.38038000000002],'Elevation':527.6712},{'Point':[26.10234,119.38047000000002],'Elevation':531.8868},{'Point':[26.102846667738461,119.38085999663812],'Elevation':536.0141},{'Point':[26.103353334428057,119.38124999665573],'Elevation':540.6754},{'Point':[26.10386,119.38164],'Elevation':545.2737},{'Point':[26.104340000607969,119.38202999846695],'Elevation':549.9643},{'Point':[26.104820000000004,119.38242000000001],'Elevation':554.3542},{'Point':[26.105360000020877,119.38243999990837],'Elevation':558.5402},{'Point':[26.105900000000002,119.38246000000001],'Elevation':562.6455},{'Point':[26.1061,119.38268000000001],'Elevation':566.5015},{'Point':[26.106635002173569,119.38347499635361],'Elevation':571.2737},{'Point':[26.107170000000004,119.38427000000001],'Elevation':576.179},{'Point':[26.107090000000003,119.38451],'Elevation':580.2676},{'Point':[26.10687,119.38457000000001],'Elevation':583.7139},{'Point':[26.10666,119.38443000000001],'Elevation':586.6991},{'Point':[26.10638,119.38418000000001],'Elevation':589.3707},{'Point':[26.106180000000002,119.3841],'Elevation':591.6939},{'Point':[26.10592,119.38418000000001],'Elevation':593.6685},{'Point':[26.105890000000002,119.3845],'Elevation':595.4492},{'Point':[26.10583,119.38485000000001],'Elevation':597.3279},{'Point':[26.105770000000003,119.38508000000002],'Elevation':599.0305},{'Point':[26.105660000000004,119.38531],'Elevation':600.9182},{'Point':[26.105520000000002,119.38555000000001],'Elevation':602.7235},{'Point':[26.10537,119.38589],'Elevation':604.3347},{'Point':[26.10536,119.38667000000001],'Elevation':605.7909},{'Point':[26.105300000000003,119.38753000000001],'Elevation':606.5821},{'Point':[26.10525,119.38786],'Elevation':607.0847},{'Point':[26.105130000000003,119.38821000000002],'Elevation':607.4935},{'Point':[26.10499,119.38849],'Elevation':607.8733},{'Point':[26.104830000000003,119.38877000000001],'Elevation':608.1503},{'Point':[26.104470000000003,119.38881],'Elevation':608.253},{'Point':[26.10424,119.38872],'Elevation':608.3354},{'Point':[26.10405,119.38858],'Elevation':608.4388},{'Point':[26.103890000000003,119.38839000000002],'Elevation':608.6767},{'Point':[26.10377,119.38814],'Elevation':609.191},{'Point':[26.103630000000003,119.38771000000001],'Elevation':609.8426},{'Point':[26.103085000145896,119.38740499929808],'Elevation':610.1014},{'Point':[26.102660000000004,119.38721000000001],'Elevation':610.0398},{'Point':[26.10235,119.38673000000001],'Elevation':609.842},{'Point':[26.102190000000004,119.38657],'Elevation':609.7819},{'Point':[26.101910000000004,119.38656],'Elevation':610.1573},{'Point':[26.101420000136049,119.38663000027626],'Elevation':611.1515},{'Point':[26.10093,119.3867],'Elevation':612.6112},{'Point':[26.100480000257267,119.38687500061438],'Elevation':614.1814},{'Point':[26.100030000000004,119.38705000000002],'Elevation':616.2837},{'Point':[26.09984,119.38706],'Elevation':618.5006},{'Point':[26.09963,119.38703000000001],'Elevation':620.3776},{'Point':[26.099400000000003,119.38687000000002],'Elevation':622.2734},{'Point':[26.099010000000003,119.38656],'Elevation':624.5717},{'Point':[26.098830000000003,119.38651000000002],'Elevation':626.6279},{'Point':[26.098370000000003,119.38655000000001],'Elevation':628.5529},{'Point':[26.09824,119.38638000000002],'Elevation':630.3038},{'Point':[26.098370000000003,119.38611000000002],'Elevation':632.1358},{'Point':[26.09843,119.38587000000001],'Elevation':634.1362},{'Point':[26.09823,119.38591000000001],'Elevation':636.043},{'Point':[26.09784,119.38646000000001],'Elevation':638.2462},{'Point':[26.097720000000002,119.38682000000001],'Elevation':640.4352},{'Point':[26.097690000000004,119.38718000000001],'Elevation':642.4418},{'Point':[26.09758,119.38739000000001],'Elevation':644.176},{'Point':[26.097430000000003,119.38780000000001],'Elevation':645.6596},{'Point':[26.09738,119.38807000000001],'Elevation':646.9524},{'Point':[26.09721,119.38834000000001],'Elevation':648.1866},{'Point':[26.0969,119.38868000000001],'Elevation':649.4983},{'Point':[26.096850000000003,119.38897000000001],'Elevation':650.7883},{'Point':[26.09674,119.38929000000002],'Elevation':652.2209},{'Point':[26.09589,119.38932000000001],'Elevation':653.7727},{'Point':[26.09571,119.38952],'Elevation':655.1325},{'Point':[26.09571,119.38975],'Elevation':656.2869},{'Point':[26.09587,119.39011],'Elevation':657.2505},{'Point':[26.09606,119.39028],'Elevation':658.1046},{'Point':[26.09616,119.39046],'Elevation':658.9228},{'Point':[26.096300000000003,119.39104],'Elevation':660.459},{'Point':[26.096310000000003,119.39127],'Elevation':662.2473},{'Point':[26.09598,119.39155000000001],'Elevation':664.4713},{'Point':[26.095820000000003,119.39167],'Elevation':666.6825},{'Point':[26.095640000000003,119.39187000000001],'Elevation':668.7218},{'Point':[26.09569,119.39245000000001],'Elevation':670.6814},{'Point':[26.095540000000003,119.39267000000001],'Elevation':672.4003},{'Point':[26.0953,119.39279],'Elevation':673.9016},{'Point':[26.09486,119.39255000000001],'Elevation':675.6864},{'Point':[26.094620000000003,119.39223000000001],'Elevation':677.8631},{'Point':[26.09429,119.39158],'Elevation':680.4758},{'Point':[26.094170000000002,119.39131],'Elevation':683.2368},{'Point':[26.09401,119.39118],'Elevation':685.7431},{'Point':[26.093760000000003,119.39131],'Elevation':687.5737},{'Point':[26.093600000000002,119.39145],'Elevation':688.9027},{'Point':[26.093290000000003,119.39167],'Elevation':689.6982},{'Point':[26.09298,119.39185],'Elevation':695.1074},{'Point':[26.092750000000002,119.39205000000001],'Elevation':700.8233},{'Point':[26.09251,119.39211000000002],'Elevation':705.6443},{'Point':[26.092060000000004,119.39227000000001],'Elevation':709.226},{'Point':[26.09164,119.39302],'Elevation':711.5055},{'Point':[26.09146,119.39357000000001],'Elevation':712.8711},{'Point':[26.09136,119.39399000000002],'Elevation':713.7389},{'Point':[26.09089,119.39449],'Elevation':714.3663},{'Point':[26.090590000000002,119.39497000000001],'Elevation':714.6291},{'Point':[26.090560000000004,119.39532000000001],'Elevation':714.6308},{'Point':[26.09109,119.39600000000002],'Elevation':714.7119},{'Point':[26.09119,119.39623],'Elevation':714.8067},{'Point':[26.091030000000003,119.39649000000001],'Elevation':714.8594},{'Point':[26.090840000000004,119.39649000000001],'Elevation':714.9024},{'Point':[26.090270000000004,119.39612000000001],'Elevation':715.0584},{'Point':[26.08969,119.39600000000002],'Elevation':714.9897},{'Point':[26.089150000000004,119.39584],'Elevation':714.2015},{'Point':[26.08895,119.39581000000001],'Elevation':712.9223},{'Point':[26.088710000000003,119.39612000000001],'Elevation':711.6046},{'Point':[26.08857,119.39682],'Elevation':709.9829},{'Point':[26.08845,119.39725000000001],'Elevation':708.383},{'Point':[26.088260000000002,119.39745],'Elevation':706.8674},{'Point':[26.08799,119.39733000000001],'Elevation':705.3542},{'Point':[26.0878,119.39685000000001],'Elevation':703.8951},{'Point':[26.087400000000002,119.39682],'Elevation':702.35},{'Point':[26.086980000742169,119.39737000096451],'Elevation':699.9469},{'Point':[26.086710000000004,119.39782000000001],'Elevation':697.3756},{'Point':[26.086190000000002,119.39827000000001],'Elevation':695.6173},{'Point':[26.08601,119.39857],'Elevation':694.5519},{'Point':[26.085890000000003,119.39900000000002],'Elevation':694.2925},{'Point':[26.085780000000003,119.39920000000001],'Elevation':694.2185},{'Point':[26.085600000000003,119.39920000000001],'Elevation':694.096},{'Point':[26.08546,119.39891000000001],'Elevation':693.7562},{'Point':[26.085390000000004,119.39843],'Elevation':693.3381},{'Point':[26.08518,119.39835000000001],'Elevation':693.1145},{'Point':[26.08499,119.39859000000001],'Elevation':693.077},{'Point':[26.08471,119.39886000000001],'Elevation':693.3167},{'Point':[26.08452,119.39897],'Elevation':693.627},{'Point':[26.084220000000002,119.39876000000001],'Elevation':693.836},{'Point':[26.08424,119.39817000000001],'Elevation':693.9194},{'Point':[26.084130000000002,119.39773000000001],'Elevation':693.9026},{'Point':[26.08386,119.39732000000001],'Elevation':693.7796},{'Point':[26.08339,119.39710000000001],'Elevation':693.5281},{'Point':[26.083060000000003,119.39707000000001],'Elevation':693.1005},{'Point':[26.08255,119.39725000000001],'Elevation':692.3015},{'Point':[26.082120000000003,119.39749],'Elevation':691.7783},{'Point':[26.0818,119.39770000000001],'Elevation':691.7126},{'Point':[26.08161,119.39767],'Elevation':691.7521},{'Point':[26.08172,119.39722],'Elevation':692.3989},{'Point':[26.08189,119.39701000000001],'Elevation':693.4895},{'Point':[26.08163,119.39686],'Elevation':695.1979},{'Point':[26.08143,119.39691],'Elevation':696.8422},{'Point':[26.08132,119.39729000000001],'Elevation':698.7174},{'Point':[26.08113,119.39756000000001],'Elevation':700.6271},{'Point':[26.08086,119.39759000000001],'Elevation':702.5383},{'Point':[26.080470000000002,119.39744],'Elevation':704.612},{'Point':[26.080050000000004,119.39706000000001],'Elevation':707.0991},{'Point':[26.07994,119.39687],'Elevation':709.421},{'Point':[26.079860000000004,119.39646],'Elevation':711.6752},{'Point':[26.079720000000002,119.39631000000001],'Elevation':713.5821},{'Point':[26.079255000078053,119.39643000046932],'Elevation':715.12},{'Point':[26.07879,119.39655],'Elevation':716.3652},{'Point':[26.078450000000004,119.39686],'Elevation':717.2677},{'Point':[26.078210000000002,119.39727],'Elevation':718.0333},{'Point':[26.07794,119.39742000000001],'Elevation':718.8977},{'Point':[26.07759,119.39730000000002],'Elevation':719.8059},{'Point':[26.077260000000003,119.39704],'Elevation':721.242},{'Point':[26.076950000000004,119.39714000000001],'Elevation':723.1065},{'Point':[26.07693,119.39759000000001],'Elevation':725.5745},{'Point':[26.076800000000002,119.39787000000001],'Elevation':728.2253},{'Point':[26.076100000000004,119.39844000000001],'Elevation':732.0783},{'Point':[26.076020000000003,119.39863000000001],'Elevation':735.71},{'Point':[26.07609,119.39901],'Elevation':739.1636},{'Point':[26.075870000000002,119.39919],'Elevation':742.1749},{'Point':[26.07572,119.39907000000001],'Elevation':744.8886},{'Point':[26.07561,119.39880000000001],'Elevation':747.2413},{'Point':[26.07543,119.39880000000001],'Elevation':749.2608},{'Point':[26.075170000000004,119.39931000000001],'Elevation':751.5334},{'Point':[26.07504,119.39948000000001],'Elevation':753.8117},{'Point':[26.07475,119.39939000000001],'Elevation':756.0781},{'Point':[26.0745,119.39891000000001],'Elevation':758.6363},{'Point':[26.07428,119.39861],'Elevation':761.2547},{'Point':[26.0741,119.39866],'Elevation':763.8518},{'Point':[26.07382,119.39880000000001],'Elevation':766.5628},{'Point':[26.073590000000003,119.39886000000001],'Elevation':769.3197},{'Point':[26.073410000000003,119.39872000000001],'Elevation':771.9928},{'Point':[26.07299,119.39821],'Elevation':775.5441},{'Point':[26.072950000000002,119.39783000000001],'Elevation':779.066},{'Point':[26.072830000000003,119.39755000000001],'Elevation':782.396},{'Point':[26.072820000000004,119.39732000000001],'Elevation':785.3671},{'Point':[26.072940000000003,119.39707000000001],'Elevation':787.8826},{'Point':[26.073130000000003,119.39679000000001],'Elevation':790.3221},{'Point':[26.07318,119.39655],'Elevation':792.5086},{'Point':[26.07288,119.39598000000001],'Elevation':794.7309},{'Point':[26.07279,119.39563000000001],'Elevation':795.3427},{'Point':[26.072670000000002,119.39534],'Elevation':794.873},{'Point':[26.07234,119.39502000000002],'Elevation':792.0309},{'Point':[26.072070000000004,119.39494],'Elevation':789.1614},{'Point':[26.071600000000004,119.39523000000001],'Elevation':786.3011},{'Point':[26.071350000000002,119.39529],'Elevation':783.7261}]}"; + //string json = "{'Type':'LineString','TotalDistance':19.17906,'List':[{'Point':[26.092100000000002,119.33686000000002],'Elevation':7.6198},{'Point':[26.09211,119.33749000000002],'Elevation':7.5859},{'Point':[26.092170000000003,119.33840000000001],'Elevation':7.421},{'Point':[26.092260000000003,119.33921000000001],'Elevation':7.3133},{'Point':[26.092270002098761,119.33999000005943],'Elevation':7.2394},{'Point':[26.092280000000002,119.34077],'Elevation':7.2701},{'Point':[26.092240000956789,119.34129500009136],'Elevation':7.3416},{'Point':[26.092200000000002,119.34182000000001],'Elevation':7.4177},{'Point':[26.092083338752424,119.34270666844074],'Elevation':7.5033},{'Point':[26.09196667208499,119.34359333511317],'Elevation':7.2596},{'Point':[26.09185,119.34448],'Elevation':6.8727},{'Point':[26.091680000000004,119.34505000000001],'Elevation':6.4546},{'Point':[26.091536672044878,119.34593333550309],'Elevation':6.0312},{'Point':[26.091393338710645,119.34681666884185],'Elevation':5.751},{'Point':[26.091250000000002,119.3477],'Elevation':5.6373},{'Point':[26.091230000000003,119.34794000000001],'Elevation':5.6052},{'Point':[26.091225001411136,119.3485800001182],'Elevation':5.5997},{'Point':[26.091220000000003,119.34922000000002],'Elevation':5.6907},{'Point':[26.091330000000003,119.34997000000001],'Elevation':6.0231},{'Point':[26.091440000000002,119.35021],'Elevation':6.4916},{'Point':[26.09157,119.35095000000001],'Elevation':7.0092},{'Point':[26.091600000000003,119.3516],'Elevation':7.3641},{'Point':[26.091767507390937,119.35244499640774],'Elevation':7.4909},{'Point':[26.091935009859512,119.353289995235],'Elevation':6.9736},{'Point':[26.092102507405667,119.35413499648182],'Elevation':6.7797},{'Point':[26.092270000000003,119.35498000000001],'Elevation':6.5711},{'Point':[26.092405001867032,119.35571999903352],'Elevation':6.4206},{'Point':[26.092540000000003,119.35646000000001],'Elevation':6.3653},{'Point':[26.09269,119.35732000000002],'Elevation':7.251},{'Point':[26.092710000000004,119.35761000000001],'Elevation':8.2263},{'Point':[26.092703339253426,119.35853666675888],'Elevation':9.8464},{'Point':[26.092696672586847,119.35946333341218],'Elevation':11.8545},{'Point':[26.09269,119.36039000000001],'Elevation':13.6159},{'Point':[26.092665001414368,119.36103000007358],'Elevation':15.1102},{'Point':[26.092640000000003,119.36167],'Elevation':16.3984},{'Point':[26.0925,119.36225],'Elevation':17.1179},{'Point':[26.092270000000003,119.36289000000001],'Elevation':17.3805},{'Point':[26.092200000000002,119.36334000000001],'Elevation':17.3022},{'Point':[26.092180000000003,119.36363000000001],'Elevation':17.2282},{'Point':[26.092190000000002,119.36396],'Elevation':17.2224},{'Point':[26.092290000000002,119.36435000000002],'Elevation':17.1729},{'Point':[26.092100000000002,119.36453000000002],'Elevation':17.1065},{'Point':[26.092000000000002,119.36473000000001],'Elevation':17.0503},{'Point':[26.091910000000002,119.36502000000002],'Elevation':17.1392},{'Point':[26.09193,119.36525],'Elevation':17.2636},{'Point':[26.092150000000004,119.36569000000001],'Elevation':17.4486},{'Point':[26.09233,119.36581000000001],'Elevation':17.7034},{'Point':[26.092540000000003,119.36588],'Elevation':18.1077},{'Point':[26.092750000000002,119.36589000000001],'Elevation':18.5083},{'Point':[26.092950000000002,119.36582000000001],'Elevation':18.892},{'Point':[26.093110000000003,119.36572000000001],'Elevation':19.2643},{'Point':[26.09335,119.36544],'Elevation':19.6256},{'Point':[26.094033333311039,119.36542333352864],'Elevation':20.1707},{'Point':[26.094716666620165,119.36540666686258],'Elevation':21.2487},{'Point':[26.0954,119.36539],'Elevation':22.396},{'Point':[26.09605,119.36548],'Elevation':23.9715},{'Point':[26.09615,119.36567000000001],'Elevation':25.3392},{'Point':[26.096753333417059,119.36562333380944],'Elevation':26.626},{'Point':[26.097356666819095,119.36557666713746],'Elevation':28.1709},{'Point':[26.09796,119.36553],'Elevation':30.077},{'Point':[26.098260000000003,119.36556000000002],'Elevation':32.1094},{'Point':[26.09888000013564,119.36572999910875],'Elevation':34.3101},{'Point':[26.099500000000003,119.36590000000001],'Elevation':36.7362},{'Point':[26.099970000000003,119.36599000000001],'Elevation':39.7763},{'Point':[26.100720000000003,119.36591000000001],'Elevation':43.1691},{'Point':[26.101160000000004,119.36591000000001],'Elevation':46.6581},{'Point':[26.10181,119.36598000000001],'Elevation':50.4232},{'Point':[26.10208,119.36621000000001],'Elevation':53.9898},{'Point':[26.102210000000003,119.36674000000001],'Elevation':57.5845},{'Point':[26.101960000000002,119.36725000000001],'Elevation':61.2459},{'Point':[26.101530000000004,119.36721000000001],'Elevation':64.7154},{'Point':[26.100900000000003,119.36697000000001],'Elevation':68.1881},{'Point':[26.100415000136522,119.36697500001934],'Elevation':71.7923},{'Point':[26.09993,119.36698000000001],'Elevation':75.4172},{'Point':[26.099330000000002,119.36702000000001],'Elevation':79.066},{'Point':[26.09898,119.36725000000001],'Elevation':82.6214},{'Point':[26.098730000000003,119.36766000000001],'Elevation':86.2373},{'Point':[26.09861,119.36793000000002],'Elevation':89.5809},{'Point':[26.09861,119.36874000000002],'Elevation':93.0389},{'Point':[26.098460000000003,119.36911],'Elevation':96.3301},{'Point':[26.098190000000002,119.36928],'Elevation':99.4907},{'Point':[26.09746,119.36887000000002],'Elevation':103.3628},{'Point':[26.096970000000002,119.36884],'Elevation':107.3573},{'Point':[26.096780000000003,119.3687],'Elevation':110.9018},{'Point':[26.096580000000003,119.36793000000002],'Elevation':114.5406},{'Point':[26.096290000000003,119.36791000000001],'Elevation':117.672},{'Point':[26.096200000000003,119.36814000000001],'Elevation':120.5119},{'Point':[26.09617,119.36836000000001],'Elevation':123.111},{'Point':[26.09662,119.36900000000001],'Elevation':125.9004},{'Point':[26.09746,119.36924],'Elevation':129.0855},{'Point':[26.097690000000004,119.36980000000001],'Elevation':131.9769},{'Point':[26.09786,119.36989000000001],'Elevation':134.5568},{'Point':[26.098070000000003,119.36994000000001],'Elevation':136.8653},{'Point':[26.0985,119.37068000000001],'Elevation':139.8105},{'Point':[26.098650000000003,119.3708],'Elevation':142.5769},{'Point':[26.098830000000003,119.37083000000001],'Elevation':145.051},{'Point':[26.09898,119.37069000000001],'Elevation':147.3343},{'Point':[26.099090000000004,119.37017000000002],'Elevation':149.7183},{'Point':[26.09954,119.36972000000002],'Elevation':152.3287},{'Point':[26.099600000000002,119.36906],'Elevation':155.5478},{'Point':[26.099700000000002,119.36863000000001],'Elevation':158.5969},{'Point':[26.099880000000002,119.36856000000002],'Elevation':161.5755},{'Point':[26.100420000279684,119.36885999859783],'Elevation':164.7921},{'Point':[26.10096,119.36916000000001],'Elevation':168.3021},{'Point':[26.101480000000002,119.36936000000001],'Elevation':171.7078},{'Point':[26.10215333380841,119.36909666970033],'Elevation':175.177},{'Point':[26.10282666713865,119.36883333636827],'Elevation':179.1647},{'Point':[26.1035,119.36857],'Elevation':183.2877},{'Point':[26.103880000000004,119.36865000000002],'Elevation':187.1894},{'Point':[26.104670000000002,119.36827000000001],'Elevation':191.5371},{'Point':[26.10497,119.36850000000001],'Elevation':195.5448},{'Point':[26.10534,119.36938],'Elevation':199.9791},{'Point':[26.105710000000002,119.36991],'Elevation':204.3775},{'Point':[26.105780000000003,119.3708],'Elevation':209.0429},{'Point':[26.106375000150081,119.37088499958534],'Elevation':214.0787},{'Point':[26.10697,119.37097000000001],'Elevation':218.9387},{'Point':[26.107495000170683,119.37109499946651],'Elevation':223.5748},{'Point':[26.108020000000003,119.37122000000001],'Elevation':228.2484},{'Point':[26.10874,119.37152],'Elevation':232.9643},{'Point':[26.10922,119.37125],'Elevation':236.9616},{'Point':[26.10929,119.37074000000001],'Elevation':240.3459},{'Point':[26.109725000352633,119.37044500106211],'Elevation':243.2112},{'Point':[26.11016,119.37015000000001],'Elevation':245.6371},{'Point':[26.110090000000003,119.36953000000001],'Elevation':247.691},{'Point':[26.110300000000002,119.36856000000002],'Elevation':249.4299},{'Point':[26.110920000000004,119.3683],'Elevation':250.9021},{'Point':[26.111463334140218,119.36864333013777],'Elevation':264.003},{'Point':[26.112006667467366,119.36898666346715],'Elevation':275.0947},{'Point':[26.112550000000002,119.36933],'Elevation':284.4855},{'Point':[26.11315,119.36999000000002],'Elevation':292.4361},{'Point':[26.113750000000003,119.36999000000002],'Elevation':299.1675},{'Point':[26.114390000000004,119.37058],'Elevation':304.8666},{'Point':[26.11476,119.37038000000001],'Elevation':309.6916},{'Point':[26.115185000813142,119.36986500199586],'Elevation':314.3933},{'Point':[26.115610000000004,119.36935000000001],'Elevation':319.1974},{'Point':[26.11579,119.36929],'Elevation':323.2648},{'Point':[26.116000000000003,119.36936000000001],'Elevation':327.0489},{'Point':[26.11605,119.36958000000001],'Elevation':330.4413},{'Point':[26.115840000000002,119.36983000000001],'Elevation':333.5128},{'Point':[26.115330000000004,119.37017000000002],'Elevation':336.6577},{'Point':[26.114965000694809,119.37062000140982],'Elevation':339.6055},{'Point':[26.114600000000003,119.37107],'Elevation':342.2608},{'Point':[26.114070000274864,119.37073499841004],'Elevation':344.676},{'Point':[26.11354,119.3704],'Elevation':346.819},{'Point':[26.112940000000002,119.37076],'Elevation':349.0643},{'Point':[26.112480000722037,119.3703149982866],'Elevation':351.8838},{'Point':[26.11202,119.36987],'Elevation':354.7863},{'Point':[26.11166,119.36979000000001],'Elevation':357.4966},{'Point':[26.11182,119.37071000000002],'Elevation':360.7728},{'Point':[26.11156,119.37161],'Elevation':364.617},{'Point':[26.111860001116195,119.3721949983737],'Elevation':368.3455},{'Point':[26.112160000000003,119.37278],'Elevation':372.2967},{'Point':[26.112460000000002,119.37353000000002],'Elevation':376.5543},{'Point':[26.11193,119.37394],'Elevation':380.9228},{'Point':[26.112070000841374,119.37443499939415],'Elevation':385.1427},{'Point':[26.11221,119.37493],'Elevation':389.2231},{'Point':[26.11175,119.37504000000001],'Elevation':393.0503},{'Point':[26.111309999985217,119.37492499955135],'Elevation':396.7722},{'Point':[26.110870000000002,119.37481000000001],'Elevation':400.2684},{'Point':[26.110425000222772,119.37502500078782],'Elevation':403.9277},{'Point':[26.109980000000004,119.37524],'Elevation':407.6469},{'Point':[26.10913,119.37496000000002],'Elevation':411.8953},{'Point':[26.10835,119.37504000000001],'Elevation':416.9476},{'Point':[26.10761,119.37450000000001],'Elevation':422.2909},{'Point':[26.10703,119.37447000000002],'Elevation':427.2441},{'Point':[26.106640000000002,119.37422000000001],'Elevation':431.7245},{'Point':[26.106225001986182,119.37498500277395],'Elevation':436.3276},{'Point':[26.10581,119.37575000000001],'Elevation':441.2936},{'Point':[26.105570000000004,119.37579000000001],'Elevation':445.9765},{'Point':[26.105310000000003,119.37541000000002],'Elevation':450.2971},{'Point':[26.10459,119.37522000000001],'Elevation':454.7617},{'Point':[26.104360000000003,119.37476000000001],'Elevation':459.1275},{'Point':[26.103700000000003,119.37491000000001],'Elevation':463.7408},{'Point':[26.103450000000002,119.37575000000001],'Elevation':468.441},{'Point':[26.1031,119.37599000000002],'Elevation':472.7149},{'Point':[26.102850000000004,119.37651000000001],'Elevation':476.7919},{'Point':[26.103410000000004,119.37713000000001],'Elevation':480.8448},{'Point':[26.103585001156322,119.37769999926441],'Elevation':484.9601},{'Point':[26.10376,119.37827000000001],'Elevation':489.1789},{'Point':[26.103615001271109,119.37888500090267],'Elevation':493.5466},{'Point':[26.10347,119.37950000000001],'Elevation':497.8687},{'Point':[26.10328,119.38007],'Elevation':502.3131},{'Point':[26.103060000000003,119.38015000000001],'Elevation':506.1941},{'Point':[26.102500000000003,119.37995000000001],'Elevation':510.5886},{'Point':[26.101930000000003,119.38011000000002],'Elevation':514.9763},{'Point':[26.101360000000003,119.3798],'Elevation':519.3153},{'Point':[26.101180000000003,119.37981],'Elevation':523.1377},{'Point':[26.102020000000003,119.38038000000002],'Elevation':527.6712},{'Point':[26.10234,119.38047000000002],'Elevation':531.8868},{'Point':[26.102846667738461,119.38085999663812],'Elevation':536.0141},{'Point':[26.103353334428057,119.38124999665573],'Elevation':540.6754},{'Point':[26.10386,119.38164],'Elevation':545.2737},{'Point':[26.104340000607969,119.38202999846695],'Elevation':549.9643},{'Point':[26.104820000000004,119.38242000000001],'Elevation':554.3542},{'Point':[26.105360000020877,119.38243999990837],'Elevation':558.5402},{'Point':[26.105900000000002,119.38246000000001],'Elevation':562.6455},{'Point':[26.1061,119.38268000000001],'Elevation':566.5015},{'Point':[26.106635002173569,119.38347499635361],'Elevation':571.2737},{'Point':[26.107170000000004,119.38427000000001],'Elevation':576.179},{'Point':[26.107090000000003,119.38451],'Elevation':580.2676},{'Point':[26.10687,119.38457000000001],'Elevation':583.7139},{'Point':[26.10666,119.38443000000001],'Elevation':586.6991},{'Point':[26.10638,119.38418000000001],'Elevation':589.3707},{'Point':[26.106180000000002,119.3841],'Elevation':591.6939},{'Point':[26.10592,119.38418000000001],'Elevation':593.6685},{'Point':[26.105890000000002,119.3845],'Elevation':595.4492},{'Point':[26.10583,119.38485000000001],'Elevation':597.3279},{'Point':[26.105770000000003,119.38508000000002],'Elevation':599.0305},{'Point':[26.105660000000004,119.38531],'Elevation':600.9182},{'Point':[26.105520000000002,119.38555000000001],'Elevation':602.7235},{'Point':[26.10537,119.38589],'Elevation':604.3347},{'Point':[26.10536,119.38667000000001],'Elevation':605.7909},{'Point':[26.105300000000003,119.38753000000001],'Elevation':606.5821},{'Point':[26.10525,119.38786],'Elevation':607.0847},{'Point':[26.105130000000003,119.38821000000002],'Elevation':607.4935},{'Point':[26.10499,119.38849],'Elevation':607.8733},{'Point':[26.104830000000003,119.38877000000001],'Elevation':608.1503},{'Point':[26.104470000000003,119.38881],'Elevation':608.253},{'Point':[26.10424,119.38872],'Elevation':608.3354},{'Point':[26.10405,119.38858],'Elevation':608.4388},{'Point':[26.103890000000003,119.38839000000002],'Elevation':608.6767},{'Point':[26.10377,119.38814],'Elevation':609.191},{'Point':[26.103630000000003,119.38771000000001],'Elevation':609.8426},{'Point':[26.103085000145896,119.38740499929808],'Elevation':610.1014},{'Point':[26.102660000000004,119.38721000000001],'Elevation':610.0398},{'Point':[26.10235,119.38673000000001],'Elevation':609.842},{'Point':[26.102190000000004,119.38657],'Elevation':609.7819},{'Point':[26.101910000000004,119.38656],'Elevation':610.1573},{'Point':[26.101420000136049,119.38663000027626],'Elevation':611.1515},{'Point':[26.10093,119.3867],'Elevation':612.6112},{'Point':[26.100480000257267,119.38687500061438],'Elevation':614.1814},{'Point':[26.100030000000004,119.38705000000002],'Elevation':616.2837},{'Point':[26.09984,119.38706],'Elevation':618.5006},{'Point':[26.09963,119.38703000000001],'Elevation':620.3776},{'Point':[26.099400000000003,119.38687000000002],'Elevation':622.2734},{'Point':[26.099010000000003,119.38656],'Elevation':624.5717},{'Point':[26.098830000000003,119.38651000000002],'Elevation':626.6279},{'Point':[26.098370000000003,119.38655000000001],'Elevation':628.5529},{'Point':[26.09824,119.38638000000002],'Elevation':630.3038},{'Point':[26.098370000000003,119.38611000000002],'Elevation':632.1358},{'Point':[26.09843,119.38587000000001],'Elevation':634.1362},{'Point':[26.09823,119.38591000000001],'Elevation':636.043},{'Point':[26.09784,119.38646000000001],'Elevation':638.2462},{'Point':[26.097720000000002,119.38682000000001],'Elevation':640.4352},{'Point':[26.097690000000004,119.38718000000001],'Elevation':642.4418},{'Point':[26.09758,119.38739000000001],'Elevation':644.176},{'Point':[26.097430000000003,119.38780000000001],'Elevation':645.6596},{'Point':[26.09738,119.38807000000001],'Elevation':646.9524},{'Point':[26.09721,119.38834000000001],'Elevation':648.1866},{'Point':[26.0969,119.38868000000001],'Elevation':649.4983},{'Point':[26.096850000000003,119.38897000000001],'Elevation':650.7883},{'Point':[26.09674,119.38929000000002],'Elevation':652.2209},{'Point':[26.09589,119.38932000000001],'Elevation':653.7727},{'Point':[26.09571,119.38952],'Elevation':655.1325},{'Point':[26.09571,119.38975],'Elevation':656.2869},{'Point':[26.09587,119.39011],'Elevation':657.2505},{'Point':[26.09606,119.39028],'Elevation':658.1046},{'Point':[26.09616,119.39046],'Elevation':658.9228},{'Point':[26.096300000000003,119.39104],'Elevation':660.459},{'Point':[26.096310000000003,119.39127],'Elevation':662.2473},{'Point':[26.09598,119.39155000000001],'Elevation':664.4713},{'Point':[26.095820000000003,119.39167],'Elevation':666.6825},{'Point':[26.095640000000003,119.39187000000001],'Elevation':668.7218},{'Point':[26.09569,119.39245000000001],'Elevation':670.6814},{'Point':[26.095540000000003,119.39267000000001],'Elevation':672.4003},{'Point':[26.0953,119.39279],'Elevation':673.9016},{'Point':[26.09486,119.39255000000001],'Elevation':675.6864},{'Point':[26.094620000000003,119.39223000000001],'Elevation':677.8631},{'Point':[26.09429,119.39158],'Elevation':680.4758},{'Point':[26.094170000000002,119.39131],'Elevation':683.2368},{'Point':[26.09401,119.39118],'Elevation':685.7431},{'Point':[26.093760000000003,119.39131],'Elevation':687.5737},{'Point':[26.093600000000002,119.39145],'Elevation':688.9027},{'Point':[26.093290000000003,119.39167],'Elevation':689.6982},{'Point':[26.09298,119.39185],'Elevation':695.1074},{'Point':[26.092750000000002,119.39205000000001],'Elevation':700.8233},{'Point':[26.09251,119.39211000000002],'Elevation':705.6443},{'Point':[26.092060000000004,119.39227000000001],'Elevation':709.226},{'Point':[26.09164,119.39302],'Elevation':711.5055},{'Point':[26.09146,119.39357000000001],'Elevation':712.8711},{'Point':[26.09136,119.39399000000002],'Elevation':713.7389},{'Point':[26.09089,119.39449],'Elevation':714.3663},{'Point':[26.090590000000002,119.39497000000001],'Elevation':714.6291},{'Point':[26.090560000000004,119.39532000000001],'Elevation':714.6308},{'Point':[26.09109,119.39600000000002],'Elevation':714.7119},{'Point':[26.09119,119.39623],'Elevation':714.8067},{'Point':[26.091030000000003,119.39649000000001],'Elevation':714.8594},{'Point':[26.090840000000004,119.39649000000001],'Elevation':714.9024},{'Point':[26.090270000000004,119.39612000000001],'Elevation':715.0584},{'Point':[26.08969,119.39600000000002],'Elevation':714.9897},{'Point':[26.089150000000004,119.39584],'Elevation':714.2015},{'Point':[26.08895,119.39581000000001],'Elevation':712.9223},{'Point':[26.088710000000003,119.39612000000001],'Elevation':711.6046},{'Point':[26.08857,119.39682],'Elevation':709.9829},{'Point':[26.08845,119.39725000000001],'Elevation':708.383},{'Point':[26.088260000000002,119.39745],'Elevation':706.8674},{'Point':[26.08799,119.39733000000001],'Elevation':705.3542},{'Point':[26.0878,119.39685000000001],'Elevation':703.8951},{'Point':[26.087400000000002,119.39682],'Elevation':702.35},{'Point':[26.086980000742169,119.39737000096451],'Elevation':699.9469},{'Point':[26.086710000000004,119.39782000000001],'Elevation':697.3756},{'Point':[26.086190000000002,119.39827000000001],'Elevation':695.6173},{'Point':[26.08601,119.39857],'Elevation':694.5519},{'Point':[26.085890000000003,119.39900000000002],'Elevation':694.2925},{'Point':[26.085780000000003,119.39920000000001],'Elevation':694.2185},{'Point':[26.085600000000003,119.39920000000001],'Elevation':694.096},{'Point':[26.08546,119.39891000000001],'Elevation':693.7562},{'Point':[26.085390000000004,119.39843],'Elevation':693.3381},{'Point':[26.08518,119.39835000000001],'Elevation':693.1145},{'Point':[26.08499,119.39859000000001],'Elevation':693.077},{'Point':[26.08471,119.39886000000001],'Elevation':693.3167},{'Point':[26.08452,119.39897],'Elevation':693.627},{'Point':[26.084220000000002,119.39876000000001],'Elevation':693.836},{'Point':[26.08424,119.39817000000001],'Elevation':693.9194},{'Point':[26.084130000000002,119.39773000000001],'Elevation':693.9026},{'Point':[26.08386,119.39732000000001],'Elevation':693.7796},{'Point':[26.08339,119.39710000000001],'Elevation':693.5281},{'Point':[26.083060000000003,119.39707000000001],'Elevation':693.1005},{'Point':[26.08255,119.39725000000001],'Elevation':692.3015},{'Point':[26.082120000000003,119.39749],'Elevation':691.7783},{'Point':[26.0818,119.39770000000001],'Elevation':691.7126},{'Point':[26.08161,119.39767],'Elevation':691.7521},{'Point':[26.08172,119.39722],'Elevation':692.3989},{'Point':[26.08189,119.39701000000001],'Elevation':693.4895},{'Point':[26.08163,119.39686],'Elevation':695.1979},{'Point':[26.08143,119.39691],'Elevation':696.8422},{'Point':[26.08132,119.39729000000001],'Elevation':698.7174},{'Point':[26.08113,119.39756000000001],'Elevation':700.6271},{'Point':[26.08086,119.39759000000001],'Elevation':702.5383},{'Point':[26.080470000000002,119.39744],'Elevation':704.612},{'Point':[26.080050000000004,119.39706000000001],'Elevation':707.0991},{'Point':[26.07994,119.39687],'Elevation':709.421},{'Point':[26.079860000000004,119.39646],'Elevation':711.6752},{'Point':[26.079720000000002,119.39631000000001],'Elevation':713.5821},{'Point':[26.079255000078053,119.39643000046932],'Elevation':715.12},{'Point':[26.07879,119.39655],'Elevation':716.3652},{'Point':[26.078450000000004,119.39686],'Elevation':717.2677},{'Point':[26.078210000000002,119.39727],'Elevation':718.0333},{'Point':[26.07794,119.39742000000001],'Elevation':718.8977},{'Point':[26.07759,119.39730000000002],'Elevation':719.8059},{'Point':[26.077260000000003,119.39704],'Elevation':721.242},{'Point':[26.076950000000004,119.39714000000001],'Elevation':723.1065},{'Point':[26.07693,119.39759000000001],'Elevation':725.5745},{'Point':[26.076800000000002,119.39787000000001],'Elevation':728.2253},{'Point':[26.076100000000004,119.39844000000001],'Elevation':732.0783},{'Point':[26.076020000000003,119.39863000000001],'Elevation':735.71},{'Point':[26.07609,119.39901],'Elevation':739.1636},{'Point':[26.075870000000002,119.39919],'Elevation':742.1749},{'Point':[26.07572,119.39907000000001],'Elevation':744.8886},{'Point':[26.07561,119.39880000000001],'Elevation':747.2413},{'Point':[26.07543,119.39880000000001],'Elevation':749.2608},{'Point':[26.075170000000004,119.39931000000001],'Elevation':751.5334},{'Point':[26.07504,119.39948000000001],'Elevation':753.8117},{'Point':[26.07475,119.39939000000001],'Elevation':756.0781},{'Point':[26.0745,119.39891000000001],'Elevation':758.6363},{'Point':[26.07428,119.39861],'Elevation':761.2547},{'Point':[26.0741,119.39866],'Elevation':763.8518},{'Point':[26.07382,119.39880000000001],'Elevation':766.5628},{'Point':[26.073590000000003,119.39886000000001],'Elevation':769.3197},{'Point':[26.073410000000003,119.39872000000001],'Elevation':771.9928},{'Point':[26.07299,119.39821],'Elevation':775.5441},{'Point':[26.072950000000002,119.39783000000001],'Elevation':779.066},{'Point':[26.072830000000003,119.39755000000001],'Elevation':782.396},{'Point':[26.072820000000004,119.39732000000001],'Elevation':785.3671},{'Point':[26.072940000000003,119.39707000000001],'Elevation':787.8826},{'Point':[26.073130000000003,119.39679000000001],'Elevation':790.3221},{'Point':[26.07318,119.39655],'Elevation':792.5086},{'Point':[26.07288,119.39598000000001],'Elevation':794.7309},{'Point':[26.07279,119.39563000000001],'Elevation':795.3427},{'Point':[26.072670000000002,119.39534],'Elevation':794.873},{'Point':[26.07234,119.39502000000002],'Elevation':792.0309},{'Point':[26.072070000000004,119.39494],'Elevation':789.1614},{'Point':[26.071600000000004,119.39523000000001],'Elevation':786.3011},{'Point':[26.071350000000002,119.39529],'Elevation':783.7261}]}"; + string json = "{'Type':'LineString','TotalDistance':22.201689999999992,'List':[{'Point':[32.060793,118.808228],'Elevation':14.5598},{'Point':[32.061604,118.808548],'Elevation':14.3954},{'Point':[32.063085,118.809059],'Elevation':14.0074},{'Point':[32.064306,118.80951],'Elevation':14.2812},{'Point':[32.065217,118.809841],'Elevation':14.701},{'Point':[32.066188,118.810121],'Elevation':15.2048},{'Point':[32.066558,118.810492],'Elevation':15.4843},{'Point':[32.067079,118.810983],'Elevation':15.5637},{'Point':[32.06756,118.811344],'Elevation':15.507},{'Point':[32.067931,118.811574],'Elevation':15.469},{'Point':[32.068451,118.811845],'Elevation':15.5912},{'Point':[32.068852,118.812085],'Elevation':15.6546},{'Point':[32.069433,118.812766],'Elevation':15.8589},{'Point':[32.070115,118.813588],'Elevation':16.2968},{'Point':[32.070646,118.814229],'Elevation':16.9136},{'Point':[32.071368,118.815101],'Elevation':17.4104},{'Point':[32.07228,118.816213],'Elevation':17.7138},{'Point':[32.072561,118.816554],'Elevation':17.9888},{'Point':[32.072821,118.816885],'Elevation':18.502},{'Point':[32.073483,118.817706],'Elevation':19.5909},{'Point':[32.073844,118.818147],'Elevation':20.596},{'Point':[32.074305,118.818729],'Elevation':21.2868},{'Point':[32.074786,118.81927],'Elevation':21.6856},{'Point':[32.074987,118.81951],'Elevation':22.0494},{'Point':[32.075448,118.819991],'Elevation':22.3838},{'Point':[32.075909,118.820492],'Elevation':22.6512},{'Point':[32.076069,118.820662],'Elevation':22.8796},{'Point':[32.07637,118.821003],'Elevation':23.0857},{'Point':[32.07659,118.821133],'Elevation':23.2517},{'Point':[32.076831,118.821384],'Elevation':23.532},{'Point':[32.077212,118.822025],'Elevation':24.0643},{'Point':[32.077494,118.822867],'Elevation':24.8455},{'Point':[32.077645,118.823438],'Elevation':25.8294},{'Point':[32.077756,118.823879],'Elevation':26.909},{'Point':[32.077896,118.82422],'Elevation':28.0635},{'Point':[32.078037,118.82448],'Elevation':29.1886},{'Point':[32.078267,118.824781],'Elevation':30.2586},{'Point':[32.078418,118.824941],'Elevation':31.1856},{'Point':[32.078728,118.825232],'Elevation':31.9239},{'Point':[32.078969,118.825332],'Elevation':32.549},{'Point':[32.079169,118.825322],'Elevation':33.0782},{'Point':[32.079498,118.825202],'Elevation':33.544},{'Point':[32.079958,118.825021],'Elevation':33.9813},{'Point':[32.080328,118.824941],'Elevation':34.3312},{'Point':[32.081018,118.824861],'Elevation':34.4341},{'Point':[32.081618,118.824811],'Elevation':34.2067},{'Point':[32.081948,118.824811],'Elevation':33.8412},{'Point':[32.082178,118.824841],'Elevation':33.428},{'Point':[32.082369,118.824911],'Elevation':33.0365},{'Point':[32.082579,118.825051],'Elevation':32.6545},{'Point':[32.082769,118.825191],'Elevation':32.2689},{'Point':[32.08304,118.825442],'Elevation':31.9885},{'Point':[32.08319,118.825652],'Elevation':31.8223},{'Point':[32.083331,118.825893],'Elevation':31.7163},{'Point':[32.083742,118.826624],'Elevation':31.7409},{'Point':[32.083973,118.826975],'Elevation':31.8967},{'Point':[32.084113,118.827135],'Elevation':32.0943},{'Point':[32.084354,118.827376],'Elevation':32.289},{'Point':[32.084504,118.827496],'Elevation':32.4791},{'Point':[32.084884,118.827727],'Elevation':32.7283},{'Point':[32.085155,118.827887],'Elevation':32.9179},{'Point':[32.085435,118.828047],'Elevation':32.9931},{'Point':[32.085675,118.828198],'Elevation':32.9919},{'Point':[32.085976,118.828348],'Elevation':32.8424},{'Point':[32.086397,118.829079],'Elevation':32.7725},{'Point':[32.086608,118.82946],'Elevation':32.6947},{'Point':[32.086819,118.829821],'Elevation':32.5996},{'Point':[32.086969,118.830122],'Elevation':32.5681},{'Point':[32.08711,118.830472],'Elevation':32.4398},{'Point':[32.087201,118.830753],'Elevation':32.2517},{'Point':[32.087271,118.831033],'Elevation':32.042},{'Point':[32.087402,118.831615],'Elevation':31.912},{'Point':[32.087463,118.831905],'Elevation':31.9259},{'Point':[32.087503,118.832196],'Elevation':32.0906},{'Point':[32.087554,118.832547],'Elevation':32.2625},{'Point':[32.087584,118.832757],'Elevation':32.4019},{'Point':[32.087645,118.833007],'Elevation':32.4994},{'Point':[32.087725,118.833358],'Elevation':32.605},{'Point':[32.087846,118.833609],'Elevation':32.7142},{'Point':[32.088017,118.8344],'Elevation':32.8226},{'Point':[32.08833,118.835633],'Elevation':33.1344},{'Point':[32.08842,118.835994],'Elevation':33.5805},{'Point':[32.088511,118.836384],'Elevation':34.1777},{'Point':[32.088582,118.836615],'Elevation':34.8768},{'Point':[32.088762,118.837006],'Elevation':35.7894},{'Point':[32.089103,118.837386],'Elevation':36.8831},{'Point':[32.089364,118.837667],'Elevation':37.9825},{'Point':[32.090856,118.838889],'Elevation':38.9346},{'Point':[32.091077,118.8391],'Elevation':39.674},{'Point':[32.091227,118.83925],'Elevation':40.1489},{'Point':[32.091377,118.83944],'Elevation':40.3744},{'Point':[32.091628,118.839951],'Elevation':40.1874},{'Point':[32.091899,118.840653],'Elevation':39.8998},{'Point':[32.09205,118.841053],'Elevation':39.9208},{'Point':[32.092492,118.842256],'Elevation':40.4509},{'Point':[32.093045,118.843779],'Elevation':41.4429},{'Point':[32.093327,118.84459],'Elevation':42.4297},{'Point':[32.093709,118.845913],'Elevation':43.2054},{'Point':[32.09379,118.846323],'Elevation':44.124},{'Point':[32.09386,118.846764],'Elevation':45.2302},{'Point':[32.093911,118.847275],'Elevation':46.6257},{'Point':[32.094073,118.848287],'Elevation':46.8993},{'Point':[32.094427,118.850721],'Elevation':46.1525},{'Point':[32.094457,118.850952],'Elevation':45.3749},{'Point':[32.094508,118.851332],'Elevation':44.3658},{'Point':[32.094578,118.851653],'Elevation':43.331},{'Point':[32.094659,118.851953],'Elevation':42.3697},{'Point':[32.094789,118.852344],'Elevation':41.4875},{'Point':[32.09485,118.852875],'Elevation':40.7268},{'Point':[32.094901,118.853396],'Elevation':40.2125},{'Point':[32.094873,118.854378],'Elevation':40.3656},{'Point':[32.094843,118.854818],'Elevation':40.47},{'Point':[32.094794,118.855229],'Elevation':40.2729},{'Point':[32.094695,118.85575],'Elevation':39.6601},{'Point':[32.094545,118.85589],'Elevation':39.1112},{'Point':[32.094355,118.85605],'Elevation':38.6262},{'Point':[32.094035,118.856341],'Elevation':38.203},{'Point':[32.093586,118.856722],'Elevation':38.0209},{'Point':[32.092936,118.857313],'Elevation':38.1629},{'Point':[32.087611,118.861579],'Elevation':41.6177},{'Point':[32.086322,118.862641],'Elevation':44.301},{'Point':[32.085923,118.862992],'Elevation':46.4114},{'Point':[32.085603,118.863352],'Elevation':48.0813},{'Point':[32.085413,118.863603],'Elevation':49.3257},{'Point':[32.085124,118.864203],'Elevation':50.2301},{'Point':[32.084895,118.864704],'Elevation':51.0639},{'Point':[32.084346,118.865836],'Elevation':50.9843},{'Point':[32.083976,118.866466],'Elevation':50.9001},{'Point':[32.083787,118.866747],'Elevation':50.7623},{'Point':[32.083337,118.867298],'Elevation':50.54},{'Point':[32.082738,118.867928],'Elevation':49.9583},{'Point':[32.081359,118.86949],'Elevation':48.6999},{'Point':[32.0808,118.870191],'Elevation':47.4326},{'Point':[32.08061,118.870482],'Elevation':46.2355},{'Point':[32.080221,118.871062],'Elevation':45.0444},{'Point':[32.079941,118.871473],'Elevation':44.0826},{'Point':[32.079362,118.872364],'Elevation':43.6268},{'Point':[32.079072,118.872864],'Elevation':43.3205},{'Point':[32.078663,118.873475],'Elevation':42.8172},{'Point':[32.078163,118.874166],'Elevation':42.6756},{'Point':[32.077674,118.874836],'Elevation':43.0225},{'Point':[32.077554,118.875006],'Elevation':43.3747},{'Point':[32.077124,118.875687],'Elevation':43.5312},{'Point':[32.076765,118.876288],'Elevation':43.4751},{'Point':[32.076545,118.876578],'Elevation':43.3309},{'Point':[32.076365,118.876738],'Elevation':43.0884},{'Point':[32.076175,118.876858],'Elevation':42.8163},{'Point':[32.075985,118.876948],'Elevation':42.5425},{'Point':[32.075505,118.877159],'Elevation':42.4904},{'Point':[32.075235,118.877289],'Elevation':42.5829},{'Point':[32.074865,118.877519],'Elevation':42.5988},{'Point':[32.074455,118.877799],'Elevation':42.3545},{'Point':[32.074006,118.878109],'Elevation':42.0795},{'Point':[32.073166,118.87875],'Elevation':41.5206},{'Point':[32.072926,118.87894],'Elevation':40.9802},{'Point':[32.072686,118.87913],'Elevation':40.536},{'Point':[32.072316,118.879431],'Elevation':40.0109},{'Point':[32.071966,118.879661],'Elevation':39.2338},{'Point':[32.071576,118.879871],'Elevation':38.2732},{'Point':[32.071336,118.879981],'Elevation':37.3074},{'Point':[32.071076,118.880091],'Elevation':36.3334},{'Point':[32.070796,118.880201],'Elevation':35.3149},{'Point':[32.070446,118.880311],'Elevation':34.1848},{'Point':[32.069766,118.880512],'Elevation':32.9739},{'Point':[32.067936,118.881112],'Elevation':31.8529},{'Point':[32.067096,118.881402],'Elevation':30.9703},{'Point':[32.064616,118.882243],'Elevation':30.1171},{'Point':[32.064356,118.882363],'Elevation':29.4573},{'Point':[32.064036,118.882553],'Elevation':29.0123},{'Point':[32.063107,118.883084],'Elevation':28.5364},{'Point':[32.062737,118.883214],'Elevation':28.0861},{'Point':[32.062507,118.883244],'Elevation':27.7072},{'Point':[32.062336,118.882804],'Elevation':27.5764},{'Point':[32.062096,118.882814],'Elevation':27.4923},{'Point':[32.061896,118.882814],'Elevation':27.4974},{'Point':[32.061716,118.882744],'Elevation':27.6248},{'Point':[32.061576,118.882604],'Elevation':27.914},{'Point':[32.061476,118.882394],'Elevation':28.3938},{'Point':[32.061396,118.882103],'Elevation':29.1902},{'Point':[32.061275,118.881903],'Elevation':30.1313},{'Point':[32.061095,118.881873],'Elevation':30.9852},{'Point':[32.060705,118.881883],'Elevation':31.7854},{'Point':[32.060435,118.881883],'Elevation':32.5659},{'Point':[32.060235,118.881913],'Elevation':33.2703},{'Point':[32.059895,118.882124],'Elevation':33.8814},{'Point':[32.059705,118.882214],'Elevation':34.4289},{'Point':[32.059505,118.882194],'Elevation':35.0778},{'Point':[32.058935,118.881653],'Elevation':36.6918},{'Point':[32.058785,118.881523],'Elevation':38.1148},{'Point':[32.058575,118.881333],'Elevation':39.2033},{'Point':[32.058274,118.881003],'Elevation':40.0131},{'Point':[32.058024,118.881013],'Elevation':40.5473},{'Point':[32.057664,118.881073],'Elevation':40.6434},{'Point':[32.057414,118.881103],'Elevation':40.4723},{'Point':[32.057204,118.881073],'Elevation':40.2954},{'Point':[32.057034,118.880993],'Elevation':40.1678},{'Point':[32.056684,118.880793],'Elevation':40.1504},{'Point':[32.056103,118.880393],'Elevation':40.0022},{'Point':[32.055803,118.880103],'Elevation':39.849},{'Point':[32.055653,118.879913],'Elevation':39.7715},{'Point':[32.055213,118.879522],'Elevation':39.9339},{'Point':[32.055072,118.879322],'Elevation':40.4245},{'Point':[32.054982,118.879052],'Elevation':41.3912},{'Point':[32.055052,118.878852],'Elevation':42.5574},{'Point':[32.055222,118.878692],'Elevation':43.6886},{'Point':[32.055362,118.878522],'Elevation':44.7815},{'Point':[32.055192,118.878201],'Elevation':46.5977},{'Point':[32.055071,118.877961],'Elevation':48.8389},{'Point':[32.054961,118.877731],'Elevation':51.3663},{'Point':[32.054921,118.877491],'Elevation':53.8668},{'Point':[32.054941,118.877241],'Elevation':55.89},{'Point':[32.054941,118.87694],'Elevation':57.5183},{'Point':[32.05478,118.87679],'Elevation':58.7643},{'Point':[32.05417,118.87667],'Elevation':59.2835},{'Point':[32.05385,118.8766],'Elevation':59.4259},{'Point':[32.05366,118.87654],'Elevation':59.379},{'Point':[32.0535,118.87642],'Elevation':59.0251},{'Point':[32.053219,118.87611],'Elevation':57.9021},{'Point':[32.053029,118.87592],'Elevation':56.463},{'Point':[32.052819,118.875779],'Elevation':54.8268},{'Point':[32.052369,118.875619],'Elevation':52.9008},{'Point':[32.051839,118.875429],'Elevation':50.7493},{'Point':[32.051418,118.875289],'Elevation':48.4307},{'Point':[32.051218,118.875269],'Elevation':46.2993},{'Point':[32.051008,118.875329],'Elevation':44.3837},{'Point':[32.050828,118.875559],'Elevation':42.7953},{'Point':[32.050639,118.87591],'Elevation':41.6147},{'Point':[32.050489,118.87604],'Elevation':40.5328},{'Point':[32.050289,118.87601],'Elevation':39.3267},{'Point':[32.050158,118.87578],'Elevation':38.044},{'Point':[32.049888,118.875009],'Elevation':36.7717},{'Point':[32.049727,118.874579],'Elevation':35.8602},{'Point':[32.049577,118.874258],'Elevation':35.3608},{'Point':[32.049467,118.874068],'Elevation':35.214},{'Point':[32.049387,118.873868],'Elevation':35.3845},{'Point':[32.049406,118.873618],'Elevation':35.7955},{'Point':[32.049446,118.873407],'Elevation':36.3561},{'Point':[32.049516,118.873167],'Elevation':36.9277},{'Point':[32.049596,118.872957],'Elevation':37.5366},{'Point':[32.049736,118.872687],'Elevation':38.2869},{'Point':[32.049865,118.872436],'Elevation':39.1523},{'Point':[32.050155,118.871866],'Elevation':39.8747},{'Point':[32.050265,118.871606],'Elevation':40.5283},{'Point':[32.050354,118.871215],'Elevation':41.2029},{'Point':[32.050394,118.870995],'Elevation':41.8362},{'Point':[32.050444,118.870705],'Elevation':42.4717},{'Point':[32.050523,118.870054],'Elevation':42.4322},{'Point':[32.050573,118.869733],'Elevation':42.2512},{'Point':[32.050623,118.869433],'Elevation':41.9864},{'Point':[32.050682,118.869173],'Elevation':41.706},{'Point':[32.050732,118.868943],'Elevation':41.4396},{'Point':[32.050792,118.868742],'Elevation':41.1959},{'Point':[32.050931,118.868222],'Elevation':41.0283},{'Point':[32.051071,118.867661],'Elevation':40.8843},{'Point':[32.05117,118.867361],'Elevation':40.7395},{'Point':[32.05129,118.86705],'Elevation':40.5534},{'Point':[32.05144,118.86674],'Elevation':40.3243},{'Point':[32.051659,118.866399],'Elevation':40.1555},{'Point':[32.052239,118.865668],'Elevation':40.3937},{'Point':[32.052378,118.865438],'Elevation':40.8041},{'Point':[32.052458,118.865168],'Elevation':41.3904},{'Point':[32.052478,118.864787],'Elevation':42.3943},{'Point':[32.052437,118.864447],'Elevation':43.6045},{'Point':[32.052397,118.864166],'Elevation':44.7816},{'Point':[32.052317,118.863936],'Elevation':45.8608},{'Point':[32.052005,118.863155],'Elevation':46.5665},{'Point':[32.051905,118.862915],'Elevation':47.0296},{'Point':[32.051795,118.862614],'Elevation':47.2634},{'Point':[32.051704,118.862334],'Elevation':47.258},{'Point':[32.051674,118.862063],'Elevation':47.0684},{'Point':[32.051714,118.861753],'Elevation':46.7497},{'Point':[32.051843,118.861433],'Elevation':46.3441},{'Point':[32.052053,118.861132],'Elevation':45.9732},{'Point':[32.052232,118.860741],'Elevation':45.8251},{'Point':[32.052282,118.860461],'Elevation':45.7824},{'Point':[32.052341,118.85995],'Elevation':46.0983},{'Point':[32.052451,118.85978],'Elevation':46.5503},{'Point':[32.0525,118.859039],'Elevation':47.7787},{'Point':[32.052698,118.857647],'Elevation':50.6302},{'Point':[32.052748,118.857356],'Elevation':53.0522},{'Point':[32.052837,118.857036],'Elevation':55.0985},{'Point':[32.052867,118.856785],'Elevation':56.6775},{'Point':[32.052947,118.856505],'Elevation':57.7743},{'Point':[32.053106,118.856174],'Elevation':58.3203},{'Point':[32.053196,118.855984],'Elevation':58.5045},{'Point':[32.053755,118.855313],'Elevation':58.2366},{'Point':[32.054025,118.854982],'Elevation':57.8621},{'Point':[32.054244,118.854612],'Elevation':57.2615},{'Point':[32.054334,118.854371],'Elevation':56.5957},{'Point':[32.054383,118.854131],'Elevation':55.9891},{'Point':[32.054423,118.85378],'Elevation':55.7191},{'Point':[32.054413,118.85353],'Elevation':55.6271},{'Point':[32.054362,118.853269],'Elevation':55.8101},{'Point':[32.054272,118.852989],'Elevation':56.2213},{'Point':[32.054131,118.852688],'Elevation':56.7635},{'Point':[32.05378,118.852178],'Elevation':57.366},{'Point':[32.05369,118.851957],'Elevation':57.8381},{'Point':[32.05363,118.851727],'Elevation':58.205},{'Point':[32.053599,118.851456],'Elevation':58.4986},{'Point':[32.053609,118.851186],'Elevation':58.5775},{'Point':[32.053668,118.850865],'Elevation':58.495},{'Point':[32.053917,118.850134],'Elevation':58.5475},{'Point':[32.054047,118.849733],'Elevation':58.7532},{'Point':[32.054225,118.848942],'Elevation':59.7503},{'Point':[32.054345,118.848441],'Elevation':61.2328},{'Point':[32.054434,118.8481],'Elevation':62.8705},{'Point':[32.054504,118.84788],'Elevation':64.4278},{'Point':[32.054643,118.847439],'Elevation':66.0025},{'Point':[32.054802,118.846918],'Elevation':67.479},{'Point':[32.055061,118.846307],'Elevation':68.6261},{'Point':[32.055261,118.846006],'Elevation':69.4628},{'Point':[32.05541,118.845856],'Elevation':70.0519},{'Point':[32.0556,118.845746],'Elevation':70.4685},{'Point':[32.05591,118.845616],'Elevation':70.7517},{'Point':[32.05617,118.845475],'Elevation':71.0371},{'Point':[32.05636,118.845355],'Elevation':71.4123},{'Point':[32.056789,118.844954],'Elevation':72.0913},{'Point':[32.057069,118.844684],'Elevation':72.856},{'Point':[32.057079,118.844463],'Elevation':73.4784},{'Point':[32.056968,118.844223],'Elevation':73.9198},{'Point':[32.056787,118.843872],'Elevation':74.2494},{'Point':[32.056557,118.843642],'Elevation':74.3069},{'Point':[32.056307,118.843461],'Elevation':74.1545},{'Point':[32.055045,118.84276],'Elevation':73.7891},{'Point':[32.054765,118.84259],'Elevation':73.3927},{'Point':[32.054545,118.84248],'Elevation':72.8909},{'Point':[32.054304,118.84242],'Elevation':72.2876},{'Point':[32.054094,118.842389],'Elevation':71.6515},{'Point':[32.052293,118.842109],'Elevation':70.238},{'Point':[32.051993,118.841929],'Elevation':68.8369},{'Point':[32.051402,118.841448],'Elevation':67.2371},{'Point':[32.051182,118.841308],'Elevation':65.7595},{'Point':[32.050892,118.841217],'Elevation':64.394},{'Point':[32.050211,118.841037],'Elevation':63.0603},{'Point':[32.049561,118.840877],'Elevation':61.7515},{'Point':[32.0493,118.840777],'Elevation':60.5132},{'Point':[32.04904,118.840526],'Elevation':59.4045},{'Point':[32.0489,118.840326],'Elevation':58.4031},{'Point':[32.048549,118.839835],'Elevation':57.4389},{'Point':[32.048438,118.839625],'Elevation':56.5531},{'Point':[32.048347,118.839254],'Elevation':55.6992},{'Point':[32.048327,118.838943],'Elevation':55.0314},{'Point':[32.048356,118.838592],'Elevation':54.6692},{'Point':[32.048475,118.838081],'Elevation':54.4781},{'Point':[32.048525,118.837861],'Elevation':54.2537},{'Point':[32.048545,118.837641],'Elevation':53.9478},{'Point':[32.048524,118.83743],'Elevation':53.5647},{'Point':[32.048434,118.837099],'Elevation':53.0481},{'Point':[32.048333,118.836899],'Elevation':52.4184},{'Point':[32.048153,118.836629],'Elevation':51.6225},{'Point':[32.047862,118.836368],'Elevation':50.7506},{'Point':[32.047331,118.835867],'Elevation':49.7261},{'Point':[32.045738,118.834404],'Elevation':48.3684},{'Point':[32.044416,118.833192],'Elevation':46.1879},{'Point':[32.044725,118.832661],'Elevation':43.582},{'Point':[32.044814,118.83246],'Elevation':41.1197},{'Point':[32.044814,118.83215],'Elevation':38.818},{'Point':[32.044772,118.831438],'Elevation':36.9364},{'Point':[32.044672,118.831047],'Elevation':35.3809},{'Point':[32.044611,118.830827],'Elevation':34.0358},{'Point':[32.044561,118.830606],'Elevation':32.8016},{'Point':[32.04453,118.830376],'Elevation':31.6582},{'Point':[32.04454,118.830015],'Elevation':30.6528},{'Point':[32.044569,118.829795],'Elevation':29.8453},{'Point':[32.044669,118.829474],'Elevation':29.2324},{'Point':[32.044768,118.829173],'Elevation':28.7181},{'Point':[32.044868,118.828923],'Elevation':28.2765},{'Point':[32.044967,118.828722],'Elevation':27.8548},{'Point':[32.045127,118.828472],'Elevation':27.3276},{'Point':[32.045307,118.828271],'Elevation':26.7065},{'Point':[32.045446,118.828131],'Elevation':26.0557},{'Point':[32.045646,118.828001],'Elevation':25.4439},{'Point':[32.045846,118.827901],'Elevation':24.96},{'Point':[32.046046,118.82782],'Elevation':24.6625},{'Point':[32.046236,118.82778],'Elevation':24.5286},{'Point':[32.046516,118.82776],'Elevation':24.5749},{'Point':[32.046786,118.82778],'Elevation':24.7221},{'Point':[32.047306,118.82787],'Elevation':25.012},{'Point':[32.047717,118.82793],'Elevation':25.3603},{'Point':[32.048067,118.827991],'Elevation':25.6128},{'Point':[32.048327,118.828051],'Elevation':25.7918},{'Point':[32.048678,118.828301],'Elevation':25.7868},{'Point':[32.048938,118.828431],'Elevation':25.5017},{'Point':[32.049248,118.828451],'Elevation':24.9111},{'Point':[32.049368,118.828612],'Elevation':24.4787},{'Point':[32.04999,118.829433],'Elevation':24.4527},{'Point':[32.05018,118.829684],'Elevation':24.5432},{'Point':[32.050491,118.830075],'Elevation':24.7319},{'Point':[32.050792,118.830476],'Elevation':25.1214},{'Point':[32.051102,118.830335],'Elevation':25.3566},{'Point':[32.051402,118.830225],'Elevation':25.5892},{'Point':[32.051622,118.830205],'Elevation':25.9198},{'Point':[32.052002,118.830335],'Elevation':26.4896},{'Point':[32.052231,118.829784],'Elevation':26.9115},{'Point':[32.05241,118.829343],'Elevation':27.2986},{'Point':[32.052619,118.828782],'Elevation':27.5397},{'Point':[32.052898,118.82801],'Elevation':27.316},{'Point':[32.053037,118.827669],'Elevation':27.0054},{'Point':[32.053227,118.827329],'Elevation':26.6792},{'Point':[32.053426,118.827098],'Elevation':26.4358},{'Point':[32.054135,118.826327],'Elevation':26.6587},{'Point':[32.055214,118.825374],'Elevation':27.689},{'Point':[32.055503,118.825044],'Elevation':28.9185},{'Point':[32.055682,118.824703],'Elevation':30.2869},{'Point':[32.056221,118.823771],'Elevation':32.0053},{'Point':[32.05633,118.82358],'Elevation':33.4268},{'Point':[32.05644,118.82321],'Elevation':34.5765},{'Point':[32.056519,118.822739],'Elevation':35.4501},{'Point':[32.056736,118.820995],'Elevation':35.1811},{'Point':[32.056765,118.820694],'Elevation':34.5549},{'Point':[32.056784,118.820344],'Elevation':33.7114},{'Point':[32.056794,118.820093],'Elevation':32.8255},{'Point':[32.056753,118.819782],'Elevation':31.8413},{'Point':[32.056703,118.819442],'Elevation':30.7113},{'Point':[32.056712,118.819161],'Elevation':29.5279},{'Point':[32.056891,118.81871],'Elevation':28.5138},{'Point':[32.056991,118.8185],'Elevation':27.694},{'Point':[32.057111,118.818249],'Elevation':27.2305},{'Point':[32.05728,118.817898],'Elevation':27.2608},{'Point':[32.057469,118.817628],'Elevation':27.8111},{'Point':[32.057679,118.817517],'Elevation':28.844},{'Point':[32.057919,118.817527],'Elevation':30.2369},{'Point':[32.05821,118.817628],'Elevation':31.972},{'Point':[32.05851,118.817848],'Elevation':33.9502},{'Point':[32.058751,118.818069],'Elevation':35.9748},{'Point':[32.058951,118.818269],'Elevation':37.9318},{'Point':[32.059151,118.818439],'Elevation':39.9049},{'Point':[32.059341,118.818479],'Elevation':42.0364},{'Point':[32.059621,118.818339],'Elevation':44.5304},{'Point':[32.059991,118.818028],'Elevation':47.0725},{'Point':[32.06015,118.817858],'Elevation':49.2257},{'Point':[32.06029,118.817698],'Elevation':50.7448},{'Point':[32.06046,118.817447],'Elevation':51.4716},{'Point':[32.060579,118.817237],'Elevation':51.5474},{'Point':[32.060659,118.816846],'Elevation':51.1576},{'Point':[32.060688,118.816525],'Elevation':50.6236},{'Point':[32.060727,118.816124],'Elevation':49.9252},{'Point':[32.060717,118.815844],'Elevation':49.3272},{'Point':[32.060636,118.815413],'Elevation':48.5682},{'Point':[32.060596,118.815192],'Elevation':47.7127},{'Point':[32.060525,118.814812],'Elevation':46.6921},{'Point':[32.060464,118.814461],'Elevation':45.5533},{'Point':[32.060403,118.81406],'Elevation':44.6455},{'Point':[32.060383,118.813749],'Elevation':43.8835},{'Point':[32.060442,118.813038],'Elevation':43.2426},{'Point':[32.060471,118.812627],'Elevation':42.7653},{'Point':[32.060469,118.811855],'Elevation':42.0623},{'Point':[32.060468,118.810933],'Elevation':39.9119},{'Point':[32.060457,118.810452],'Elevation':37.7959},{'Point':[32.060466,118.810092],'Elevation':35.8393},{'Point':[32.060545,118.80933],'Elevation':33.8976},{'Point':[32.060653,118.808178],'Elevation':31.5755},{'Point':[32.060733,118.808208],'Elevation':29.5713}]}"; return Newtonsoft.Json.JsonConvert.DeserializeObject(json); } /// @@ -61,7 +82,18 @@ public class MainController : MonoBehaviour /// public float[] GetLineChartData() { - return mapData.List.Select(c => (float) c.Elevation ).ToArray(); + List dist = new List(); + var list = mapData.List.Select(c => (float) c.Elevation ).ToArray(); + var count = list.Count(); + int v = Math.Max(count / 500, 1); + for (int i = 0; i < count; i++) + { + if (i % v == 0) + { + dist.Add(list[i]); + } + } + return dist.ToArray(); } } diff --git a/Assets/Scenes/Ride/Scripts/PlayerController.cs b/Assets/Scenes/Ride/Scripts/PlayerController.cs index a8d6d5cf..885121a6 100644 --- a/Assets/Scenes/Ride/Scripts/PlayerController.cs +++ b/Assets/Scenes/Ride/Scripts/PlayerController.cs @@ -131,7 +131,7 @@ namespace Assets.Scenes.Ride.Scripts speed = Helper.CalculateSpeed(elevation, 0, power, 65, 7); distance = Math.Round(speed / 3600, 6); totalDistance += distance; - //characterAnimator.SetBool("IsRide", false);//初始化动画状态 + characterAnimator.SetBool("IsRide", false);//初始化动画状态 if (totalDistance <= mapData.TotalDistance) { //数据处理 @@ -156,11 +156,12 @@ namespace Assets.Scenes.Ride.Scripts else { //TODO保存骑行数据 + characterAnimator.SetBool("ReachEnd", true); } } else { - //characterAnimator.SetBool("IsRide", false); + characterAnimator.SetBool("IsRide", false); } } diff --git a/Assets/Scenes/Ride/Scripts/PlayerItemFactory.cs b/Assets/Scenes/Ride/Scripts/PlayerItemFactory.cs new file mode 100644 index 00000000..58420178 --- /dev/null +++ b/Assets/Scenes/Ride/Scripts/PlayerItemFactory.cs @@ -0,0 +1,33 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +namespace Assets.Scenes.Ride.Scripts +{ + public class PlayerItemFactory : MonoBehaviour + { + public GameObject prefab; // This is our prefab object that will be exposed in the inspector + + // Start is called before the first frame update + void Start() + { + Populate(); + } + + // Update is called once per frame + void Update() + { + + } + + void Populate() + { + GameObject newObj; // Create GameObject instance + + for (int i = 0; i < 16; i++) + { + // Create new instances of our prefab until we've created as many as we specified + newObj = (GameObject)Instantiate(prefab, transform); + } + } + } +} diff --git a/Assets/Scenes/Ride/Scripts/PlayerItemFactory.cs.meta b/Assets/Scenes/Ride/Scripts/PlayerItemFactory.cs.meta new file mode 100644 index 00000000..05b82ff3 --- /dev/null +++ b/Assets/Scenes/Ride/Scripts/PlayerItemFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbaab6daec5ce6243ae09ccf27489dae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Ride/Scripts/RouteController.cs b/Assets/Scenes/Ride/Scripts/RouteController.cs index 8f5134ae..4fc9e0b0 100644 --- a/Assets/Scenes/Ride/Scripts/RouteController.cs +++ b/Assets/Scenes/Ride/Scripts/RouteController.cs @@ -44,6 +44,7 @@ namespace Assets.Scenes.Ride.Scripts { mainCotroller = transform.parent.GetComponent(); StartCoroutine(QueryTimer()); + //CreateRoute(); } protected virtual void OnDestroy() @@ -102,7 +103,7 @@ namespace Assets.Scenes.Ride.Scripts lineRender.endColor = c; lineRender.startColor = c; //设置宽度 - lineRender.SetWidth(0.8f, 0.8f); + lineRender.SetWidth(0.5f, 0.5f); lineRender.SetVertexCount(dat.Count); lineRender.SetPositions(feat.Points[0].ToArray()); //lineRender.numCapVertices = 90; @@ -126,20 +127,20 @@ namespace Assets.Scenes.Ride.Scripts var lineRender = _mipMapRoute.AddComponent(); lineRender.material = new Material(Shader.Find("Sprites/Default")); var dat = feat.Points[0]; - lineRender.endColor = Color.red; - lineRender.startColor = Color.blue; + lineRender.endColor = Color.white; + lineRender.startColor = Color.white; //设置宽度 lineRender.SetWidth(3f, 3f); lineRender.SetVertexCount(dat.Count); lineRender.SetPositions(feat.Points[0].ToArray()); - lineRender.numCapVertices = 90; + //lineRender.numCapVertices = 90; float alpha = 1.0f; - Gradient gradient = new Gradient(); - gradient.SetKeys( - new GradientColorKey[] { new GradientColorKey(Color.green, 0.0f), new GradientColorKey(Color.red, 1.0f) }, - new GradientAlphaKey[] { new GradientAlphaKey(alpha, 0.0f), new GradientAlphaKey(alpha, 1.0f) } - ); - lineRender.colorGradient = gradient; + //Gradient gradient = new Gradient(); + //gradient.SetKeys( + // new GradientColorKey[] { new GradientColorKey(Color.green, 0.0f), new GradientColorKey(Color.red, 1.0f) }, + // new GradientAlphaKey[] { new GradientAlphaKey(alpha, 0.0f), new GradientAlphaKey(alpha, 1.0f) } + //); + //lineRender.colorGradient = gradient; lineRender.numCornerVertices = 90; _mipMapRoute.layer = 9; } diff --git a/Assets/Scenes/Ride/Scripts/UIManager.cs b/Assets/Scenes/Ride/Scripts/UIManager.cs index 84980707..20f9921b 100644 --- a/Assets/Scenes/Ride/Scripts/UIManager.cs +++ b/Assets/Scenes/Ride/Scripts/UIManager.cs @@ -3,6 +3,9 @@ using UnityEngine.UI; using XCharts; using XUGL; using System.Linq; +using System.Collections; +using Mapbox.Unity.Map; +using DG.Tweening; namespace Assets.Scenes.Ride.Scripts { @@ -11,6 +14,13 @@ namespace Assets.Scenes.Ride.Scripts { [SerializeField] Button startBtn; + [SerializeField] + Button simpleBtn; + + [SerializeField] + GameObject rightPanel; + [SerializeField] + GameObject leftPanel; [SerializeField] Text speedTxt; @@ -27,6 +37,8 @@ namespace Assets.Scenes.Ride.Scripts [SerializeField] LineChart elevationChart; + [SerializeField] Image img; + PlayerController playerController; MainController mainController; private float timeRemaining = 1f; @@ -35,9 +47,11 @@ namespace Assets.Scenes.Ride.Scripts void Awake() { startBtn.onClick.AddListener(StartRide); - playerController = transform.parent.Find("Player").GetComponent(); + simpleBtn.onClick.AddListener(ClearPanel); + playerController = FindObjectOfType(); mainController = FindObjectOfType(); } + // Start is called before the first frame update void Start() { @@ -51,7 +65,13 @@ namespace Assets.Scenes.Ride.Scripts startBtn.gameObject.SetActive(false); countDownTxt.gameObject.SetActive(true); countDownTxt.text = count.ToString(); - + } + int isSimple = 1; + private void ClearPanel() + { + leftPanel.transform.DOMoveX(leftPanel.transform.position.x+isSimple * 286.1764f, 1); + rightPanel.transform.DOMoveX(rightPanel.transform.position.x - isSimple * 286.1764f, 1); + elevationChart.transform.DOMoveX(elevationChart.transform.position.x + isSimple * 286.1764f, 1); } // Update is called once per frame @@ -79,7 +99,7 @@ namespace Assets.Scenes.Ride.Scripts } countDownTxt.text = count.ToString(); - UpdateChartMarkPoint(); + MoveChartMarkPoint(); } } @@ -92,13 +112,18 @@ namespace Assets.Scenes.Ride.Scripts elevationChart.AddData(0, elevation); } } - VertexHelper Vh; - [SerializeField] Image img; - void UpdateChartMarkPoint() + + void MoveChartMarkPoint() { var dataPoints = elevationChart.series.list[0].dataPoints; - var pinLoction = dataPoints[playerController.CurrentIndex]; - img.transform.localPosition = pinLoction; + if (dataPoints.Count > 0) + { + var pinLoction = dataPoints[playerController.CurrentIndex]; + Debug.Log(pinLoction); + Debug.Log(dataPoints[0]); + pinLoction.y += 10; + img.transform.localPosition = pinLoction; + } } } } diff --git a/Assets/Scenes/Ride/Searching.png b/Assets/Scenes/Ride/Searching.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8f96cbbd9f71805d2174a60812f9f454590906 GIT binary patch literal 2998 zcmV;n3rX~eP)E=00004XF*Lt006O% z3;baP0000uWmrjOO-%qQ0000800D<-00aO40096102%-Q00002paK8{000010000u zpaTE|000010000u00000E}u$i000XqNkl()f*PWR=$L|dL&z_k(bMNe3mPRMJ_kaKYd7uBB8OD^y%Cx*IX0=?c zuox?3T7>*brj>2kN4TdHAo|TDFJ)z0Pnh`}@8<=8W@yGdDEutIRf(`$qJ4M7kVfg= zX0FoAs%>3e$hQ1d_2}VJ%c*O-OA-<r+h>sx2HXj$B!8x^O(n%}<9QK@8TRTM zWm}#@z3!1T>1bqR^3m6lVi>0L&G&|R{uJQ(mG6XwDov5Fh#Z%E-%wR5hYP{3smhR? zCXPrGRZd_pBAWjViJ-$blD8;m*-oG2W4JAsP{SHHMi2CE5SsDc5Ukt*A*{Sawg@R zX=}~irqz{nOG+vyig1c=Rx&InhtrK%_r4jW;|COXJdw8g&Rhs9ndwpE`I`^?JIoK$ zSS#K}Z(OJHbP}^I`)*Cfy zFbuWh)drJJ)A`&-u{kwT0BkKc%PodzxqSYC2no&J+&Go42FFeqSc);}o+LjSsy~m2 zOAP-Rs|A9hOR0gCiyUmuhF4>?1_`(}Gq45@=jo zVC0)#Cprlf%eLs&-w!#euC8f!r+S*U6VDGQ8Q7eUVPTsEKohDd$PV$MObLl8eriwsDL6592x3xy+o zg92Qo@(D)(tWJD2_MNAQM-VOc7Fuj7(b&{ZRt!kWLxEU*j$-;vls*y#wCY>4tjNBD zeQPlcCLsGgg#>sH(&}G^*UCx-D;p5G$N{7kA5Y-KGE6p+?`=MrK(|!I%C!ALF!%ma zNd*pPZzJoPQckO+hG_3Tw6}lOC}$ieGxe)Y-u*2*N}f`gXu|WDPa{;G#4!>#8RJK< z;4iH#s4_d#vc_esQ{_oqu2%4)VN_yp2OqzNNcs0*P|Q}vNE@C;+VC}%7lmWr5C$RH)+h33ms?gAO1GC*fs{)Pdi;R3@VCz!lVO)ITv60sK3+DoS&Yne|qA&x` z#S(;qp>!(-6HL03OP_hw$l#$*u%!c`E@GNId#X$Xdml})UgagldDrUGnAty7^)U#4 ztI{|qvTZ8ExHc77yj58e98LIxfSwR{s~1!Nx#$k;v-3^?l&c%%0o>1061x)wmKCLp*m&Ra&LVq__tvggdram$- zTBXe2fK9GXvPAJH8OWeA8^__J+33x+5~8jt@URa)qT$iWmR&d!~pSg z11-Y2-eBe%z3bPKfaDtK{;O!Dn~AOjv5%fLMzhI$SMFUgyZt(=P{f&k;NdA=YwpkG zV*^T6^b5DMGG!F^4VZ>7&R;ay759bj-9+}0sg|(bQngKk*OU#YDp!NcOIphohsjos zgJBIQ1Bpz>3_3|6;Hn`7luho`b3=g{XLrrIQhGM&U+!GPkM4K4L+-o55T zQrjeYgRWrzL8=3lTa+X~H9APx-$TJ#Q)9-j<6ZaT_*wmvsDg4<*#&nSCP%jVP}NzY zvPE?A8ndT)Z8aXsR?w+!zsD8DUxoLZN`c_?42E1UW&|=a?HJcsA9IC{A$&awI}LC; z7koMztZe*n9L%Ym#+Wgm;$17?KiLx*K-4`x!E!I`4`<|2E@fpn*E&aWq?KAP>d{x+pXq<7@ z8~NN%i2fiT?{0d}(9M~sWZ*nRWkK(ztaHxKiB_Rz7mM+glegS8HGyjZ)%bGaGQ;7T zmWz)mmdVvWESI-IOTx?nns33aKvn0p0UwtROY!vPa^7rlzN9Yl>x)TcjJnInF1yIP zAK*wDVjeEElDgoC$={FBNB%5Ix;#$za`0txj|?a_p%>is&(KsJxr!bjq7?G7n{BE7 z@N%4n&N*oGbZiuN;Es!QWCbG+@ty*%A?!^1Vp9H~p(r{J$CiP!!%-W){QBZ44Aakl+4@ck);GacTyFR0F1NUlYJ#$^{Gn3j2CKK z9>%M$_~R01TT}VQXQPVYr)qX>$9&gyUXM~D9`>Q-W>3=wqK6xb*-w1PE}YqoM!qpF z7V_gi;=TMQW96!#P~UkYckBaj==H2BBV49TxI(&jI1_HXi#P21I7aQVzFp&QZjWIJSw!EZbx^`PsMJra2 z9E#gIudv^7)+4?7@?h^$$j6`|J^;{!_C=$&=}*!Yw+*kLw_|VfP?^(s$Fm48UHlX? zaRtMLb22S=x{PX6HYwJxhsv~@LO*W#gZHiSCJJFlh6E6%=sZ-2I z-D>W8u(#?8hMmeQ2K$AMS}uwUkul0;eI|zW6kO|G34Ao>rwjTh=p(pUI|BTOF0?(m zKK2!SEfIXpA9fx=i&>r1@Xcr!t~91Zi2GSwzE1hyeneeIja78eqfsj_mtVdAe?0i$ sW0G~Du#O9HD@M=>EIezC?#A{11u=gpxQvD{iU0rr07*qoM6N<$g7xjDnE(I) literal 0 HcmV?d00001 diff --git a/Assets/Scenes/Ride/Searching.png.meta b/Assets/Scenes/Ride/Searching.png.meta new file mode 100644 index 00000000..dad058b7 --- /dev/null +++ b/Assets/Scenes/Ride/Searching.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: f4f2a9e782a4847459ac400ebead3ef2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 1 + spriteTessellationDetail: -1 + textureType: 8 + 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 + - serializedVersion: 3 + buildTarget: Standalone + 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: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Ride/Speed Meter_0.png b/Assets/Scenes/Ride/Speed Meter_0.png new file mode 100644 index 0000000000000000000000000000000000000000..3df8561253f07421df8d08235ae31b27f3136999 GIT binary patch literal 25641 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 literal 0 HcmV?d00001 diff --git a/Assets/Scenes/Ride/Speed Meter_0.png.meta b/Assets/Scenes/Ride/Speed Meter_0.png.meta new file mode 100644 index 00000000..ec167575 --- /dev/null +++ b/Assets/Scenes/Ride/Speed Meter_0.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 1e999baaf1892f144affff007eb6e83e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 1 + spriteTessellationDetail: -1 + textureType: 8 + 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 + - serializedVersion: 3 + buildTarget: Standalone + 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: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Ride/Support.png b/Assets/Scenes/Ride/Support.png new file mode 100644 index 0000000000000000000000000000000000000000..39a2294251fe67c5ab643f64ea6a1a3906e68cdc GIT binary patch literal 5008 zcmV;B6L0K^P)deU?B|15C?K!cpSSPbs<>JK|uy{#^uDo;A@#3NiIgDb{ zOX0})_}=$}dW5jSnzn6a0`DYhksjVP^afdYYRm}uHva(6YH{PnjkL5zeDA$oAT}miL-0iEq8U618Zkl2%gZ%{RYK|0 zr%z;IQR!Ji@`oBVYCL@T)jl0PX~Wd`breE|sgClMN-q^~RY^s8r4nED2CJ|YDW?DO z^7%%%F<-x4cvMza);S|wYZ`5&itDq8`sn|_0 zPU1iMNOD(>(-?D{uV%;TtYXV{Y(?m+5_;skyp?xZl{HChB$_m7lDc{G?uDRudU`x? z3Jc83%gZ(oe1?Kj#=fK_K8m6gpx$E)JXzMn7+=hGkH^!-idY7Vij0b0zkb<45wBxx zM@q43#P-$?6o?W zm@zTN&lJ+qvS9M$SLu@#X-(-_vlf|P9AIM15rM{1#s>}@g7Fik`o}*)ZLNx(GjUmx zmI-5Uj!5C_ulKW<{yjQk2y45lS|Q8#-~XtMC>l{^V$=I8zO?-ERxD42I(2Fr=~=s` zR^aW!!1r<#X&P#8NA_8B?lf;6(7(4=rbNp%pfSd;Wg<50DV&i%F=t9;wU?K-apen& zs?73-A(iRS{zk0}ro1LGWhnSF;}j*W;9|j;BXCYP5a)DhJZ}}_+&CQP#${GGlf+g; zRxs*r;ao`$j*m^O@ZMmk^2wAWq@KGkX5rDmx<9VBrhnxAPv44t8Nl7W;JaroOSF6uY z9tUmP-p+YS<1u3i{mer+$ z)0?0-LLp^A8Z7g^($|%x4qu_w&dMUeb<2P>_V&^huxQcSRwTAye6Bb3 z#Tk&ByV+J5Br2|0y4fU;ii%{y5_urPQu*ZMiZ%VS6UI>1Zm6T6eYFsqR6TDchCSFH z1`hnIiDdcmcVNz3`2^Qgpc25fYs7n-S8-aE7R5Xxi@C5fX3S^vs)rt~&`PIH9b`qM zaIzcoKmytklG9VH;#W6M1pL<1svUEK@geZ7R7=3=_9|war`Z$EhW{y(;_TV85ET^# z4I4IKBnJ;3vh^xyoke}F820Zk(6X|&tPvOzNS~+;9KQNur_A&755gnE$HIGS)1kDq z6ngd=WT@U*md}wjfvGrcEuli%`C=6l(-<0Gdkxg6VQmB%izZ+Sd3jqPF0P%_g6pdu zju%%5I)RCxbLT$MC8ecR?~RwLp7;a`TSu(gBrr$D#U*B7>oePzIYE$PTFl`nY}zl8 z3e4q+i%Y^C#wr^ZhX*M(Y1CMcPl3e(9TO4?hC36~fiIWkh zYim}ttRD^YJeQM`{e>0Y4lH1Ssgi_*zAehj&-KLFb$9G#u0g@D!}idSe+)dzrR~f$ zV`m{O)o^u=bh3?dQm&8l)vC!HQ@%nUlXdI!;L}h4D=X#` zZtU_jf&HD>kjZL6$~0yP@>VmPQG#1hyLVSu;mL{5Ng&fOH3^?f8_x965kpyW>();=$ggwlQ|;E_lP<1fTc0$X0Gow9fyvE<{64rg($nWN%MWMdG@dv2RjtVQ@uOkx zoL98G*M#D^)s}|eTf3Bbz=+Hof8~{hNjUC~!}&F977OFX+4}Yy*bQYt$mqoS(-`_DS0myE6HCEwq0x~FDUuQ(Y`QPZ#x-%2-KtFw+SM|imXL!;w<~~A9!)W9SLt8+pB_#qA@4E*^je1yy zwuJZVKLQ#wxDuwlHks`poj(1uC7m50Sv*kzF+|HWOfFXlJSr=kz3M%9^;KuSXXNDf z`R98W%MR`TB4cd}UaxLg3r?sTUhFKDXse4Bo>yIYIp?8^hYaZp_3G6H+NYy)1C*vc zI)626^tjRs9G~dt(2iV~A zJYh;69Z>KhMo>{9Q7|?8p_(yHmTsQpdtI1=Eh?{`|rha56m>Yw&BMPbXRRWJ+-s|9aDy z`V&Q``#?kqSizP1(q!HKO-%R$QHG)H3G7aW*_qoI%IUIxDVX*}HgDZM6ZdlD8;QDV z&hHFO&)c`XVKglfoIZ&o1vABN-j!aRZXZq`&`o+&R%ZM5H}-R)Xxj=VPbF-zQ`{8z zeC0(;dD-gN_)I<(T)XrCbmldx(mt`wN{a? zO}Zf+nNd{`X$uafOK4T~`qbr@*9US$=zdRv=9HtSkmt^vIRl&i^C7HTmkVEhS#cwZ zoZ4NC(GVhPRMr&BPq0ps?_`6$yjk zLqW4iXxJ7^TS22n zSHtwzrXF^{(2Vr^&1f~<@+c7PH~UAB%LbP-Z^*=u@04Z_`zI>#a8dziUf} za3MpwRq05f3%qnJBCrEWNN5k-DV~t0PMwBbyQ*#HMw5>YRvW|pI2X6N+R8}hIFGue zn_kITqOs$`h61Ei8q8v2qYW5ymSzuhWP*FKnkn3ckW9&MyvXhn@Wq)tY#+qa4%DT% z5Dt>pVgnZ#!8|-@U`M%B7dZgF^x{M}s`bf(&cUS2pJq$B#O#twE`}M?-5K*qw>Uv$ zCynd*l+*`7v~W!^kuF^L7A#HI?t6smuWtb}XH3<&G-z;zmJVj3VZ*CT?3ZP%f|Qgc z8oWPVM)xpYO2-4a0=g4Cr)ZjX%pGQWE=CVJV_r`k+T0nO1B>A_jt@Z!=U1|{pOo|-PygNLmq%FTRw*4$MwBW zAj-YrhL$j7a9?QL_!?%cFF5cWEKAS!YDg!!wtcuA?z;0f?J?-`GJYad0}6@M)N~=| zN0M||8JM|}XZ$(T&db)TR|noon`1elFDUqqDS`IN$QD5sH7DVYJN^uRd-`!*5!!>R zQKND~In69f6N<2W9o@^}4RCippNf=$9*0 zQ^COQFM7zT8!=)q?z7z|LkA3}%ez1MWT(bQwDpdAW(w@s@wtWzc|y2`f!7_z6Ffdx zuy<#4Op62Pvzy3aPU4+Acd;M($;?`fzi4!lZD!K1bnsgZoba-uMdugbC(~(JOBb2b zT@@7QZdkgnuv!9heP3xhfo^KST)4_z4r&fn{WM30IPTG-GmL%eQLnYmn3)1=@MjgO zA(Y~{eY5OlDyf1=P;yEAHotHi&Mw+igW#qrX^ z&H*@E*by63|1NK?u3i<)tNblpoy29T?ihEEeV#EQ8Eq+;KTOB?-m}0{{shne5o26H zSYG8W(*@h~lp&4qO}Q&Z(luxJRx*va-+P{(nVuaN5Tl$ttD_cdWc){PX~h<6+f~)5 zAIb-$V9t- z@Gy8>Hr?`9KGzj23PPTmg~jDV6_00}n}#H@4u8{Rknt$W%k}H1ZyG%!{pD#@E~pB& zs*wGLPf5ujTqzC;mC{L>*cqnbvNFxz%Ym()#SSdw3YH0lwo`TM*1gRKfPZ-&D| zGyECESfsCw-OXkA3FCTLsaO-^MlHflA?y_5PvEu}dJlT`DT<1J;rrUQZLyDRv9h{C a3I9JeOyQ>0g*Mdy0000@9ad5jMaubiX!n%AX!cxNyhUqT{L+=uEwC8w+7=fF>@WXF$b^aW z0mb$}$=tBNXp|%zQh!L>&9c#t#6HJUHCb3Fg@I!bHAkEzAXzNdZa^>{!t{qldltj6r z*sCFAvTIZ6O}7HF4q52nwi&-|FW?<%L)t144onij6SP-yEfNKs-^OS>PFEDmioApz z4z8mrQ%+L)F{6H*P29m_$!K``rjR!H~=R?J9xP_)f;ZP|mB z<;>TC{$!W9Bc;?Y<)nllj%m3oOZDsF-sbv-s(n^!eZkv#jeek^?b$b9NjwuN^PN5? z#ExU&^BE;Yv7#H0rhRsVG<{(x9{sXAtYIf4f4_D(J$` zHLkcZewG@UosM!w2|e)BgMFX&mE&1<<3%0y!-XE5micc?qIDrKAlzfNyHg1**t`C{ z>F?y%wZ>!X>`k2i)*?Q=!jFi7&_6_4o)wVY>DwizZ7qzR3-;}P3S5b)6 zqL}#z67!VLdLDhZwLKTE=f9=^mP?+`#Yfhx&HUaS?Sfl|0m#Id)+s{84)ngLxz}Pw zt8Zjx?tJpSZ3$)n3>0$JYLFeMX%i$njhUb?AKaMD<1ZJ!-F-WcqvFWC?=_n&0uaRw zKCec`z{+Cgysow;dmKHt72C=zE3S^nnZ!g|tyo^ytNBd3QFa&gb4K{bbc=+z?#=gT zzn>$`Y67%^Z5Ce!Tjd;Wbm#9_K3zB8jn|mcvW;tQDk!ICSBvy${2hJ)g$tiG97*%sg_Fq_Ef2n0h zZjQs|BcfGid|adNR|11JMVxt3y?du<=1Ws3ZR4puZNGsVw!j=g9YWt8_u7ItO}$U) z#o%=Bbuq-8Ev4&2VZMz^?>FtlmE*^4d{wK%W4qd@LucWx>wR9w;+`x}xI$YQ?vDQB zrXQF?W&R9PK_9wZKpR?g?aZK^S*92E-hu|X?6G?K!*in9v!|F@S&U!M6UgS0mBAL3 ziebeyLZMpOlM&(~dE{1|~#*D#rE`-R0x ze3;W_aM_eN$-VT_GE~m6Mq&^X7h0Vl-z1{B9%5}KYU1MS^h|7AF=YQPAo?a()ek_=KCqEk##tzIz=hDGbU8kS8;~-=$z1`$KQO@|Fpe0 z+f(M!VXk8#)y5`5v{ZylM?Dt0=Qu5|Gf#izhdcvNFBx7jmKP)Sai zZ=gh;HeS)CB3+qil?4qy=p1}KG}1e%h%|0ay@4oU6$){k7uZM`q;Z)4?rO&ck&Qy~ zWR&}WP##RQQ!|HU-!2cGbLIu)@%=1}8PUEMjb=^|CqBPxdFI7oNz!1@If?4A=a^xK zF3)d$4aKtTgT2vv;RhEoA8~XcYXJME7r}&WW{vB`$+DkibLkVs`n?f8ukUD(4rGjf zQse5O00s1kM zc&7fC``ccWGtiGEDh9m@_hY=<-Lil2r>JLWU=j=0hR26iN5A?*4=!21&^q&#pFVef zFQQG~Eua{Hxct5~aszkhc<`RJ2F$lntiam5+6}STIcd5Lfxz5XTlPFE=(G82JMHX@ zh(Gv7Zo6Gcv{pSHz9}9Fami2UxFj-C-myz_qO13A7TCYo$8LWc#(E4o7RCl{@m62~ z_yzN%1J3KO?ejmGJRR@pCk(Bf-B{E3N!*o;ABh>9nOhaUmcV#a-OE5p^~{DA=u-Ul zx~m7bk0u0UD>0kZXKj~?uZXRo?`orQjxLo+LhoreNO;kU3EM~*IZ$h0l z5qib(aCV3mvpI{*vElqSqNhWtI6P`ZG79*xDtB?CaMSb${@x#Bw0}17s#L>IXLg%R zxEqe1G>GF(u4~w2+r~Ue@fCVfMZ>#vy;hYYCKLMYNkHprMdkWB+~K$$L_vCF5#-47 zAO~P$q*76IQ8_k4WCsrfLg3Q?iWFfJ0uQtS7Xt_fGXP2{mPh<&d8#y94oF*CNS9Vv zkiuq2l>cr1_tpJBl#P#)*2hKq8}JEZr#9Aj{3|B#IF(E@$^?9@Vk=g?HLEkr<2xVZi6`W70_5J0OfSi98VHNT(>2HtfxVF z%tr6%KXd@Bq*PA=9hCDHa-JOop&dk;v=sw_xA%j`Jdcq92uv3KnFnIl|1p5w17V1^ WKf~%sY2eQSaQW85q0atF+P?wW-I;g* literal 0 HcmV?d00001 diff --git a/Assets/Scenes/Ride/pin.png.meta b/Assets/Scenes/Ride/pin.png.meta new file mode 100644 index 00000000..458c7742 --- /dev/null +++ b/Assets/Scenes/Ride/pin.png.meta @@ -0,0 +1,104 @@ +fileFormatVersion: 2 +guid: 0e1e07b599c1f76428c0d352c77c7a3d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + 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: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + 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: 1 + spriteTessellationDetail: -1 + textureType: 8 + 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 + - serializedVersion: 3 + buildTarget: Standalone + 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: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: