run_level_item.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { _decorator, Collider2D, Component, Contact2DType, Director, director, instantiate, IPhysics2DContact, Node, Prefab, RigidBody2D, Size, Sprite, SpriteFrame, UITransform, Vec3 } from 'cc';
  2. import { model_item_data } from '../data';
  3. import { config } from '../config';
  4. import { box } from './box';
  5. import { coin } from './coin';
  6. import { wall } from './wall';
  7. import Coroutine from '../lib/Coroutine';
  8. import { tools } from '../tools';
  9. import { car } from './car';
  10. import { base } from './base';
  11. const { ccclass, property } = _decorator;
  12. @ccclass('run_level_item')
  13. export class run_level_item extends Component {
  14. private mData:model_item_data = null;
  15. private sfList:SpriteFrame[] = [];
  16. private sfBuffList:SpriteFrame[] = [];
  17. private mCar:car = null;
  18. private isRemove:boolean = false
  19. public initView(data:model_item_data,l:SpriteFrame[],bl:SpriteFrame[],car:car){
  20. this.mData = data
  21. this.mCar = car
  22. this.sfList = l
  23. this.sfBuffList = bl
  24. this.node.getComponent(UITransform).contentSize = new Size(this.mData.width,this.mData.height)
  25. for (let index = 0; index < data.list.length; index++) {
  26. const element = data.list[index];
  27. // Coroutine.instance.start(this, this.init, 0.2, 0, element);
  28. this.init(element)
  29. }
  30. }
  31. private init(element){
  32. let node:Node = null;
  33. if(tools.isBox(element.item_type)){
  34. node = this.mCar.getGame().getPoolManager().getBox()
  35. node.getComponent(box).init(element, this.sfList[element.item_type-1],element.buff_type>0?this.sfBuffList[element.buff_type-1]:null,this.mCar)
  36. this.mCar.getGame().addBoxForList(node)
  37. }else if(element.item_type==config.item_type.coin){
  38. node = this.mCar.getGame().getPoolManager().getCoin()
  39. node.getComponent(coin).init(element,this.mCar)
  40. this.mCar.getGame().addCoinForList(node)
  41. }else if(element.item_type==config.item_type.wall){
  42. node = this.mCar.getGame().getPoolManager().getWall()
  43. node.getComponent(wall).init(element,this.mCar)
  44. this.mCar.getGame().addWallForList(node)
  45. }
  46. if(node!=null){
  47. node.parent = this.node
  48. }
  49. }
  50. public removeAll(){
  51. // this.node.getComponent(RigidBody2D).sleep()
  52. for (let index = 0; index < this.node.children.length; index++) {
  53. const node = this.node.children[index];
  54. let element = node.getComponent(base).getData()
  55. if(tools.isBox(element.item_type)){
  56. node.getComponent(box).removeSelf()
  57. }else if(element.item_type==config.item_type.coin){
  58. node.getComponent(coin).removeSelf()
  59. }else if(element.item_type==config.item_type.wall){
  60. this.mCar.getGame().removeWallForList(node)
  61. this.mCar.getGame().getPoolManager().putWall(node)
  62. }
  63. }
  64. // director.once(Director.EVENT_AFTER_DRAW,()=>{
  65. // this.node.destroy()
  66. // })
  67. this.node.removeFromParent()
  68. }
  69. public CheckRemoveSelf(){
  70. if(!this.isRemove){
  71. let world = this.node.parent.getComponent(UITransform).convertToWorldSpaceAR(this.node.position)
  72. if(this.mCar.getGame().isOut(world)){
  73. this.isRemove = true
  74. this.mCar.getGame().deleteItem(this.node)
  75. }
  76. }
  77. }
  78. protected lateUpdate(dt: number): void {
  79. this.CheckRemoveSelf()
  80. }
  81. }