PuppetViewComp.ts 3.5 KB

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