scaffolding structure scanning
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
This commit is contained in:
parent
66eb3a7586
commit
4a9d8a4f90
@ -1678,6 +1678,9 @@ Recipe adjustment + voxel work
|
|||||||
Recursive recipe item sourcing solver that keeps searching if a recipe fails to source
|
Recursive recipe item sourcing solver that keeps searching if a recipe fails to source
|
||||||
Block pathing work
|
Block pathing work
|
||||||
|
|
||||||
|
(05/05/2025)
|
||||||
|
Scaffolding for structure scanning service
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -85,6 +85,7 @@ import electrosphere.server.datacell.RealmManager;
|
|||||||
import electrosphere.server.db.DatabaseController;
|
import electrosphere.server.db.DatabaseController;
|
||||||
import electrosphere.server.entity.poseactor.PoseModel;
|
import electrosphere.server.entity.poseactor.PoseModel;
|
||||||
import electrosphere.server.saves.Save;
|
import electrosphere.server.saves.Save;
|
||||||
|
import electrosphere.server.service.StructureScanningService;
|
||||||
import electrosphere.server.simulation.MacroSimulation;
|
import electrosphere.server.simulation.MacroSimulation;
|
||||||
import electrosphere.server.simulation.MicroSimulation;
|
import electrosphere.server.simulation.MicroSimulation;
|
||||||
import electrosphere.util.FileUtils;
|
import electrosphere.util.FileUtils;
|
||||||
@ -388,6 +389,9 @@ public class Globals {
|
|||||||
|
|
||||||
//file service
|
//file service
|
||||||
public static FileWatcherService fileWatcherService;
|
public static FileWatcherService fileWatcherService;
|
||||||
|
|
||||||
|
//structure scanning service
|
||||||
|
public static StructureScanningService structureScanningService;
|
||||||
|
|
||||||
//collision world data
|
//collision world data
|
||||||
public static CollisionWorldData commonWorldData;
|
public static CollisionWorldData commonWorldData;
|
||||||
@ -548,20 +552,12 @@ public class Globals {
|
|||||||
Globals.scriptEngine = (ScriptEngine)serviceManager.registerService(new ScriptEngine());
|
Globals.scriptEngine = (ScriptEngine)serviceManager.registerService(new ScriptEngine());
|
||||||
Globals.mainThreadSignalService = (MainThreadSignalService)serviceManager.registerService(new MainThreadSignalService());
|
Globals.mainThreadSignalService = (MainThreadSignalService)serviceManager.registerService(new MainThreadSignalService());
|
||||||
Globals.fileWatcherService = (FileWatcherService)serviceManager.registerService(new FileWatcherService());
|
Globals.fileWatcherService = (FileWatcherService)serviceManager.registerService(new FileWatcherService());
|
||||||
|
Globals.structureScanningService = (StructureScanningService)serviceManager.registerService(new StructureScanningService());
|
||||||
serviceManager.instantiate();
|
serviceManager.instantiate();
|
||||||
//
|
//
|
||||||
//End service manager
|
//End service manager
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
//Register all signals
|
|
||||||
Globals.signalSystem.registerService(Globals.elementService);
|
|
||||||
Globals.signalSystem.registerService(Globals.particleService);
|
|
||||||
Globals.signalSystem.registerService(Globals.scriptEngine);
|
|
||||||
Globals.signalSystem.registerService(Globals.mainThreadSignalService);
|
|
||||||
Globals.signalSystem.registerService(Globals.fileWatcherService);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -3,6 +3,8 @@ package electrosphere.engine.service;
|
|||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import electrosphere.engine.Globals;
|
||||||
|
import electrosphere.engine.signal.SignalService;
|
||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -42,6 +44,11 @@ public class ServiceManager {
|
|||||||
LoggerInterface.loggerEngine.DEBUG("[ServiceManager] Instantiate service " + service.getName());
|
LoggerInterface.loggerEngine.DEBUG("[ServiceManager] Instantiate service " + service.getName());
|
||||||
service.init();
|
service.init();
|
||||||
}
|
}
|
||||||
|
for(Service service : trackedServices){
|
||||||
|
if(service instanceof SignalService){
|
||||||
|
Globals.signalSystem.registerService((SignalService)service);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -37,6 +37,10 @@ public class MainServerFunctions {
|
|||||||
//Update AI
|
//Update AI
|
||||||
Globals.aiManager.simulate();
|
Globals.aiManager.simulate();
|
||||||
|
|
||||||
|
//
|
||||||
|
//Services
|
||||||
|
MainServerFunctions.simulateServices();
|
||||||
|
|
||||||
//
|
//
|
||||||
//Micro simulation (ie simulating each scene on the server)
|
//Micro simulation (ie simulating each scene on the server)
|
||||||
Globals.profiler.beginCpuSample("MainServerFunctions.simulate - Server micro simulation");
|
Globals.profiler.beginCpuSample("MainServerFunctions.simulate - Server micro simulation");
|
||||||
@ -57,5 +61,12 @@ public class MainServerFunctions {
|
|||||||
|
|
||||||
Globals.profiler.endCpuSample();
|
Globals.profiler.endCpuSample();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simulates server services
|
||||||
|
*/
|
||||||
|
private static void simulateServices(){
|
||||||
|
Globals.structureScanningService.simulate();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,88 @@
|
|||||||
|
package electrosphere.server.service;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.joml.Vector3d;
|
||||||
|
|
||||||
|
import electrosphere.engine.signal.Signal.SignalType;
|
||||||
|
import electrosphere.engine.Globals;
|
||||||
|
import electrosphere.engine.signal.SignalServiceImpl;
|
||||||
|
import electrosphere.net.server.player.Player;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Service that scans areas where players are placing blocks to see if they have formed a complete structure or not
|
||||||
|
*/
|
||||||
|
public class StructureScanningService extends SignalServiceImpl {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Number of frames to offset jobs by
|
||||||
|
*/
|
||||||
|
static final int FRAME_OFFSET_FOR_JOBS = 50;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map of players to the jobs that are scheduled for them
|
||||||
|
*/
|
||||||
|
Map<Player,ScanningJob> playerTimeoutMap = new HashMap<Player,ScanningJob>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*/
|
||||||
|
public StructureScanningService(){
|
||||||
|
super("StructureScanningService", new SignalType[]{
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Queues a job to scan a player's construction to see if it is a structure
|
||||||
|
* @param player The player
|
||||||
|
* @param position The position
|
||||||
|
*/
|
||||||
|
public void queue(Player player, Vector3d position){
|
||||||
|
ScanningJob existing = this.playerTimeoutMap.get(player);
|
||||||
|
if(existing == null){
|
||||||
|
existing = new ScanningJob(Globals.timekeeper.getNumberOfRenderFramesElapsed() + StructureScanningService.FRAME_OFFSET_FOR_JOBS, position);
|
||||||
|
} else {
|
||||||
|
//debounce
|
||||||
|
existing.targetFrame = Globals.timekeeper.getNumberOfRenderFramesElapsed() + StructureScanningService.FRAME_OFFSET_FOR_JOBS;
|
||||||
|
existing.position = position;
|
||||||
|
}
|
||||||
|
this.playerTimeoutMap.put(player,existing);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simulates the service
|
||||||
|
*/
|
||||||
|
public void simulate(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A job to scan a region
|
||||||
|
*/
|
||||||
|
static class ScanningJob {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Frame to perform this job
|
||||||
|
*/
|
||||||
|
long targetFrame;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The position to begin scanning from
|
||||||
|
*/
|
||||||
|
Vector3d position;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
* @param targetFrame
|
||||||
|
* @param position
|
||||||
|
*/
|
||||||
|
public ScanningJob(long targetFrame, Vector3d position){
|
||||||
|
this.targetFrame = targetFrame;
|
||||||
|
this.position = position;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user