/* * @Author: your name * @Date: 2021-09-14 22:30:31 * @LastEditTime: 2021-09-20 16:46:18 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \zombiefood\assets\script\gameLogic\gameObject\zombie\zombieProp.ts */ import npcDtManager from "../../../dataManager/npcDtManager"; import npcHelper from "../../../dataManager/npcHelper"; import { ROLE_STATE } from "../../utrl/gameEnum"; import PlayerObject from "../player/playerObject"; import PlayerProp from "../player/playerProp"; /**玩家逻辑属性 */ export default class ZombieProp { //僵尸经验值 exp = 1; /**空手攻击力 */ base_damage = 5; /**空手攻击范围 */ hand_range = 80; /**攻击间隔 */ attack_dur = 1; /**攻击计时器 */ attack_timer = Number.MAX_VALUE; /**索敌范围 */ search_range = 300; /**玩家等级 */ level = 0; /**基础血量 */ base_hp = 100; /**当前血量 */ cur_hp = 100; /**僵尸状态 */ cur_state = ROLE_STATE.idle; /** 僵尸ID */ zombie_ID = 0; /**初始化 */ init(id) { let modelDt = npcHelper.getModelAttrByID(id); this.zombie_ID = id; this.base_damage = modelDt.att; this.base_hp = modelDt.hp; this.cur_hp = this.base_hp * (this.level + 1); // if(npcHelper.isBoss(id)){ // this.hand_range = 80 // } this.initBossProp(); } //boss属性特殊处理 initBossProp() { if (this.zombie_ID == 56) { this.attack_dur = 5; this.search_range = 1000; this.hand_range = 300; } else if (this.zombie_ID == 53) { this.attack_dur = 3; this.search_range = 1000; this.hand_range = 300; } else if(this.zombie_ID == 46){ this.attack_dur = 2; this.search_range = 300; this.hand_range = 100; } } /**受伤 * @param damage 伤害 * @returns 目标剩余血量 */ beHurt(damage: number): number { this.cur_hp -= damage; if (this.cur_hp <= 0) { this.cur_state = ROLE_STATE.die; this.cur_hp = 0; } return this.cur_hp; } /**攻击间隔 * @param dt 每帧时间 * @param cbk 攻击回调 */ attackRun(dt: number, cbk: Function) { this.attack_timer += dt; if (this.attack_timer > this.attack_dur) { this.attack_timer = 0; cbk(); } } /**攻击 * @param target 目标 * @param damage 伤害 * @returns 如果目标已死,返回目标等级,否则返回-1 */ attack(target: PlayerObject, damage: number): boolean { let hp = target.player_prop.beHurt(damage); if (hp <= 0) { this.cur_state = ROLE_STATE.idle; return true } return false; } }