StreamScale.cs 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617
  1. using UnityEngine;
  2. using UnityEngine.UI;
  3. using UnityEngine.Events;
  4. using System;
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. public struct VecPair
  8. {
  9. public Vector3 Key;
  10. public Vector3 Value;
  11. public VecPair(Vector3 key, Vector3 value)
  12. {
  13. Key = key;
  14. Value = value;
  15. }
  16. public VecPair(float x1, float y1, float z1, float x2, float y2, float z2)
  17. {
  18. Key = new Vector3(x1, y1, z1);
  19. Value = new Vector3(x2, y2, z2);
  20. }
  21. }
  22. public class StreamScale : StreamRoot
  23. {
  24. #region 变量
  25. public override bool InOrigin
  26. {
  27. get
  28. {
  29. if (Consecutive)
  30. {
  31. if (Target.localScale.Equal(DestList[0]))
  32. {
  33. InOrigin_ = true;
  34. }
  35. else
  36. {
  37. InOrigin_ = false;
  38. }
  39. }
  40. else
  41. {
  42. if (Target.localScale.Equal(DestKvList[0].Key))
  43. {
  44. InOrigin_ = true;
  45. }
  46. else
  47. {
  48. InOrigin_ = false;
  49. }
  50. }
  51. return InOrigin_;
  52. }
  53. set
  54. {
  55. InOrigin_ = value;
  56. InPause = false;
  57. InForward = false;
  58. InBackward = false;
  59. AtDestination = true;
  60. if (InOrigin_)
  61. {
  62. if (Consecutive)
  63. {
  64. Target.localScale = DestList[0];
  65. }
  66. else
  67. {
  68. Target.localScale = DestKvList[0].Key;
  69. }
  70. BackwardFinish();
  71. }
  72. }
  73. }
  74. public override bool InDestination
  75. {
  76. get
  77. {
  78. if (Consecutive)
  79. {
  80. if (Target.localScale.Equal(DestList.Back(0)))
  81. {
  82. InDestination_ = true;
  83. }
  84. else
  85. {
  86. InDestination_ = false;
  87. }
  88. }
  89. else
  90. {
  91. if (Target.localScale.Equal(DestKvList.Back(0).Value))
  92. {
  93. InDestination_ = true;
  94. }
  95. else
  96. {
  97. InDestination_ = false;
  98. }
  99. }
  100. return InDestination_;
  101. }
  102. set
  103. {
  104. InDestination_ = value;
  105. InPause = false;
  106. InForward = false;
  107. InBackward = false;
  108. AtOrigin = true;
  109. if (InDestination_)
  110. {
  111. if (Consecutive)
  112. {
  113. Target.localScale = DestList.Back(0);
  114. }
  115. else
  116. {
  117. Target.localScale = DestKvList.Back(0).Value;
  118. }
  119. ForwardFinish();
  120. }
  121. }
  122. }
  123. public Vector3 TempDest;
  124. public Vector3 TempDelta;
  125. public Vector3 TempOrigin;
  126. public List<VecPair> DestKvList = new List<VecPair>();
  127. public List<Vector3> DestList = new List<Vector3>();
  128. public Transform Target;
  129. public CurveFunctionV Func;
  130. #endregion
  131. public StreamScale(Transform target, List<float> delayList, List<float> durationList, List<VecPair> destKvList, bool originActive, bool destActive, Curve curve, bool cg = false, List<UnityAction> startActionList = null, List<UnityAction> finishActionList = null) : base(cg, curve, target)
  132. {
  133. Func = ManaAnim.CurveFuncDicV[curve];
  134. Target = target;
  135. TotPhase = destKvList.Count - 1;
  136. Consecutive = false;
  137. DelayList = delayList;
  138. DestKvList = destKvList;
  139. DurationList = durationList;
  140. StartActionList = startActionList;
  141. FinishActionList = finishActionList;
  142. if (StartActionList.Valid())
  143. {
  144. if (DestKvList.Count != StartActionList.Count)
  145. {
  146. throw new Exception();
  147. }
  148. }
  149. if (FinishActionList.Valid())
  150. {
  151. if (DestKvList.Count != FinishActionList.Count)
  152. {
  153. throw new Exception();
  154. }
  155. }
  156. if (DestKvList.Count - DelayList.Count != 1)
  157. {
  158. throw new Exception();
  159. }
  160. if (DestKvList.Count - DurationList.Count != 0)
  161. {
  162. throw new Exception();
  163. }
  164. InForward = false;
  165. InBackward = false;
  166. DestActive = destActive;
  167. OriginActive = originActive;
  168. }
  169. public StreamScale(Transform target, List<float> delayList, List<float> durationList, List<Vector3> destList, bool originActive, bool destActive, Curve curve, bool cg = false, List<UnityAction> startActionList = null, List<UnityAction> finishActionList = null) : base(cg, curve, target)
  170. {
  171. Func = ManaAnim.CurveFuncDicV[curve];
  172. Target = target;
  173. TotPhase = destList.Count - 1;
  174. Consecutive = true;
  175. DestList = destList;
  176. DelayList = delayList;
  177. DurationList = durationList;
  178. StartActionList = startActionList;
  179. FinishActionList = finishActionList;
  180. if (StartActionList.Valid())
  181. {
  182. if (DestList.Count - StartActionList.Count != 1)
  183. {
  184. throw new Exception();
  185. }
  186. }
  187. if (FinishActionList.Valid())
  188. {
  189. if (DestList.Count - FinishActionList.Count != 1)
  190. {
  191. throw new Exception();
  192. }
  193. }
  194. if (DestList.Count - DelayList.Count != 2)
  195. {
  196. throw new Exception();
  197. }
  198. if (DestList.Count - DurationList.Count != 1)
  199. {
  200. throw new Exception();
  201. }
  202. InForward = false;
  203. InBackward = false;
  204. DestActive = destActive;
  205. OriginActive = originActive;
  206. }
  207. public override bool StartForward()
  208. {
  209. if (base.StartForward())
  210. {
  211. return true;
  212. }
  213. if (InBackward)
  214. {
  215. InBackward = false;
  216. Phase = TotPhase - Phase;
  217. if (Consecutive)
  218. {
  219. TempDest = DestList[Phase];
  220. TempOrigin = DestList[Phase - 1];
  221. TempDuration = DurationList[Phase - 1];
  222. TempDelta = TempDest - TempOrigin;
  223. if (Phase != DestList.Count - 1)
  224. {
  225. TempDelay = DelayList[Phase - 1];
  226. }
  227. }
  228. else
  229. {
  230. TempDest = DestKvList[Phase].Value;
  231. TempOrigin = DestKvList[Phase].Key;
  232. TempDuration = DurationList[Phase];
  233. TempDelta = TempDest - TempOrigin;
  234. if (Phase != DestKvList.Count - 1)
  235. {
  236. TempDelay = DelayList[Phase];
  237. }
  238. }
  239. Timer = ManaAnim.GetTimerVec(Target.localScale, TempDuration, TempOrigin, TempDelta, Curve);
  240. }
  241. else
  242. {
  243. if (Consecutive)
  244. {
  245. Phase = 1;
  246. TempDest = DestList[1];
  247. TempDelay = DelayList[0];
  248. TempOrigin = DestList[0];
  249. TempDuration = DurationList[0];
  250. }
  251. else
  252. {
  253. Phase = 0;
  254. TempDest = DestKvList[0].Value;
  255. TempDelay = DelayList[0];
  256. TempOrigin = DestKvList[0].Key;
  257. TempDuration = DurationList[0];
  258. }
  259. TempDelta = TempDest - TempOrigin;
  260. if (StartActionList.Valid())
  261. {
  262. StartActionList[0].SafeInvoke();
  263. }
  264. }
  265. return false;
  266. }
  267. public override bool StartBackward()
  268. {
  269. if (base.StartBackward())
  270. {
  271. return true;
  272. }
  273. if (InForward)
  274. {
  275. InForward = false;
  276. Phase = TotPhase - Phase;
  277. if (Consecutive)
  278. {
  279. TempDest = DestList.Back(Phase - 1);
  280. TempOrigin = DestList.Back(Phase);
  281. TempDuration = DurationList.Back(Phase - 1);
  282. TempDelta = TempDest - TempOrigin;
  283. if (Phase != DestList.Count - 1)
  284. {
  285. TempDelay = DelayList.Back(Phase - 1);
  286. }
  287. }
  288. else
  289. {
  290. TempDest = DestKvList.Back(Phase).Key;
  291. TempOrigin = DestKvList.Back(Phase).Value;
  292. TempDuration = DurationList.Back(Phase);
  293. TempDelta = TempDest - TempOrigin;
  294. if (Phase != DestKvList.Count - 1)
  295. {
  296. TempDelay = DelayList.Back(Phase);
  297. }
  298. }
  299. Timer = ManaAnim.GetTimerVec(Target.localScale, TempDuration, TempOrigin, TempDelta, Curve);
  300. }
  301. else
  302. {
  303. if (Consecutive)
  304. {
  305. Phase = 1;
  306. TempDest = DestList.Back(1);
  307. TempDelay = DelayList.Back(0);
  308. TempOrigin = DestList.Back(0);
  309. TempDuration = DurationList.Back(0);
  310. }
  311. else
  312. {
  313. Phase = 0;
  314. TempDest = DestKvList.Back(0).Key;
  315. TempDelay = DelayList.Back(0);
  316. TempOrigin = DestKvList.Back(0).Value;
  317. TempDuration = DurationList.Back(0);
  318. }
  319. TempDelta = TempDest - TempOrigin;
  320. if (StartActionList.Valid())
  321. {
  322. StartActionList.Back(0).SafeInvoke();
  323. }
  324. }
  325. return false;
  326. }
  327. public override bool DoForward()
  328. {
  329. Timer += Time.deltaTime;
  330. if (Phase == TotPhase)
  331. {
  332. if (Timer >= TempDuration)
  333. {
  334. InDestination = true;
  335. if (FinishActionList.Valid())
  336. {
  337. FinishActionList.Back(0).SafeInvoke();
  338. }
  339. if (OnForwardFinish != null)
  340. {
  341. OnForwardFinish.Invoke();
  342. }
  343. SetLoop(EventType.ForwardFinish);
  344. return true;
  345. }
  346. else
  347. {
  348. Target.localScale = Func(Timer, TempDuration, TempOrigin, TempDelta);
  349. return false;
  350. }
  351. }
  352. else
  353. {
  354. if (Timer >= TempDuration + TempDelay)
  355. {
  356. Phase++;
  357. Timer = 0;
  358. ActionLock = false;
  359. if (Consecutive)
  360. {
  361. TempDest = DestList[Phase];
  362. TempOrigin = DestList[Phase - 1];
  363. TempDuration = DurationList[Phase - 1];
  364. TempDelta = TempDest - TempOrigin;
  365. if (Phase != DestList.Count - 1)
  366. {
  367. TempDelay = DelayList[Phase - 1];
  368. }
  369. if (StartActionList.Valid())
  370. {
  371. StartActionList[Phase - 1].SafeInvoke();
  372. }
  373. }
  374. else
  375. {
  376. TempDest = DestKvList[Phase].Value;
  377. TempOrigin = DestKvList[Phase].Key;
  378. TempDuration = DurationList[Phase];
  379. TempDelta = TempDest - TempOrigin;
  380. if (Phase != DestKvList.Count - 1)
  381. {
  382. TempDelay = DelayList[Phase];
  383. }
  384. if (StartActionList.Valid())
  385. {
  386. StartActionList[Phase].SafeInvoke();
  387. }
  388. }
  389. return false;
  390. }
  391. else if (Timer >= TempDuration)
  392. {
  393. if (!ActionLock)
  394. {
  395. if (Consecutive)
  396. {
  397. if (FinishActionList.Valid())
  398. {
  399. FinishActionList[Phase - 1].SafeInvoke();
  400. }
  401. }
  402. else
  403. {
  404. if (FinishActionList.Valid())
  405. {
  406. FinishActionList[Phase].SafeInvoke();
  407. }
  408. }
  409. }
  410. ActionLock = true;
  411. return false;
  412. }
  413. else
  414. {
  415. Target.localScale = Func(Timer, TempDuration, TempOrigin, TempDelta);
  416. return false;
  417. }
  418. }
  419. }
  420. public override bool DoBackward()
  421. {
  422. Timer += Time.deltaTime;
  423. if (Phase == TotPhase)
  424. {
  425. if (Timer >= TempDuration)
  426. {
  427. InOrigin = true;
  428. if (FinishActionList.Valid())
  429. {
  430. FinishActionList[0].SafeInvoke();
  431. }
  432. if (OnBackwardFinish != null)
  433. {
  434. OnBackwardFinish.Invoke();
  435. }
  436. SetLoop(EventType.BackwardFinish);
  437. return true;
  438. }
  439. else
  440. {
  441. Target.localScale = Func(Timer, TempDuration, TempOrigin, TempDelta);
  442. return false;
  443. }
  444. }
  445. else
  446. {
  447. if (Timer >= TempDuration + TempDelay)
  448. {
  449. Phase++;
  450. Timer = 0;
  451. ActionLock = false;
  452. if (Consecutive)
  453. {
  454. TempDest = DestList.Back(Phase - 1);
  455. TempOrigin = DestList.Back(Phase);
  456. TempDuration = DurationList.Back(Phase - 1);
  457. TempDelta = TempDest - TempOrigin;
  458. if (Phase != DestList.Count - 1)
  459. {
  460. TempDelay = DelayList.Back(Phase - 1);
  461. }
  462. if (StartActionList.Valid())
  463. {
  464. StartActionList.Back(Phase - 1).SafeInvoke();
  465. }
  466. }
  467. else
  468. {
  469. TempDest = DestKvList.Back(Phase).Key;
  470. TempOrigin = DestKvList.Back(Phase).Value;
  471. TempDuration = DurationList.Back(Phase);
  472. TempDelta = TempDest - TempOrigin;
  473. if (Phase != DestKvList.Count - 1)
  474. {
  475. TempDelay = DelayList.Back(Phase);
  476. }
  477. if (StartActionList.Valid())
  478. {
  479. StartActionList.Back(Phase).SafeInvoke();
  480. }
  481. }
  482. return false;
  483. }
  484. else if (Timer >= TempDuration)
  485. {
  486. if (!ActionLock)
  487. {
  488. if (Consecutive)
  489. {
  490. if (FinishActionList.Valid())
  491. {
  492. FinishActionList.Back(Phase - 1).SafeInvoke();
  493. }
  494. }
  495. else
  496. {
  497. if (FinishActionList.Valid())
  498. {
  499. FinishActionList.Back(Phase).SafeInvoke();
  500. }
  501. }
  502. }
  503. ActionLock = true;
  504. return false;
  505. }
  506. else
  507. {
  508. Target.localScale = Func(Timer, TempDuration, TempOrigin, TempDelta);
  509. return false;
  510. }
  511. }
  512. }
  513. }