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;
|
|
|
|
import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
|
|
|
|
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;
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void removeEntity(GameEntity entity) {
|
|
|
|
this.getEntities().remove(entity.getId());
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Int2FloatOpenHashMap getFightProperties() {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Position getPosition() {
|
|
|
|
return position;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Position getRotation() {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
|
|
@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
|
|
|
}
|