FullVehicleOperation.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. let runCount = 0
  52. let timerArr = []
  53. for (let index = 0; index < subways.length; index++) {
  54. const subway = subways[index];
  55. for (let index = 0; index < subway.SubwayModel.colorArr.length; index++) {
  56. const element = subway.SubwayModel.colorArr[index];
  57. if (element === color) {
  58. count += 1
  59. // console.log('需要人数',count,needCount)
  60. subway.SubwayModel.colorArr.splice(index, 1)
  61. index--
  62. subway.SubwayView.updateCount(subway.SubwayModel.colorArr.length)
  63. const tempPuppet = this.creatPuppet(color)
  64. const account = smc.initialize.account
  65. tempPuppet.load(account.checkpoint.CheckpointView.node, color, subway.SubwayView.node.position.clone(), account.AccountModel.skin);
  66. e.addChild(tempPuppet)
  67. tempPuppet.PuppetView.animator.onRunComplete = () => {
  68. e.CheckpointModel.curVehicle.VehicleView.createPuppet()
  69. e.removeChild(tempPuppet)
  70. tempPuppet.destroy()
  71. e.CheckpointModel.peopleCount -= 1
  72. timerArr.forEach(v=>clearTimeout(v))
  73. }
  74. e.CheckpointModel.curVehicle.VehicleModel.useSit += 1
  75. timerArr.push(setTimeout(()=>{
  76. tempPuppet.PuppetView.animator.moveToTarget(e.CheckpointModel.curVehicle.VehicleView.node.position.clone())
  77. },200*runCount))
  78. runCount+=1
  79. }
  80. if (count >= needCount) {
  81. break
  82. }
  83. }
  84. if (count >= needCount) {
  85. break
  86. }
  87. }
  88. }
  89. e.remove(FullVehicleOperationComp)
  90. }
  91. creatPuppet(color: string) {
  92. const puppet = ecs.getEntity<Puppet>(Puppet)
  93. const puppetModel = puppet.get(PuppetModelComp)
  94. puppetModel.color = color
  95. puppetModel.withColider = true
  96. return puppet
  97. }
  98. }