puppet.ts 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { Vec3, Node, MeshRenderer, Color, RenderableComponent, Material } from "cc";
  2. import { ViewUtil } from "../../../../extensions/oops-plugin-framework/assets/core/utils/ViewUtil";
  3. import { ecs } from "../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
  4. import { PuppetModelComp } from "./model/PuppetModelComp";
  5. import { PuppetViewComp } from "./view/PuppetViewComp";
  6. import { PathFindComp } from "../common/ecs/path/PathFind";
  7. import { PuppetPathSystem } from "./bll/PuppetPath";
  8. /**
  9. * 人物实体
  10. */
  11. @ecs.register('Puppet')
  12. export class Puppet extends ecs.Entity {
  13. PuppetModel!: PuppetModelComp;
  14. PathFind!: PathFindComp;
  15. PuppetView!: PuppetViewComp;
  16. protected init() {
  17. // 添加关卡数据组件
  18. this.addComponents<ecs.Comp>(PuppetModelComp);
  19. }
  20. destroy(): void {
  21. // 如果该组件对象是由ecs系统外部创建的,则不可回收,需要用户自己手动进行回收。
  22. this.remove(PuppetViewComp);
  23. super.destroy();
  24. }
  25. /** 加载关卡显示对象(cc.Component在创建后,添加到ECS框架中,使实体上任何一个ECS组件都可以通过 ECS API 获取到视图层对象 */
  26. load(parent: Node, color: string, pos: Vec3 = Vec3.ZERO,) {
  27. var node = ViewUtil.createPrefabNode("game/prefab/man");
  28. // 获取MeshRenderer组件
  29. let rendererComponet = node.getComponentInChildren(MeshRenderer) as RenderableComponent
  30. if (rendererComponet) {
  31. // 获取材质实例
  32. let materialIns = rendererComponet.material
  33. if (materialIns) {
  34. // 修改材质实例的颜色
  35. let colorStr;
  36. switch (color.toLowerCase()) {
  37. case "red":
  38. colorStr = Color.RED;
  39. break;
  40. case "blue":
  41. colorStr = Color.BLUE;
  42. break;
  43. case "yellow":
  44. colorStr = Color.YELLOW;
  45. break;
  46. default:
  47. colorStr = Color.WHITE; // 默认颜色
  48. }
  49. materialIns.setProperty('albedo', colorStr);
  50. rendererComponet.material = materialIns
  51. }
  52. }
  53. var mv = node.getComponent(PuppetViewComp)!;
  54. this.add(mv);
  55. node.parent = parent;
  56. node.setPosition(pos);
  57. }
  58. }
  59. export class EcsPuppetSystem extends ecs.System {
  60. constructor() {
  61. super();
  62. this.add(new PuppetPathSystem())
  63. }
  64. }