PuppetViewComp.ts 3.1 KB

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