mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-01-22 10:17:47 +07:00
Async logic framework, box2D dependencies
This commit is contained in:
parent
626a06ca00
commit
8de0ca7d6e
@ -167,6 +167,7 @@ project(":desktop"){
|
||||
|
||||
dependencies{
|
||||
compile project(":core")
|
||||
compile arcModule("natives:natives-box2d-desktop")
|
||||
compile arcModule("natives:natives-desktop")
|
||||
compile arcModule("natives:natives-freetype-desktop")
|
||||
|
||||
@ -248,6 +249,7 @@ project(":core"){
|
||||
compile "org.lz4:lz4-java:1.4.1"
|
||||
compile arcModule("arc-core")
|
||||
compile arcModule("extensions:freetype")
|
||||
compile arcModule("extensions:box2d")
|
||||
compile arcModule("extensions:g3d")
|
||||
compile arcModule("extensions:fx")
|
||||
compile arcModule("extensions:arcnet")
|
||||
|
@ -132,7 +132,11 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
||||
app.post(() -> app.post(() -> app.post(() -> app.post(() -> super.resize(graphics.getWidth(), graphics.getHeight())))));
|
||||
}
|
||||
}else{
|
||||
asyncLogic.begin();
|
||||
|
||||
super.update();
|
||||
|
||||
asyncLogic.end();
|
||||
}
|
||||
|
||||
int targetfps = Core.settings.getInt("fpscap", 120);
|
||||
|
@ -11,6 +11,7 @@ import arc.util.*;
|
||||
import arc.util.Log.*;
|
||||
import arc.util.io.*;
|
||||
import mindustry.ai.*;
|
||||
import mindustry.async.*;
|
||||
import mindustry.core.*;
|
||||
import mindustry.entities.*;
|
||||
import mindustry.game.*;
|
||||
@ -167,6 +168,7 @@ public class Vars implements Loadable{
|
||||
public static Mods mods;
|
||||
public static Schematics schematics = new Schematics();
|
||||
public static BeControl becontrol;
|
||||
public static AsyncLogic asyncLogic;
|
||||
|
||||
public static Universe universe;
|
||||
public static World world;
|
||||
@ -234,6 +236,7 @@ public class Vars implements Loadable{
|
||||
world = new World();
|
||||
universe = new Universe();
|
||||
becontrol = new BeControl();
|
||||
asyncLogic = new AsyncLogic();
|
||||
|
||||
maps = new Maps();
|
||||
spawner = new WaveSpawner();
|
||||
|
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(){
|
||||
|
||||
}
|
||||
}
|
@ -1,3 +1,3 @@
|
||||
org.gradle.daemon=true
|
||||
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
||||
archash=2d1ea50ebc73ce8d87b275727efb785fd3e95b84
|
||||
archash=7ef1821dfd7725c97d0dbcc6a6da5c96b1fbb4b2
|
||||
|
@ -37,6 +37,7 @@ if(!hasProperty("release")){
|
||||
':Arc:extensions:recorder',
|
||||
':Arc:extensions:arcnet',
|
||||
':Arc:extensions:packer',
|
||||
':Arc:extensions:box2d',
|
||||
':Arc:extensions:g3d',
|
||||
':Arc:extensions:fx',
|
||||
':Arc:natives',
|
||||
@ -46,6 +47,9 @@ if(!hasProperty("release")){
|
||||
':Arc:natives:natives-freetype-desktop',
|
||||
':Arc:natives:natives-freetype-android',
|
||||
':Arc:natives:natives-freetype-ios',
|
||||
':Arc:natives:natives-box2d-desktop',
|
||||
':Arc:natives:natives-box2d-android',
|
||||
//':Arc:natives:natives-box2d-ios', TODO
|
||||
':Arc:backends',
|
||||
':Arc:backends:backend-sdl',
|
||||
':Arc:backends:backend-android',
|
||||
|
Loading…
Reference in New Issue
Block a user