MultiScrollerMgr.cs 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. using System;
  2. using System.Collections.Generic;
  3. using CIS;
  4. using UnityEngine;
  5. [ExecuteInEditMode]
  6. public class MultiScrollerMgr : MonoBehaviour, ILevelItem
  7. {
  8. public static MultiScrollerMgr Instance
  9. {
  10. get
  11. {
  12. if (MultiScrollerMgr._instance == null)
  13. {
  14. MultiScrollerMgr._instance = UnityEngine.Object.FindObjectOfType<MultiScrollerMgr>();
  15. }
  16. return MultiScrollerMgr._instance;
  17. }
  18. }
  19. public void GenerateAnchor()
  20. {
  21. MultiScroller multiScroller = this.currScroller;
  22. List<ScrollGroup> list = new List<ScrollGroup>();
  23. for (int i = 0; i < multiScroller.groups.Count; i++)
  24. {
  25. ScrollGroup scrollGroup = multiScroller.groups[i];
  26. ScrollGroup scrollGroup2 = new ScrollGroup();
  27. for (int j = 0; j < scrollGroup.pages.Count; j++)
  28. {
  29. ScrollPage scrollPage = scrollGroup.pages[j];
  30. ScrollPage scrollPage2 = new ScrollPage();
  31. scrollPage2.initPos = scrollPage.trans.position;
  32. scrollPage2.initPos.y = scrollPage2.initPos.y - base.transform.position.y;
  33. scrollPage2.initPos.x = scrollPage2.initPos.x - base.transform.position.x;
  34. scrollPage2.originalPos = scrollPage.trans.localPosition;
  35. scrollGroup2.pages.Add(scrollPage2);
  36. }
  37. list.Add(scrollGroup2);
  38. }
  39. this.currAnchor.groups = list;
  40. }
  41. public void LoadCurrAnchor()
  42. {
  43. this.LoadAnchor(this.currAnchor);
  44. }
  45. public void ResetCameraToCurrAnchor()
  46. {
  47. Vector3 position = base.transform.parent.position;
  48. base.transform.parent.position = new Vector3(this.currAnchor.transform.position.x, this.currAnchor.transform.position.y, position.z);
  49. this.LoadAnchor(this.currAnchor);
  50. }
  51. public void LoadAnchor(ScrollerAnchor anchor)
  52. {
  53. for (int i = 0; i < anchor.groups.Count; i++)
  54. {
  55. ScrollGroup scrollGroup = anchor.groups[i];
  56. for (int j = 0; j < scrollGroup.pages.Count; j++)
  57. {
  58. ScrollPage scrollPage = scrollGroup.pages[j];
  59. ScrollPage scrollPage2 = this.currScroller.groups[i].pages[j];
  60. scrollPage2.initPos.y = scrollPage.initPos.y;
  61. scrollPage2.initPos.x = scrollPage.initPos.x;
  62. scrollPage2.originalPos = scrollPage.originalPos;
  63. scrollPage2.trans.localPosition = scrollPage2.originalPos;
  64. }
  65. }
  66. this.initCameraY = anchor.transform.position.y;
  67. this.initCameraX = anchor.transform.position.x;
  68. }
  69. public void Reset()
  70. {
  71. this.reseting = false;
  72. this.lastCamPosX = this.camTrans.position.x;
  73. this.lastCamPosY = this.camTrans.position.y;
  74. }
  75. public void ResetScrollerPos()
  76. {
  77. foreach (ScrollGroup scrollGroup in this.currScroller.groups)
  78. {
  79. for (int i = 0; i < scrollGroup.pages.Count; i++)
  80. {
  81. ScrollPage scrollPage = scrollGroup.pages[i];
  82. scrollGroup.pageSnake[i].id = scrollPage.id;
  83. scrollGroup.pageSnake[i].index = scrollPage.index;
  84. scrollGroup.pageSnake[i].initPos = scrollPage.initPos;
  85. scrollGroup.pageSnake[i].originalPos = scrollPage.originalPos;
  86. scrollGroup.pageSnake[i].trans = scrollPage.trans;
  87. }
  88. }
  89. }
  90. public void ReCalInitPos()
  91. {
  92. if (this.currScroller == null)
  93. {
  94. return;
  95. }
  96. List<ScrollGroup> list = this.currScroller.groups;
  97. this.initCameraY = this.camTrans.position.y;
  98. this.initCameraX = this.camTrans.position.x;
  99. foreach (ScrollGroup scrollGroup in list)
  100. {
  101. foreach (ScrollPage scrollPage in scrollGroup.pages)
  102. {
  103. scrollPage.initPos.y = scrollPage.trans.position.y - this.initCameraY;
  104. scrollPage.initPos.x = scrollPage.trans.position.x - this.initCameraX;
  105. }
  106. }
  107. }
  108. public void OnReset()
  109. {
  110. this.reseting = true;
  111. this.Reset();
  112. }
  113. public void OnPause(bool isPause)
  114. {
  115. }
  116. public void EnableScroller(bool enable)
  117. {
  118. this.isEnable = enable;
  119. }
  120. private void Awake()
  121. {
  122. }
  123. public void StartPin()
  124. {
  125. }
  126. public void AssemblePages()
  127. {
  128. float num = this.ScreenWidth / 2f;
  129. List<ScrollGroup> list = this.currScroller.groups;
  130. foreach (ScrollGroup scrollGroup in list)
  131. {
  132. int childCount = scrollGroup.trans.childCount;
  133. for (int i = 0; i < childCount; i++)
  134. {
  135. UnityEngine.Object.DestroyImmediate(scrollGroup.trans.GetChild(0).gameObject);
  136. }
  137. scrollGroup.pages.Clear();
  138. scrollGroup.pageSnake.Clear();
  139. float x = scrollGroup.sprite.bounds.size.x;
  140. scrollGroup.width = x;
  141. float num2 = x / 2f;
  142. float num3 = this.ScreenWidth / x;
  143. int num4 = (int)Mathf.Ceil(num3);
  144. if (num3 - 1f > 0.01f)
  145. {
  146. num4++;
  147. }
  148. float num5 = -num - x + num2;
  149. for (int j = 0; j < num4; j++)
  150. {
  151. GameObject gameObject = new GameObject("page" + (j + 1));
  152. gameObject.transform.parent = scrollGroup.trans;
  153. SpriteRenderer spriteRenderer = gameObject.AddComponent<SpriteRenderer>();
  154. spriteRenderer.sprite = scrollGroup.sprite;
  155. spriteRenderer.sortingOrder = scrollGroup.order;
  156. ScrollPage scrollPage = new ScrollPage();
  157. scrollPage.id = UnityEngine.Random.Range(-1000000, 1000000);
  158. scrollPage.trans = gameObject.transform;
  159. scrollGroup.pages.Add(scrollPage);
  160. scrollGroup.pageSnake.Add(scrollPage);
  161. gameObject.transform.localPosition = new Vector2(num5, 0f);
  162. num5 += x;
  163. }
  164. }
  165. }
  166. private void Start()
  167. {
  168. this.ScreenWidth = 1920f;
  169. this.ScreenHeight = 1080f;
  170. this.lastCamPosX = this.camTrans.position.x;
  171. this.lastCamPosY = this.camTrans.position.y;
  172. }
  173. private void Update()
  174. {
  175. if (!this.isEnable)
  176. {
  177. return;
  178. }
  179. float num = 0f;
  180. if (Application.isPlaying)
  181. {
  182. num = SingletonMonoBehaviourClass<TimeMgr>.instance.deltaTime;
  183. }
  184. float num2 = -(this.camTrans.position.x - this.lastCamPosX);
  185. float num3 = -(this.camTrans.position.y - this.lastCamPosY);
  186. List<ScrollGroup> list;
  187. if (this.currScroller == null)
  188. {
  189. list = this.groups;
  190. }
  191. else
  192. {
  193. list = this.currScroller.groups;
  194. }
  195. foreach (ScrollGroup scrollGroup in list)
  196. {
  197. int count = scrollGroup.pageSnake.Count;
  198. for (int i = 0; i < scrollGroup.pages.Count; i++)
  199. {
  200. ScrollPage scrollPage = scrollGroup.pages[i];
  201. ScrollPage scrollPage2 = scrollGroup.pageSnake[count - 1];
  202. ScrollPage scrollPage3 = scrollGroup.pageSnake[0];
  203. Transform trans = scrollPage.trans;
  204. this.tempPosVec3 = trans.localPosition;
  205. if (scrollPage.id == scrollGroup.pageSnake[count - 1].id && this.tempPosVec3.x < this.ScreenWidth / 2f - scrollGroup.width / 2f)
  206. {
  207. ScrollPage scrollPage4 = scrollGroup.pageSnake[0];
  208. scrollPage4.trans.localPosition = scrollPage4.trans.localPosition + new Vector3(scrollGroup.width * (float)count, 0f, 0f);
  209. if (scrollGroup.newXCalMethod)
  210. {
  211. scrollGroup.pages[scrollPage3.index].initPos.x = scrollGroup.pages[scrollPage3.index].initPos.x + scrollGroup.width * (float)count;
  212. }
  213. scrollGroup.pageSnake.RemoveAt(0);
  214. scrollGroup.pageSnake.Add(scrollPage4);
  215. }
  216. else if (scrollPage.id == scrollGroup.pageSnake[0].id && this.tempPosVec3.x > -this.ScreenWidth / 2f + scrollGroup.width / 2f)
  217. {
  218. ScrollPage scrollPage5 = scrollGroup.pageSnake[count - 1];
  219. scrollPage5.trans.localPosition = scrollPage5.trans.localPosition - new Vector3(scrollGroup.width * (float)count, 0f, 0f);
  220. if (scrollGroup.newXCalMethod)
  221. {
  222. scrollGroup.pages[scrollPage2.index].initPos.x = scrollGroup.pages[scrollPage2.index].initPos.x - scrollGroup.width * (float)count;
  223. }
  224. scrollGroup.pageSnake.RemoveAt(count - 1);
  225. scrollGroup.pageSnake.Insert(0, scrollPage5);
  226. }
  227. if (scrollGroup.autoScroll)
  228. {
  229. this.tempPosVec3.x = this.tempPosVec3.x + num * scrollGroup.speedX;
  230. this.tempPosVec3.y = this.tempPosVec3.y + num * scrollGroup.speedY;
  231. }
  232. else
  233. {
  234. if (scrollGroup.newXCalMethod)
  235. {
  236. float num4 = this.camTrans.position.x - this.initCameraX;
  237. this.tempPosVec3.x = scrollPage.initPos.x - num4 * scrollGroup.speedX;
  238. }
  239. else
  240. {
  241. this.tempPosVec3.x = this.tempPosVec3.x + num2 * num * scrollGroup.speedX;
  242. }
  243. if (scrollGroup.newYCalMethod)
  244. {
  245. float num5 = this.camTrans.position.y - this.initCameraY;
  246. this.tempPosVec3.y = scrollPage.initPos.y - num5 * scrollGroup.speedY;
  247. }
  248. else
  249. {
  250. this.tempPosVec3.y = this.tempPosVec3.y + num3 * num * scrollGroup.speedY;
  251. }
  252. }
  253. if (scrollGroup.UpLimitTrans != null && scrollGroup.DownLimitTrnas != null)
  254. {
  255. if (this.tempPosVec3.y > scrollGroup.UpLimitTrans.localPosition.y)
  256. {
  257. this.tempPosVec3.y = scrollGroup.UpLimitTrans.localPosition.y;
  258. }
  259. if (this.tempPosVec3.y < scrollGroup.DownLimitTrnas.localPosition.y)
  260. {
  261. this.tempPosVec3.y = scrollGroup.DownLimitTrnas.localPosition.y;
  262. }
  263. }
  264. trans.localPosition = this.tempPosVec3;
  265. }
  266. }
  267. this.lastCamPosX = this.camTrans.position.x;
  268. this.lastCamPosY = this.camTrans.position.y;
  269. }
  270. public void OnEntertBlock(ILevelBlock block)
  271. {
  272. }
  273. public void OnLeaveBlock(ILevelBlock block)
  274. {
  275. }
  276. public virtual void OnPickingTime(float time)
  277. {
  278. }
  279. public List<ScrollPage> pageList;
  280. public float ScreenWidth;
  281. public float ScreenHeight;
  282. public List<ScrollGroup> groups;
  283. public MultiScroller currScroller;
  284. public ScrollerAnchor currAnchor;
  285. public Transform camTrans;
  286. private bool isEnable = true;
  287. public bool scrollInEditor;
  288. private static MultiScrollerMgr _instance;
  289. private bool reseting;
  290. private float initCameraX;
  291. private float initCameraY;
  292. private Vector3 tempPosVec3;
  293. private float lastCamPosX;
  294. private float lastCamPosY;
  295. }