Async logic framework, box2D dependencies
This commit is contained in:
55
core/src/mindustry/async/AsyncLogic.java
Normal file
55
core/src/mindustry/async/AsyncLogic.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
13
core/src/mindustry/async/AsyncProcess.java
Normal file
13
core/src/mindustry/async/AsyncProcess.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package mindustry.async;
|
||||
|
||||
public interface AsyncProcess{
|
||||
|
||||
/** Synchronous. Called at the beginning of the main loop. */
|
||||
void begin();
|
||||
|
||||
/** Async. Called in a separate thread. */
|
||||
void process();
|
||||
|
||||
/** Sync. Called in the end of the main loop. */
|
||||
void end();
|
||||
}
|
||||
19
core/src/mindustry/async/PhysicsProcess.java
Normal file
19
core/src/mindustry/async/PhysicsProcess.java
Normal file
@@ -0,0 +1,19 @@
|
||||
package mindustry.async;
|
||||
|
||||
public class PhysicsProcess implements AsyncProcess{
|
||||
|
||||
@Override
|
||||
public void begin(){
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void process(){
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void end(){
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user