GameData.ts 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. /** @format */
  2. import {Data} from '../GameControl'
  3. import {ccUtils} from '../utils/ccUtils'
  4. import {GAME_TYPE} from '../enums/Enum'
  5. import {SysFrameAni} from '../ECS/systems/SysFrameAni'
  6. import {observable} from 'mobx'
  7. import {SysEnter} from '../ECS/systems/SysEnter'
  8. import {IRelicattributeConfig} from '../config/RelicattributeConfig'
  9. import {IRunecardConfig} from '../config/RunecardConfig'
  10. import {idNum} from '../proto/typedef'
  11. /** @format */
  12. export class GameData {
  13. groupList: string[] = [
  14. 'default',
  15. 'friend',
  16. 'enemy',
  17. 'friendBullet',
  18. 'enemyBullet',
  19. 'friendHurtSkill',
  20. 'friendGainSkill',
  21. 'enemyHurtSkill',
  22. 'enemyGainSkill',
  23. 'friendHurtSkillMonitor',
  24. 'friendGainSkillMonitor',
  25. 'enemyHurtSkillMonitor',
  26. 'enemyGainSkillMonitor',
  27. 'friendMeleeMonitor',
  28. 'enemyMeleeMonitor',
  29. 'friendMeleeXMonitor',
  30. 'enemyMeleeXMonitor',
  31. 'friendAttackMonitor',
  32. 'enemyAttackMonitor',
  33. 'skillArea',
  34. ]
  35. gFriend: number = this.groupList.indexOf('friend')
  36. gEnemy: number = this.groupList.indexOf('enemy')
  37. gFriendBullet: number = this.groupList.indexOf('friendBullet')
  38. gEnemyBullet: number = this.groupList.indexOf('enemyBullet')
  39. gFriendHurtSkill: number = this.groupList.indexOf('friendHurtSkill')
  40. gFriendGainSkill: number = this.groupList.indexOf('friendGainSkill')
  41. gEnemyHurtSkill: number = this.groupList.indexOf('enemyHurtSkill')
  42. gEnemyGainSkill: number = this.groupList.indexOf('enemyGainSkill')
  43. gFriendHurtSkillMonitor: number = this.groupList.indexOf('friendHurtSkillMonitor')
  44. gFriendGainSkillMonitor: number = this.groupList.indexOf('friendGainSkillMonitor')
  45. gEnemyHurtSkillMonitor: number = this.groupList.indexOf('enemyHurtSkillMonitor')
  46. gEnemyGainSkillMonitor: number = this.groupList.indexOf('enemyGainSkillMonitor')
  47. gFriendMeleeMonitor: number = this.groupList.indexOf('friendMeleeMonitor')
  48. gEnemyMeleeMonitor: number = this.groupList.indexOf('enemyMeleeMonitor')
  49. gFriendMeleeXMonitor: number = this.groupList.indexOf('friendMeleeXMonitor')
  50. gEnemyMeleeXMonitor: number = this.groupList.indexOf('enemyMeleeXMonitor')
  51. gFriendAttackMonitor: number = this.groupList.indexOf('friendAttackMonitor')
  52. gEnemyAttackMonitor: number = this.groupList.indexOf('enemyAttackMonitor')
  53. gSkillArea: number = this.groupList.indexOf('skillArea')
  54. collisionMatrix: boolean[][] = new Array(this.groupList.length)
  55. .fill([])
  56. .map(() => new Array(this.groupList.length).fill(false))
  57. gameBundle: cc.AssetManager.Bundle
  58. //近战探测范围
  59. meleeRange: number = 130
  60. //万分比
  61. rateNum: number = 10000
  62. //配置表CD最大值
  63. cdMax: number = 9999
  64. //防御常数
  65. defenseConst: number = 325
  66. //环境伤害倍率
  67. curHurtRate: number = 0
  68. //光环cd
  69. holoCD: number = 0.1
  70. //光环buff持续时间 (光环cd小于光环持续时间)
  71. holoDuration: number = 0.15
  72. attackLeftRadiusPoints: cc.Vec2[] = []
  73. attackRightRadiusPoints: cc.Vec2[] = []
  74. //角色出生范围
  75. fightSizeMaxY: number = 310
  76. fightSizeMinY: number = -250
  77. fightSizeMaxX: number = 650
  78. fightSizeMinX: number = -650
  79. //子弹,触摸等范围
  80. fightAreaMaxY: number = 410
  81. fightAreaMinY: number = -350
  82. fightAreaMaxX: number = 750
  83. fightAreaMinX: number = -750
  84. meleeMonitorRangeX: number = 200
  85. meleeMonitorRangeY: number = 1000
  86. meleeYMonitorRangeX: number = 3000
  87. meleeYMonitorRangeY: number = 200
  88. //关卡ID
  89. stageID: number = 1
  90. //关卡波数ID
  91. stageRound: number
  92. //关卡初始费用
  93. cost: number
  94. //关卡产出1点费用耗时
  95. costTime: number
  96. gameType: GAME_TYPE = GAME_TYPE.none
  97. spineTimeRate: number = 1
  98. spineScale: number = 0.22
  99. maxAttackSpeed: number = 50000
  100. minAttackSpeed: number = 5000
  101. maxAttackRange: number = 1000
  102. relicAttrCfg: IRelicattributeConfig[] = []
  103. relicEntryArr: number[] = []
  104. dropOut: idNum[]
  105. @observable
  106. gameSpeed: number = 1
  107. speedUpTime: number = 0
  108. init() {
  109. let colliderPairs = [
  110. [this.gFriend, this.gEnemyAttackMonitor],
  111. [this.gFriend, this.gEnemyBullet],
  112. [this.gFriend, this.gFriendGainSkill],
  113. [this.gFriend, this.gEnemyHurtSkill],
  114. [this.gFriend, this.gFriendGainSkillMonitor],
  115. [this.gFriend, this.gEnemyHurtSkillMonitor],
  116. [this.gFriend, this.gSkillArea],
  117. [this.gEnemy, this.gFriendAttackMonitor],
  118. [this.gEnemy, this.gFriendBullet],
  119. [this.gEnemy, this.gEnemyGainSkill],
  120. [this.gEnemy, this.gFriendHurtSkill],
  121. [this.gEnemy, this.gEnemyGainSkillMonitor],
  122. [this.gEnemy, this.gFriendHurtSkillMonitor],
  123. [this.gEnemy, this.gSkillArea],
  124. [this.gFriendMeleeMonitor, this.gEnemyMeleeMonitor],
  125. [this.gFriendMeleeXMonitor, this.gEnemyMeleeXMonitor],
  126. ,
  127. ]
  128. for (let i = 0; i < this.groupList.length; i++) {
  129. for (let j = 0; j < this.groupList.length; j++) {
  130. this.collisionMatrix[i][j] = colliderPairs.some(arr => {
  131. return [JSON.stringify([i, j]), JSON.stringify([j, i])].includes(JSON.stringify(arr))
  132. })
  133. }
  134. }
  135. //n必须为偶数,单边扇形有n+1个点
  136. this.attackLeftRadiusPoints = ccUtils.generateAttackPoints(Data.game.meleeRange, 10, true, 1)
  137. this.attackRightRadiusPoints = ccUtils.generateAttackPoints(Data.game.meleeRange, 10, false, 1)
  138. //console.log(Data.game.attackLeftRadiusPoints, Data.game.attackRightRadiusPoints)
  139. }
  140. maskBitByGroupIndex(groupIndex: number) {
  141. let maskBits = 0
  142. let bits = this.collisionMatrix[groupIndex]
  143. for (let i = 0; i < bits.length; i++) {
  144. if (!bits[i]) continue
  145. maskBits |= 1 << i
  146. }
  147. //console.log(this.groupList[groupIndex], '----->', groupIndex, '----mask---------->', maskBits)
  148. return maskBits
  149. }
  150. }