FullVehicleOperation.ts 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { ecs } from "../../../../../extensions/oops-plugin-framework/assets/libs/ecs/ECS";
  2. import { SingletonModuleComp, smc } from "../../common/SingletonModuleComp";
  3. import { PuppetAnimatorType } from "../../puppet/model/PuppetEnum";
  4. import { PuppetModelComp } from "../../puppet/model/PuppetModelComp";
  5. import { Puppet } from "../../puppet/puppet";
  6. import { PuppetViewComp } from "../../puppet/view/PuppetViewComp";
  7. import { Subway } from "../../subway/Subway";
  8. import { Checkpoint } from "../Checkpoint";
  9. import { CheckpointModelComp } from "../model/CheckpointModel";
  10. /**
  11. * 站台人员进车
  12. */
  13. @ecs.register('FullVehicleOperation')
  14. export class FullVehicleOperationComp extends ecs.Comp {
  15. reset() {
  16. }
  17. }
  18. export class FullVehicleOperationSystem extends ecs.ComblockSystem implements ecs.IEntityEnterSystem {
  19. filter(): ecs.IMatcher {
  20. return ecs.allOf(CheckpointModelComp, FullVehicleOperationComp);
  21. }
  22. entityEnter(e: Checkpoint): void {
  23. const curVehicleModel = e.CheckpointModel.curVehicle.VehicleModel
  24. const needCount = curVehicleModel.capcity - curVehicleModel.useSit
  25. const color = curVehicleModel.color
  26. const puppets = e.CheckpointModel.puppets
  27. let count = 0
  28. for (let index = 0; index < puppets.length; index++) {
  29. const element = puppets[index];
  30. if (element.PuppetModel.color === color) {
  31. count += 1
  32. element.PuppetView.animator.onRunComplete = () => {
  33. e.CheckpointModel.curVehicle.VehicleView.createPuppet()
  34. e.removeChild(element)
  35. element.destroy()
  36. e.CheckpointModel.peopleCount -= 1
  37. }
  38. const cell = e.CheckpointModel.cells
  39. const { x, y } = element.PuppetModel
  40. cell[x][y] = null
  41. e.CheckpointModel.path_grid[x][y].fill = null
  42. e.CheckpointModel.curVehicle.VehicleModel.useSit += 1
  43. element.PuppetView.animator.moveToTarget(e.CheckpointModel.curVehicle.VehicleView.node.position.clone())
  44. }
  45. if (count >= needCount) {
  46. break
  47. }
  48. }
  49. if (count < needCount) {
  50. const subways = e.CheckpointModel.subways
  51. for (let index = 0; index < subways.length; index++) {
  52. const subway = subways[index];
  53. const peopleIndex = subway.SubwayModel.colorArr.findIndex(val => val === color)
  54. if (peopleIndex > -1) {
  55. count += 1
  56. subway.SubwayModel.colorArr.splice(peopleIndex, 1)
  57. subway.SubwayView.updateCount(subway.SubwayModel.colorArr.length)
  58. const tempPuppet = this.creatPuppet(color)
  59. const account = smc.initialize.account
  60. tempPuppet.load(account.checkpoint.CheckpointView.node, color, subway.SubwayView.node.position.clone(), account.AccountModel.skin);
  61. e.addChild(tempPuppet)
  62. tempPuppet.PuppetView.animator.onRunComplete = () => {
  63. e.CheckpointModel.curVehicle.VehicleView.createPuppet()
  64. e.removeChild(tempPuppet)
  65. tempPuppet.destroy()
  66. e.CheckpointModel.peopleCount -= 1
  67. }
  68. e.CheckpointModel.curVehicle.VehicleModel.useSit += 1
  69. tempPuppet.PuppetView.animator.moveToTarget(e.CheckpointModel.curVehicle.VehicleView.node.position.clone())
  70. }
  71. if (count >= needCount) {
  72. break
  73. }
  74. }
  75. }
  76. e.remove(FullVehicleOperationComp)
  77. }
  78. creatPuppet(color: string) {
  79. const puppet = ecs.getEntity<Puppet>(Puppet)
  80. const puppetModel = puppet.get(PuppetModelComp)
  81. puppetModel.color = color
  82. puppetModel.withColider = true
  83. return puppet
  84. }
  85. }