using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using System.Collections; using System.Collections.Generic; public enum Direction { Left, Null, Right, } public class Garden : Regist, IDragHandler, IPointerClickHandler, IEndDragHandler, IBeginDragHandler { #region 变量 public static int Page { get { return ManaGarden.PageList.Count - 1; } } public static int CurPage; public static bool Flag1 = true; public static bool Flag2 = true; public static float SlideSensi = 0.1f; public static float Ratio2 = 0.25f; public static float Ratio3 = 0.5f; public static float Ratio4 = 0.75f; public static float RatioPlayer = 0.75f; public static Garden Instance; public static Direction Direction; public static Transform Player; public static Transform Garden2; public static Transform Garden3; public static Transform Garden4; public static Transform GardenPage; public static List PagePos = new List(); public static List PlayerPos = new List(); public static List GardenPos2 = new List(); public static List GardenPos3 = new List(); public static List GardenPos4 = new List(); #endregion public static void Reload() { ResetPage(); CurPage = 0; PagePos = new List(); } public override void RegistValueA() { Instance = this; #region Item ManaReso.Get("Bird0").CreateTweenSr(0, 1, 2f, false, true, Curve.EaseOutQuad, false, true); ManaReso.Get("Tree1").CreateTweenSr(0, 1, 2f, false, true, Curve.EaseOutQuad); ManaReso.Get("Tree2").CreateTweenSr(0, 1, 2f, false, true, Curve.EaseOutQuad); ManaReso.Get("Rainbow").CreateTweenSr(0, 1, 2f, false, true, Curve.EaseOutQuad); #endregion #region Cloud1 Transform tra = ManaReso.Get("Cloud1"); TweenRoot tween = tra.CreateTweenVec2D(new Vector3(-12, tra.position.y, tra.position.z), 50f, false, false, true, Curve.Linear); tween.Repeat = true; tween.StartForward(); #endregion #region Cloud2 tra = ManaReso.Get("Cloud2"); tween = tra.CreateTweenVec2D(new Vector3(-12, tra.position.y, tra.position.z), 75f, false, false, true, Curve.Linear); tween.Repeat = true; tween.StartForward(); #endregion #region Cloud3 tra = ManaReso.Get("Cloud3"); tween = tra.CreateTweenVec2D(new Vector3(-12, tra.position.y, tra.position.z), 100, false, false, true, Curve.Linear); tween.Repeat = true; tween.StartForward(); #endregion #region GardenMini ManaReso.Get("GardenMini").CreateTweenVec2D ( ManaReso.Get("MiniPos").position, 0.5f, false, false, true, Curve.EaseOutQuad ); #endregion #region GardenPage Move2D move2D = GardenPage.CreateMove2D(); move2D.OnForwardStart += () => { Flag2 = false; }; move2D.OnForwardFinish += () => { Flag2 = true; }; #endregion } public override void RegistReference() { Garden2 = ManaReso.Get("Garden2"); Garden3 = ManaReso.Get("Garden3"); Garden4 = ManaReso.Get("Garden4"); GardenPage = ManaReso.Get("GardenPage"); GardenPos2.Add(ManaReso.Get("Pos21").position); GardenPos2.Add(ManaReso.Get("Pos22").position); GardenPos3.Add(ManaReso.Get("Pos31").position); GardenPos3.Add(ManaReso.Get("Pos32").position); GardenPos4.Add(ManaReso.Get("Pos41").position); GardenPos4.Add(ManaReso.Get("Pos42").position); if (!ManaTutorial.TutorialA) { Player = ManaReso.Get("Player"); PlayerPos.Add(ManaPlayer.Player.ChildDic["Pos1"].position); PlayerPos.Add(ManaPlayer.Player.ChildDic["Pos2"].position); } } public override void TutorialToRegular() { Player = ManaReso.Get("Player"); PlayerPos.Add(ManaPlayer.Player.ChildDic["Pos1"].position); PlayerPos.Add(ManaPlayer.Player.ChildDic["Pos2"].position); } public void OnDrag(PointerEventData eventData) { if (Flag1 && Flag2) { if (Direction == Direction.Null) { if (eventData.delta.x > 0) { Direction = Direction.Right; } else { Direction = Direction.Left; } } if (Direction == Direction.Left) { if (eventData.delta.x > 0) { Return(); } else { #region MyRegion float rawDeltaX = eventData.position.x - eventData.pressPosition.x; if (CurPage < Page - 1) { float tempX = Mathf.Clamp(eventData.delta.x / 10, -2, 2); if (Page == 1) { tempX *= SlideSensi; } else { tempX *= SlideSensi / (Page - 1); } Player.Translate(Player.right * tempX * RatioPlayer, Space.World); Garden2.Translate(Garden2.right * tempX * Ratio2, Space.World); Garden3.Translate(Garden3.right * tempX * Ratio3, Space.World); Garden4.Translate(Garden4.right * tempX * Ratio4, Space.World); GardenPage.Translate(GardenPage.right * tempX, Space.World); if (rawDeltaX < -300) { NextPage(); } } else { float ratio = Mathf.Abs(GardenPage.position.x - PagePos.Last(1).x)/0.7f; float sensi = Mathf.Lerp(SlideSensi, 0, ratio); float tempX = Mathf.Clamp(eventData.delta.x / 10, -2, 2) * sensi; GardenPage.Translate(GardenPage.right * tempX, Space.World); } #endregion } } else if (Direction == Direction.Right) { if (eventData.delta.x < 0) { Return(); } else { #region MyRegion float rawDeltaX = eventData.position.x - eventData.pressPosition.x; if (CurPage > 0) { float tempX = Mathf.Clamp(eventData.delta.x / 10, -2, 2); if (Page == 1) { tempX *= SlideSensi; } else { tempX *= SlideSensi / (Page - 1); } Player.Translate(Player.right * tempX * RatioPlayer, Space.World); Garden2.Translate(Garden2.right * tempX * Ratio2, Space.World); Garden3.Translate(Garden3.right * tempX * Ratio3, Space.World); Garden4.Translate(Garden4.right * tempX * Ratio4, Space.World); GardenPage.Translate(GardenPage.right * tempX, Space.World); if (rawDeltaX > 300) { PrevPage(); } } else { float ratio = Mathf.Abs(GardenPage.position.x - PagePos[0].x) / 0.7f; float sensi = Mathf.Lerp(SlideSensi, 0, ratio); float tempX = Mathf.Clamp(eventData.delta.x / 10, -2, 2) * sensi; GardenPage.Translate(GardenPage.right * tempX, Space.World); } #endregion } } } } public void OnEndDrag(PointerEventData eventData) { if (Flag1 && Flag2) { Return(); } Flag1 = true; Direction = Direction.Null; } public void OnBeginDrag(PointerEventData eventData) { Direction = Direction.Null; } public void OnPointerClick(PointerEventData eventData) { if (!eventData.hovered.Contains(eventData.rawPointerPress)) { return; } if (eventData.rawPointerPress.transform.name.Contains("Slot")) { if (ManaVisit.InVisit) { return; } Slot slot = eventData.rawPointerPress.GetComponentInParent(); if (slot.Lock == false) { Toast.Show(1.5f, Language.GetStr("Common", "UnlockSlot")); } else { ManaReso.Get("G_Flower").TweenForCG(); } } } public static void Return() { Flag1 = false; float ratio; if (Page == 1) { ratio = 0; } else { ratio = CurPage / (Page - 1f); } Vector3 playerPos = Vector3.Lerp(PlayerPos[0], PlayerPos[1], ratio); Vector3 gardenPos2 = Vector3.Lerp(GardenPos2[0], GardenPos2[1], ratio); Vector3 gardenPos3 = Vector3.Lerp(GardenPos3[0], GardenPos3[1], ratio); Vector3 gardenPos4 = Vector3.Lerp(GardenPos4[0], GardenPos4[1], ratio); Player.Move2D(playerPos, 0.5f, false, Curve.EaseOutQuad); Garden2.Move2D(gardenPos2, 0.5f, false, Curve.EaseOutQuad); Garden3.Move2D(gardenPos3, 0.5f, false, Curve.EaseOutQuad); Garden4.Move2D(gardenPos4, 0.5f, false, Curve.EaseOutQuad); GardenPage.Move2D(PagePos[CurPage], 0.5f, false, Curve.EaseOutQuad); } public static void PrevPage() { CurPage--; Flag1 = false; float ratio = CurPage / (Page - 1f); Vector3 playerPos = Vector3.Lerp(PlayerPos[0], PlayerPos[1], ratio); Vector3 gardenPos2 = Vector3.Lerp(GardenPos2[0], GardenPos2[1], ratio); Vector3 gardenPos3 = Vector3.Lerp(GardenPos3[0], GardenPos3[1], ratio); Vector3 gardenPos4 = Vector3.Lerp(GardenPos4[0], GardenPos4[1], ratio); Player.Move2D(playerPos, 0.5f, false, Curve.EaseOutQuad); Garden2.Move2D(gardenPos2, 0.5f, false, Curve.EaseOutQuad); Garden3.Move2D(gardenPos3, 0.5f, false, Curve.EaseOutQuad); Garden4.Move2D(gardenPos4, 0.5f, false, Curve.EaseOutQuad); GardenPage.Move2D(PagePos[CurPage], 0.5f, false, Curve.EaseOutQuad); } public static void NextPage() { CurPage++; Flag1 = false; float ratio = CurPage / (Page - 1f); Vector3 playerPos = Vector3.Lerp(PlayerPos[0], PlayerPos[1], ratio); Vector3 gardenPos2 = Vector3.Lerp(GardenPos2[0], GardenPos2[1], ratio); Vector3 gardenPos3 = Vector3.Lerp(GardenPos3[0], GardenPos3[1], ratio); Vector3 gardenPos4 = Vector3.Lerp(GardenPos4[0], GardenPos4[1], ratio); Player.Move2D(playerPos, 0.5f, false, Curve.EaseOutQuad); Garden2.Move2D(gardenPos2, 0.5f, false, Curve.EaseOutQuad); Garden3.Move2D(gardenPos3, 0.5f, false, Curve.EaseOutQuad); Garden4.Move2D(gardenPos4, 0.5f, false, Curve.EaseOutQuad); GardenPage.Move2D(PagePos[CurPage], 0.5f, false, Curve.EaseOutQuad); } public static void ResetPage() { Garden2.position = GardenPos2[0]; Garden3.position = GardenPos3[0]; Garden4.position = GardenPos4[0]; GardenPage.position = PagePos[0]; } }