ShopMediator.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import { _decorator, Component, Node, Prefab, LayoutComponent, instantiate, ScrollViewComponent } from 'cc';
  2. import { GUIManager } from '../../../engines/gui/GUIManager';
  3. import { GUIMediator } from '../../../engines/gui/GUIMediator';
  4. import GameConfigManager from '../../models/GameConfigManager';
  5. import { GameModel } from '../../models/GameModel';
  6. import { UIConst } from '../UIConst';
  7. import { ShopItemRenderScript } from './ShopItemRenderScript';
  8. const { ccclass, property } = _decorator;
  9. @ccclass('ShopMediator')
  10. export class ShopMediator extends GUIMediator {
  11. @property({
  12. type:Prefab
  13. })
  14. ListItemRenderPrefab:Prefab=null;
  15. @property({
  16. type:LayoutComponent
  17. })
  18. ListContext:LayoutComponent=null;
  19. @property({
  20. type:ScrollViewComponent
  21. })
  22. List:ScrollViewComponent=null;
  23. OnShow(data?:any):void{
  24. super.OnShow(data);
  25. this.RefreshList(true);
  26. this.AddEvent();
  27. }
  28. OnHide():void{
  29. this.RemoveEvent();
  30. }
  31. /**
  32. * 返回按钮点击
  33. */
  34. public BackButtonClick():void{
  35. GUIManager.single.Show(UIConst.PREPARE_UI);
  36. this.HideSelf();
  37. }
  38. private AddEvent():void{
  39. }
  40. private RemoveEvent():void{
  41. }
  42. private RefreshList(srollToZ:boolean):void{
  43. let itemView:Node;
  44. let dataList:any[]=this.GetListData();
  45. if(dataList.length!=this.ListContext.node.children.length){
  46. if(dataList.length<this.ListContext.node.children.length){
  47. //删除多余的
  48. while(dataList.length<this.ListContext.node.children.length){
  49. this.ListContext.node.removeChild(this.ListContext.node.children[0]);
  50. }
  51. }else{
  52. //添加缺少的
  53. while(dataList.length>this.ListContext.node.children.length){
  54. itemView=instantiate(this.ListItemRenderPrefab);
  55. this.ListContext.node.addChild(itemView);
  56. }
  57. }
  58. }
  59. let itemScript:ShopItemRenderScript;
  60. let count:number=dataList.length;
  61. for (let index = 0; index < count; index++) {
  62. itemView=this.ListContext.node.children[index];
  63. itemScript=itemView.getComponent(ShopItemRenderScript);
  64. if(itemScript==null){
  65. throw new Error("商城列表项未挂载ShopItemRenderScript脚本!");
  66. }
  67. itemScript.UpdateItemRender(dataList[index]);
  68. }
  69. if(srollToZ){
  70. this.List.scrollToTop(0.1);
  71. }
  72. }
  73. /**
  74. * 根据当前合成过的最大枪来计算列表数据
  75. */
  76. private GetListData():any[]{
  77. let result:any[]=[];
  78. let config:any=GameConfigManager.GetShopConfig(GameModel.single.synthesisMaxWeaponId);
  79. let weaponConfig:any;
  80. //解锁线
  81. let unlockLevel:number;
  82. if(config.unsealedGunId!=undefined){
  83. weaponConfig=GameConfigManager.GetWeaponConfig(config.unsealedGunId);
  84. unlockLevel=weaponConfig.level;
  85. }else{
  86. unlockLevel=-1;
  87. }
  88. let shopList:any[]=GameConfigManager.ShopList;
  89. shopList.sort((a,b)=> a.index-b.index);
  90. let itemData:any;
  91. shopList.forEach(element => {
  92. weaponConfig=GameConfigManager.GetWeaponConfig(element.id);
  93. itemData={
  94. id:element.id,
  95. index:element.index
  96. }
  97. //buyType 购买方式 0金币购买 1宝石购买 2 视频购买
  98. if(config.diamondPurchaseId==undefined){
  99. itemData.buyType=0;
  100. }else if(config.diamondPurchaseId.indexOf(element.id)>=0){
  101. itemData.buyType=1;
  102. }else if(config.videoId==undefined){
  103. itemData.buyType=0
  104. }else if(config.videoId==element.id){
  105. itemData.buyType=2;
  106. }else{
  107. itemData.buyType=0;
  108. }
  109. //state 0 未解锁 1 已解锁
  110. if(unlockLevel<0||weaponConfig.level>unlockLevel){
  111. itemData.state=0;
  112. }else{
  113. itemData.state=1;
  114. }
  115. result.push(itemData);
  116. });
  117. return result;
  118. }
  119. start () {
  120. // Your initialization goes here.
  121. }
  122. // update (deltaTime: number) {
  123. // // Your update function goes here.
  124. // }
  125. }