迁移证esc

This commit is contained in:
wfz
2026-05-02 18:07:11 +08:00
parent 990b31a12a
commit 9fd572c8c4
51 changed files with 3659 additions and 1820 deletions

View File

@@ -0,0 +1,49 @@
package com.zombie.game.systems;
import com.zombie.game.ecs.ECSWorld;
import com.zombie.game.ecs.System;
import com.zombie.game.ecs.components.*;
import java.util.*;
/**
* 燃烧区域系统
*
* 处理燃烧瓶留下的火焰区域:持续伤害 + 生命周期。
*/
public class FireZoneSystem implements System {
@Override
public void update(float dt, ECSWorld world) {
List<Integer> toRemove = new ArrayList<>();
for (int entityId : world.getFireZones()) {
FireZone fz = world.getFireZonesData().get(entityId);
Position fzPos = world.getPositions().get(entityId);
if (fz == null || fzPos == null) continue;
fz.update(dt);
// 对范围内的僵尸造成持续伤害
for (int zombieId : world.getZombies()) {
Health zombieHealth = world.getHealths().get(zombieId);
Position zombiePos = world.getPositions().get(zombieId);
if (zombieHealth == null || !zombieHealth.isAlive() || zombiePos == null) continue;
float dist = fzPos.distanceTo(zombiePos.getX(), zombiePos.getY());
if (dist < fz.getRadius()) {
zombieHealth.takeDamage(fz.getDamagePerTick());
}
}
if (fz.isExpired()) {
toRemove.add(entityId);
}
}
for (int id : toRemove) {
world.getFireZones().remove(id);
world.destroyEntity(id);
}
}
}