Some checks reported errors
		
		
	
	studiorailgun/Renderer/pipeline/head Something is wrong with the build of this commit
				
			
		
			
				
	
	
		
			166 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
package electrosphere.server.datacell;
 | 
						|
 | 
						|
import java.util.Collection;
 | 
						|
import java.util.LinkedList;
 | 
						|
import java.util.List;
 | 
						|
 | 
						|
import org.joml.Vector3d;
 | 
						|
import org.joml.Vector3i;
 | 
						|
 | 
						|
import electrosphere.engine.Globals;
 | 
						|
import electrosphere.entity.Entity;
 | 
						|
import electrosphere.entity.EntityUtils;
 | 
						|
import electrosphere.entity.scene.Scene;
 | 
						|
import electrosphere.net.server.player.Player;
 | 
						|
import electrosphere.server.datacell.interfaces.DataCellManager;
 | 
						|
import electrosphere.server.macro.spatial.MacroObject;
 | 
						|
 | 
						|
/**
 | 
						|
 * A viewport data cell manager
 | 
						|
 */
 | 
						|
public class ViewportDataCellManager implements DataCellManager {
 | 
						|
 | 
						|
    /**
 | 
						|
     * The players in the realm
 | 
						|
     */
 | 
						|
    List<Player> players;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The data cell for the realm
 | 
						|
     */
 | 
						|
    ServerDataCell serverDataCell;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The parent realm
 | 
						|
     */
 | 
						|
    Realm parent;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Creates a viewport data cell manager
 | 
						|
     * @param realm The realm that will be parent to this manager
 | 
						|
     * @return The viewport data cell manager
 | 
						|
     */
 | 
						|
    public static ViewportDataCellManager create(Realm realm){
 | 
						|
        ViewportDataCellManager rVal = new ViewportDataCellManager();
 | 
						|
        rVal.players = new LinkedList<Player>();
 | 
						|
        rVal.serverDataCell = new ServerDataCell(new Scene());
 | 
						|
        rVal.serverDataCell.setReady(true);
 | 
						|
        rVal.parent = realm;
 | 
						|
        return rVal;
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public void addPlayerToRealm(Player player) {
 | 
						|
        players.add(player);
 | 
						|
        this.serverDataCell.addPlayer(player);
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public void movePlayer(Player player, Vector3i newPosition) {
 | 
						|
        //do nothing, only one data cell in the viewport manager
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public boolean updatePlayerPositions() {
 | 
						|
        //never moves to another cell
 | 
						|
        return false;
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public ServerDataCell getDataCellAtPoint(Vector3d point) {
 | 
						|
        return serverDataCell;
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public Vector3i getCellWorldPosition(ServerDataCell cell) {
 | 
						|
        return new Vector3i(0,0,0);
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public ServerDataCell tryCreateCellAtPoint(Vector3d point) {
 | 
						|
        return serverDataCell;
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public ServerDataCell getCellAtWorldPosition(Vector3i position) {
 | 
						|
        return serverDataCell;
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public void simulate() {
 | 
						|
        if(Globals.microSimulation != null && Globals.microSimulation.isReady()){
 | 
						|
            Globals.microSimulation.simulate(this.serverDataCell);
 | 
						|
        }
 | 
						|
        updatePlayerPositions();
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public void unloadPlayerlessChunks() {
 | 
						|
        //does nothing
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public void save(String saveName) {
 | 
						|
        //does nothing
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public Vector3d guaranteePositionIsInBounds(Vector3d positionToTest) {
 | 
						|
        Vector3d returnPos = new Vector3d(positionToTest);
 | 
						|
        if(positionToTest.x < parent.getServerWorldData().getWorldBoundMin().x){
 | 
						|
            returnPos.x = parent.getServerWorldData().getWorldBoundMin().x + 1;
 | 
						|
        }
 | 
						|
        if(positionToTest.x >= parent.getServerWorldData().getWorldBoundMax().x){
 | 
						|
            returnPos.x = parent.getServerWorldData().getWorldBoundMax().x - 1;
 | 
						|
        }
 | 
						|
        if(positionToTest.y < parent.getServerWorldData().getWorldBoundMin().y){
 | 
						|
            returnPos.y = parent.getServerWorldData().getWorldBoundMin().y + 1;
 | 
						|
        }
 | 
						|
        if(positionToTest.y >= parent.getServerWorldData().getWorldBoundMax().y){
 | 
						|
            returnPos.y = parent.getServerWorldData().getWorldBoundMax().y - 1;
 | 
						|
        }
 | 
						|
        if(positionToTest.z < parent.getServerWorldData().getWorldBoundMin().z){
 | 
						|
            returnPos.z = parent.getServerWorldData().getWorldBoundMin().z + 1;
 | 
						|
        }
 | 
						|
        if(positionToTest.z >= parent.getServerWorldData().getWorldBoundMax().z){
 | 
						|
            returnPos.z = parent.getServerWorldData().getWorldBoundMax().z - 1;
 | 
						|
        }
 | 
						|
        return returnPos;
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public void halt(){
 | 
						|
        //does nothing
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public Collection<Entity> entityLookup(Vector3d pos, double radius) {
 | 
						|
        List<Entity> rVal = new LinkedList<Entity>();
 | 
						|
        for(Entity entity : this.serverDataCell.getScene().getEntityList()){
 | 
						|
            // boundingSphere
 | 
						|
            Vector3d entPos = EntityUtils.getPosition(entity);
 | 
						|
            if(pos.distance(entPos) > radius){
 | 
						|
                continue;
 | 
						|
            }
 | 
						|
            rVal.add(entity);
 | 
						|
        }
 | 
						|
        return rVal;
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public Vector3d getMacroEntryPoint(Vector3d point) {
 | 
						|
        return new Vector3d();
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public void evaluateMacroObject(MacroObject object) {
 | 
						|
        throw new Error("ViewportDataCellManager does not support macro objects currently");
 | 
						|
    }
 | 
						|
 | 
						|
    @Override
 | 
						|
    public boolean containsCell(ServerDataCell cell) {
 | 
						|
        return cell == this.serverDataCell;
 | 
						|
    }
 | 
						|
    
 | 
						|
}
 |