gdxapp4d/main-gdxapp/src/main/love/distributedrebirth/gdxapp/GDXAppMain.java

280 lines
9.4 KiB
Java
Raw Normal View History

package love.distributedrebirth.gdxapp;
2022-01-28 12:00:59 +01:00
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.badlogic.gdx.ApplicationListener;
2022-01-28 12:00:59 +01:00
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.utils.ScreenUtils;
import imgui.ImGui;
import imgui.flag.ImGuiCond;
import imgui.flag.ImGuiWindowFlags;
2022-01-28 12:00:59 +01:00
import imgui.type.ImBoolean;
2022-02-04 14:39:25 +01:00
import love.distributedrebirth.bassboonyd.BãßBȍőnAuthorInfoʸᴰ;
import love.distributedrebirth.bassboonyd.BãßBȍőnClassInfoʸᴰ;
2022-02-12 16:25:30 +01:00
import love.distributedrebirth.bassboonyd.BãßBȍőnCoffinOpenʸᴰ;
import love.distributedrebirth.bassboonyd.BãßBȍőnCoffinʸᴰ;
import love.distributedrebirth.bassboonyd.BãßBȍőnPackageInfoʸᴰ;
2022-02-12 16:25:30 +01:00
import love.distributedrebirth.bassboonyd.jmx.DefaultEnumBaseᴶᴹˣ;
import love.distributedrebirth.bassboonyd.jmx.DefaultEnumInstanceᴶᴹˣ;
import love.distributedrebirth.bassboonyd.jmx.GuageCounterᴶᴹˣ;
import love.distributedrebirth.gdxapp.desktop.DeskAppContourSection;
import love.distributedrebirth.gdxapp.desktop.DeskAppRenderer;
2022-02-15 19:35:05 +01:00
import love.distributedrebirth.gdxapp.desktop.DeskTopScreen;
import love.distributedrebirth.gdxapp.desktop.DeskTopScreenMenu;
import love.distributedrebirth.gdxapp.music.MusicManager;
import love.distributedrebirth.gdxapp.music.MusicSongType;
import love.distributedrebirth.gdxapp.screen.ScreenCredits;
import love.distributedrebirth.gdxapp.screen.ScreenDesktop1;
import love.distributedrebirth.gdxapp.screen.ScreenDesktop2;
import love.distributedrebirth.gdxapp.screen.ScreenDesktop3;
2022-02-14 22:54:31 +01:00
import love.distributedrebirth.gdxapp.screen.ScreenDesktop4;
import love.distributedrebirth.gdxapp.screen.ScreenHelp;
import love.distributedrebirth.gdxapp.screen.ScreenIntro;
import love.distributedrebirth.gdxapp.screen.ScreenIntroMission;
2022-02-04 23:17:52 +01:00
import love.distributedrebirth.gdxapp.screen.ScreenLoading;
2022-02-12 16:25:30 +01:00
import love.distributedrebirth.numberxd.base2t.Base2PartsFactory;
2022-02-06 17:19:05 +01:00
import love.distributedrebirth.numberxd.base2t.Base2Terminator;
2022-02-03 14:21:08 +01:00
import love.distributedrebirth.numberxd.base2t.part.warp.TOSWarpCore;
import love.distributedrebirth.numberxd.glyph.BaseGlyphSet;
2022-02-21 00:41:24 +01:00
import love.distributedrebirth.unicode4d.atlas.FontAtlas;
import love.distributedrebirth.unicode4d.atlas.FontAtlasDriver;
2022-02-17 19:57:57 +01:00
import love.distributedrebirth.warpme.core.WaterBucket;
2022-02-22 18:33:57 +01:00
import love.distributedrebirth.warpme.core.WaterBucketDriver;
2022-01-28 12:00:59 +01:00
import net.spookygames.gdx.nativefilechooser.NativeFileChooser;
2022-02-04 14:39:25 +01:00
@BãßBȍőnAuthorInfoʸᴰ(name = "willemtsade", copyright = "©Δ∞ 仙上主天")
@BãßBȍőnClassInfoʸᴰ(name = "GDXAppMain", purpose = "Main loop render dispatcher and bootup.")
@BãßBȍőnPackageInfoʸᴰ(name = "love.distributedrebirth.gdxapp")
public enum GDXAppMain implements DefaultEnumInstanceᴶᴹˣ<GDXAppMain,GDXAppMainKeyʸᴰ>,ApplicationListener {
INSTANCE;
protected Screen screen;
2022-02-04 23:17:52 +01:00
private int lazyIntCnt = 33;
2022-01-28 12:00:59 +01:00
private List<String> args;
public NativeFileChooser fileChooser;
public SpriteBatch batch;
public BitmapFont font;
public OrthographicCamera camera;
public int viewWidth;
public int viewHeight;
2022-01-28 12:00:59 +01:00
public MusicManager music;
2022-02-21 00:41:24 +01:00
public FontAtlas basePlane;
2022-02-15 19:35:05 +01:00
public ImBoolean showImGuiDemo = new ImBoolean(false);
2022-01-28 12:00:59 +01:00
private Map<Class<? extends Screen>,Screen> screens;
2022-02-15 19:35:05 +01:00
private DeskTopScreenMenu screenMenu;
private final GuageCounterᴶᴹˣ selectScreenCounter;
private final BãßBȍőnCoffinOpenʸᴰ<GDXAppMainKeyʸᴰ> BBC = BãßBȍőnCoffinOpenʸᴰ.newInstance();
public BãßBȍőnCoffinʸᴰ<GDXAppMainKeyʸᴰ> GET_BBC() { return BBC; }
2022-02-15 19:35:05 +01:00
private GDXAppMain() {
BBC.BOON_INIT(this);
BȍőnJmxInit(GDXAppMainKeyʸᴰ.JMX);
selectScreenCounter = BȍőnJmxInitGuageCounter(GDXAppMainKeyʸᴰ.JMX, "selectScreenCounter");
}
2022-01-28 12:00:59 +01:00
public void BãßInit(List<String> args, int viewWidth, int viewHeight, NativeFileChooser fileChooser) {
2022-01-28 12:00:59 +01:00
this.args = args;
2022-01-31 23:05:27 +01:00
this.viewWidth = viewWidth;
this.viewHeight = viewHeight;
2022-01-28 12:00:59 +01:00
this.fileChooser = fileChooser;
}
2022-02-12 16:25:30 +01:00
//TODO: add layer or ?? private <T extends BãßBȍőnCoffinStoreʸᴰ<?>,DefaultAuthorInfoʸᴰ> T[] storeInstances() {
@SuppressWarnings("unchecked")
private <T extends DefaultEnumBaseᴶᴹˣ<?,?>> T[] coffinInstances() {
return (T[]) new DefaultEnumBaseᴶᴹˣ[] {
BaseGlyphSet.values()[0],
Base2Terminator.INSTANCE,
Base2PartsFactory.INSTANCE,
TOSWarpCore.INSTANCE
};
}
2022-02-04 23:17:52 +01:00
private void lazyInit() {
if (lazyIntCnt > 0) {
lazyIntCnt--;
return;
}
ImGuiSetup.init();
2022-02-12 16:25:30 +01:00
// ref to init
System.out.println("BãßBȍőnCoffinʸᴰ init......");
BãßBȍőnCoffinOpenʸᴰ.lockCoffin(this);
2022-02-12 16:25:30 +01:00
for (DefaultEnumBaseᴶᴹˣ<?,?> coffin:coffinInstances()) {
BãßBȍőnCoffinOpenʸᴰ.lockCoffin(coffin);
2022-02-12 16:25:30 +01:00
}
System.out.println("BãßBȍőnCoffinʸᴰ init done.");
2022-02-05 17:00:19 +01:00
try {
2022-02-21 00:42:55 +01:00
//basePlane = FontAtlasDriver.newInstance().createReader().readString(Gdx.files.internal("font/unicode4d.xml").readString());
2022-02-05 17:00:19 +01:00
if (args.contains("warpcore-load")) {
System.out.println("warpcore-load: requested");
2022-02-22 18:33:57 +01:00
WaterBucket bucket = WaterBucketDriver.newInstance().createReader().readFile("./warpcore.xml");
2022-02-05 17:00:19 +01:00
TOSWarpCore.INSTANCE.BãßArmWarpCore(bucket);
}
if (args.contains("warpcore-save")) {
System.out.println("warpcore-save: requested");
WaterBucket bucket = TOSWarpCore.INSTANCE.BãßCurrentWarpCore();
2022-02-22 18:33:57 +01:00
WaterBucketDriver.newInstance().createWriter().writeFile(bucket, "./warpcore.xml");
2022-02-05 17:00:19 +01:00
}
} catch (Exception e) {
throw new RuntimeException(e);
2022-02-04 23:17:52 +01:00
}
if (!args.contains("warpcore-nolock")) {
System.out.println("warpcore-lock: BãßLockWarpCipher");
2022-02-04 23:17:52 +01:00
TOSWarpCore.INSTANCE.BãßLockWarpCipher();
2022-02-05 17:00:19 +01:00
} else {
System.out.println("warpcore-nolock: requested");
2022-02-04 23:17:52 +01:00
}
if (args.contains("full-screen")) {
2022-02-05 17:00:19 +01:00
System.out.println("full-screen: requested");
2022-02-04 23:17:52 +01:00
Gdx.graphics.setFullscreenMode(Gdx.graphics.getDisplayMode());
}
2022-02-05 17:00:19 +01:00
if (args.contains("intro-skip")) {
System.out.println("intro-skip: requested");
2022-02-14 22:54:31 +01:00
selectScreen(ScreenDesktop1.class);
2022-02-04 23:17:52 +01:00
music.play(MusicSongType.BACKGROUND);
} else {
selectScreen(ScreenIntro.class);
}
}
private void putScreen(Screen screen) {
screens.put(screen.getClass(), screen);
}
public void selectScreen(Class<? extends Screen> screenClass) {
Screen screen = screens.get(screenClass);
if (screen == null) {
throw new NullPointerException("Unknow screen: "+screenClass);
}
selectScreenCounter.increment();
if (this.screen != null) this.screen.hide();
this.screen = screen;
if (this.screen != null) {
this.screen.show();
this.screen.resize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
}
}
@Override
2022-01-28 12:00:59 +01:00
public void create() {
batch = new SpriteBatch();
font = new BitmapFont();
camera = new OrthographicCamera();
camera.setToOrtho(false, viewWidth, viewHeight);
camera.update();
batch.setProjectionMatrix(camera.combined);
2022-02-05 17:00:19 +01:00
boolean musicStop = args.contains("music-stop");
if (musicStop) {
System.out.println("music-stop: requested");
}
2022-01-28 12:00:59 +01:00
music = new MusicManager();
2022-02-05 17:00:19 +01:00
music.init(musicStop);
2022-01-28 12:00:59 +01:00
2022-02-04 23:17:52 +01:00
screens = new HashMap<>();
2022-01-28 12:00:59 +01:00
2022-02-15 19:35:05 +01:00
DeskTopScreen desktop1 = new ScreenDesktop1(this);
DeskTopScreen desktop2 = new ScreenDesktop2(this);
DeskTopScreen desktop3 = new ScreenDesktop3();
DeskTopScreen desktop4 = new ScreenDesktop4();
2022-02-17 22:00:22 +01:00
screenMenu = new DeskTopScreenMenu(desktop1, desktop2, desktop3, desktop4);
2022-02-14 00:27:18 +01:00
putScreen(new ScreenLoading());
putScreen(new ScreenIntro());
putScreen(new ScreenIntroMission());
2022-02-14 00:27:18 +01:00
putScreen(desktop1);
putScreen(desktop2);
putScreen(desktop3);
2022-02-14 22:54:31 +01:00
putScreen(desktop4);
putScreen(new ScreenCredits());
putScreen(new ScreenHelp());
2022-01-28 12:00:59 +01:00
2022-02-04 23:17:52 +01:00
selectScreen(ScreenLoading.class);
2022-01-28 12:00:59 +01:00
}
@Override
public void resize(int width, int height) {
if (screen != null) screen.resize(width, height);
2022-01-28 12:00:59 +01:00
}
@Override
public void render() {
ScreenUtils.clear(0f, 0f, 0f, 1f, true);
if (screen == null) {
return;
}
2022-02-04 23:17:52 +01:00
if (screen instanceof ScreenLoading) {
screen.render(Gdx.graphics.getDeltaTime());
lazyInit();
return;
}
2022-01-28 12:00:59 +01:00
ImGuiSetup.imGuiImp.newFrame();
ImGui.newFrame();
2022-02-15 19:35:05 +01:00
DeskTopScreen appScreen = null;
if (screen instanceof DeskTopScreen) {
appScreen = DeskTopScreen.class.cast(screen);
screenMenu.renderMenu(appScreen);
2022-01-28 12:00:59 +01:00
}
if (showImGuiDemo.get()) {
ImGui.showDemoWindow(showImGuiDemo);
}
if (appScreen != null && appScreen.getDeskAppScreen().getCurrentDeskApp() != null) {
int sizeFlags = ImGuiCond.Always;
2022-02-15 19:04:27 +01:00
ImGui.setNextWindowPos(0, 28, sizeFlags);
ImGui.setNextWindowSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight() - 28, sizeFlags);
int windowFlags = ImGuiWindowFlags.NoMove | ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoTitleBar;
if (ImGui.begin(appScreen.getDeskAppScreen().getCurrentDeskApp().getTitle(), windowFlags)) {
DeskAppRenderer renderer = appScreen.getDeskAppScreen().getCurrentDeskApp().getContours().getContour(DeskAppContourSection.MAIN);
if (renderer != null) {
renderer.render();
}
}
ImGui.end();
2022-01-28 12:00:59 +01:00
}
if (screen != null) {
screen.render(Gdx.graphics.getDeltaTime());
}
ImGui.render();
ImGuiSetup.imGuiGlImp.renderDrawData(ImGui.getDrawData());
}
@Override
public void pause() {
2022-02-15 23:16:14 +01:00
if (screen != null) {
screen.pause();
}
}
@Override
public void resume() {
2022-02-15 23:16:14 +01:00
if (screen != null) {
screen.resume();
}
}
@Override
public void dispose() {
ImGuiSetup.dispose();
for (Screen screen:screens.values()) {
screen.dispose();
}
music.dispose();
batch.dispose();
font.dispose();
}
2022-01-28 12:00:59 +01:00
}