package org.jrenner.fps; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.AssetDescriptor; import com.badlogic.gdx.assets.AssetErrorListener; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.assets.loaders.ModelLoader; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.TextureAtlas; import com.badlogic.gdx.graphics.g3d.Model; import com.badlogic.gdx.graphics.g3d.particles.ParticleEffect; import com.badlogic.gdx.graphics.g3d.particles.ParticleEffectLoader; import com.badlogic.gdx.graphics.g3d.particles.ParticleSystem; import com.badlogic.gdx.scenes.scene2d.ui.Label; import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.ui.TextField; import com.badlogic.gdx.utils.Logger; import com.badlogic.gdx.utils.UBJsonReader; import org.jrenner.fps.headless.HeadlessG3dModelLoader; import org.jrenner.fps.headless.HeadlessModel; import org.jrenner.fps.headless.HeadlessModelLoader; import org.jrenner.smartfont.SmartFontGenerator; import static com.badlogic.gdx.assets.loaders.TextureLoader.TextureParameter; import static com.badlogic.gdx.graphics.Texture.TextureFilter; public class Assets { public static Assets inst; public static AssetManager manager; public static Skin skin; public static Label.LabelStyle chatLabelStyle; public Assets() { inst = this; manager = new AssetManager(); manager.setErrorListener(new AssetErrorListener() { @Override public void error(AssetDescriptor assetDescriptor, Throwable throwable) { Log.error(assetDescriptor.toString()); Log.error(throwable.getMessage()); } }); manager.getLogger().setLevel(Logger.DEBUG); } public void loadAll() { if (Main.isClient()) { loadTextures(); } TextureParameter modTexParam = new TextureParameter(); modTexParam.genMipMaps = true; modTexParam.magFilter = TextureFilter.Nearest; modTexParam.minFilter = TextureFilter.MipMapNearestNearest; modTexParam.wrapU = Texture.TextureWrap.Repeat; modTexParam.wrapV = Texture.TextureWrap.Repeat; // load headless models for headless server, regular models for client if (!Main.isClient()) { HeadlessModelLoader.HeadlessModelParameters modelParam = new HeadlessModelLoader.HeadlessModelParameters(); modelParam.textureParameter = modTexParam; manager.setLoader(HeadlessModel.class, new HeadlessG3dModelLoader(new UBJsonReader(), new InternalFileHandleResolver())); manager.load("models/gate.g3db", HeadlessModel.class, modelParam); manager.load("models/strange-ramp1.g3db", HeadlessModel.class, modelParam); manager.load("models/strange-ramp2.g3db", HeadlessModel.class, modelParam); } else { ModelLoader.ModelParameters modelParam = new ModelLoader.ModelParameters(); modelParam.textureParameter = modTexParam; manager.load("models/gate.g3db", Model.class, modelParam); manager.load("models/strange-ramp1.g3db", Model.class, modelParam); manager.load("models/strange-ramp2.g3db", Model.class, modelParam); manager.load("models/skybox.g3db", Model.class, modelParam); } if (Main.isClient()) { manager.load("ui/ui.json", Skin.class); } manager.finishLoading(); if (Main.isClient()){ skin = manager.get("ui/ui.json", Skin.class); } if (Main.isClient()) { SmartFontGenerator smart = new SmartFontGenerator(); int size = (int) (30f * View.screenSizeRatio()); int largeSize = (int) (46f * View.screenSizeRatio()); //FileHandle fontFile = Gdx.files.internal("Exo-Regular.otf"); //BitmapFont font = smart.createFont(fontFile, "exo-" + size, size); FileHandle fontFile = Gdx.files.internal("fonts/LiberationMono-Regular.ttf"); BitmapFont font = smart.createFont(fontFile, "lib-mono-" + size, size); BitmapFont largeFont = smart.createFont(fontFile, "lib-mono-" + largeSize, largeSize); // Skin changes skin.get(Label.LabelStyle.class).font = font; chatLabelStyle = new Label.LabelStyle(skin.get(Label.LabelStyle.class)); chatLabelStyle.font = font; skin.get(TextButton.TextButtonStyle.class).font = largeFont; TextField.TextFieldStyle tfStyle = skin.get(TextField.TextFieldStyle.class); tfStyle.background = skin.getDrawable("button-up"); System.out.println(tfStyle.background); tfStyle.font = font; } System.out.println("finished"); } private void loadTextures() { Log.debug("Loading assets"); TextureParameter textureParam = new TextureParameter(); textureParam.genMipMaps = true; textureParam.magFilter = TextureFilter.Linear; textureParam.minFilter = TextureFilter.MipMapLinearLinear; textureParam.wrapU = Texture.TextureWrap.Repeat; textureParam.wrapV = Texture.TextureWrap.Repeat; manager.load("textures/ground1.jpg", Texture.class, textureParam); manager.load("textures/marble.jpg", Texture.class, textureParam); manager.load("textures/shadow.png", Texture.class, textureParam); TextureParameter skyTextureParam = new TextureParameter(); skyTextureParam.genMipMaps = false; skyTextureParam.magFilter = TextureFilter.Linear; skyTextureParam.minFilter = TextureFilter.Linear; //Load Skybox manager.load("textures/skybox/xpos.png", Texture.class, skyTextureParam); manager.load("textures/skybox/xneg.png", Texture.class, skyTextureParam); manager.load("textures/skybox/ypos.png", Texture.class, skyTextureParam); manager.load("textures/skybox/yneg.png", Texture.class, skyTextureParam); manager.load("textures/skybox/zpos.png", Texture.class, skyTextureParam); manager.load("textures/skybox/zneg.png", Texture.class, skyTextureParam); // load Texture Atlas manager.load("texture-packs/texture-pack.atlas", TextureAtlas.class); } public static void loadParticleEffects(ParticleSystem particleSystem) { ParticleEffectLoader.ParticleEffectLoadParameter loadParam = new ParticleEffectLoader.ParticleEffectLoadParameter(particleSystem.getBatches()); ParticleEffectLoader loader = new ParticleEffectLoader(new InternalFileHandleResolver()); manager.setLoader(ParticleEffect.class, loader); manager.load("particle/bullet-hit.pfx", ParticleEffect.class, loadParam); manager.load("particle/blue-explosion.pfx", ParticleEffect.class, loadParam); manager.finishLoading(); } public void dispose() { Tools.dispose(manager); } public static TextureAtlas getAtlas() { return Assets.manager.get("texture-packs/texture-pack.atlas", TextureAtlas.class); } }