浏览代码

Update 5.5

LiuQilin 8 年之前
父节点
当前提交
950ee5643d
共有 60 个文件被更改,包括 1904 次插入75 次删除
  1. 二进制
      .vs/MyLovelyGarden/v14/.suo
  2. 22 0
      Assets/Resource/Audio/mini_game_bg.mp3.meta
  3. 22 0
      Assets/Resource/Audio/theme_bg.mp3.meta
  4. 二进制
      Assets/Resource/Effect/Cartoon FX/Materials (Mobile)/Misc/CFXM_WhiteCircle.mat
  5. 二进制
      Assets/Resource/Effect/Cartoon FX/Materials (Mobile)/Stretched/CFXM_RayRounded.mat
  6. 二进制
      Assets/Resource/Prefab/Object/LightwallUI.prefab
  7. 2 2
      Assets/Resource/Prefab/Object/LightwallUI.prefab.meta
  8. 二进制
      Assets/Resource/Prefab/PrefabUI/Canvas.prefab
  9. 78 0
      Assets/Resource/Shader/Lightwall.shader
  10. 9 0
      Assets/Resource/Shader/Lightwall.shader.meta
  11. 二进制
      Assets/Resource/Shader/LightwallMat.mat
  12. 8 0
      Assets/Resource/Shader/LightwallMat.mat.meta
  13. 76 0
      Assets/Resource/Shader/Points.shader
  14. 9 0
      Assets/Resource/Shader/Points.shader.meta
  15. 二进制
      Assets/Resource/Shader/PointsMat.mat
  16. 8 0
      Assets/Resource/Shader/PointsMat.mat.meta
  17. 二进制
      Assets/Resource/Sprite/SpriteUI/CFXM_T_RayRounded.png
  18. 100 0
      Assets/Resource/Sprite/SpriteUI/CFXM_T_RayRounded.png.meta
  19. 二进制
      Assets/Resource/Sprite/SpriteUI/CFXM_T_WhiteCircleSmall.png
  20. 68 0
      Assets/Resource/Sprite/SpriteUI/CFXM_T_WhiteCircleSmall.png.meta
  21. 8 1
      Assets/Resource/XML/Config/award_config.xml
  22. 1 1
      Assets/Resource/XML/Config/offline_config.xml
  23. 1 1
      Assets/Resource/XML/PlayerConfig.xml
  24. 5 0
      Assets/Resource/XML/lan/ChineseSimplified.xml
  25. 5 0
      Assets/Resource/XML/lan/ChineseTraditional.xml
  26. 5 0
      Assets/Resource/XML/lan/English.xml
  27. 二进制
      Assets/Resource/Xlsx/award_config.xlsx
  28. 二进制
      Assets/Resource/Xlsx/language_config.xlsx
  29. 二进制
      Assets/Resource/Xlsx/offline_config.xlsx
  30. 1 0
      Assets/Script/Manage/Initializer.cs
  31. 89 0
      Assets/Script/Manage/ManaAnim.cs
  32. 25 8
      Assets/Script/Manage/ManaData.cs
  33. 4 6
      Assets/Script/Manage/ManaMiniGame.cs
  34. 27 8
      Assets/Script/Manage/ManaPlayer.cs
  35. 78 8
      Assets/Script/Manage/ManaReso.cs
  36. 73 0
      Assets/Script/Manage/ManaServer.cs
  37. 79 10
      Assets/Script/Manage/ManaUI.cs
  38. 2 2
      Assets/Script/Object/DropGold.cs
  39. 3 2
      Assets/Script/Object/Flower.cs
  40. 11 2
      Assets/Script/Object/Player.cs
  41. 1 0
      Assets/Script/Object/Skill/Ability.cs
  42. 5 0
      Assets/Script/Object/Skill/BigSkill.cs
  43. 1 0
      Assets/Script/Object/Skill/Pack.cs
  44. 1 1
      Assets/Script/Object/Skill/Skill.cs
  45. 352 0
      Assets/Script/Tool/Anim/StreamFont.cs
  46. 12 0
      Assets/Script/Tool/Anim/StreamFont.cs.meta
  47. 358 0
      Assets/Script/Tool/Anim/StreamScale.cs
  48. 12 0
      Assets/Script/Tool/Anim/StreamScale.cs.meta
  49. 15 1
      Assets/Script/Tool/Auxiliary.cs
  50. 18 7
      Assets/Script/Tool/Bundle.cs
  51. 28 3
      Assets/Script/Tool/Data.cs
  52. 24 0
      Assets/Script/Tool/Extension.cs
  53. 104 0
      Assets/Script/Tool/UI/LightwallUI.cs
  54. 12 0
      Assets/Script/Tool/UI/LightwallUI.cs.meta
  55. 105 0
      Assets/Script/Tool/UI/PointsUI.cs
  56. 12 0
      Assets/Script/Tool/UI/PointsUI.cs.meta
  57. 5 5
      Assets/Script/Tool/UI/UIPartical.cs
  58. 2 0
      MyLovelyGarden.Editor.csproj
  59. 6 0
      MyLovelyGarden.csproj
  60. 12 7
      ToList.txt

二进制
.vs/MyLovelyGarden/v14/.suo


+ 22 - 0
Assets/Resource/Audio/mini_game_bg.mp3.meta

@@ -0,0 +1,22 @@
+fileFormatVersion: 2
+guid: c1686b41149696a45b7b14b6ad19dd28
+timeCreated: 1493772476
+licenseType: Pro
+AudioImporter:
+  serializedVersion: 6
+  defaultSettings:
+    loadType: 0
+    sampleRateSetting: 0
+    sampleRateOverride: 44100
+    compressionFormat: 1
+    quality: 1
+    conversionMode: 0
+  platformSettingOverrides: {}
+  forceToMono: 0
+  normalize: 1
+  preloadAudioData: 1
+  loadInBackground: 0
+  3D: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 22 - 0
Assets/Resource/Audio/theme_bg.mp3.meta

@@ -0,0 +1,22 @@
+fileFormatVersion: 2
+guid: 0f022047fe724744cb3de49bd183af99
+timeCreated: 1493772473
+licenseType: Pro
+AudioImporter:
+  serializedVersion: 6
+  defaultSettings:
+    loadType: 0
+    sampleRateSetting: 0
+    sampleRateOverride: 44100
+    compressionFormat: 1
+    quality: 1
+    conversionMode: 0
+  platformSettingOverrides: {}
+  forceToMono: 0
+  normalize: 1
+  preloadAudioData: 1
+  loadInBackground: 0
+  3D: 1
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二进制
Assets/Resource/Effect/Cartoon FX/Materials (Mobile)/Misc/CFXM_WhiteCircle.mat


二进制
Assets/Resource/Effect/Cartoon FX/Materials (Mobile)/Stretched/CFXM_RayRounded.mat


二进制
Assets/Resource/Prefab/Object/LightWall.prefab → Assets/Resource/Prefab/Object/LightwallUI.prefab


+ 2 - 2
Assets/Resource/Prefab/Object/LightWall.prefab.meta → Assets/Resource/Prefab/Object/LightwallUI.prefab.meta

@@ -1,6 +1,6 @@
 fileFormatVersion: 2
-guid: 5c268be8e1abb5d40bbb8da47008f221
-timeCreated: 1493683835
+guid: 57a8b1695aa497442ae16329072ca484
+timeCreated: 1493869733
 licenseType: Pro
 NativeFormatImporter:
   userData: 

二进制
Assets/Resource/Prefab/PrefabUI/Canvas.prefab


+ 78 - 0
Assets/Resource/Shader/Lightwall.shader

