Removed old libraries

This commit is contained in:
Andrea Cavalli 2019-11-01 15:23:34 +01:00
parent 8e11197368
commit da387d1165
29 changed files with 263 additions and 128 deletions

3
.gitmodules vendored
View File

@ -1,6 +1,3 @@
[submodule "Flow"]
path = Flow
url = https://github.com/Cavallium/Flow
[submodule "bigdecimal-math"] [submodule "bigdecimal-math"]
path = bigdecimal-math path = bigdecimal-math
url = https://github.com/Cavallium/bigdecimal-math url = https://github.com/Cavallium/bigdecimal-math

1
Flow

@ -1 +0,0 @@
Subproject commit 92db616ef508f16fe30e8e37d17d7d7a18f56f4a

@ -1 +1 @@
Subproject commit 40d89e539223aaa9202326833a2c813bed3c6eef Subproject commit da70aa7ba3bcae0e2e76fde338c56696ff25ea96

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi</artifactId> <artifactId>warppi</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</parent> </parent>
<artifactId>warppi-core</artifactId> <artifactId>warppi-core</artifactId>
@ -14,20 +14,15 @@
<description>WarpPI Calculator core project</description> <description>WarpPI Calculator core project</description>
<dependencies> <dependencies>
<dependency>
<groupId>it.cavallium</groupId>
<artifactId>warppi-flow</artifactId>
<version>1.0.1</version>
</dependency>
<dependency> <dependency>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi-util</artifactId> <artifactId>warppi-util</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>bigdecimal-math</artifactId> <artifactId>bigdecimal-math</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>it.unimi.dsi</groupId> <groupId>it.unimi.dsi</groupId>

View File

