package zero1hd.polyjet; import com.badlogic.gdx.Application; import com.badlogic.gdx.Game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Preferences; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.assets.loaders.ParticleEffectLoader; import com.badlogic.gdx.assets.loaders.TextureAtlasLoader; import com.badlogic.gdx.assets.loaders.TextureLoader; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; import com.badlogic.gdx.assets.loaders.resolvers.ResolutionFileResolver.Resolution; import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.ParticleEffect; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator; import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator.FreeTypeFontParameter; import com.badlogic.gdx.math.MathUtils; import com.badlogic.gdx.scenes.scene2d.ui.Button.ButtonStyle; import com.badlogic.gdx.scenes.scene2d.ui.CheckBox.CheckBoxStyle; import com.badlogic.gdx.scenes.scene2d.ui.Label.LabelStyle; import com.badlogic.gdx.scenes.scene2d.ui.List.ListStyle; import com.badlogic.gdx.scenes.scene2d.ui.ScrollPane.ScrollPaneStyle; import com.badlogic.gdx.scenes.scene2d.ui.SelectBox.SelectBoxStyle; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.Slider.SliderStyle; import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle; import com.badlogic.gdx.scenes.scene2d.ui.TextField.TextFieldStyle; import com.badlogic.gdx.scenes.scene2d.ui.Window.WindowStyle; import zero1hd.polyjet.screens.MainMenu; import zero1hd.polyjet.screens.LoadingScreen; public class Polyjet extends Game { private boolean initComplete = false; public static final int GAME_AREA_WIDTH = 64; public static final int GAME_AREA_HEIGHT = 48; public static final String VERSION = "(0.1)R1-PreAlpha"; public AssetManager assetManager = new AssetManager(); public Skin defaultSkin = new Skin(); public TextureAtlas buttons; public FreeTypeFontGenerator default_fontGenerator; public FreeTypeFontGenerator darktech_ldr_fontGenerator; TextureAtlas skinAtlas; public Preferences prefs; @Override public void create() { Gdx.app.setLogLevel(Application.LOG_DEBUG); prefs = Gdx.app.getPreferences("PolyJet_Preferences"); if (prefs.getBoolean("fullscreen", true)) { Gdx.graphics.setFullscreenMode(Gdx.graphics.getDisplayMode()); } else { Gdx.graphics.setWindowedMode(prefs.getInteger("screen-width"), prefs.getInteger("screen-height")); } Gdx.app.debug("Prelaunch Debug Info", "\ncurrent window size: " + Gdx.graphics.getWidth() + "x" + Gdx.graphics.getHeight() +"\n" + "Pixel density (PPI): " + Gdx.graphics.getDensity()); setScreen(new MainMenu(this)); Resolution[] resolution = { new Resolution(800, 480, "800x480"), new Resolution(1280, 720, "1280x720"), new Resolution(1366, 768, "1366x768"), new Resolution(1280, 800, "1280x800"), new Resolution(1920, 1080, "1920x1080"), new Resolution(1920, 1200, "1920x1200"), new Resolution(2560, 1440, "2560x1440"), new Resolution(3840, 2160, "3840x2160"), }; RoundingResolutionHandler resolver = new RoundingResolutionHandler(new InternalFileHandleResolver(), resolution); assetManager.setLoader(TextureAtlas.class, new TextureAtlasLoader(resolver)); assetManager.setLoader(Texture.class, new TextureLoader(resolver)); assetManager.setLoader(ParticleEffect.class, new ParticleEffectLoader(resolver)); default_fontGenerator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/Gasalt-Regular.ttf")); darktech_ldr_fontGenerator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/darktech_ldr.ttf")); } @Override public void render() { super.render(); } @Override public void dispose() { if (skinAtlas != null) { skinAtlas.dispose(); defaultSkin.dispose(); default_fontGenerator.dispose(); darktech_ldr_fontGenerator.dispose(); assetManager.dispose(); } super.dispose(); } public void queueAssets() { assetManager.load("uiskin.atlas", TextureAtlas.class); assetManager.load("Tech-Circle1.png", Texture.class); assetManager.load("polyjet-standard.png", Texture.class); assetManager.load("standard_thrust.p", ParticleEffect.class); assetManager.load("keyboard.atlas", TextureAtlas.class); assetManager.load("cybercircle3B.png", Texture.class); assetManager.load("PolyjetTitle.png", Texture.class); assetManager.load("cybercircle1.png", Texture.class); assetManager.load("defaultCover.png", Texture.class); assetManager.load("teleport-cloak.p", ParticleEffect.class); assetManager.load("sounds/SFX_open.ogg", Sound.class); assetManager.load("sounds/SFX_close.ogg", Sound.class); } public void generateFonts() { initComplete = true; defaultSkin = new Skin(); Gdx.app.debug("Prelaunch Debug Info", "Generating fonts..."); skinAtlas = assetManager.get("uiskin.atlas", TextureAtlas.class); defaultSkin.addRegions(skinAtlas); defaultSkin.add("window-font", default_fontGenerator.generateFont(new FreeTypeFontParameter() { { size = 18; } })); defaultSkin.add("sub-font", default_fontGenerator.generateFont(new FreeTypeFontParameter() { { size = fontScale(0.04f); } })); defaultSkin.add("default-font", default_fontGenerator.generateFont(new FreeTypeFontParameter() { { size = fontScale(0.07f); } })); defaultSkin.add("large-font", default_fontGenerator.generateFont(new FreeTypeFontParameter() { { size = fontScale(0.08f); } })); defaultSkin.add("special-font", darktech_ldr_fontGenerator.generateFont(new FreeTypeFontParameter() { { size = fontScale(0.075f); } })); } public void defineSkinStyles() { defaultSkin.add("default", Color.BLACK); defaultSkin.add("inverse", Color.WHITE); TextButtonStyle defaultTextButton = new TextButtonStyle(); defaultTextButton.up = defaultSkin.getDrawable("default-round"); defaultTextButton.down = defaultSkin.getDrawable("default-round-down"); defaultTextButton.font = defaultSkin.getFont("default-font"); defaultTextButton.fontColor = defaultSkin.getColor("default"); defaultTextButton.disabled = defaultSkin.getDrawable("default-round-disabled"); defaultSkin.add("default", defaultTextButton); TextButtonStyle textButtonLeft = new TextButtonStyle(); textButtonLeft.up = defaultSkin.getDrawable("left-button"); textButtonLeft.down = defaultSkin.getDrawable("left-button-down"); textButtonLeft.font = defaultSkin.getFont("default-font"); textButtonLeft.fontColor = defaultSkin.getColor("default"); defaultSkin.add("left", textButtonLeft); SliderStyle defaultSlider = new SliderStyle(defaultSkin.getDrawable("default-slider"), defaultSkin.getDrawable("default-slider-knob")); defaultSkin.add("default-horizontal", defaultSlider); ButtonStyle infoButton = new ButtonStyle(); infoButton.up = defaultSkin.getDrawable("holo-pane"); infoButton.down = defaultSkin.getDrawable("holo-pane-down"); defaultSkin.add("info-button", infoButton); LabelStyle defaultLabel = new LabelStyle(); defaultLabel.font = defaultSkin.getFont("default-font"); defaultLabel.fontColor = defaultSkin.getColor("default"); defaultSkin.add("default", defaultLabel); TextFieldStyle defaultTextField = new TextFieldStyle(defaultSkin.getFont("sub-font"), defaultSkin.getColor("default"), defaultSkin.getDrawable("cursor"), defaultSkin.getDrawable("selection"), defaultSkin.getDrawable("textfield")); defaultSkin.add("default", defaultTextField); WindowStyle defaultWindow = new WindowStyle(defaultSkin.getFont("window-font"), defaultSkin.getColor("default"), defaultSkin.getDrawable("default-window")); defaultSkin.add("default", defaultWindow); ListStyle defaultList = new ListStyle(defaultSkin.getFont("sub-font"), defaultSkin.getColor("inverse"), defaultSkin.getColor("default"), defaultSkin.getDrawable("selection")); defaultSkin.add("default", defaultList); ScrollPaneStyle defaultScrollPane = new ScrollPaneStyle(); defaultScrollPane.vScroll = defaultSkin.getDrawable("default-scroll"); defaultScrollPane.hScrollKnob = defaultSkin.getDrawable("default-round-large"); defaultScrollPane.hScroll = defaultSkin.getDrawable("default-scroll"); defaultScrollPane.vScrollKnob = defaultSkin.getDrawable("default-round-large"); defaultSkin.add("default", defaultScrollPane); CheckBoxStyle defaultCheckBox = new CheckBoxStyle(defaultSkin.getDrawable("check-off"), defaultSkin.getDrawable("check-on"), defaultSkin.getFont("window-font"), defaultSkin.getColor("default")); defaultSkin.add("default", defaultCheckBox); SelectBoxStyle defaultSelectBox = new SelectBoxStyle(defaultSkin.getFont("default-font"), defaultSkin.getColor("default"), defaultSkin.getDrawable("default-select"), defaultScrollPane, defaultList); defaultSkin.add("default", defaultSelectBox); Gdx.app.debug("Prelaunch Debug Info", "UI Skin has been defined."); } @Override public void resize(int width, int height) { if (initComplete) { defaultSkin.dispose(); assetManager.clear(); prefs.putInteger("screen-width", width); prefs.putInteger("screen-height", height); prefs.flush(); } setScreen(new LoadingScreen(this, getScreen(), true, !initComplete)); super.resize(width, height); } public int fontScale(float fontSize) { Gdx.app.debug("Font pixel size", MathUtils.round(Gdx.graphics.getDensity()*(fontSize*Gdx.graphics.getHeight())) + "px"); return MathUtils.round(Gdx.graphics.getDensity()*(fontSize*Gdx.graphics.getHeight())); } }