Clean up entity regions

This commit is contained in:
KingRainbow44
2023-05-04 21:28:45 -04:00
parent 8ee3dec5df
commit 0b87485bdf
2 changed files with 26 additions and 27 deletions

View File

@@ -15,7 +15,7 @@ public class EntityRegion extends GameEntity {
private final Position position; private final Position position;
private final Set<Integer> entities; // Ids of entities inside this region private final Set<Integer> entities; // Ids of entities inside this region
private final SceneRegion metaRegion; private final SceneRegion metaRegion;
private boolean hasNewEntities; private boolean entityEnter;
private boolean entityLeave; private boolean entityLeave;
public EntityRegion(Scene scene, SceneRegion region) { public EntityRegion(Scene scene, SceneRegion region) {
@@ -35,20 +35,18 @@ public class EntityRegion extends GameEntity {
return this.metaRegion.config_id; return this.metaRegion.config_id;
} }
public void resetNewEntities() {
this.entityEnter = false;
this.entityLeave = false;
}
public void addEntity(GameEntity entity) { public void addEntity(GameEntity entity) {
if (this.getEntities().contains(entity.getId())) { if (this.getEntities().contains(entity.getId())) {
return; return;
} }
this.getEntities().add(entity.getId()); this.getEntities().add(entity.getId());
this.hasNewEntities = true; this.entityEnter = true;
}
public boolean hasNewEntities() {
return hasNewEntities;
}
public void resetNewEntities() {
hasNewEntities = false;
} }
public void removeEntity(int entityId) { public void removeEntity(int entityId) {
@@ -57,18 +55,17 @@ public class EntityRegion extends GameEntity {
} }
public void removeEntity(GameEntity entity) { public void removeEntity(GameEntity entity) {
this.getEntities().remove(entity.getId()); this.removeEntity(entity.getId());
this.entityLeave = true;
} }
public boolean entityLeave() { public boolean entityHasEntered() {
return this.entityEnter;
}
public boolean entityHasLeft() {
return this.entityLeave; return this.entityLeave;
} }
public void resetEntityLeave() {
this.entityLeave = false;
}
@Override @Override
public Int2FloatMap getFightProperties() { public Int2FloatMap getFightProperties() {
return null; return null;

View File

@@ -643,30 +643,32 @@ public class SceneScriptManager {
.toList(); .toList();
entities.forEach(region::addEntity); entities.forEach(region::addEntity);
int targetID = 0; var targetId = 0;
if (entities.size() > 0) { if (entities.size() > 0) {
targetID = entities.get(0).getId(); targetId = entities.get(0).getId();
} }
if (region.hasNewEntities()) { if (region.entityHasEntered()) {
Grasscutter.getLogger() Grasscutter.getLogger()
.trace("Call EVENT_ENTER_REGION_{}", region.getMetaRegion().config_id); .trace("Call EVENT_ENTER_REGION_{}", region.getMetaRegion().config_id);
callEvent( this.callEvent(
new ScriptArgs(region.getGroupId(), EventType.EVENT_ENTER_REGION, region.getConfigId()) new ScriptArgs(region.getGroupId(), EventType.EVENT_ENTER_REGION, region.getConfigId())
.setSourceEntityId(region.getId()) .setSourceEntityId(region.getId())
.setTargetEntityId(targetID)); .setTargetEntityId(targetId));
region.resetNewEntities(); region.resetNewEntities();
} }
for (int entityId : region.getEntities()) { for (var entityId : region.getEntities()) {
if (getScene().getEntityById(entityId) == null var entity = this.getScene().getEntityById(entityId);
|| !region.getMetaRegion().contains(getScene().getEntityById(entityId).getPosition())) { if (entity == null || !region.getMetaRegion()
.contains(entity.getPosition())) {
region.removeEntity(entityId); region.removeEntity(entityId);
} }
} }
if (region.entityLeave()) {
callEvent( if (region.entityHasLeft()) {
this.callEvent(
new ScriptArgs(region.getGroupId(), EventType.EVENT_LEAVE_REGION, region.getConfigId()) new ScriptArgs(region.getGroupId(), EventType.EVENT_LEAVE_REGION, region.getConfigId())
.setSourceEntityId(region.getId()) .setSourceEntityId(region.getId())
.setTargetEntityId(region.getFirstEntityId())); .setTargetEntityId(region.getFirstEntityId()));