VehicleViewComp.ts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { Color, MeshRenderer, RenderableComponent, SkeletalAnimation, _decorator } from "cc";
  2. import { ecs } from "../../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
  3. import { CCComp } from "../../../../../extensions/oops-plugin-framework/assets/module/common/CCComp";
  4. import { VehicleViewController } from "./VehicleViewController";
  5. import { Vehicle } from "../Vehicle";
  6. import { VehicleViewAnimator } from "./VehicleViewAnimator";
  7. import { smc } from "../../common/SingletonModuleComp";
  8. import { Puppet } from "../../puppet/puppet";
  9. import { PuppetModelComp } from "../../puppet/model/PuppetModelComp";
  10. import { PuppetAnimatorType } from "../../puppet/model/PuppetEnum";
  11. const { ccclass, property } = _decorator;
  12. /** 车辆显示组件 */
  13. @ccclass('VehicleViewComp') // 定义为 Cocos Creator 组件
  14. @ecs.register('VehicleView', false) // 定义为 ECS 组件
  15. export class VehicleViewComp extends CCComp {
  16. @property({ type: SkeletalAnimation, tooltip: '角色动画' })
  17. ske: SkeletalAnimation = null!;
  18. // /** 车辆动画资源管理 */
  19. // loader: VehicleViewLoader = null!;
  20. /** 车辆动画规则管理 */
  21. animator: VehicleViewAnimator = null!;
  22. /** 车辆控制器 */
  23. controller: VehicleViewController = null!;
  24. /** 视图层逻辑代码分离演示 */
  25. onLoad() {
  26. const vehicle = this.ent as Vehicle;
  27. // this.loader = this.node.addComponent(VehicleViewLoader);
  28. // this.node.emit("load", vehicle);
  29. this.animator = this.ske.getComponent(VehicleViewAnimator)!;
  30. this.animator.vehicle = vehicle;
  31. this.controller = this.node.addComponent(VehicleViewController);
  32. this.controller.vehicle = vehicle;
  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. console.log(materialIns)
  41. if (materialIns) {
  42. materialIns.passes[0].defines['USE_OUTLINE_PASS'] = on
  43. rendererComponet.material = materialIns
  44. }
  45. }
  46. }
  47. changeColor(color: string) {
  48. // 获取MeshRenderer组件
  49. let rendererComponets = this.node.getComponentsInChildren(MeshRenderer) as RenderableComponent[]
  50. rendererComponets.forEach((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. createPuppet() {
  61. const v = this.ent as Vehicle;
  62. const account = smc.initialize.account
  63. const puppet = ecs.getEntity<Puppet>(Puppet)
  64. const puppetModel = puppet.get(PuppetModelComp)
  65. puppetModel.color = v.VehicleModel.color
  66. puppetModel.withColider = false
  67. puppet.load(this.node, v.VehicleModel.color, v.VehicleModel.sitPos[v.children.size],account.AccountModel.skin);
  68. v.addChild(puppet)
  69. puppet.PuppetView.animator.toRight()
  70. puppet.PuppetView.animator.playAni(PuppetAnimatorType.Sit)
  71. puppet.PuppetView.animator.onScaleComplete = () => {
  72. // console.log("结果",!checkpoint.CheckpointModel.puppets.some(val => val.PuppetModel?.color === this.vehicle.VehicleModel.color))
  73. // console.log(checkpoint.CheckpointModel.puppets)
  74. if (v.children.size >= v.VehicleModel.capcity||!account.checkpoint.CheckpointModel.puppets.some(val => val.PuppetModel?.color === v.VehicleModel.color))
  75. v.VehicleModel.ready = true
  76. }
  77. puppet.PuppetView.animator.scale()
  78. }
  79. reset() {
  80. this.node.destroy();
  81. }
  82. }