@ -8,20 +8,19 @@ import it.cavallium.warppi.device.HardwareDevice;
import it.cavallium.warppi.device.HardwareTouchDevice; import it.cavallium.warppi.device.HardwareTouchDevice;
import it.cavallium.warppi.device.InputManager; import it.cavallium.warppi.device.InputManager;
import it.cavallium.warppi.device.Keyboard; import it.cavallium.warppi.device.Keyboard;
import it.cavallium.warppi.flow.BehaviorSubject;
import it.cavallium.warppi.flow.Observable;
import it.cavallium.warppi.gui.DisplayManager; import it.cavallium.warppi.gui.DisplayManager;
import it.cavallium.warppi.gui.HUD; import it.cavallium.warppi.gui.HUD;
import it.cavallium.warppi.gui.HardwareDisplay; import it.cavallium.warppi.gui.HardwareDisplay;
import it.cavallium.warppi.gui.screens.Screen; import it.cavallium.warppi.gui.screens.Screen;
import it.cavallium.warppi.util.ClassUtils; import it.cavallium.warppi.util.ClassUtils;
import it.cavallium.warppi.util.EventSubmitter;
public class Engine { public class Engine {
public static final Engine INSTANCE = new Engine(); public static final Engine INSTANCE = new Engine();
private static Platform platform; private static Platform platform;
private static boolean running = false; private static boolean running = false;
private static BehaviorSubject<LoadingStatus> loadPhase = BehaviorSubject.create(); private static EventSubmitter<LoadingStatus> loadPhase = new EventSubmitter<>();
private final BehaviorSubject<Boolean> loaded = BehaviorSubject.create(false); private final EventSubmitter<Boolean> loaded = new EventSubmitter<>(false);
private HardwareDevice hardwareDevice; private HardwareDevice hardwareDevice;
private Engine() {} private Engine() {}
@ -43,8 +42,8 @@ public class Engine {
* @throws IOException * @throws IOException
*/ */
public static void start(final Platform platform, final Screen screen, final HardwareDisplay disp, public static void start(final Platform platform, final Screen screen, final HardwareDisplay disp,
final HardwareTouchDevice touchdevice, final HUD hud, final StartupArguments args) final HardwareTouchDevice touchdevice, final HUD hud, final StartupArguments args)
throws InterruptedException, IOException { throws InterruptedException, IOException {
if (Engine.running) { if (Engine.running) {
throw new RuntimeException("Already running!"); throw new RuntimeException("Already running!");
} else { } else {
@ -54,8 +53,8 @@ public class Engine {
} }
private void startInstance(final Platform platform, final Screen screen, final HardwareDisplay disp, private void startInstance(final Platform platform, final Screen screen, final HardwareDisplay disp,
final HardwareTouchDevice touchdevice, final HUD hud, final StartupArguments args) final HardwareTouchDevice touchdevice, final HUD hud, final StartupArguments args)
throws InterruptedException, IOException { throws InterruptedException, IOException {
Engine.platform = platform; Engine.platform = platform;
platform.getConsoleUtils().out().println("WarpPI Calculator"); platform.getConsoleUtils().out().println("WarpPI Calculator");
initializeEnvironment(args); initializeEnvironment(args);
@ -69,7 +68,7 @@ public class Engine {
final InputManager im = new InputManager(k, touchdevice); final InputManager im = new InputManager(k, touchdevice);
hardwareDevice = new HardwareDevice(dm, im); hardwareDevice = new HardwareDevice(dm, im);
hardwareDevice.setup(() -> Engine.loadPhase.onNext(new LoadingStatus())); hardwareDevice.setup(() -> Engine.loadPhase.submit(new LoadingStatus()));
} }
private void onShutdown() { private void onShutdown() {
@ -112,11 +111,11 @@ public class Engine {
Keyboard.stopKeyboard(); Keyboard.stopKeyboard();
} }
public Observable<Boolean> isLoaded() { public EventSubmitter<Boolean> isLoaded() {
return loaded; return loaded;
} }
public Observable<LoadingStatus> getLoadPhase() { public EventSubmitter<LoadingStatus> getLoadPhase() {
return Engine.loadPhase; return Engine.loadPhase;
} }
@ -134,7 +133,7 @@ public class Engine {
} }
public void done() { public void done() {
Engine.INSTANCE.loaded.onNext(true); Engine.INSTANCE.loaded.submit(true);
Engine.INSTANCE.hardwareDevice.getDisplayManager().waitForExit(); Engine.INSTANCE.hardwareDevice.getDisplayManager().waitForExit();
Engine.INSTANCE.onShutdown(); Engine.INSTANCE.onShutdown();
} }

View File

@ -3,8 +3,7 @@ package it.cavallium.warppi;
import java.util.function.Function; import java.util.function.Function;
import it.cavallium.warppi.boot.StartupArguments; import it.cavallium.warppi.boot.StartupArguments;
import it.cavallium.warppi.flow.BehaviorSubject; import it.cavallium.warppi.util.EventSubmitter;
import it.cavallium.warppi.flow.Observable;
/* /*
* TODO: Move everything to Engine.Settings * TODO: Move everything to Engine.Settings
@ -15,7 +14,7 @@ public class StaticVars {
public static final int[] screenSize = new int[] { 480, 320 }; public static final int[] screenSize = new int[] { 480, 320 };
public static int outputLevel = 0; public static int outputLevel = 0;
public static boolean debugWindow2x = false; public static boolean debugWindow2x = false;
public static BehaviorSubject<Float> windowZoom = BehaviorSubject.create(2F); public static EventSubmitter<Float> windowZoom = new EventSubmitter<>(2F);
public static Function<Float, Float> windowZoomFunction = (val) -> { public static Function<Float, Float> windowZoomFunction = (val) -> {
if (StaticVars.debugWindow2x) { if (StaticVars.debugWindow2x) {
return val + 1; return val + 1;
@ -23,7 +22,7 @@ public class StaticVars {
return val; return val;
} }
}; };
public static Observable<Float> windowZoom$ = StaticVars.windowZoom.map(StaticVars.windowZoomFunction); public static EventSubmitter<Float> windowZoom$ = StaticVars.windowZoom.map(StaticVars.windowZoomFunction);
public static StartupArguments startupArguments; public static StartupArguments startupArguments;
private StaticVars() { private StaticVars() {

View File

@ -941,7 +941,7 @@ public class Keyboard {
break; break;
case ZOOM_MODE: case ZOOM_MODE:
final float newZoom = StaticVars.windowZoom.getLastValue() % 3 + 1; final float newZoom = StaticVars.windowZoom.getLastValue() % 3 + 1;
StaticVars.windowZoom.onNext(newZoom); StaticVars.windowZoom.submit(newZoom);
Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, "Keyboard", "Zoom: " + newZoom); Engine.getPlatform().getConsoleUtils().out().println(ConsoleUtils.OUTPUTLEVEL_DEBUG_MIN, "Keyboard", "Zoom: " + newZoom);
// StaticVars.windowZoom = ((StaticVars.windowZoom - 0.5f) % 2f) + 1f; // StaticVars.windowZoom = ((StaticVars.windowZoom - 0.5f) % 2f) + 1f;
refresh = true; refresh = true;

View File

@ -43,7 +43,7 @@ public class TetrisScreen extends Screen {
@Override @Override
public void initialized() { public void initialized() {
StaticVars.windowZoom.onNext(2f); StaticVars.windowZoom.submit(2f);
} }
@Override @Override

View File

@ -10,8 +10,6 @@ import it.cavallium.warppi.Platform.ConsoleUtils;
import it.cavallium.warppi.Platform.Semaphore; import it.cavallium.warppi.Platform.Semaphore;
import it.cavallium.warppi.StaticVars; import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.device.Keyboard; import it.cavallium.warppi.device.Keyboard;
import it.cavallium.warppi.flow.Observable;
import it.cavallium.warppi.flow.Pair;
import it.cavallium.warppi.gui.graphicengine.BinaryFont; import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine; import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer; import it.cavallium.warppi.gui.graphicengine.Renderer;
@ -19,6 +17,7 @@ import it.cavallium.warppi.gui.graphicengine.RenderingLoop;
import it.cavallium.warppi.gui.graphicengine.Skin; import it.cavallium.warppi.gui.graphicengine.Skin;
import it.cavallium.warppi.gui.graphicengine.impl.nogui.NoGuiEngine; import it.cavallium.warppi.gui.graphicengine.impl.nogui.NoGuiEngine;
import it.cavallium.warppi.gui.screens.Screen; import it.cavallium.warppi.gui.screens.Screen;
import it.cavallium.warppi.util.Timer;
import it.cavallium.warppi.util.Utils; import it.cavallium.warppi.util.Utils;
import it.unimi.dsi.fastutil.objects.ObjectArrayList; import it.unimi.dsi.fastutil.objects.ObjectArrayList;
@ -459,34 +458,9 @@ public final class DisplayManager implements RenderingLoop {
Engine.getPlatform().exit(0); Engine.getPlatform().exit(0);
} }
final Observable<Long> workTimer = Observable.interval(DisplayManager.tickDuration); var displayRefreshManager = new DisplayRefreshManager(this::onRefresh);
new Timer(DisplayManager.tickDuration, displayRefreshManager::onTick);
final Observable<Integer[]> onResizeObservable = engine.onResize(); engine.onResize().subscribe(displayRefreshManager::onResize);
Observable<Pair<Long, Integer[]>> refreshObservable;
if (onResizeObservable == null) {
refreshObservable = workTimer.map((l) -> Pair.of(l, null));
} else {
refreshObservable = Observable.combineChanged(workTimer, engine.onResize());
}
refreshObservable.subscribe((pair) -> {
double dt = 0;
final long newtime = System.nanoTime();
if (precTime == -1) {
dt = DisplayManager.tickDuration;
} else {
dt = (newtime - precTime) / 1000d / 1000d;
}
precTime = newtime;
if (pair.getRight() != null) {
final Integer[] windowSize = pair.getRight();
StaticVars.screenSize[0] = windowSize[0];
StaticVars.screenSize[1] = windowSize[1];
}
screen.beforeRender((float) (dt / 1000d));
});
engine.start(getDrawable()); engine.start(getDrawable());
} catch (final Exception ex) { } catch (final Exception ex) {
@ -495,6 +469,24 @@ public final class DisplayManager implements RenderingLoop {
} }
} }
private void onRefresh(Integer[] windowSize) {
double dt = 0;
final long newtime = System.nanoTime();
if (precTime == -1) {
dt = DisplayManager.tickDuration;
} else {
dt = (newtime - precTime) / 1000d / 1000d;
}
precTime = newtime;
if (windowSize != null) {
StaticVars.screenSize[0] = windowSize[0];
StaticVars.screenSize[1] = windowSize[1];
}
screen.beforeRender((float) (dt / 1000d));
}
public void changeBrightness(final float change) { public void changeBrightness(final float change) {
setBrightness(brightness + change); setBrightness(brightness + change);
} }

View File

@ -0,0 +1,33 @@
package it.cavallium.warppi.gui;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
public class DisplayRefreshManager {
private final Consumer<Integer[]> refreshConsumer;
private AtomicBoolean ticked = new AtomicBoolean(false);
private AtomicBoolean sizeSet = new AtomicBoolean(false);
private volatile Integer[] size;
public DisplayRefreshManager(Consumer<Integer[]> refreshConsumer) {
this.refreshConsumer = refreshConsumer;
}
public void onTick() {
ticked.set(true);
refreshIfNeeded();
}
public void onResize(Integer[] newSize) {
size = newSize;
sizeSet.set(true);
refreshIfNeeded();
}
private void refreshIfNeeded() {
if (ticked.get() && sizeSet.get()) {
refreshConsumer.accept(size);
}
}
}

View File

@ -1,9 +1,10 @@
package it.cavallium.warppi.gui.graphicengine; package it.cavallium.warppi.gui.graphicengine;
import it.cavallium.warppi.util.EventSubscriber;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.function.Consumer;
import it.cavallium.warppi.flow.Observable;
public interface GraphicEngine { public interface GraphicEngine {
@ -23,7 +24,7 @@ public interface GraphicEngine {
void create(Runnable object); void create(Runnable object);
Observable<Integer[]> onResize(); EventSubscriber<Integer[]> onResize();
int getWidth(); int getWidth();

View File

@ -4,12 +4,13 @@ import java.io.IOException;
import it.cavallium.warppi.Engine; import it.cavallium.warppi.Engine;
import it.cavallium.warppi.Platform.Semaphore; import it.cavallium.warppi.Platform.Semaphore;
import it.cavallium.warppi.flow.Observable;
import it.cavallium.warppi.gui.graphicengine.BinaryFont; import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine; import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Renderer; import it.cavallium.warppi.gui.graphicengine.Renderer;
import it.cavallium.warppi.gui.graphicengine.RenderingLoop; import it.cavallium.warppi.gui.graphicengine.RenderingLoop;
import it.cavallium.warppi.gui.graphicengine.Skin; import it.cavallium.warppi.gui.graphicengine.Skin;
import it.cavallium.warppi.util.EventSubmitter;
import it.cavallium.warppi.util.EventSubscriber;
public class NoGuiEngine implements GraphicEngine { public class NoGuiEngine implements GraphicEngine {
@ -44,7 +45,7 @@ public class NoGuiEngine implements GraphicEngine {
} }
@Override @Override
public Observable<Integer[]> onResize() { public EventSubscriber<Integer[]> onResize() {
return null; return null;
} }

View File

@ -31,7 +31,7 @@ public class LoadingScreen extends Screen {
public void initialized() throws InterruptedException { public void initialized() throws InterruptedException {
previousZoomValue = StaticVars.windowZoomFunction.apply(StaticVars.windowZoom.getLastValue()); previousZoomValue = StaticVars.windowZoomFunction.apply(StaticVars.windowZoom.getLastValue());
Engine.INSTANCE.getHardwareDevice().getDisplayManager().getHUD().hide(); Engine.INSTANCE.getHardwareDevice().getDisplayManager().getHUD().hide();
StaticVars.windowZoom.onNext(1f); StaticVars.windowZoom.submit(1f);
} }
@Override @Override
@ -44,7 +44,7 @@ public class LoadingScreen extends Screen {
endLoading += dt; endLoading += dt;
if (!ended && loaded && (Engine.getPlatform().getSettings().isDebugEnabled() || endLoading >= 3.5f)) { if (!ended && loaded && (Engine.getPlatform().getSettings().isDebugEnabled() || endLoading >= 3.5f)) {
ended = true; ended = true;
StaticVars.windowZoom.onNext(previousZoomValue); StaticVars.windowZoom.submit(previousZoomValue);
Engine.INSTANCE.getHardwareDevice().getDisplayManager().getHUD().show(); Engine.INSTANCE.getHardwareDevice().getDisplayManager().getHUD().show();
Engine.INSTANCE.getHardwareDevice().getDisplayManager().setScreen(new MathInputScreen()); Engine.INSTANCE.getHardwareDevice().getDisplayManager().setScreen(new MathInputScreen());
} }

View File

@ -0,0 +1,64 @@
package it.cavallium.warppi.util;
import java.util.LinkedList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Function;
public class EventSubmitter<T> implements EventSubscriber<T>, Submitter<T> {
private boolean initialized = false;
private T value;
private List<Consumer<T>> subscribers = new LinkedList<>();
public EventSubmitter() {
value = null;
}
public EventSubmitter(T defaultValue) {
this.value = defaultValue;
this.initialized = true;
}
public static <T> EventSubmitter<T> create() {
return new EventSubmitter<>();
}
public static <T> EventSubmitter<T> create(T value) {
return new EventSubmitter<>(value);
}
@Override
public T getLastValue() {
return value;
}
@Override
public void subscribe(Consumer<T> action) {
T currentValue = value;
var newSubscribers = new LinkedList<>(subscribers);
if (initialized) {
action.accept(currentValue);
}
newSubscribers.add(action);
subscribers = newSubscribers;
}
@Override
public void submit(T value) {
this.value = value;
this.initialized = true;
for (Consumer<T> subscriber : subscribers) {
subscriber.accept(value);
}
}
@Override
public <U> EventSubmitter<U> map(Function<T, U> mapFunction) {
var eventSubmitter = new EventSubmitter<U>();
map(eventSubmitter, mapFunction);
return eventSubmitter;
}
}

View File

@ -0,0 +1,31 @@
package it.cavallium.warppi.util;
import java.util.function.Consumer;
import java.util.function.Function;
public interface EventSubscriber<T> {
/**
*
* @return Last value, or null
*/
T getLastValue();
void subscribe(Consumer<T> action);
default <U> EventSubscriber<U> map(Function<T, U> mapFunction) {
var eventSubmitter = new EventSubmitter<U>();
map(this, eventSubmitter, mapFunction);
return eventSubmitter;
}
default <U> void map(EventSubmitter<U> targetHandler, Function<T, U> mapFunction) {
map(this, targetHandler, mapFunction);
}
static <T, U> void map(EventSubscriber<T> originalEventHandler, EventSubmitter<U> mappedEventHandler, Function<T, U> mapFunction) {
originalEventHandler.subscribe((value) -> {
mappedEventHandler.submit(mapFunction.apply(value));
});
}
}

View File

@ -0,0 +1,5 @@
package it.cavallium.warppi.util;
public interface Submitter<T> {
void submit(T value);
}

View File

@ -0,0 +1,31 @@
package it.cavallium.warppi.util;
import it.cavallium.warppi.Engine;
import java.util.concurrent.atomic.AtomicLong;
public class Timer {
public Timer(int intervalMillis, Runnable action) {
var thread = new Thread(() -> {
try {
AtomicLong lostTime = new AtomicLong();
while (!Thread.interrupted()) {
var time1 = System.currentTimeMillis();
action.run();
var time2 = System.currentTimeMillis();
var deltaTime = time2 - time1 + lostTime.get();
if (intervalMillis - deltaTime > 0) {
Thread.sleep(intervalMillis);
} else {
lostTime.set(deltaTime - intervalMillis);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
});
Engine.getPlatform().setThreadName(thread, "Timer");
thread.setDaemon(true);
thread.start();
}
}

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi</artifactId> <artifactId>warppi</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</parent> </parent>
<artifactId>warppi-desktop</artifactId> <artifactId>warppi-desktop</artifactId>
@ -16,12 +16,12 @@
<dependency> <dependency>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi-core</artifactId> <artifactId>warppi-core</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi-engine-jogl</artifactId> <artifactId>warppi-engine-jogl</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.fusesource.jansi</groupId> <groupId>org.fusesource.jansi</groupId>

View File

@ -7,11 +7,11 @@ import java.util.concurrent.Semaphore;
import it.cavallium.warppi.Engine; import it.cavallium.warppi.Engine;
import it.cavallium.warppi.StaticVars; import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.flow.Observable;
import it.cavallium.warppi.gui.graphicengine.BinaryFont; import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine; import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.RenderingLoop; import it.cavallium.warppi.gui.graphicengine.RenderingLoop;
import it.cavallium.warppi.gui.graphicengine.Skin; import it.cavallium.warppi.gui.graphicengine.Skin;
import it.cavallium.warppi.util.EventSubmitter;
public class SwingEngine implements GraphicEngine { public class SwingEngine implements GraphicEngine {
@ -62,7 +62,7 @@ public class SwingEngine implements GraphicEngine {
} }
@Override @Override
public Observable<Integer[]> onResize() { public EventSubmitter<Integer[]> onResize() {
return INSTANCE.onResize(); return INSTANCE.onResize();
} }

View File

@ -34,9 +34,8 @@ import it.cavallium.warppi.event.TouchEndEvent;
import it.cavallium.warppi.event.TouchMoveEvent; import it.cavallium.warppi.event.TouchMoveEvent;
import it.cavallium.warppi.event.TouchPoint; import it.cavallium.warppi.event.TouchPoint;
import it.cavallium.warppi.event.TouchStartEvent; import it.cavallium.warppi.event.TouchStartEvent;
import it.cavallium.warppi.flow.BehaviorSubject;
import it.cavallium.warppi.flow.Observable;
import it.cavallium.warppi.gui.graphicengine.RenderingLoop; import it.cavallium.warppi.gui.graphicengine.RenderingLoop;
import it.cavallium.warppi.util.EventSubmitter;
import it.unimi.dsi.fastutil.objects.ObjectArrayList; import it.unimi.dsi.fastutil.objects.ObjectArrayList;
public class SwingWindow extends JFrame { public class SwingWindow extends JFrame {
@ -45,8 +44,8 @@ public class SwingWindow extends JFrame {
private RenderingLoop renderingLoop; private RenderingLoop renderingLoop;
private final SwingEngine display; private final SwingEngine display;
private int mult = 1; private int mult = 1;
private final BehaviorSubject<Integer[]> onResize; private final EventSubmitter<Integer[]> onResize;
private final Observable<Integer[]> onResize$; private final EventSubmitter<Integer[]> onResize$;
public JPanel buttonsPanel; public JPanel buttonsPanel;
private SwingAdvancedButton[][] buttons; private SwingAdvancedButton[][] buttons;
private int BTN_SIZE; private int BTN_SIZE;
@ -82,8 +81,8 @@ public class SwingWindow extends JFrame {
setTitle("WarpPI Calculator by Andrea Cavalli (@Cavallium)"); setTitle("WarpPI Calculator by Andrea Cavalli (@Cavallium)");
onResize = BehaviorSubject.create(); onResize = EventSubmitter.create();
onResize$ = onResize.doOnNext((newSize) -> { onResize$ = onResize.map((newSize) -> {
disp.r.size = new int[] { newSize[0], newSize[1] }; disp.r.size = new int[] { newSize[0], newSize[1] };
if (disp.r.size[0] <= 0) if (disp.r.size[0] <= 0)
disp.r.size[0] = 1; disp.r.size[0] = 1;
@ -91,6 +90,8 @@ public class SwingWindow extends JFrame {
disp.r.size[1] = 1; disp.r.size[1] = 1;
SwingRenderer.canvas2d = new int[disp.r.size[0] * disp.r.size[1]]; SwingRenderer.canvas2d = new int[disp.r.size[0] * disp.r.size[1]];
disp.g = new BufferedImage(disp.r.size[0], disp.r.size[1], BufferedImage.TYPE_INT_RGB); disp.g = new BufferedImage(disp.r.size[0], disp.r.size[1], BufferedImage.TYPE_INT_RGB);
return newSize;
}); });
addComponentListener(new ComponentListener() { addComponentListener(new ComponentListener() {
@ -104,7 +105,7 @@ public class SwingWindow extends JFrame {
@Override @Override
public void componentResized(final ComponentEvent e) { public void componentResized(final ComponentEvent e) {
onResize.onNext(new Integer[] { c.getWidth() / mult, c.getHeight() / mult }); onResize.submit(new Integer[] { c.getWidth() / mult, c.getHeight() / mult });
} }
@Override @Override
@ -184,7 +185,7 @@ public class SwingWindow extends JFrame {
StaticVars.windowZoom$.subscribe((newZoomValue) -> { StaticVars.windowZoom$.subscribe((newZoomValue) -> {
if (newZoomValue != mult) { if (newZoomValue != mult) {
mult = (int) newZoomValue.floatValue(); mult = (int) newZoomValue.floatValue();
onResize.onNext(new Integer[] { getWWidth(), getWHeight() }); onResize.submit(new Integer[] { getWWidth(), getWHeight() });
Engine.getPlatform().getConsoleUtils().out().println(3, "Engine", "CPU", "Zoom changed"); Engine.getPlatform().getConsoleUtils().out().println(3, "Engine", "CPU", "Zoom changed");
} }
}); });
@ -323,7 +324,7 @@ public class SwingWindow extends JFrame {
} }
} }
public Observable<Integer[]> onResize() { public EventSubmitter<Integer[]> onResize() {
return onResize$; return onResize$;
} }

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi</artifactId> <artifactId>warppi</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</parent> </parent>
<artifactId>warppi-engine-jogl</artifactId> <artifactId>warppi-engine-jogl</artifactId>
@ -16,7 +16,7 @@
<dependency> <dependency>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi-core</artifactId> <artifactId>warppi-core</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.jogamp.jogl</groupId> <groupId>org.jogamp.jogl</groupId>

View File

@ -13,11 +13,11 @@ import com.jogamp.opengl.util.texture.Texture;
import it.cavallium.warppi.Engine; import it.cavallium.warppi.Engine;
import it.cavallium.warppi.StaticVars; import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.flow.Observable;
import it.cavallium.warppi.gui.graphicengine.BinaryFont; import it.cavallium.warppi.gui.graphicengine.BinaryFont;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine; import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.RenderingLoop; import it.cavallium.warppi.gui.graphicengine.RenderingLoop;
import it.cavallium.warppi.gui.graphicengine.Skin; import it.cavallium.warppi.gui.graphicengine.Skin;
import it.cavallium.warppi.util.EventSubscriber;
public class JOGLEngine implements GraphicEngine { public class JOGLEngine implements GraphicEngine {
@ -85,7 +85,7 @@ public class JOGLEngine implements GraphicEngine {
} }
@Override @Override
public Observable<Integer[]> onResize() { public EventSubscriber<Integer[]> onResize() {
return wnd.onResizeEvent; return wnd.onResizeEvent;
} }

View File

@ -58,10 +58,8 @@ import it.cavallium.warppi.event.TouchEndEvent;
import it.cavallium.warppi.event.TouchMoveEvent; import it.cavallium.warppi.event.TouchMoveEvent;
import it.cavallium.warppi.event.TouchPoint; import it.cavallium.warppi.event.TouchPoint;
import it.cavallium.warppi.event.TouchStartEvent; import it.cavallium.warppi.event.TouchStartEvent;
import it.cavallium.warppi.flow.BehaviorSubject;
import it.cavallium.warppi.flow.SimpleSubject;
import it.cavallium.warppi.flow.Subject;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine; import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.util.EventSubmitter;
import it.unimi.dsi.fastutil.objects.ObjectArrayList; import it.unimi.dsi.fastutil.objects.ObjectArrayList;
/** /**
@ -81,10 +79,10 @@ class NEWTWindow implements GLEventListener {
public volatile boolean refreshViewport; public volatile boolean refreshViewport;
public List<TouchPoint> touches = new ObjectArrayList<>(); public List<TouchPoint> touches = new ObjectArrayList<>();
final BehaviorSubject<Integer[]> onRealResize; final EventSubmitter<Integer[]> onRealResize;
final BehaviorSubject<Integer[]> onResizeEvent = BehaviorSubject.create(); final EventSubmitter<Integer[]> onResizeEvent = EventSubmitter.create();
private final BehaviorSubject<Float> onZoom = BehaviorSubject.create(); private final EventSubmitter<Float> onZoom = EventSubmitter.create();
private final Subject<GL2ES1> onGLContext = SimpleSubject.create(); private final EventSubmitter<GL2ES1> onGLContext = EventSubmitter.create();
public NEWTWindow(final JOGLEngine disp) { public NEWTWindow(final JOGLEngine disp) {
this.disp = disp; this.disp = disp;
@ -93,18 +91,18 @@ class NEWTWindow implements GLEventListener {
disp.size[1] = StaticVars.screenSize[1]; disp.size[1] = StaticVars.screenSize[1];
realWindowSize = new int[] { StaticVars.screenSize[0], StaticVars.screenSize[1] }; realWindowSize = new int[] { StaticVars.screenSize[0], StaticVars.screenSize[1] };
windowZoom = StaticVars.windowZoomFunction.apply(StaticVars.windowZoom.getLastValue()); windowZoom = StaticVars.windowZoomFunction.apply(StaticVars.windowZoom.getLastValue());
onRealResize = BehaviorSubject.create(new Integer[] { (int) (StaticVars.screenSize[0] * windowZoom), (int) (StaticVars.screenSize[1] * windowZoom) }); onRealResize = EventSubmitter.create(new Integer[] { (int) (StaticVars.screenSize[0] * windowZoom), (int) (StaticVars.screenSize[1] * windowZoom) });
onRealResize.subscribe((realSize) -> { onRealResize.subscribe((realSize) -> {
realWindowSize[0] = realSize[0]; realWindowSize[0] = realSize[0];
realWindowSize[1] = realSize[1]; realWindowSize[1] = realSize[1];
disp.size[0] = realSize[0] / (int) windowZoom; disp.size[0] = realSize[0] / (int) windowZoom;
disp.size[1] = realSize[1] / (int) windowZoom; disp.size[1] = realSize[1] / (int) windowZoom;
onResizeEvent.onNext(new Integer[] { disp.size[0], disp.size[1] }); onResizeEvent.submit(new Integer[] { disp.size[0], disp.size[1] });
refreshViewport = true; refreshViewport = true;
}); });
StaticVars.windowZoom$.subscribe((zoom) -> { StaticVars.windowZoom$.subscribe((zoom) -> {
onZoom.onNext(zoom); onZoom.submit(zoom);
}); });
onZoom.subscribe((z) -> { onZoom.subscribe((z) -> {
if (windowZoom != 0) { if (windowZoom != 0) {
@ -432,7 +430,7 @@ class NEWTWindow implements GLEventListener {
@Override @Override
public void init(final GLAutoDrawable drawable) { public void init(final GLAutoDrawable drawable) {
final GL2ES1 gl = drawable.getGL().getGL2ES1(); final GL2ES1 gl = drawable.getGL().getGL2ES1();
onGLContext.onNext(gl); onGLContext.submit(gl);
if (Engine.getPlatform().getSettings().isDebugEnabled()) if (Engine.getPlatform().getSettings().isDebugEnabled())
//Vsync //Vsync
@ -472,14 +470,14 @@ class NEWTWindow implements GLEventListener {
@Override @Override
public void reshape(final GLAutoDrawable glad, final int x, final int y, final int width, final int height) { public void reshape(final GLAutoDrawable glad, final int x, final int y, final int width, final int height) {
onRealResize.onNext(new Integer[] { width, height }); onRealResize.submit(new Integer[] { width, height });
} }
@Override @Override
public void display(final GLAutoDrawable glad) { public void display(final GLAutoDrawable glad) {
final GL2ES1 gl = glad.getGL().getGL2ES1(); final GL2ES1 gl = glad.getGL().getGL2ES1();
JOGLRenderer.gl = gl; JOGLRenderer.gl = gl;
onGLContext.onNext(gl); onGLContext.submit(gl);
final boolean linear = windowZoom % (int) windowZoom != 0f; final boolean linear = windowZoom % (int) windowZoom != 0f;
if (refreshViewport) { if (refreshViewport) {
@ -531,7 +529,7 @@ class NEWTWindow implements GLEventListener {
if (zoom == 0) if (zoom == 0)
zoom = 1; zoom = 1;
window.setSize(width * zoom, height * zoom); window.setSize(width * zoom, height * zoom);
onRealResize.onNext(new Integer[] { width * zoom, height * zoom }); onRealResize.submit(new Integer[] { width * zoom, height * zoom });
} }
@Override @Override

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi</artifactId> <artifactId>warppi</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</parent> </parent>
<artifactId>warppi-hardware</artifactId> <artifactId>warppi-hardware</artifactId>
@ -18,12 +18,12 @@
<dependency> <dependency>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi-core</artifactId> <artifactId>warppi-core</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi-engine-jogl</artifactId> <artifactId>warppi-engine-jogl</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.pi4j</groupId> <groupId>com.pi4j</groupId>

View File

@ -5,7 +5,7 @@
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi</artifactId> <artifactId>warppi</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
<packaging>pom</packaging> <packaging>pom</packaging>
<name>WarpPI Calculator</name> <name>WarpPI Calculator</name>
@ -42,7 +42,6 @@
<module>core</module> <module>core</module>
<module>util</module> <module>util</module>
<module>bigdecimal-math</module> <module>bigdecimal-math</module>
<module>Flow</module>
<!-- <module>hardware</module> --> <!-- <module>hardware</module> -->
<module>desktop</module> <module>desktop</module>
<module>engine-jogl</module> <module>engine-jogl</module>

View File

@ -6,7 +6,7 @@
<parent> <parent>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi</artifactId> <artifactId>warppi</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</parent> </parent>
<artifactId>warppi-teavm</artifactId> <artifactId>warppi-teavm</artifactId>
<packaging>jar</packaging> <packaging>jar</packaging>
@ -17,17 +17,12 @@
<dependency> <dependency>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi-core</artifactId> <artifactId>warppi-core</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</dependency>
<dependency>
<groupId>it.cavallium</groupId>
<artifactId>warppi-rules</artifactId>
<version>0.9.0a3</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.teavm</groupId> <groupId>org.teavm</groupId>
<artifactId>teavm-classlib</artifactId> <artifactId>teavm-classlib</artifactId>
<version>0.6.0-dev-682</version> <version>0.7.0-dev-916</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
</dependencies> </dependencies>
@ -86,7 +81,7 @@
<plugin> <plugin>
<groupId>org.teavm</groupId> <groupId>org.teavm</groupId>
<artifactId>teavm-maven-plugin</artifactId> <artifactId>teavm-maven-plugin</artifactId>
<version>0.6.0-dev-682</version> <version>0.7.0-dev-916</version>
<executions> <executions>
<execution> <execution>
<goals> <goals>

View File

@ -2,6 +2,7 @@ package it.cavallium.warppi.gui.graphicengine.html;
import java.io.IOException; import java.io.IOException;
import it.cavallium.warppi.util.EventSubmitter;
import org.teavm.jso.JSBody; import org.teavm.jso.JSBody;
import org.teavm.jso.JSObject; import org.teavm.jso.JSObject;
import org.teavm.jso.browser.Window; import org.teavm.jso.browser.Window;
@ -20,8 +21,6 @@ import it.cavallium.warppi.Engine;
import it.cavallium.warppi.StaticVars; import it.cavallium.warppi.StaticVars;
import it.cavallium.warppi.Platform.Semaphore; import it.cavallium.warppi.Platform.Semaphore;
import it.cavallium.warppi.device.Keyboard; import it.cavallium.warppi.device.Keyboard;
import it.cavallium.warppi.flow.BehaviorSubject;
import it.cavallium.warppi.flow.Observable;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine; import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.RenderingLoop; import it.cavallium.warppi.gui.graphicengine.RenderingLoop;
import it.unimi.dsi.fastutil.objects.Object2IntArrayMap; import it.unimi.dsi.fastutil.objects.Object2IntArrayMap;
@ -38,8 +37,8 @@ public class HtmlEngine implements GraphicEngine {
private int width, height; private int width, height;
public int mult = 1; public int mult = 1;
private final int frameTime = (int) (1000d / 10d); private final int frameTime = (int) (1000d / 10d);
private final BehaviorSubject<Integer[]> onResize = BehaviorSubject.create(); private final EventSubmitter<Integer[]> onResize = EventSubmitter.create();
private final BehaviorSubject<Float> onZoom = BehaviorSubject.create(); private final EventSubmitter<Float> onZoom = EventSubmitter.create();
@Override @Override
public int[] getSize() { public int[] getSize() {
@ -93,7 +92,7 @@ public class HtmlEngine implements GraphicEngine {
g = (CanvasRenderingContext2D) canvas.getContext("2d"); g = (CanvasRenderingContext2D) canvas.getContext("2d");
final HTMLInputElement keyInput = (HTMLInputElement) HtmlEngine.document.createElement("input"); final HTMLInputElement keyInput = (HTMLInputElement) HtmlEngine.document.createElement("input");
StaticVars.windowZoom$.subscribe((zoom) -> { StaticVars.windowZoom$.subscribe((zoom) -> {
onZoom.onNext(zoom); onZoom.submit(zoom);
}); });
onZoom.subscribe((windowZoom) -> { onZoom.subscribe((windowZoom) -> {
if (windowZoom != 0) { if (windowZoom != 0) {
@ -325,7 +324,7 @@ public class HtmlEngine implements GraphicEngine {
} }
@Override @Override
public Observable<Integer[]> onResize() { public EventSubmitter<Integer[]> onResize() {
return onResize; return onResize;
} }

View File

@ -11,10 +11,6 @@ import org.teavm.jso.dom.html.HTMLImageElement;
import it.cavallium.warppi.Engine; import it.cavallium.warppi.Engine;
import it.cavallium.warppi.Platform.Semaphore; import it.cavallium.warppi.Platform.Semaphore;
import it.cavallium.warppi.flow.BehaviorSubject;
import it.cavallium.warppi.flow.SimpleSubject;
import it.cavallium.warppi.flow.Subject;
import it.cavallium.warppi.flow.ValueReference;
import it.cavallium.warppi.gui.graphicengine.GraphicEngine; import it.cavallium.warppi.gui.graphicengine.GraphicEngine;
import it.cavallium.warppi.gui.graphicengine.Skin; import it.cavallium.warppi.gui.graphicengine.Skin;
@ -49,13 +45,13 @@ public class HtmlSkin implements Skin {
@Override @Override
public void initialize(final GraphicEngine d) { public void initialize(final GraphicEngine d) {
final HTMLDocument doc = Window.current().getDocument(); final HTMLDocument doc = Window.current().getDocument();
ValueReference<Boolean> done = new ValueReference<Boolean>(false); Boolean[] done = new Boolean[]{false};
imgEl = doc.createElement("img").cast(); imgEl = doc.createElement("img").cast();
imgEl.addEventListener("load", (Event e) -> { imgEl.addEventListener("load", (Event e) -> {
done.value = true; done[0] = true;
}); });
imgEl.setSrc(url); imgEl.setSrc(url);
while (!done.value) { while (!done[0]) {
try {Thread.sleep(15);} catch (Exception e) {} try {Thread.sleep(15);} catch (Exception e) {}
} }
skinSize = new int[] { imgEl.getNaturalWidth(), imgEl.getNaturalHeight() }; skinSize = new int[] { imgEl.getNaturalWidth(), imgEl.getNaturalHeight() };

View File

@ -7,7 +7,7 @@
<parent> <parent>
<groupId>it.cavallium</groupId> <groupId>it.cavallium</groupId>
<artifactId>warppi</artifactId> <artifactId>warppi</artifactId>
<version>0.9.0a3</version> <version>0.10.0-alpha</version>
</parent> </parent>
<artifactId>warppi-util</artifactId> <artifactId>warppi-util</artifactId>