PuppetViewAnimator.ts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. import { Animation, Vec3, _decorator, Node, v3, tween } from "cc";
  2. import { AnimatorSkeletal } from "../../../../../extensions/oops-plugin-framework/assets/libs/animator/AnimatorSkeletal";
  3. import { Puppet } from "../puppet";
  4. import { AnimatorStateLogic } from "../../../../../extensions/oops-plugin-framework/assets/libs/animator/core/AnimatorStateLogic";
  5. import { PuppetAnimatorType } from "../model/PuppetEnum";
  6. import { PuppetStateRun } from "./animator/PuppetStateRun";
  7. import { PuppetStateFly } from "./animator/PuppetStateFly";
  8. import { MoveToPathComp } from "../../common/ecs/path/MoveToPath";
  9. import { smc } from "../../common/SingletonModuleComp";
  10. import { MoveToComp } from "../../common/ecs/position/MoveTo";
  11. const { ccclass, property, requireComponent, disallowMultiple } = _decorator;
  12. @ccclass("PuppetViewAnimator")
  13. export class PuppetViewAnimator extends AnimatorSkeletal {
  14. /** 路径完成 */
  15. onRunPathComplete: Function = null!;
  16. /** 行为完成 */
  17. onRunComplete: Function = null!;
  18. /** 行为完成 */
  19. onScaleComplete: Function = null!;
  20. /** 角色对象 */
  21. puppet: Puppet = null!;
  22. curState = PuppetAnimatorType.Idle
  23. start() {
  24. super.start();
  25. // 动画状态机
  26. let asl: Map<string, AnimatorStateLogic> = new Map();
  27. asl.set(PuppetAnimatorType.Run, new PuppetStateRun(this.puppet));
  28. this.initArgs(asl);
  29. }
  30. playAnimation(animName: string, loop: boolean): void {
  31. super.playAnimation(animName, loop)
  32. }
  33. moveToPath(end: Vec3) {
  34. // const checkpoint = smc.initialize.account.checkpoint
  35. const moveToPath = this.puppet.add(MoveToPathComp)
  36. moveToPath.speed = 4
  37. moveToPath.paths = this.puppet.PathFind.path.concat([end])
  38. moveToPath.node = this.puppet.PuppetView.node
  39. moveToPath.ns = Node.NodeSpace.WORLD
  40. const forwardClone = this.puppet.PuppetView.node.forward.clone()
  41. moveToPath.onComplete = () => {
  42. // console.log('移动完成')
  43. this.playAni(PuppetAnimatorType.Idle)
  44. this.puppet.PuppetView.node.forward = forwardClone
  45. this.onRunPathComplete && this.onRunPathComplete()
  46. }
  47. this.playAni(PuppetAnimatorType.Run)
  48. }
  49. moveToTarget(end: Vec3 = v3(0, 0, 0)) {
  50. const moveTo = this.puppet.add(MoveToComp)
  51. moveTo.speed = 4
  52. moveTo.node = this.puppet.PuppetView.node
  53. moveTo.target = end
  54. moveTo.ns = Node.NodeSpace.WORLD
  55. const forwardClone = this.puppet.PuppetView.node.forward.clone()
  56. moveTo.onComplete = () => {
  57. this.playAni(PuppetAnimatorType.Idle)
  58. this.puppet.PuppetView.node.forward = forwardClone
  59. this.onRunComplete && this.onRunComplete()
  60. }
  61. this.playAni(PuppetAnimatorType.Run)
  62. }
  63. playAni(state: PuppetAnimatorType) {
  64. switch (state) {
  65. case PuppetAnimatorType.Run:
  66. this.puppet.PuppetView.ske.play('run')
  67. this.curState = PuppetAnimatorType.Run
  68. break;
  69. case PuppetAnimatorType.Sit:
  70. this.puppet.PuppetView.ske.play('sit')
  71. this.curState = PuppetAnimatorType.Sit
  72. break;
  73. default:
  74. this.puppet.PuppetView.ske.play('idle')
  75. this.curState = PuppetAnimatorType.Idle
  76. break;
  77. }
  78. }
  79. toRight() {
  80. this.puppet.PuppetView.node.forward = v3(1, 0, 0)
  81. }
  82. toLeft() {
  83. this.puppet.PuppetView.node.forward = v3(-1, 0, 0)
  84. }
  85. toStation() {
  86. this.puppet.PuppetView.node.forward = v3(0, 0, -1)
  87. }
  88. scale() {
  89. this.puppet.PuppetView.node.scale = Vec3.ZERO
  90. tween(this.puppet.PuppetView.node)
  91. .to(1, { scale: new Vec3(1, 1, 1) })
  92. .call(() => {
  93. this.onScaleComplete && this.onScaleComplete()
  94. })
  95. .start();
  96. }
  97. }