SkinChange.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { ecs } from "../../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
  2. import { SingletonModuleComp, smc } from "../../common/SingletonModuleComp";
  3. import { Puppet } from "../../puppet/puppet";
  4. import { PuppetViewComp } from "../../puppet/view/PuppetViewComp";
  5. import { Checkpoint } from "../Checkpoint";
  6. import { CheckpointModelComp } from "../model/CheckpointModel";
  7. /**
  8. * 换肤
  9. */
  10. @ecs.register('SkinChange')
  11. export class SkinChangeComp extends ecs.Comp {
  12. skinId: number = 1
  13. reset() {
  14. this.skinId = 1
  15. }
  16. }
  17. export class SkinChangeSystem extends ecs.ComblockSystem implements ecs.IEntityEnterSystem {
  18. filter(): ecs.IMatcher {
  19. return ecs.allOf(CheckpointModelComp, SkinChangeComp);
  20. }
  21. entityEnter(e: Checkpoint): void {
  22. const nodes = this.findAllNodesWithComponent(e.CheckpointView.node,PuppetViewComp)
  23. nodes.forEach(val => {
  24. const view:PuppetViewComp = val.getComponent(PuppetViewComp)
  25. if(view){
  26. const skinComp = e.get(SkinChangeComp);
  27. (view.ent as Puppet).changeSkin(skinComp.skinId);
  28. ecs.getSingleton(SingletonModuleComp).account.AccountModel.skin = skinComp.skinId
  29. }
  30. })
  31. e.remove(SkinChangeComp)
  32. }
  33. findAllNodesWithComponent(root, component, nodes = []) {
  34. if (root.getComponent(component)) {
  35. nodes.push(root);
  36. }
  37. root.children.forEach(child => {
  38. this.findAllNodesWithComponent(child, component, nodes);
  39. });
  40. return nodes;
  41. }
  42. }