78 lines
2.3 KiB
Java
Raw Normal View History

2022-06-23 15:59:17 +08:00
package emu.grasscutter.game.entity;
import emu.grasscutter.game.props.EntityIdType;
import emu.grasscutter.game.world.Scene;
import emu.grasscutter.net.proto.SceneEntityInfoOuterClass;
import emu.grasscutter.scripts.data.SceneRegion;
import emu.grasscutter.utils.Position;
2022-11-05 19:00:17 +10:30
import it.unimi.dsi.fastutil.ints.Int2FloatMap;
2022-06-23 15:59:17 +08:00
import lombok.Getter;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
@Getter
public class EntityRegion extends GameEntity{
private final Position position;
private boolean hasNewEntities;
2022-07-23 12:27:14 +03:00
private boolean entityLeave;
2022-06-23 15:59:17 +08:00
private final Set<Integer> entities; // Ids of entities inside this region
private final SceneRegion metaRegion;
public EntityRegion(Scene scene, SceneRegion region) {
super(scene);
this.id = getScene().getWorld().getNextEntityId(EntityIdType.REGION);
setGroupId(region.group.id);
setBlockId(region.group.block_id);
setConfigId(region.config_id);
this.position = region.pos.clone();
this.entities = ConcurrentHashMap.newKeySet();
this.metaRegion = region;
}
public void addEntity(GameEntity entity) {
if (this.getEntities().contains(entity.getId())) {
return;
}
this.getEntities().add(entity.getId());
this.hasNewEntities = true;
}
public boolean hasNewEntities() {
return hasNewEntities;
}
public void resetNewEntities() {
hasNewEntities = false;
}
2022-07-23 12:27:14 +03:00
public void removeEntity(int entityId) {
this.getEntities().remove(entityId);
this.entityLeave = true;
}
2022-06-23 15:59:17 +08:00
public void removeEntity(GameEntity entity) {
this.getEntities().remove(entity.getId());
2022-07-23 12:27:14 +03:00
this.entityLeave = true;
2022-06-23 15:59:17 +08:00
}
2022-07-23 12:27:14 +03:00
public boolean entityLeave() {return this.entityLeave;}
public void resetEntityLeave() {this.entityLeave = false;}
2022-11-05 19:00:17 +10:30
@Override public Int2FloatMap getFightProperties() {return null;}
2022-06-23 15:59:17 +08:00
2022-11-05 19:00:17 +10:30
@Override public Position getPosition() {return position;}
2022-06-23 15:59:17 +08:00
2022-11-05 19:00:17 +10:30
@Override public Position getRotation() {return null;}
2022-06-23 15:59:17 +08:00
@Override
public SceneEntityInfoOuterClass.SceneEntityInfo toProto() {
/**
* The Region Entity would not be sent to client.
*/
return null;
}
2022-07-03 15:56:18 +08:00
public int getFirstEntityId() {
return entities.stream().findFirst().orElse(0);
}
2022-06-23 15:59:17 +08:00
}