mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-17 01:15:52 +01:00
Clean up entity regions
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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()));
|
||||||
|
|||||||
Reference in New Issue
Block a user