伤害系统有问题,打算放弃
This commit is contained in:
@@ -5,15 +5,17 @@ import { DamageRequest, DamageResult } from "./DamageComp";
|
||||
|
||||
@ecs.register('DamageSystem')
|
||||
export class DamageSystem extends ecs.ComblockSystem implements ecs.ISystemUpdate {
|
||||
private _timers: { [key: string]: number } = {};
|
||||
|
||||
filter(): ecs.IMatcher {
|
||||
return ecs.allOf(DamageRequest);
|
||||
}
|
||||
|
||||
update(entity: ecs.Entity) {
|
||||
const req = entity.get(DamageRequest);
|
||||
update(e: ecs.Entity) {
|
||||
const req = e.get(DamageRequest);
|
||||
const result = this.calculateDamage(req);
|
||||
this.applyDamage(req.target, result);
|
||||
entity.remove(DamageRequest);
|
||||
e.remove(DamageRequest);
|
||||
}
|
||||
|
||||
private calculateDamage(req: DamageRequest): DamageResult {
|
||||
@@ -24,7 +26,6 @@ export class DamageSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
|
||||
// 闪避判定
|
||||
if (Math.random() < targetView.dodge) {
|
||||
const result = new DamageResult();
|
||||
result.finalDamage = 0;
|
||||
result.isDodged = true;
|
||||
return result;
|
||||
}
|
||||
@@ -45,25 +46,28 @@ export class DamageSystem extends ecs.ComblockSystem implements ecs.ISystemUpdat
|
||||
}
|
||||
|
||||
const result = new DamageResult();
|
||||
result.finalDamage = Math.max(0, final);
|
||||
result.value = Math.max(0, final);
|
||||
result.isCrit = isCrit;
|
||||
result.position = req.target.get(HeroViewComp).node.position;
|
||||
result.delay = req.delay;
|
||||
return result;
|
||||
}
|
||||
|
||||
private applyDamage(target: ecs.Entity, result: DamageResult) {
|
||||
const view = target.get(HeroViewComp);
|
||||
view.hp -= result.finalDamage;
|
||||
|
||||
view.hp -= result.value;
|
||||
// 添加伤害结果组件
|
||||
const comp = target.add(DamageResult);
|
||||
comp.finalDamage = result.finalDamage;
|
||||
comp.value = result.value;
|
||||
comp.isCrit = result.isCrit;
|
||||
comp.position = result.position;
|
||||
comp.delay = result.delay;
|
||||
comp.isDodged = result.isDodged;
|
||||
|
||||
|
||||
// 触发伤害事件
|
||||
oops.message.dispatchEvent("OnDamage", {
|
||||
target,
|
||||
damage: result.finalDamage,
|
||||
damage: result.value,
|
||||
isCrit: result.isCrit
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user