zombieProp.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /*
  2. * @Author: your name
  3. * @Date: 2021-09-14 22:30:31
  4. * @LastEditTime: 2021-09-20 16:46:18
  5. * @LastEditors: Please set LastEditors
  6. * @Description: In User Settings Edit
  7. * @FilePath: \zombiefood\assets\script\gameLogic\gameObject\zombie\zombieProp.ts
  8. */
  9. import npcDtManager from "../../../dataManager/npcDtManager";
  10. import npcHelper from "../../../dataManager/npcHelper";
  11. import { ROLE_STATE } from "../../utrl/gameEnum";
  12. import PlayerObject from "../player/playerObject";
  13. import PlayerProp from "../player/playerProp";
  14. /**玩家逻辑属性 */
  15. export default class ZombieProp {
  16. //僵尸经验值
  17. exp = 1;
  18. /**空手攻击力 */
  19. base_damage = 5;
  20. /**空手攻击范围 */
  21. hand_range = 80;
  22. /**攻击间隔 */
  23. attack_dur = 1;
  24. /**攻击计时器 */
  25. attack_timer = Number.MAX_VALUE;
  26. /**索敌范围 */
  27. search_range = 300;
  28. /**玩家等级 */
  29. level = 0;
  30. /**基础血量 */
  31. base_hp = 100;
  32. /**当前血量 */
  33. cur_hp = 100;
  34. /**僵尸状态 */
  35. cur_state = ROLE_STATE.idle;
  36. /** 僵尸ID */
  37. zombie_ID = 0;
  38. /**初始化 */
  39. init(id) {
  40. let modelDt = npcHelper.getModelAttrByID(id);
  41. this.zombie_ID = id;
  42. this.base_damage = modelDt.att;
  43. this.base_hp = modelDt.hp;
  44. this.cur_hp = this.base_hp * (this.level + 1);
  45. // if(npcHelper.isBoss(id)){
  46. // this.hand_range = 80
  47. // }
  48. this.initBossProp();
  49. }
  50. //boss属性特殊处理
  51. initBossProp() {
  52. if (this.zombie_ID == 56) {
  53. this.attack_dur = 5;
  54. this.search_range = 1000;
  55. this.hand_range = 300;
  56. } else if (this.zombie_ID == 53) {
  57. this.attack_dur = 3;
  58. this.search_range = 1000;
  59. this.hand_range = 300;
  60. } else if(this.zombie_ID == 46){
  61. this.attack_dur = 2;
  62. this.search_range = 300;
  63. this.hand_range = 100;
  64. }
  65. }
  66. /**受伤
  67. * @param damage 伤害
  68. * @returns 目标剩余血量
  69. */
  70. beHurt(damage: number): number {
  71. this.cur_hp -= damage;
  72. if (this.cur_hp <= 0) {
  73. this.cur_state = ROLE_STATE.die;
  74. this.cur_hp = 0;
  75. }
  76. return this.cur_hp;
  77. }
  78. /**攻击间隔
  79. * @param dt 每帧时间
  80. * @param cbk 攻击回调
  81. */
  82. attackRun(dt: number, cbk: Function) {
  83. this.attack_timer += dt;
  84. if (this.attack_timer > this.attack_dur) {
  85. this.attack_timer = 0;
  86. cbk();
  87. }
  88. }
  89. /**攻击
  90. * @param target 目标
  91. * @param damage 伤害
  92. * @returns 如果目标已死,返回目标等级,否则返回-1
  93. */
  94. attack(target: PlayerObject, damage: number): boolean {
  95. let hp = target.player_prop.beHurt(damage);
  96. if (hp <= 0) {
  97. this.cur_state = ROLE_STATE.idle;
  98. return true
  99. }
  100. return false;
  101. }
  102. }