@@ -0,0 +1,78 @@
+Shader "DashGame/Lightwall"
+{
+	Properties
+	{
+		[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
+	}
+
+	SubShader
+	{
+		Tags
+		{ 
+			"Queue"="Transparent" 
+			"IgnoreProjector"="True" 
+			"RenderType"="Transparent" 
+			"PreviewType"="Plane"
+		}
+
+		Cull Off
+		Lighting Off
+		ZWrite Off
+		ZTest [unity_GUIZTestMode]
+		Blend SrcAlpha One
+
+		Pass
+		{
+			CGPROGRAM
+
+			#pragma vertex vert
+			#pragma fragment frag
+
+			#include "UnityCG.cginc"
+			#include "UnityUI.cginc"
+			
+			struct appdata_t
+			{
+				float4 vertex   : POSITION;
+				float4 color    : COLOR;
+				float2 texcoord : TEXCOORD0;
+			};
+
+			struct v2f
+			{
+				float4 vertex   : SV_POSITION;
+				fixed4 color    : COLOR;
+				float2 texcoord  : TEXCOORD0;
+			};
+			
+			fixed4 _Color;
+
+			v2f vert(appdata_t IN)
+			{
+				v2f OUT;
+
+				OUT.vertex = UnityObjectToClipPos(IN.vertex);
+
+				OUT.texcoord = IN.texcoord;
+				
+				OUT.color = IN.color;
+
+				return OUT;
+			}
+
+			sampler2D _MainTex;
+
+			float4 frag(v2f IN) : SV_Target
+			{
+				float4 color = (tex2D(_MainTex, IN.texcoord));
+
+				color.a = color.r/1.0;
+				
+				color *= IN.color;
+
+				return color;
+			}
+			ENDCG
+		}
+	}
+}

+ 9 - 0
Assets/Resource/Shader/Lightwall.shader.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 8f1c843cb71039145be03c369d983033
+timeCreated: 1493864591
+licenseType: Pro
+ShaderImporter:
+  defaultTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二进制
Assets/Resource/Shader/LightwallMat.mat


+ 8 - 0
Assets/Resource/Shader/LightwallMat.mat.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 8942fd58203d1864e96a484b2d1bed1f
+timeCreated: 1493865014
+licenseType: Pro
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 76 - 0
Assets/Resource/Shader/Points.shader

@@ -0,0 +1,76 @@
+Shader "DashGame/Points"
+{
+	Properties
+	{
+		[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
+	}
+
+	SubShader
+	{
+		Tags
+		{ 
+			"Queue"="Transparent" 
+			"IgnoreProjector"="True" 
+			"RenderType"="Transparent" 
+			"PreviewType"="Plane"
+		}
+
+		Cull Off
+		Lighting Off
+		ZWrite Off
+		ZTest [unity_GUIZTestMode]
+		Blend SrcAlpha One
+
+		Pass
+		{
+			CGPROGRAM
+
+			#pragma vertex vert
+			#pragma fragment frag
+
+			#include "UnityCG.cginc"
+			#include "UnityUI.cginc"
+			
+			struct appdata_t
+			{
+				float4 vertex   : POSITION;
+				float4 color    : COLOR;
+				float2 texcoord : TEXCOORD0;
+			};
+
+			struct v2f
+			{
+				float4 vertex   : SV_POSITION;
+				fixed4 color    : COLOR;
+				float2 texcoord  : TEXCOORD0;
+			};
+			
+			fixed4 _Color;
+
+			v2f vert(appdata_t IN)
+			{
+				v2f OUT;
+
+				OUT.vertex = UnityObjectToClipPos(IN.vertex);
+
+				OUT.texcoord = IN.texcoord;
+				
+				OUT.color = IN.color;
+
+				return OUT;
+			}
+
+			sampler2D _MainTex;
+
+			float4 frag(v2f IN) : SV_Target
+			{
+				float4 color = (tex2D(_MainTex, IN.texcoord));
+
+				color *= IN.color.a;
+
+				return color;
+			}
+			ENDCG
+		}
+	}
+}

+ 9 - 0
Assets/Resource/Shader/Points.shader.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 6f79d221ae52f5e409d9e011ce2f3880
+timeCreated: 1493869350
+licenseType: Pro
+ShaderImporter:
+  defaultTextures: []
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二进制
Assets/Resource/Shader/PointsMat.mat


+ 8 - 0
Assets/Resource/Shader/PointsMat.mat.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4d62e334530548f49be56ec70f524319
+timeCreated: 1493869350
+licenseType: Pro
+NativeFormatImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二进制
Assets/Resource/Sprite/SpriteUI/CFXM_T_RayRounded.png


+ 100 - 0
Assets/Resource/Sprite/SpriteUI/CFXM_T_RayRounded.png.meta

@@ -0,0 +1,100 @@
+fileFormatVersion: 2
+guid: 8f7f88265d57b1c438f43875eef38858
+timeCreated: 1493824952
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 4
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  - buildTarget: Standalone
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  - buildTarget: iPhone
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  - buildTarget: Android
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  - buildTarget: WebGL
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

二进制
Assets/Resource/Sprite/SpriteUI/CFXM_T_WhiteCircleSmall.png


+ 68 - 0
Assets/Resource/Sprite/SpriteUI/CFXM_T_WhiteCircleSmall.png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 2fb0caaed82780d45bf3ba82ff65947f
+timeCreated: 1493867395
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 1
Assets/Resource/XML/Config/award_config.xml

@@ -1,11 +1,12 @@
 <data>
-  <item id="1" coin="s*0.05" diamond="5,20" diamond_drop="0.5/l+l*0.0001" flower_drop="1/f+l*0.0001" flower_rate_based="0.008,0.08,0.8" rate="0,200,800" />
+  <item id="1" coin="s*0.05" diamond="3,15" diamond_drop="0.5/l+l*0.0001" flower_drop="1/f+l*0.0001" flower_rate_based="0.008,0.08,0.8" rate="0,200,800" coin_drop="r*l*0.65" flower_coin="l*0.65" />
   <comment>
     <id>
 
 </id>
     <coin>
 金币奖励公式
+s表示score
 </coin>
     <diamond>
 钻石奖励区间
@@ -22,5 +23,11 @@
     <rate>
 评价配置
 </rate>
+    <coin_drop>
+掉落金币奖励
+</coin_drop>
+    <flower_coin>
+种花金币奖励
+</flower_coin>
   </comment>
 </data>

+ 1 - 1
Assets/Resource/XML/Config/offline_config.xml

@@ -1,5 +1,5 @@
 <data>
-  <item id="1" addtion_fml="" coin_lmt="" time_lmt="43200" />
+  <item id="1" addtion_fml="c*1" coin_lmt="" time_lmt="43200" />
   <comment>
     <id>
 id

+ 1 - 1
Assets/Resource/XML/PlayerConfig.xml

@@ -1,5 +1,5 @@
 <PlayerConfig>
-  <Version value="132" />
+  <Version value="133" />
 
   <ID value="Default" />
   <TutorialA value="1" />

+ 5 - 0
Assets/Resource/XML/lan/ChineseSimplified.xml

@@ -66,6 +66,11 @@
     <La_Lab0 desc=""><![CDATA[连接成功 请稍等]]></La_Lab0>
     <La_Lab1 desc=""><![CDATA[连接失败]]></La_Lab1>
     <La_Placeholder desc=""><![CDATA[输入您的ID]]></La_Placeholder>
+    <Lb_Tit desc=""><![CDATA[提交问题]]></Lb_Tit>
+    <Lb_Placeholder desc=""><![CDATA[问题描述]]></Lb_Placeholder>
+    <Lb_Send0 desc=""><![CDATA[提交成功]]></Lb_Send0>
+    <Lb_Send1 desc=""><![CDATA[请勿重复提交]]></Lb_Send1>
+    <Lb_Send2 desc=""><![CDATA[内容不能为空]]></Lb_Send2>
     <M_Tit desc=""><![CDATA[成就]]></M_Tit>
   </UI>
   <FlowerName>

+ 5 - 0
Assets/Resource/XML/lan/ChineseTraditional.xml

@@ -66,6 +66,11 @@
     <La_Lab0 desc=""><![CDATA[]]></La_Lab0>
     <La_Lab1 desc=""><![CDATA[]]></La_Lab1>
     <La_Placeholder desc=""><![CDATA[]]></La_Placeholder>
+    <Lb_Tit desc=""><![CDATA[]]></Lb_Tit>
+    <Lb_Placeholder desc=""><![CDATA[]]></Lb_Placeholder>
+    <Lb_Send0 desc=""><![CDATA[]]></Lb_Send0>
+    <Lb_Send1 desc=""><![CDATA[]]></Lb_Send1>
+    <Lb_Send2 desc=""><![CDATA[]]></Lb_Send2>
     <M_Tit desc=""><![CDATA[]]></M_Tit>
   </UI>
   <FlowerName>

+ 5 - 0
Assets/Resource/XML/lan/English.xml

@@ -66,6 +66,11 @@
     <La_Lab0 desc=""><![CDATA[]]></La_Lab0>
     <La_Lab1 desc=""><![CDATA[]]></La_Lab1>
     <La_Placeholder desc=""><![CDATA[]]></La_Placeholder>
+    <Lb_Tit desc=""><![CDATA[]]></Lb_Tit>
+    <Lb_Placeholder desc=""><![CDATA[]]></Lb_Placeholder>
+    <Lb_Send0 desc=""><![CDATA[]]></Lb_Send0>
+    <Lb_Send1 desc=""><![CDATA[]]></Lb_Send1>
+    <Lb_Send2 desc=""><![CDATA[]]></Lb_Send2>
     <M_Tit desc=""><![CDATA[Achievement]]></M_Tit>
   </UI>
   <FlowerName>

二进制
Assets/Resource/Xlsx/award_config.xlsx


二进制
Assets/Resource/Xlsx/language_config.xlsx


二进制
Assets/Resource/Xlsx/offline_config.xlsx


+ 1 - 0
Assets/Script/Manage/Initializer.cs

@@ -44,6 +44,7 @@ public class Initializer : MonoBehaviour
 
         gameObject.AddScript<ManaData>();
         gameObject.AddScript<ManaPlayer>();
+        gameObject.AddScript<ManaServer>();
         gameObject.AddScript<ManaDebug>();
         gameObject.AddScript<ManaMiniGame>();
 

+ 89 - 0
Assets/Script/Manage/ManaAnim.cs

@@ -70,6 +70,8 @@ public class ManaAnim : Regist
     public static Dictionary<Transform, TweenNumber> TweenNumberDic = new Dictionary<Transform, TweenNumber>();
     public static Dictionary<AudioSource, TweenAudio> TweenAudioDic = new Dictionary<AudioSource, TweenAudio>();
 
+    public static Dictionary<Transform, StreamScale> StreamScaleDic = new Dictionary<Transform, StreamScale>();
+
     #endregion
 
     public void FixedUpdate()
@@ -361,6 +363,11 @@ public class ManaAnim : Regist
 
     public static float Linear(float timer, float duration, float start, float delta)
     {
+        if (timer >= duration)
+        {
+            return start + delta;
+        }
+
         if (Math.Abs(duration) < 0.0005f)
         {
             return delta + start;
@@ -384,6 +391,11 @@ public class ManaAnim : Regist
 
     public static float EaseOutQuad(float timer, float duration, float start, float delta)
     {
+        if (timer >= duration)
+        {
+            return start + delta;
+        }
+
         if (Math.Abs(duration) < 0.0005f)
         {
             return delta + start;
@@ -584,6 +596,23 @@ public class ManaAnim : Regist
     }
 
 
+    public static StreamScale StreamForScale(Transform target)
+    {
+        StreamScale stream;
+
+        if (StreamScaleDic.TryGetValue(target, out stream))
+        {
+            stream.StartForward();
+        }
+        else
+        {
+            throw new Exception();
+        }
+
+        return stream;
+    }
+
+
     public static TweenSr TweenForSr(Transform target)
     {
         TweenSr tween;
@@ -1666,6 +1695,21 @@ public class ManaAnim : Regist
     }
 
 
+    public static StreamScale GetStreamScale(Transform target)
+    {
+        StreamScale stream;
+
+        if (StreamScaleDic.TryGetValue(target, out stream))
+        {
+            return stream;
+        }
+        else
+        {
+            throw new Exception();
+        }
+    }
+
+
     public static TweenSr GetTweenSr(Transform target)
     {
         TweenSr tween;
@@ -1892,6 +1936,51 @@ public class ManaAnim : Regist
     }
 
 
+    public static StreamScale CreateStreamScale(Transform target, List<float> delayList, List<float> durationList, List<VecPair> destKvList, bool originActive, bool destActive, Curve curve, bool cg = false, List<UnityAction> actionList = null)
+    {
+        StreamScale streamScale;
+
+        if (StreamScaleDic.ContainsKey(target))
+        {
+            streamScale = StreamScaleDic[target];
+
+            StreamScaleDic[target] = new StreamScale(target, delayList, durationList, destKvList, originActive, destActive, curve, cg, actionList);
+
+            return streamScale;
+        }
+        else
+        {
+            streamScale = new StreamScale(target, delayList, durationList, destKvList, originActive, destActive, curve, cg, actionList);
+
+            StreamScaleDic.Add(target, streamScale);
+
+            return streamScale;
+        }
+    }
+
+    public static StreamScale CreateStreamScale(Transform target, List<float> delayList, List<float> durationList, List<Vector3> destList, bool originActive, bool destActive, Curve curve, bool cg = false, List<UnityAction> actionList = null)
+    {
+        StreamScale streamScale;
+
+        if (StreamScaleDic.ContainsKey(target))
+        {
+            streamScale = StreamScaleDic[target];
+
+            StreamScaleDic[target] = new StreamScale(target, delayList, durationList, destList, originActive, destActive, curve, cg, actionList);
+
+            return streamScale;
+        }
+        else
+        {
+            streamScale = new StreamScale(target, delayList, durationList, destList, originActive, destActive, curve, cg, actionList);
+
+            StreamScaleDic.Add(target, streamScale);
+
+            return streamScale;
+        }
+    }
+
+
     public static TweenSr CreateTweenSr(Transform target, float originAlpha, float destinationAlpha, float duration, bool originActive, bool destActive, Curve curve, bool cg = false, bool group = false)
     {
         TweenSr tweenSr;

+ 25 - 8
Assets/Script/Manage/ManaData.cs

@@ -278,6 +278,9 @@ public class ManaData : Regist
     public static float CircleTimer;
     public static float NewPerson;
     public static float NewCoinPerson;
+    public static string OfflineFml;
+    public static double MaxCoin;
+    public static double MaxTime;
 
     public static float SkillPlus;
     public static float SkillPerson_;
@@ -603,6 +606,13 @@ public class ManaData : Regist
 
         ManaDebug.Log(string.Format("<color=red>{0:0}</color>秒后激活小游戏", MiniTimer));
 
+
+        List<string> offlineList = Data.GetOfflineConfig();
+
+        MaxCoin = Auxiliary.LongParse(offlineList[2], 999999999999999999);
+        MaxTime = Auxiliary.LongParse(offlineList[1], 999999999999999999);
+        OfflineFml = offlineList[0];
+
         List<double> dataList = Data.GetAchieveData();
 
         AdAmt = dataList[0];
@@ -620,10 +630,10 @@ public class ManaData : Regist
         QuitTime = DateTime.Parse(Data.GetPlayerString("QuitTime"));
 
         Elapse = (float)ManaServer.Time.Subtract(QuitTime).TotalSeconds;
-
-        if (Elapse > 43200)
+        
+        if (Elapse > MaxTime)
         {
-            Elapse = 43200;
+            Elapse = (long)MaxTime;
         }
 
         if (!Data.GetPlayerBool("QuitFlag"))
@@ -669,7 +679,7 @@ public class ManaData : Regist
 
     public static void RegistIncome()
     {
-        float coin = 0;
+        double coin = 0;
 
         if (FFUseList.Count > 0)
         {
@@ -700,6 +710,13 @@ public class ManaData : Regist
                 FFCoolList[j].CoolTimer -= CircleTime - CircleTimer;
             }
 
+            coin = (long) Auxiliary.FmlParse(OfflineFml, "c", coin.ToString());
+
+            if (coin > MaxCoin)
+            {
+                coin = MaxCoin;
+            }
+
             Coin += coin;
 
             ManaReso.SetText("Ba_IconLab", coin.ToString("0"));
@@ -749,6 +766,8 @@ public class ManaData : Regist
             }
             else
             {
+                ManaReso.Get("Fe_Info").TweenBacCG();
+
                 Bubble.Show
                 (
                     Language.GetStr("Common", "ShortCoin"),
@@ -756,8 +775,6 @@ public class ManaData : Regist
                     ManaReso.LoadSprite("金币"),
                     () =>
                     {
-                        ManaReso.Get("Fe_Info").TweenBacCG();
-
                         Tween tween = ManaReso.Get("K_Bubble0").GetTweenScale();
 
                         tween.AddEventOnetime
@@ -795,6 +812,8 @@ public class ManaData : Regist
             }
             else
             {
+                ManaReso.Get("Fe_Info").TweenBacCG();
+
                 Bubble.Show
                 (
                     Language.GetStr("Common", "ShortDiamond"),
@@ -802,8 +821,6 @@ public class ManaData : Regist
                     ManaReso.LoadSprite("钻石"),
                     () =>
                     {
-                        ManaReso.Get("Fe_Info").TweenBacCG();
-
                         Tween tween = ManaReso.Get("K_Bubble0").GetTweenScale();
 
                         tween.AddEventOnetime

+ 4 - 6
Assets/Script/Manage/ManaMiniGame.cs

@@ -29,6 +29,9 @@ public class Award
 
     public Award(XmlAttributeCollection attribute)
     {
+        Flower.CoinFml = attribute[8].Value;
+        DropGold.CoinFml = attribute[7].Value;
+
         CoinFml = attribute[1].Value;
         FlowerFml = attribute[4].Value;
         DiamondFml = attribute[3].Value;
@@ -569,7 +572,7 @@ public class ManaMiniGame : Regist
                 ManaReso.Get("D_Fertilize1").SetActive(true);
                 ManaReso.Get("D_Begin").SetActive(false);
 
-                PrepareLab.SetActive(true);
+                PrepareLab.StreamForScale();
             }
         }
     }
@@ -719,11 +722,6 @@ public class ManaMiniGame : Regist
             Prepare = false;
 
             GameBegin();
-
-            PrepareLab.text = Language.GetStr("UI", "D_PrepareLab");
-
-            PrepareLab.TweenForGra();
-            PrepareLab.TweenForFont();
         }
     }
 

+ 27 - 8
Assets/Script/Manage/ManaPlayer.cs

@@ -15,6 +15,7 @@ public class ManaPlayer : Regist
 {
     #region 变量
 
+    public static bool LoadComplete;
     public static string SelePlayer = "PlayerBlond";
     public static Transform SelePlayerTra;
 
@@ -40,12 +41,15 @@ public class ManaPlayer : Regist
 
     public override void Instantiate()
     {
-        UnityFactory.factory.LoadDragonBonesData(Bundle.Config.LoadAsset<TextAsset>("stand_ske"));
-        UnityFactory.factory.LoadDragonBonesData(Bundle.Config.LoadAsset<TextAsset>("Closet_ske"));
+        if (!LoadComplete)
+        {
+            UnityFactory.factory.LoadDragonBonesData(Bundle.Config.LoadAsset<TextAsset>("stand_ske"));
+            UnityFactory.factory.LoadDragonBonesData(Bundle.Config.LoadAsset<TextAsset>("Closet_ske"));
+
+            UnityFactory.factory.LoadTextureAtlasData(Bundle.Config.LoadAsset<TextAsset>("stand_tex"), "stand_tex");
+            UnityFactory.factory.LoadTextureAtlasData(Bundle.Config.LoadAsset<TextAsset>("Closet_tex"), "Closet_tex");
+        }
 
-        UnityFactory.factory.LoadTextureAtlasData(Bundle.Config.LoadAsset<TextAsset>("stand_tex"), "stand_tex");
-        UnityFactory.factory.LoadTextureAtlasData(Bundle.Config.LoadAsset<TextAsset>("Closet_tex"), "Closet_tex");
-        
         if (!ManaTutorial.TutorialA || ManaTutorial.TutorialIndexA != 1)
         {
             GetPlayer();
@@ -56,9 +60,24 @@ public class ManaPlayer : Regist
             PlayerBlond = ManaReso.Get<ObjRoot>("Player", Folder.Scene, false, ManaReso.Get("PlayerBk2"), false, ObjType.PlayerBlond);
             PlayerBrown = ManaReso.Get<ObjRoot>("Player", Folder.Scene, false, ManaReso.Get("PlayerBk1"), false, ObjType.PlayerBrown);
 
-            PlayerPink.AddScript<Player>().BuildPink();
-            PlayerBlond.AddScript<Player>().BuildBlond();
-            PlayerBrown.AddScript<Player>().BuildBrown();
+            if (PlayerPink.GetComponent<Player>() == null)
+            {
+                PlayerPink.AddScript<Player>().BuildPink();
+            }
+
+            if (PlayerBlond.GetComponent<Player>() == null)
+            {
+                PlayerBlond.AddScript<Player>().BuildBlond();
+            }
+
+            if (PlayerBrown.GetComponent<Player>() == null)
+            {
+                PlayerBrown.AddScript<Player>().BuildBrown();
+            }
+
+            PlayerPink.localScale = new Vector3(0.7f, 0.7f, 0.7f);
+            PlayerBlond.localScale = new Vector3(0.7f, 0.7f, 0.7f);
+            PlayerBrown.localScale = new Vector3(0.7f, 0.7f, 0.7f);
 
             SelePlayer = "PlayerBlond";
             SelePlayerTra = PlayerBlond;

+ 78 - 8
Assets/Script/Manage/ManaReso.cs

@@ -26,7 +26,7 @@ public enum ObjType
     Null,
 
     Firework,
-    Lightwall,
+    LightwallUI,
 
     PlayerPink,
     PlayerBlond,
@@ -691,7 +691,7 @@ public class ManaReso : Regist
 
     public static ParticleSystem GetLightwall()
     {
-        Transform tra = Get<Effect>("Lightwall", Folder.Effect, false, null, true, ObjType.Lightwall);
+        Transform tra = Get<Effect>("LightwallUI", Folder.Effect, false, Get("Canvas"), false, ObjType.LightwallUI);
 
         ParticleSystem particle = tra.GetComponent<ParticleSystem>();
 
@@ -743,7 +743,7 @@ public class ManaReso : Regist
         InstantiateList.Add(kv);
     }
 
-    public static void AsyncLoad<T>(string goName, Folder folder, ObjType objType) where T : ObjRoot
+    public static void AsyncLoad<T>(string goName, int amt, Folder folder, ObjType objType) where T : ObjRoot
     {
         KV<AssetBundleRequest, UnityAction> kv = new KV<AssetBundleRequest, UnityAction>();
 
@@ -778,11 +778,11 @@ public class ManaReso : Regist
         kv.Key = bundleRequest;
         kv.Value = () =>
         {
-            ObjDic.Add(goName, bundleRequest.asset);
+            ObjDic.UniqueAdd(goName, bundleRequest.asset);
 
             if (objType != ObjType.Null)
             {
-                ObjectPool.Add(objType, new List<Transform>());
+                ObjectPool.UniqueAdd(objType, new List<Transform>());
             }
 
             GameObject go = (GameObject) Instantiate(bundleRequest.asset);
@@ -796,7 +796,10 @@ public class ManaReso : Regist
 
         RequestList.Add(bundleRequest);
 
-        InstantiateList.Add(kv);
+        for (int i = 0; i < amt; i++)
+        {
+            InstantiateList.Add(kv);
+        }
     }
 
     public static void AddAsyncLoad(string goName, Folder folder)
@@ -810,13 +813,80 @@ public class ManaReso : Regist
         );
     }
 
-    public static void AddAsyncLoad<T>(string goName, Folder folder, ObjType objType) where T : ObjRoot
+    public static void AddAsyncLoad<T>(string goName, int amt, Folder folder, ObjType objType) where T : ObjRoot
     {
         AsyncList.Add
         (
             () =>
             {
-                AsyncLoad<T>(goName, folder, objType);
+                AsyncLoad<T>(goName, amt, folder, objType);
+            }
+        );
+    }
+
+    public static void AddAsyncPlayer(string player)
+    {
+        AsyncList.Add
+        (
+            () =>
+            {
+                KV<AssetBundleRequest, UnityAction> kv = new KV<AssetBundleRequest, UnityAction>();
+
+                AssetBundleRequest bundleRequest = Bundle.Scene.LoadAssetAsync("Player");
+
+                kv.Key = bundleRequest;
+                kv.Value = () =>
+                {
+                    GameObject go = (GameObject)Instantiate(bundleRequest.asset);
+
+                    go.name = go.name.Replace("(Clone)", "");
+
+
+                    ObjDic.UniqueAdd("Player", bundleRequest.asset);
+
+                    ObjType objType;
+
+                    if (player == "PlayerPink")
+                    {
+                        objType = ObjType.PlayerPink;
+
+                        ObjectPool.Add(objType, new List<Transform>());
+
+                        go.AddScript<Player>().BuildPink();
+
+                        go.AddComponent<ObjRoot>().ObjType = objType;
+                    }
+                    else if (player == "PlayerBlond")
+                    {
+                        objType = ObjType.PlayerBlond;
+
+                        ObjectPool.Add(objType, new List<Transform>());
+
+                        go.AddScript<Player>().BuildBlond();
+
+                        go.AddComponent<ObjRoot>().ObjType = objType;
+                    }
+                    else if(player == "PlayerBrown")
+                    {
+                        objType = ObjType.PlayerBrown;
+
+                        ObjectPool.Add(objType, new List<Transform>());
+
+                        go.AddScript<Player>().BuildBrown();
+
+                        go.AddComponent<ObjRoot>().ObjType = objType;
+                    }
+                    else
+                    {
+                        throw new Exception();
+                    }
+
+                    Save(go);
+                };
+
+                RequestList.Add(bundleRequest);
+
+                InstantiateList.Add(kv);
             }
         );
     }

+ 73 - 0
Assets/Script/Manage/ManaServer.cs

@@ -5,6 +5,25 @@ using UnityEngine.Events;
 
 using System;
 using System.Collections;
+using System.Net;
+using System.Net.Mail;
+using System.Security.Cryptography.X509Certificates;
+using UnityEngine.UI;
+
+public class MyCredentials : ICredentialsByHost
+{
+    public NetworkCredential NetworkCredential;
+
+    public NetworkCredential GetCredential(string host, int port, string authType)
+    {
+        return NetworkCredential.GetCredential(new Uri("http://" + host + ":" + port), authType);
+    }
+
+    public MyCredentials(string username, string password)
+    {
+        NetworkCredential = new NetworkCredential(username, password);
+    }
+}
 
 public class ManaServer : Regist
 {
@@ -37,13 +56,29 @@ public class ManaServer : Regist
 
     public static bool Connect_;
 
+    public static float Timer;
     public static bool LoginComplete;
+    public static string ReportStr;
     public static string ID = "Default";
     public static JsonData JsonData;
     public static DateTime Time;
 
     #endregion
 
+    private void Update()
+    {
+        if (!ManaData.InitiateComplete)
+        {
+            Timer += UnityEngine.Time.fixedDeltaTime;
+            
+            if (Timer >= 5)
+            {
+                ManaData.LoginCallbackInitial(new JsonData());
+            }
+        }
+    }
+
+
     public static void Login(URLRequest.URLRequestJsonCallBackDelegate callback = null)
     {
         URLRequestData urlData = new URLRequestData();
@@ -113,4 +148,42 @@ public class ManaServer : Regist
 
         URLRequest.CreateURLRequest("https://garden.dashgame.com/index.php/home/user/load", urlData, callback, URLRequest.Method.POST);
     }
+
+
+    public static void Report()
+    {
+        ManaReso.Get("Lb_Info").TweenBacCG();
+
+        string str = ManaReso.Get<Text>("Lb_InputLab").text;
+
+        if (string.IsNullOrEmpty(str))
+        {
+            Bubble.Show(null, Language.GetStr("UI", "Lb_Send2"));
+        }
+        else if(ReportStr == str)
+        {
+            Bubble.Show(null, Language.GetStr("UI", "Lb_Send1"));
+        }
+        else
+        {
+            MailMessage mailMessage = new MailMessage();
+
+            mailMessage.To.Add(new MailAddress("bug@dashgame.com"));
+
+            mailMessage.From = new MailAddress("dashgamegarden@163.com");
+
+            ReportStr = str;
+
+            mailMessage.Body = ReportStr;
+
+            mailMessage.Subject = ID + " MyLovelyGargen Issue";
+
+            SmtpClient smtpClient = new SmtpClient("smtp.163.com");
+            
+            smtpClient.Credentials = new MyCredentials("dashgamegarden@163.com", "cs670cs");
+            smtpClient.SendAsync(mailMessage, "Async");
+
+            Bubble.Show(null, Language.GetStr("UI", "Lb_Send0"));
+        }
+    }
 }

+ 79 - 10
Assets/Script/Manage/ManaUI.cs

@@ -8,7 +8,7 @@ using System;
 using System.Xml;
 using System.Collections;
 using System.Collections.Generic;
-
+using UnityEngine.Events;
 using Random = UnityEngine.Random;
 
 public class ManaUI : Regist
@@ -457,16 +457,30 @@ public class ManaUI : Regist
 
         #region D_PrepareLab
 
-        ManaReso.Get("D_PrepareLab").CreateTweenGra(1, 0, 0.25f, false, false, Curve.EaseOutQuad);
-        ManaReso.Get("D_PrepareLab").CreateTweenFont(90, 100, 0.25f, false, false, Curve.EaseOutQuad);
-
-        tween = ManaReso.Get("D_PrepareLab").GetTweenFont();
+        Text text = ManaReso.Get<Text>("D_PrepareLab");
 
-        tween.OnForwardFinish += () =>
-        {
-            ManaReso.Get("D_PrepareLab").GetTweenGra().InOrigin = true;
-            ManaReso.Get("D_PrepareLab").GetTweenFont().InOrigin = true;
-        };
+        ManaReso.Get("D_PrepareLab").CreateStreamScale
+        (
+            new List<float>() { 0.5f, 0, 0.5f, 0, 0.5f, 0, 0.5f },
+            new List<float>() { 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.25f, 0.125f },
+            new List<VecPair>() { new VecPair(2, 2, 2, 1, 1, 1), new VecPair(1, 1, 1, 0, 0, 0), new VecPair(2, 2, 2, 1, 1, 1), new VecPair(1, 1, 1, 0, 0, 0), new VecPair(2, 2, 2, 1, 1, 1), new VecPair(1, 1, 1, 0, 0, 0), new VecPair(0, 0, 0, 1, 1, 1), new VecPair(1, 1, 1, 1.5f, 0, 1) },
+            true,
+            false,
+            Curve.EaseOutQuad,
+            false,
+            new List<UnityAction>()
+            {
+                    () => { text.text = "3"; },
+                    () => { },
+                    () => { text.text = "2"; },
+                    () => { },
+                    () => { text.text = "1"; },
+                    () => { },
+                    () => { text.text = Language.GetStr("UI", "D_PrepareLab"); },
+                    () => { },
+                    () => { },
+            }
+        );
 
         #endregion
 
@@ -1231,6 +1245,11 @@ public class ManaUI : Regist
         ManaLan.Add(ManaReso.Get<Text>("La_ConfirmLab"), new LanStr("Common", "Confirm"));
         ManaLan.Add(ManaReso.Get<Text>("La_Placeholder"), new LanStr("UI", "La_Placeholder"));
 
+        ManaLan.Add(ManaReso.Get<Text>("Lb_Tit"), new LanStr("UI", "Lb_Tit"));
+        ManaLan.Add(ManaReso.Get<Text>("Lb_CancelLab"), new LanStr("Common", "Cancel"));
+        ManaLan.Add(ManaReso.Get<Text>("Lb_ConfirmLab"), new LanStr("Common", "Confirm"));
+        ManaLan.Add(ManaReso.Get<Text>("Lb_Placeholder"), new LanStr("UI", "Lb_Placeholder"));
+
         ManaReso.SetText("L_UserLab", Data.GetPlayerString("ID"));
 
         #region L_Setting
@@ -1266,6 +1285,20 @@ public class ManaUI : Regist
         #endregion
 
 
+        #region L_ReportBtn
+
+        ManaReso.SetButtonEvent
+        (
+            "L_ReportBtn",
+            () =>
+            {
+                ManaAudio.PlayClip(Clip.BtnClip);
+                ManaReso.Get("Lb_Info").TweenForCG();
+            }
+        );
+
+        #endregion
+
         #region L_MusicBtn
 
         ManaReso.SetButtonEvent
@@ -1410,6 +1443,42 @@ public class ManaUI : Regist
 
         #endregion
 
+
+        #region Lb_Info
+
+        ManaReso.Get("Lb_Info").CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
+
+        #endregion
+
+        #region Lb_Cancel
+
+        ManaReso.AddButtonEvent
+        (
+            "Lb_Cancel",
+            () =>
+            {
+                ManaAudio.PlayClip(Clip.CloseClip);
+                ManaReso.Get("Lb_Info").TweenBacCG();
+            }
+        );
+
+        #endregion
+
+        #region Lb_Confirm
+
+        ManaReso.AddButtonEvent
+        (
+            "Lb_Confirm",
+            () =>
+            {
+                ManaAudio.PlayClip(Clip.BtnClip);
+
+                ManaServer.Report();
+            }
+        );
+
+        #endregion
+
         #endregion
 
         #region M

+ 2 - 2
Assets/Script/Object/DropGold.cs

@@ -8,7 +8,7 @@ public class DropGold : Drop
 {
 	#region 变量
 
-    
+    public static string CoinFml;
 
     #endregion
 
@@ -32,7 +32,7 @@ public class DropGold : Drop
     {
         base.OnPointerClick(eventData);
 
-        int coin = Random.Range(5, 16);
+        int coin = Mathf.CeilToInt((float) Auxiliary.FmlParse(CoinFml, "l", Mathf.Clamp(ManaData.Level, 1, Mathf.Infinity).ToString(), "r", Random.Range(0f, 1f).ToString()));
         Award.BonusCoin += coin;
 
         ManaReso.GetHudText("+" + coin, Color.white, 25, transform, ManaReso.Get("D_Status"), true);

+ 3 - 2
Assets/Script/Object/Flower.cs

@@ -242,6 +242,7 @@ public class Flower : ObjRoot, IPointerClickHandler
     private FlowerInfo FlowerInfo_;
 
     public int ID;
+    public static string CoinFml;
     public Slot Slot;
     public Animator ParticleAC;
     public Transform GoldBk;
@@ -461,8 +462,8 @@ public class Flower : ObjRoot, IPointerClickHandler
 
         ManaGarden.AwardValid = true;
 
-        int coin = Mathf.CeilToInt(ManaData.CoinPerson*Random.Range(0.05f, 0.08f)*ManaData.SkillPlus);
-
+        int coin = Mathf.CeilToInt((float)Auxiliary.FmlParse(CoinFml, "l", Mathf.Clamp(ManaData.Level, 1, Mathf.Infinity).ToString()));
+        
         ManaData.Coin += coin;
         ManaData.FlowerCoin++;
 

+ 11 - 2
Assets/Script/Object/Player.cs

@@ -63,9 +63,18 @@ public class Player : Regist
     #region 换装
 
     public UnityArmatureComponent Build()
-    {        
-        UAC = UnityFactory.factory.BuildArmatureComponent("Armature");
+    {
+        if (!ManaPlayer.LoadComplete)
+        {
+            UnityFactory.factory.LoadDragonBonesData(Bundle.Config.LoadAsset<TextAsset>("stand_ske"));
+            UnityFactory.factory.LoadDragonBonesData(Bundle.Config.LoadAsset<TextAsset>("Closet_ske"));
 
+            UnityFactory.factory.LoadTextureAtlasData(Bundle.Config.LoadAsset<TextAsset>("stand_tex"), "stand_tex");
+            UnityFactory.factory.LoadTextureAtlasData(Bundle.Config.LoadAsset<TextAsset>("Closet_tex"), "Closet_tex");
+        }
+
+        UAC = UnityFactory.factory.BuildArmatureComponent("Armature");
+        
         UAC.transform.parent = transform;
         UAC.transform.localScale = new Vector3(1, 1, 1);
         UAC.transform.localPosition = new Vector3();

+ 1 - 0
Assets/Script/Object/Skill/Ability.cs

@@ -192,6 +192,7 @@ public class Ability : SkillRoot
 
         ItemStatus = ItemStatus;
 
+        ItemBtn.onClick.RemoveAllListeners();
         ItemBtn.onClick.AddListener(OnClick);
 
         ItemLab.text = Description(0);

+ 5 - 0
Assets/Script/Object/Skill/BigSkill.cs

@@ -206,6 +206,7 @@ public class BigSkill : Skill
 
             BarBk1.material = null;
 
+            BarBtn.onClick.RemoveAllListeners();
             BarBtn.onClick.AddListener(Buy);
         }
         else
@@ -214,8 +215,10 @@ public class BigSkill : Skill
 
             ItemLab.text = Description(0);
 
+            BarBtn.onClick.RemoveAllListeners();
             BarBtn.onClick.AddListener(Buy);
 
+            ItemBtn.onClick.RemoveAllListeners();
             ItemBtn.onClick.AddListener(OnClick);
 
             if (Level > 0)
@@ -557,6 +560,8 @@ public class BigSkill : Skill
 
         if (ManaData.Pay(UnlockAheadAmt, UnlockAheadCur))
         {
+            ManaAudio.PlayClip(Clip.SkillClip);
+
             ItemStatus = SkillStatus.UnLock;
         }
     }

+ 1 - 0
Assets/Script/Object/Skill/Pack.cs

@@ -158,6 +158,7 @@ public class Pack : SkillRoot
 
         ItemStatus_ = (SkillStatus)Enum.Parse(typeof(SkillStatus), attribute[2].Value);
 
+        ItemBtn.onClick.RemoveAllListeners();
         ItemBtn.onClick.AddListener(OnClick);
 
         ItemLab.text = Description(0);

+ 1 - 1
Assets/Script/Object/Skill/Skill.cs

@@ -459,7 +459,7 @@ public class Skill : SkillRoot
             ManaData.CoolList.Add(this);
         }
 
-
+        ItemBtn.onClick.RemoveAllListeners();
         ItemBtn.onClick.AddListener(OnClick);
 
         ItemLab.text = Description(0);

+ 352 - 0
Assets/Script/Tool/Anim/StreamFont.cs

@@ -0,0 +1,352 @@
+using UnityEngine;
+using UnityEngine.UI;
+using UnityEngine.Events;
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+public struct IntPair
+{
+    public int Key;
+    public int Value;
+
+    public IntPair(int key, int value)
+    {
+        Key = key;
+        Value = value;
+    }
+}
+
+public class StreamFont : Tween
+{
+    #region 变量
+
+    public override bool InOrigin
+    {
+        get
+        {
+            if (Consecutive)
+            {
+                if (Target.fontSize.Equal(DestList[0]))
+                {
+                    _InOrigin = true;
+                }
+                else
+                {
+                    _InOrigin = false;
+                }
+            }
+            else
+            {
+                if (Target.fontSize.Equal(DestKvList[0].Key))
+                {
+                    _InOrigin = true;
+                }
+                else
+                {
+                    _InOrigin = false;
+                }
+            }
+
+            return _InOrigin;
+        }
+        set
+        {
+            _InOrigin = value;
+
+            if (_InOrigin)
+            {
+                if (Consecutive)
+                {
+                    Target.fontSize = DestList[0];
+                }
+                else
+                {
+                    Target.fontSize = DestKvList[0].Key;
+                }
+
+                FinishBackward();
+            }
+        }
+    }
+
+    public override bool InDestination
+    {
+        get
+        {
+            if (Consecutive)
+            {
+                if (Target.fontSize.Equal(DestList.Last(0)))
+                {
+                    _InDestination = true;
+                }
+                else
+                {
+                    _InDestination = false;
+                }
+            }
+            else
+            {
+                if (Target.fontSize.Equal(DestKvList.Last(0).Value))
+                {
+                    _InDestination = true;
+                }
+                else
+                {
+                    _InDestination = false;
+                }
+            }
+
+            return _InDestination;
+        }
+        set
+        {
+            _InDestination = value;
+
+            if (_InDestination)
+            {
+                if (Consecutive)
+                {
+                    Target.fontSize = DestList.Last(0);
+                }
+                else
+                {
+                    Target.fontSize = DestKvList.Last(0).Value;
+                }
+
+                FinishForward();
+            }
+        }
+    }
+
+    public int Phase;
+    public int TotPhase;
+    public int TempDest;
+    public int TempDelta;
+    public int TempOrigin;
+    public bool Consecutive;
+    public float TempDelay;
+    public float TempDuration;
+    public List<int> DestList = new List<int>();
+    public List<float> DelayList = new List<float>();
+    public List<float> DurationList = new List<float>();
+    public List<IntPair> DestKvList = new List<IntPair>();
+    public List<UnityAction> ActionList = new List<UnityAction>();
+
+    public Text Target;
+    public CurveFunctionF Func;
+
+    #endregion
+
+    public StreamFont(Text target, List<int> destList, List<float> delayList, List<float> durationList, bool originActive, bool destActive, Curve curve, bool cg = false, List<UnityAction> actionList = null) : base(cg, curve, target)
+    {
+        Func = ManaAnim.CurveFuncDicF[curve];
+        Target = target;
+        TotPhase = destList.Count - 1;
+        Consecutive = true;
+
+        DestList = destList;
+        DelayList = delayList;
+        ActionList = actionList;
+        DurationList = durationList;
+
+        if (ActionList.Valid())
+        {
+            if ((DestList.Count - 1) - ActionList.Count != -1)
+            {
+                throw new Exception();
+            }
+        }
+
+        if (DestList.Count - DelayList.Count != 2)
+        {
+            throw new Exception();
+        }
+
+        if (DestList.Count - DurationList.Count != 1)
+        {
+            throw new Exception();
+        }
+
+        InForward = false;
+        InBackward = false;
+
+        DestActive = destActive;
+        OriginActive = originActive;
+    }
+
+    public StreamFont(Text target, List<IntPair> destKvList, List<float> delayList, List<float> durationList, bool originActive, bool destActive, Curve curve, bool cg = false, List<UnityAction> actionList = null) : base(cg, curve, target)
+    {
+        Func = ManaAnim.CurveFuncDicF[curve];
+        Target = target;
+        TotPhase = destKvList.Count - 1;
+        Consecutive = false;
+
+        DelayList = delayList;
+        ActionList = actionList;
+        DestKvList = destKvList;
+        DurationList = durationList;
+
+        if (ActionList.Valid())
+        {
+            if (DestKvList.Count - ActionList.Count != -1)
+            {
+                throw new Exception();
+            }
+        }
+
+        if (DestKvList.Count - DelayList.Count != 1)
+        {
+            throw new Exception();
+        }
+
+        if (DestKvList.Count - DurationList.Count != 0)
+        {
+            throw new Exception();
+        }
+
+        InForward = false;
+        InBackward = false;
+
+        DestActive = destActive;
+        OriginActive = originActive;
+    }
+
+
+    public override void StartForward()
+    {
+        base.StartForward();
+
+        if (Consecutive)
+        {
+            Phase = 1;
+            TempDest = DestList[1];
+            TempDelay = DelayList[0];
+            TempOrigin = DestList[0];
+            TempDuration = DurationList[0];
+        }
+        else
+        {
+            Phase = 0;
+            TempDest = DestKvList[0].Value;
+            TempDelay = DelayList[0];
+            TempOrigin = DestKvList[0].Key;
+            TempDuration = DurationList[0];
+        }
+
+        TempDelta = TempDest - TempOrigin;
+
+        if (ActionList.Valid())
+        {
+                ActionList[0].SafeInvoke();
+        }
+
+        //if (InBackward)
+        //{
+        //    Timer = ManaAnim.GetTimerFloat(Target.fontSize, Duration, TempOrigin, TempDelta, Curve);
+        //}
+    }
+
+    public override void StartBackward()
+    {
+        base.StartBackward();
+
+        throw new Exception();
+    }
+
+
+    public override bool DoForward()
+    {
+        Timer += Time.fixedDeltaTime;
+        
+        if (Phase == TotPhase)
+        {
+            if (Timer > TempDuration)
+            {
+                FinishForward();
+
+                Timer = 0;
+
+                InForward = false;
+                InDestination = true;
+
+                if (OnForwardFinish != null)
+                {
+                    OnForwardFinish.Invoke();
+                }
+
+                if (ActionList.Valid())
+                {
+                    ActionList.Last(0).SafeInvoke();
+                }
+
+                return true;
+            }
+            else
+            {
+                Target.fontSize = (int)Func(Timer, TempDuration, TempOrigin, TempDelta);
+
+                return false;
+            }
+        }
+        else
+        {
+            if (Timer > TempDuration + TempDelay)
+            {
+                Timer = 0;
+                Phase++;
+
+                if (Consecutive)
+                {
+                    TempDest = DestList[Phase];
+                    TempOrigin = DestList[Phase - 1];
+                    TempDuration = DurationList[Phase - 1];
+
+                    TempDelta = TempDest - TempOrigin;
+
+                    if (Phase != DestList.Count - 1)
+                    {
+                        TempDelay = DelayList[Phase - 1];
+                    }
+
+                    if (ActionList.Valid())
+                    {
+                        ActionList[Phase - 1].SafeInvoke();
+                    }
+                }
+                else
+                {
+                    TempDest = DestKvList[Phase].Value;
+                    TempOrigin = DestKvList[Phase].Key;
+                    TempDuration = DurationList[Phase];
+
+                    TempDelta = TempDest - TempOrigin;
+
+                    if (Phase != DestKvList.Count - 1)
+                    {
+                        TempDelay = DelayList[Phase];
+                    }
+
+                    if (ActionList.Valid())
+                    {
+                        ActionList[Phase].SafeInvoke();
+                    }
+                }
+
+                return false;
+            }
+            else
+            {
+                Target.fontSize = (int)Func(Timer, TempDuration, TempOrigin, TempDelta);
+                
+                return false;
+            }
+        }
+    }
+
+    public override bool DoBackward()
+    {
+        throw new Exception();
+    }
+}

+ 12 - 0
Assets/Script/Tool/Anim/StreamFont.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6723c6c944988044a8803885c0e2d7fe
+timeCreated: 1493775416
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 358 - 0
Assets/Script/Tool/Anim/StreamScale.cs

@@ -0,0 +1,358 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine.Events;
+
+public struct VecPair
+{
+    public Vector3 Key;
+    public Vector3 Value;
+
+    public VecPair(Vector3 key, Vector3 value)
+    {
+        Key = key;
+        Value = value;
+    }
+
+    public VecPair(float x1, float y1, float z1, float x2, float y2, float z2)
+    {
+        Key = new Vector3(x1, y1, z1);
+        Value = new Vector3(x2, y2, z2);
+    }
+}
+
+public class StreamScale : Tween 
+{
+    #region 变量
+
+    public override bool InOrigin
+    {
+        get
+        {
+            if (Consecutive)
+            {
+                if (Target.localScale.Equal(DestList[0]))
+                {
+                    _InOrigin = true;
+                }
+                else
+                {
+                    _InOrigin = false;
+                }
+            }
+            else
+            {
+                if (Target.localScale.Equal(DestKvList[0].Key))
+                {
+                    _InOrigin = true;
+                }
+                else
+                {
+                    _InOrigin = false;
+                }
+            }
+
+            return _InOrigin;
+        }
+        set
+        {
+            _InOrigin = value;
+
+            if (_InOrigin)
+            {
+                if (Consecutive)
+                {
+                    Target.localScale = DestList[0];
+                }
+                else
+                {
+                    Target.localScale = DestKvList[0].Key;
+                }
+
+                FinishBackward();
+            }
+        }
+    }
+
+    public override bool InDestination
+    {
+        get
+        {
+            if (Consecutive)
+            {
+                if (Target.localScale.Equal(DestList.Last(0)))
+                {
+                    _InDestination = true;
+                }
+                else
+                {
+                    _InDestination = false;
+                }
+            }
+            else
+            {
+                if (Target.localScale.Equal(DestKvList.Last(0).Value))
+                {
+                    _InDestination = true;
+                }
+                else
+                {
+                    _InDestination = false;
+                }
+            }
+
+            return _InDestination;
+        }
+        set
+        {
+            _InDestination = value;
+
+            if (_InDestination)
+            {
+                if (Consecutive)
+                {
+                    Target.localScale = DestList.Last(0);
+                }
+                else
+                {
+                    Target.localScale = DestKvList.Last(0).Value;
+                }
+
+                FinishForward();
+            }
+        }
+    }
+
+    public int Phase;
+    public int TotPhase;
+    public bool Consecutive;
+    public float TempDelay;
+    public float TempDuration;
+    public Vector3 TempDest;
+    public Vector3 TempDelta;
+    public Vector3 TempOrigin;
+    public List<float> DelayList = new List<float>();
+    public List<float> DurationList = new List<float>();
+    public List<VecPair> DestKvList = new List<VecPair>();
+    public List<Vector3> DestList = new List<Vector3>();
+    public List<UnityAction> ActionList = new List<UnityAction>();
+
+    public Transform Target;
+    public CurveFunctionV Func;
+
+    #endregion
+
+    public StreamScale(Transform target, List<float> delayList, List<float> durationList, List<VecPair> destKvList, bool originActive, bool destActive, Curve curve, bool cg = false, List<UnityAction> actionList = null) : base(cg, curve, target)
+    {
+        Func = ManaAnim.CurveFuncDicV[curve];
+        Target = target;
+        TotPhase = destKvList.Count - 1;
+        Consecutive = false;
+
+        DelayList = delayList;
+        ActionList = actionList;
+        DestKvList = destKvList;
+        DurationList = durationList;
+
+        if (ActionList.Valid())
+        {
+            if (DestKvList.Count - ActionList.Count != -1)
+            {
+                throw new Exception();
+            }
+        }
+
+        if (DestKvList.Count - DelayList.Count != 1)
+        {
+            throw new Exception();
+        }
+
+        if (DestKvList.Count - DurationList.Count != 0)
+        {
+            throw new Exception();
+        }
+
+        InForward = false;
+        InBackward = false;
+
+        DestActive = destActive;
+        OriginActive = originActive;
+    }
+
+    public StreamScale(Transform target, List<float> delayList, List<float> durationList, List<Vector3> destList, bool originActive, bool destActive, Curve curve, bool cg = false, List<UnityAction> actionList = null) : base(cg, curve, target)
+    {
+        Func = ManaAnim.CurveFuncDicV[curve];
+        Target = target;
+        TotPhase = destList.Count - 1;
+        Consecutive = true;
+
+        DestList = destList;
+        DelayList = delayList;
+        ActionList = actionList;
+        DurationList = durationList;
+
+        if (ActionList.Valid())
+        {
+            if ((DestList.Count - 1) - ActionList.Count != -1)
+            {
+                throw new Exception();
+            }
+        }
+
+        if (DestList.Count - DelayList.Count != 2)
+        {
+            throw new Exception();
+        }
+
+        if (DestList.Count - DurationList.Count != 1)
+        {
+            throw new Exception();
+        }
+
+        InForward = false;
+        InBackward = false;
+
+        DestActive = destActive;
+        OriginActive = originActive;
+    }
+
+
+    public override void StartForward()
+    {
+        base.StartForward();
+
+        if (Consecutive)
+        {
+            Phase = 1;
+            TempDest = DestList[1];
+            TempDelay = DelayList[0];
+            TempOrigin = DestList[0];
+            TempDuration = DurationList[0];
+        }
+        else
+        {
+            Phase = 0;
+            TempDest = DestKvList[0].Value;
+            TempDelay = DelayList[0];
+            TempOrigin = DestKvList[0].Key;
+            TempDuration = DurationList[0];
+        }
+
+        TempDelta = TempDest - TempOrigin;
+
+        if (ActionList.Valid())
+        {
+            ActionList[0].SafeInvoke();
+        }
+
+        //if (InBackward)
+        //{
+        //    Timer = ManaAnim.GetTimerFloat(Target.fontSize, Duration, TempOrigin, TempDelta, Curve);
+        //}
+    }
+
+    public override void StartBackward()
+    {
+        base.StartBackward();
+
+        throw new Exception();
+    }
+
+
+    public override bool DoForward()
+    {
+        Timer += Time.fixedDeltaTime;
+
+        if (Phase == TotPhase)
+        {
+            if (Timer > TempDuration)
+            {
+                FinishForward();
+
+                Timer = 0;
+
+                InForward = false;
+                InDestination = true;
+
+                if (OnForwardFinish != null)
+                {
+                    OnForwardFinish.Invoke();
+                }
+
+                if (ActionList.Valid())
+                {
+                    ActionList.Last(0).SafeInvoke();
+                }
+
+                return true;
+            }
+            else
+            {
+                Target.localScale = Func(Timer, TempDuration, TempOrigin, TempDelta);
+
+                return false;
+            }
+        }
+        else
+        {
+            if (Timer > TempDuration + TempDelay)
+            {
+                Timer = 0;
+                Phase++;
+
+                if (Consecutive)
+                {
+                    TempDest = DestList[Phase];
+                    TempOrigin = DestList[Phase - 1];
+                    TempDuration = DurationList[Phase - 1];
+
+                    TempDelta = TempDest - TempOrigin;
+
+                    if (Phase != DestList.Count - 1)
+                    {
+                        TempDelay = DelayList[Phase - 1];
+                    }
+
+                    if (ActionList.Valid())
+                    {
+                        ActionList[Phase - 1].SafeInvoke();
+                    }
+                }
+                else
+                {
+                    TempDest = DestKvList[Phase].Value;
+                    TempOrigin = DestKvList[Phase].Key;
+                    TempDuration = DurationList[Phase];
+
+                    TempDelta = TempDest - TempOrigin;
+
+                    if (Phase != DestKvList.Count - 1)
+                    {
+                        TempDelay = DelayList[Phase];
+                    }
+
+                    if (ActionList.Valid())
+                    {
+                        ActionList[Phase].SafeInvoke();
+                    }
+                }
+
+                return false;
+            }
+            else
+            {
+                Target.localScale = Func(Timer, TempDuration, TempOrigin, TempDelta);
+
+                return false;
+            }
+        }
+    }
+
+    public override bool DoBackward()
+    {
+        throw new Exception();
+    }
+}

+ 12 - 0
Assets/Script/Tool/Anim/StreamScale.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f7a208f4efe5ae142a37d16dd25deb33
+timeCreated: 1493788882
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 15 - 1
Assets/Script/Tool/Auxiliary.cs

@@ -8,9 +8,12 @@ using UnityEngine.Events;
 using System;
 using System.IO;
 using System.Linq;
+using System.Net.Mail;
 using System.Text;
 using System.Collections;
 using System.Collections.Generic;
+using System.ComponentModel;
+using System.Net;
 using System.Security.Cryptography;
 using System.Runtime.Serialization.Formatters.Binary;
 
@@ -96,7 +99,6 @@ public class Auxiliary : Regist
         enabled = true;
     }
 
-
     private void Awake()
     {
         Instance = this;
@@ -608,6 +610,18 @@ public class Auxiliary : Regist
         }
     }
 
+    public static long LongParse(string str, long defaultValue)
+    {
+        if (string.IsNullOrEmpty(str))
+        {
+            return defaultValue;
+        }
+        else
+        {
+            return long.Parse(str);
+        }
+    }
+
     public static bool BoolParse(string str, bool defaultValue)
     {
         if (string.IsNullOrEmpty(str))

+ 18 - 7
Assets/Script/Tool/Bundle.cs

@@ -90,26 +90,37 @@ public class Bundle : Regist
 
         if (!Logo.LogoComplete)
         {
-            ManaReso.AddAsyncLoad<ObjRoot>("EventSystem", Folder.UI, ObjType.EventSystem);
-            ManaReso.AddAsyncLoad<ObjRoot>("MainCamera", Folder.UI, ObjType.MainCamera);
-            ManaReso.AddAsyncLoad<ObjRoot>("Canvas", Folder.UI, ObjType.Canvas);
+            ManaReso.AddAsyncLoad<ObjRoot>("EventSystem", 1, Folder.UI, ObjType.EventSystem);
+            ManaReso.AddAsyncLoad<ObjRoot>("MainCamera", 1, Folder.UI, ObjType.MainCamera);
+            ManaReso.AddAsyncLoad<ObjRoot>("Canvas", 1, Folder.UI, ObjType.Canvas);
         }
 
         yield return LoadScene();
 
         if (!Logo.LogoComplete)
         {
-            ManaReso.AddAsyncLoad<Flower>("Flower", Folder.Scene, ObjType.Flower);
+            if (Data.GetPlayerBool("TutorialA") && Data.GetPlayerInt("TutorialIndexA") == 1)
+            {
+                ManaReso.AddAsyncPlayer("PlayerPink");
+                ManaReso.AddAsyncPlayer("PlayerBlond");
+                ManaReso.AddAsyncPlayer("PlayerBrown");
+            }
+            else
+            {
+                ManaReso.AddAsyncPlayer(Data.GetPlayerString("Player"));
+            }
 
-            ManaReso.AddAsyncLoad<ObjRoot>("Page", Folder.Scene, ObjType.Page);
-            ManaReso.AddAsyncLoad<ObjRoot>("Garden", Folder.Scene, ObjType.Garden);
+            ManaReso.AddAsyncLoad<Flower>("Flower", 9, Folder.Scene, ObjType.Flower);
+
+            ManaReso.AddAsyncLoad<ObjRoot>("Page", 2, Folder.Scene, ObjType.Page);
+            ManaReso.AddAsyncLoad<ObjRoot>("Garden", 1, Folder.Scene, ObjType.Garden);
         }
 
         yield return LoadAudio();
 
         if (!Logo.LogoComplete)
         {
-            ManaReso.AddAsyncLoad<ObjRoot>("Music", Folder.Audio, ObjType.Music);
+            ManaReso.AddAsyncLoad<ObjRoot>("Music", 1, Folder.Audio, ObjType.Music);
 
             ManaReso.AddAsyncLoad("BtnClip", Folder.Audio);
             ManaReso.AddAsyncLoad("SkillClip", Folder.Audio);

+ 28 - 3
Assets/Script/Tool/Data.cs

@@ -117,11 +117,14 @@ public class Data
 
     public static void SaveXml()
     {
-        StreamWriter sw = new StreamWriter(Application.persistentDataPath + "/PlayerConfig.xml");
+        if (Initializer.LoadComplete)
+        {
+            StreamWriter sw = new StreamWriter(Application.persistentDataPath + "/PlayerConfig.xml");
 
-        sw.Write(PlayerDoc.OuterXml);
+            sw.Write(PlayerDoc.OuterXml);
 
-        sw.Close();
+            sw.Close();
+        }
     }
 
 
@@ -648,6 +651,28 @@ public class Data
         return Auxiliary.IntListParse(' ', GetPlayerString("AchieveList"), new List<int>());
     }
 
+    public static List<string> GetOfflineConfig()
+    {
+        TextAsset textAsset;
+
+        XmlDocument xmlDoc = new XmlDocument();
+
+        textAsset = ManaReso.Load<TextAsset>("offline_config", Folder.Config);
+
+        xmlDoc.LoadXml(textAsset.text);
+
+        XmlNode xmlNode = xmlDoc.SelectSingleNode("data").SelectSingleNode("item");
+
+        List<string> strList = new List<string>()
+        {
+            xmlNode.Attributes[1].Value,
+            xmlNode.Attributes[2].Value,
+            xmlNode.Attributes[3].Value,
+        };
+
+        return strList;
+    }
+
     public static List<double> GetAchieveData()
     {
         List<double> dataList = new List<double>();

+ 24 - 0
Assets/Script/Tool/Extension.cs

@@ -913,6 +913,30 @@ public static class Extension
 
     #endregion
 
+    #region Stream
+
+    public static StreamScale StreamForScale(this Component comp)
+    {
+        return ManaAnim.StreamForScale(comp.transform);
+    }
+
+    public static StreamScale GetStreamScale(this Component comp)
+    {
+        return ManaAnim.GetStreamScale(comp.transform);
+    }
+
+    public static StreamScale CreateStreamScale(this Component comp, List<float> delayList, List<float> durationList, List<VecPair> destKvList, bool originActive, bool destActive, Curve curve, bool cg = false, List<UnityAction> actionList = null)
+    {
+        return ManaAnim.CreateStreamScale(comp.transform, delayList, durationList, destKvList, originActive, destActive, curve, cg, actionList);
+    }
+
+    public static StreamScale CreateStreamScale(this Component comp, List<float> delayList, List<float> durationList, List<Vector3> destList, bool originActive, bool destActive, Curve curve, bool cg = false, List<UnityAction> actionList = null)
+    {
+        return ManaAnim.CreateStreamScale(comp.transform, delayList, durationList, destList, originActive, destActive, curve, cg, actionList);
+    }
+
+    #endregion
+
     #region Collider
 
     public static void SetCollider(this Component comp, bool active)

+ 104 - 0
Assets/Script/Tool/UI/LightwallUI.cs

@@ -0,0 +1,104 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+using System;
+using System.Collections;
+
+public class LightwallUI : Image
+{
+    #region 变量
+
+    public ParticleSystem ParticleSystem
+    {
+        get
+        {
+            if (_ParticleSystem == null)
+            {
+                _ParticleSystem = GetComponent<ParticleSystem>();
+            }
+
+            return _ParticleSystem;
+        }
+        set { _ParticleSystem = value; }
+    }
+
+    private ParticleSystem _ParticleSystem;
+
+    #endregion
+
+    private void Update()
+    {
+        SetAllDirty();
+    }
+
+    public void Begin()
+    {
+        if (ParticleSystem == null)
+        {
+            return;
+        }
+
+        ParticleSystem.Play();
+    }
+
+
+    protected override void OnPopulateMesh(VertexHelper toFill)
+    {
+        if (ParticleSystem == null)
+        {
+            Debug.Log("There is no ParticalSystem");
+
+            return;
+        }
+
+        toFill.Clear();
+
+        ParticleSystem.Particle[] particles = new ParticleSystem.Particle[ParticleSystem.particleCount];
+
+        ParticleSystem.GetParticles(particles);
+
+        for (int i = 0; i < particles.Length; i++)
+        {
+            DrawParticle(toFill, particles[i]);
+        }
+    }
+
+    protected void DrawParticle(VertexHelper toFill, ParticleSystem.Particle particle)
+    {
+        UIVertex[] vertices = new UIVertex[4];
+
+        Vector3 upAxis = new Vector3(0, 1, 0);
+        Vector3 rightAxis = new Vector3(1, 0, 0);
+
+        if (Math.Abs(particle.rotation) > 0.0005f)
+        {
+            particle.rotation *= Mathf.Deg2Rad;
+
+            upAxis = new Vector3(-Mathf.Sin(particle.rotation), Mathf.Cos(particle.rotation), 0);
+            rightAxis = new Vector3(Mathf.Cos(particle.rotation), Mathf.Sin(particle.rotation), 0);
+        }
+
+        Vector3 pos = particle.position;
+        pos.x *= 140;
+
+        float spriteScale = 25f;
+        float particalScale = particle.GetCurrentSize(ParticleSystem) * 15f;
+
+        vertices[0].position = pos + 0.5f*(1+particalScale)*upAxis*sprite.rect.height/spriteScale;
+        vertices[1].position = pos + 0.5f * (1 + particalScale) * upAxis * sprite.rect.height / spriteScale + 5 * (1 + particalScale) * rightAxis * sprite.rect.width / spriteScale;
+        vertices[2].position = pos - 0.5f * (1 + particalScale) * upAxis * sprite.rect.height / spriteScale + 5 * (1 + particalScale) * rightAxis * sprite.rect.width / spriteScale;
+        vertices[3].position = pos - 0.5f * (1 + particalScale) * upAxis * sprite.rect.height / spriteScale;
+        
+        vertices[0].color = particle.GetCurrentColor(ParticleSystem);
+        vertices[1].color = particle.GetCurrentColor(ParticleSystem);
+        vertices[2].color = particle.GetCurrentColor(ParticleSystem);
+        vertices[3].color = particle.GetCurrentColor(ParticleSystem);
+
+        vertices[0].uv0 = new Vector2(0, 1);
+        vertices[1].uv0 = new Vector2(1, 1);
+        vertices[2].uv0 = new Vector2(1, 0);
+        vertices[3].uv0 = new Vector2(0, 0);
+
+        toFill.AddUIVertexQuad(vertices);
+    }
+}

+ 12 - 0
Assets/Script/Tool/UI/LightwallUI.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 9acb38093e7e9704dbb8d4b0a6711c68
+timeCreated: 1493827444
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 105 - 0
Assets/Script/Tool/UI/PointsUI.cs

@@ -0,0 +1,105 @@
+using UnityEngine;
+using UnityEngine.UI;
+
+using System;
+using System.Collections;
+
+public class PointsUI : Image 
+{
+    #region 变量
+
+    public ParticleSystem ParticleSystem
+    {
+        get
+        {
+            if (_ParticleSystem == null)
+            {
+                _ParticleSystem = GetComponent<ParticleSystem>();
+            }
+
+            return _ParticleSystem;
+        }
+        set { _ParticleSystem = value; }
+    }
+
+    private ParticleSystem _ParticleSystem;
+
+    #endregion
+
+    private void Update()
+    {
+        SetAllDirty();
+    }
+
+    public void Begin()
+    {
+        if (ParticleSystem == null)
+        {
+            return;
+        }
+
+        ParticleSystem.Play();
+    }
+
+
+    protected override void OnPopulateMesh(VertexHelper toFill)
+    {
+        if (ParticleSystem == null)
+        {
+            Debug.Log("There is no ParticalSystem");
+
+            return;
+        }
+
+        toFill.Clear();
+
+        ParticleSystem.Particle[] particles = new ParticleSystem.Particle[ParticleSystem.particleCount];
+
+        ParticleSystem.GetParticles(particles);
+
+        for (int i = 0; i < particles.Length; i++)
+        {
+            DrawParticle(toFill, particles[i]);
+        }
+    }
+
+    protected void DrawParticle(VertexHelper toFill, ParticleSystem.Particle particle)
+    {
+        UIVertex[] vertices = new UIVertex[4];
+
+        Vector3 upAxis = new Vector3(0, 1, 0);
+        Vector3 rightAxis = new Vector3(1, 0, 0);
+
+        if (Math.Abs(particle.rotation) > 0.0005f)
+        {
+            particle.rotation *= Mathf.Deg2Rad;
+
+            upAxis = new Vector3(-Mathf.Sin(particle.rotation), Mathf.Cos(particle.rotation), 0);
+            rightAxis = new Vector3(Mathf.Cos(particle.rotation), Mathf.Sin(particle.rotation), 0);
+        }
+
+        Vector3 pos = particle.position;
+
+        pos.x = pos.y * 140;
+        pos.y = pos.z * 10;
+
+        float spriteScale = 15f;
+
+        vertices[0].position = pos + upAxis * sprite.rect.height / spriteScale - rightAxis * sprite.rect.width / spriteScale;
+        vertices[1].position = pos + upAxis * sprite.rect.height / spriteScale + rightAxis * sprite.rect.width / spriteScale;
+        vertices[2].position = pos - upAxis * sprite.rect.height / spriteScale + rightAxis * sprite.rect.width / spriteScale;
+        vertices[3].position = pos - upAxis*sprite.rect.height/spriteScale - rightAxis*sprite.rect.width/spriteScale;
+
+        vertices[0].color = particle.GetCurrentColor(ParticleSystem);
+        vertices[1].color = particle.GetCurrentColor(ParticleSystem);
+        vertices[2].color = particle.GetCurrentColor(ParticleSystem);
+        vertices[3].color = particle.GetCurrentColor(ParticleSystem);
+
+        vertices[0].uv0 = new Vector2(0, 1);
+        vertices[1].uv0 = new Vector2(1, 1);
+        vertices[2].uv0 = new Vector2(1, 0);
+        vertices[3].uv0 = new Vector2(0, 0);
+
+        toFill.AddUIVertexQuad(vertices);
+    }
+}

+ 12 - 0
Assets/Script/Tool/UI/PointsUI.cs.meta

@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 032b51e4cea865e4c8a3a0cc1d34fc6b
+timeCreated: 1493867667
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 5 - 5
Assets/Script/Tool/UI/UIPartical.cs

@@ -63,7 +63,7 @@ public class UIPartical : Image
         if (ParticleSystem == null)
         {
             Debug.Log("There is no ParticalSystem");
-            
+
             return;
         }
 
@@ -94,10 +94,10 @@ public class UIPartical : Image
             rightAxis = new Vector3(Mathf.Cos(particle.rotation), Mathf.Sin(particle.rotation), 0);
         }
 
-        vertices[0].position = particle.position + upAxis*sprite.rect.height/50 - rightAxis*sprite.rect.width/50;
-        vertices[1].position = particle.position + upAxis*sprite.rect.height/50 + rightAxis*sprite.rect.width/50;
-        vertices[2].position = particle.position - upAxis*sprite.rect.height/50 + rightAxis*sprite.rect.width/50;
-        vertices[3].position = particle.position - upAxis*sprite.rect.height/50 - rightAxis*sprite.rect.width/50;
+        vertices[0].position = particle.position + upAxis * sprite.rect.height / 50 - rightAxis * sprite.rect.width / 50;
+        vertices[1].position = particle.position + upAxis * sprite.rect.height / 50 + rightAxis * sprite.rect.width / 50;
+        vertices[2].position = particle.position - upAxis * sprite.rect.height / 50 + rightAxis * sprite.rect.width / 50;
+        vertices[3].position = particle.position - upAxis * sprite.rect.height / 50 - rightAxis * sprite.rect.width / 50;
 
         vertices[0].color = particle.GetCurrentColor(ParticleSystem);
         vertices[1].color = particle.GetCurrentColor(ParticleSystem);

+ 2 - 0
MyLovelyGarden.Editor.csproj

@@ -169,7 +169,9 @@
     <None Include="Assets\Resource\Plugins\ConsolePro\Readme.txt" />
     <None Include="Assets\Resource\Shader\Discard.shader" />
     <None Include="Assets\Resource\Shader\Gray.shader" />
+    <None Include="Assets\Resource\Shader\Lightwall.shader" />
     <None Include="Assets\Resource\Shader\Mask.shader" />
+    <None Include="Assets\Resource\Shader\Points.shader" />
     <None Include="Assets\Resource\Shader\UIMask.shader" />
     <None Include="Assets\Resource\XML\Config\ability_config.xml" />
     <None Include="Assets\Resource\XML\Config\achieve_config.xml" />

+ 6 - 0
MyLovelyGarden.csproj

@@ -176,6 +176,8 @@
     <Compile Include="Assets\Script\Tool\Anim\Move2D.cs" />
     <Compile Include="Assets\Script\Tool\Anim\Move3D.cs" />
     <Compile Include="Assets\Script\Tool\Anim\Shake.cs" />
+    <Compile Include="Assets\Script\Tool\Anim\StreamFont.cs" />
+    <Compile Include="Assets\Script\Tool\Anim\StreamScale.cs" />
     <Compile Include="Assets\Script\Tool\Anim\Tween.cs" />
     <Compile Include="Assets\Script\Tool\Anim\TweenAudio.cs" />
     <Compile Include="Assets\Script\Tool\Anim\TweenCG.cs" />
@@ -205,6 +207,8 @@
     <Compile Include="Assets\Script\Tool\UI\HudTarget.cs" />
     <Compile Include="Assets\Script\Tool\UI\HudText.cs" />
     <Compile Include="Assets\Script\Tool\UI\ImagePlus.cs" />
+    <Compile Include="Assets\Script\Tool\UI\LightwallUI.cs" />
+    <Compile Include="Assets\Script\Tool\UI\PointsUI.cs" />
     <Compile Include="Assets\Script\Tool\UI\ScrollRectPlus.cs" />
     <Compile Include="Assets\Script\Tool\UI\SpriteAsset.cs" />
     <Compile Include="Assets\Script\Tool\UI\TextPlus.cs" />
@@ -224,7 +228,9 @@
     <None Include="Assets\Resource\Plugins\ConsolePro\Readme.txt" />
     <None Include="Assets\Resource\Shader\Discard.shader" />
     <None Include="Assets\Resource\Shader\Gray.shader" />
+    <None Include="Assets\Resource\Shader\Lightwall.shader" />
     <None Include="Assets\Resource\Shader\Mask.shader" />
+    <None Include="Assets\Resource\Shader\Points.shader" />
     <None Include="Assets\Resource\Shader\UIMask.shader" />
     <None Include="Assets\Resource\XML\Config\ability_config.xml" />
     <None Include="Assets\Resource\XML\Config\achieve_config.xml" />

+ 12 - 7
ToList.txt

@@ -1,18 +1,23 @@
-Tower
+ObjRoot(和其他脚本分离 Destroy掉多余的Player)
 
-OfflineConfig
+ScrollRect的Locate好像有点误差(金币不够时的导航)
 
 
-预加载Player
+动画
+(
+完善Stream
 
+Stream进入Delay时也应该有事件
 
-连接超时的情况(第一次登录 登录 发送存档 下载存档)
+TweenScale和StreamScale增加一个浮点数重载,方便统一Scale 
 
-LightWall的UIPartical
+可以手动设置是否触发事件 
 
-ObjRoot(和其他脚本分离 Destroy掉多余的Player)
+取消掉ConfineTween Forward时Timer递加,Backward时Timer递减,免去了Timer的计算,判断
+InDestination和InOrigin也可以改用Timer,Timer清零的位置需要改变 
 
-ScrollRect的Locate好像有点误差(金币不够时的导航)
+Tween的第一帧也需要执行一次
+)
 
 
 Font Anchor Encrypt RichText OverFlow RaycastTarget