PuppetViewComp.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { Color, Material, MeshRenderer, RenderableComponent, SkeletalAnimation, _decorator } from "cc";
  2. import { CCComp } from "../../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
  3. import { ecs } from "../../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
  4. import { PuppetViewController } from "./PuppetViewController";
  5. import { Puppet } from "../puppet";
  6. import { PuppetViewAnimator } from "./PuppetViewAnimator";
  7. const { ccclass, property } = _decorator;
  8. /** 关卡显示组件 */
  9. @ccclass('PuppetViewComp') // 定义为 Cocos Creator 组件
  10. @ecs.register('PuppetView', false) // 定义为 ECS 组件
  11. export class PuppetViewComp extends CCComp {
  12. @property({ type: SkeletalAnimation, tooltip: '角色动画' })
  13. ske: SkeletalAnimation = null!;
  14. // /** 角色动画资源管理 */
  15. // loader: PuppetViewLoader = null!;
  16. /** 角色动画规则管理 */
  17. animator: PuppetViewAnimator = null!;
  18. /** 角色控制器 */
  19. controller: PuppetViewController = null!;
  20. /** 视图层逻辑代码分离演示 */
  21. onLoad() {
  22. const puppet = this.ent as Puppet;
  23. // this.loader = this.node.addComponent(PuppetViewLoader);
  24. // this.node.emit("load", puppet);
  25. this.animator = this.ske.getComponent(PuppetViewAnimator)!;
  26. this.animator.puppet = puppet;
  27. this.controller = this.node.addComponent(PuppetViewController);
  28. this.controller.puppet = puppet;
  29. }
  30. protected lateUpdate(dt: number): void {
  31. const on = (this.ent as Puppet).PathFind?.canReach
  32. this.switchOutLine(on)
  33. }
  34. switchOutLine(on: boolean) {
  35. // 获取MeshRenderer组件
  36. let rendererComponet = this.node.getComponentInChildren(MeshRenderer) as RenderableComponent
  37. if (rendererComponet) {
  38. // 获取材质实例
  39. let materialIns = rendererComponet.material
  40. if (materialIns) {
  41. materialIns.setProperty('lineWidth', on ? 20 : 5);
  42. rendererComponet.material = materialIns
  43. }
  44. }
  45. }
  46. changeColor(color: string) {
  47. // return
  48. // 获取MeshRenderer组件
  49. let rendererComponet = this.node.getComponentInChildren(MeshRenderer) as RenderableComponent
  50. if (rendererComponet) {
  51. // 获取材质实例
  52. let materialIns = rendererComponet.material
  53. if (materialIns) {
  54. // 修改材质实例的颜色
  55. materialIns.setProperty('mainColor', new Color(color));
  56. rendererComponet.material = materialIns
  57. }
  58. }
  59. }
  60. reset() {
  61. // this.animator.destroy()
  62. // this.controller.destroy()
  63. this.node.destroy();
  64. }
  65. }