BuffControl.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. import { BattleBase } from "../base/BattleBase";
  2. import { BattleEventManager } from "../base/BattleEventManager";
  3. import { BattleEventData_EnemyBuff, BattleEventData_EnemyHurt, BattleEventData_EnemyMove, BattleEventTarget, BattleEventType, BuffEventState, HurtEventState } from "../base/BattleEventUtil";
  4. import { BuffType } from "../data/BattleEnum";
  5. import { BattleUtil } from "../data/BattleUtil";
  6. import { BuffData ,BuffDataPool} from "../data/BuffData";
  7. import { DataBase } from "../data/DataBase";
  8. import { EnemyData } from "../data/EnemyData";
  9. import { HeroData } from "../data/HeroData";
  10. import { MapData } from "../data/MapData";
  11. //子弹控制类
  12. export class BuffControl extends BattleBase{
  13. map:MapData = null
  14. buffMap:Map<number,BuffData> = null;
  15. battleEventManager: BattleEventManager = null;
  16. init(){
  17. this.battleEventManager = BattleEventManager.instance
  18. this.map = MapData.GetInstance()
  19. this.buffMap = this.map.buffMap
  20. }
  21. //每次加一帧
  22. update(){
  23. this.buffMap.forEach((buff:BuffData)=>{
  24. buff.duration--
  25. buff.lifeTime++
  26. this.updateTimeBuff(buff)
  27. if(buff.duration <= 0){
  28. let eventData:BattleEventData_EnemyBuff = {
  29. eventType: BattleEventType.EnemyBuff,
  30. ID: buff.targetDataBaseID,
  31. buffID: buff.ID,
  32. eventState: BuffEventState.Remove
  33. }
  34. this.battleEventManager.fireEvent(BattleEventTarget.Update,eventData)
  35. this.map.removeBuff(buff.ID)
  36. }
  37. })
  38. }
  39. //处理新加buff
  40. updateNewBuff(){
  41. this.map.buffMap.forEach((buff:BuffData)=>{
  42. if(buff.lifeTime == 0){
  43. let eventData:BattleEventData_EnemyBuff = {
  44. eventType: BattleEventType.EnemyBuff,
  45. ID: buff.targetDataBaseID,
  46. buffID: buff.ID,
  47. eventState: BuffEventState.Add
  48. }
  49. this.battleEventManager.fireEvent(BattleEventTarget.Update,eventData)
  50. this.updateAddBuff(buff)
  51. }
  52. })
  53. }
  54. //时间变化引起的buff计算
  55. updateTimeBuff(buff:BuffData){
  56. switch(buff.typeID){
  57. case BuffType.Poison:{//中毒
  58. let target = buff.targetDataBase as EnemyData
  59. let src = buff.srcDataBase as HeroData
  60. if(buff.lifeTime%BattleUtil.FrameRate == 1){
  61. target.life -= buff.valueList[0];
  62. let eventData:BattleEventData_EnemyHurt = {
  63. eventType: BattleEventType.EnemyHurt,
  64. targetID: target.ID,
  65. hurt: buff.valueList[0],
  66. status: HurtEventState.Poison,
  67. typeID:src.typeID
  68. }
  69. this.battleEventManager.fireEvent(BattleEventTarget.Update,eventData)
  70. }
  71. }
  72. break;
  73. }
  74. }
  75. //处理加buff时,有影响的buff
  76. updateAddBuff(buff:BuffData){
  77. let src = buff.srcDataBase
  78. let target = buff.targetDataBase
  79. if(target instanceof HeroData){
  80. this.updateHeroAddBuff(buff,target)
  81. }else if(target instanceof EnemyData){
  82. this.updateEnemyAddBuff(buff,target)
  83. }
  84. }
  85. private updateEnemyAddBuff(buff: BuffData, target: EnemyData) {
  86. switch(buff.typeID){
  87. case BuffType.Snow://减速 目前只有一种不做过渡计算
  88. target.speedCur = target.speedBase*buff.valueList[0];
  89. // console.log("减速:",target.ID)
  90. break;
  91. case BuffType.Ice://冰冻
  92. target.speedCur = 0;
  93. // console.log("冰冻:",target.ID)
  94. break;
  95. }
  96. }
  97. private updateHeroAddBuff(buff: BuffData, target: HeroData) {
  98. throw new Error("Method not implemented.");
  99. }
  100. //处理结算时有影响的buff
  101. updateRemoveBuff(buff:BuffData){
  102. let src = buff.srcDataBase
  103. let target = buff.targetDataBase
  104. if(target instanceof HeroData){
  105. this.updateHeroRemoveBuff(buff,target)
  106. }else if(target instanceof EnemyData){
  107. this.updateEnemyRemoveBuff(buff,target)
  108. }
  109. }
  110. private updateEnemyRemoveBuff(buff: BuffData,target: EnemyData) {
  111. switch(buff.typeID){
  112. case 2:{//减速 目前只有一种不做过渡计算
  113. target.speedCur = target.speedBase;
  114. break;
  115. }
  116. case 3:{//冰冻
  117. target.speedCur = target.speedBase;
  118. break;
  119. }
  120. }
  121. }
  122. //英雄暂时无buff
  123. private updateHeroRemoveBuff(buff: BuffData,target: HeroData) {
  124. throw new Error("Method not implemented.");
  125. }
  126. }