Async logic framework, box2D dependencies

This commit is contained in:
Anuken
2020-04-30 20:03:11 -04:00
parent 626a06ca00
commit 8de0ca7d6e
8 changed files with 101 additions and 1 deletions

View File

@ -0,0 +1,55 @@
package mindustry.async;
import arc.struct.*;
import java.util.concurrent.*;
public class AsyncLogic{
//all processes to be executed each frame
private Array<AsyncProcess> processes = Array.with(new PhysicsProcess());
//futures to be awaited
private Array<Future<?>> futures = new Array<>();
private ExecutorService executor = Executors.newFixedThreadPool(processes.size, r -> {
Thread thread = new Thread(r, "AsyncExecutor-Thread");
thread.setDaemon(true);
thread.setUncaughtExceptionHandler((t, e) -> {
e.printStackTrace();
//TODO crash!
});
return thread;
});
public void begin(){
//sync begin
for(AsyncProcess p : processes){
p.begin();
}
futures.clear();
//submit all tasks
for(AsyncProcess p : processes){
futures.add(executor.submit(p::process));
}
}
public void end(){
//wait for all threads to stop processing
for(Future future : futures){
try{
future.get();
}catch(Throwable t){
throw new RuntimeException(t);
}
}
futures.clear();
//sync end (flush data)
for(AsyncProcess p : processes){
p.end();
}
}
}