Added init tasks for resources.

master
Ondřej Hruška 10 years ago
parent 6d901ddfe5
commit af8535620b
  1. 6
      src/junk/AppInitOptions.java
  2. 4
      src/junk/BaseApp.java
  3. 4
      src/mightypork/gamecore/audio/DeferredAudio.java
  4. 5
      src/mightypork/gamecore/audio/IAudio.java
  5. 53
      src/mightypork/gamecore/audio/SoundRegistry.java
  6. 12
      src/mightypork/gamecore/audio/players/AudioPlayer.java
  7. 2
      src/mightypork/gamecore/audio/players/LoopPlayer.java
  8. 4
      src/mightypork/gamecore/core/App.java
  9. 2
      src/mightypork/gamecore/core/config/InitTaskConfig.java
  10. 5
      src/mightypork/gamecore/core/init/InitTask.java
  11. 1
      src/mightypork/gamecore/core/init/InitTaskCrashHandler.java
  12. 1
      src/mightypork/gamecore/core/init/InitTaskDisplay.java
  13. 1
      src/mightypork/gamecore/core/init/InitTaskIonizables.java
  14. 1
      src/mightypork/gamecore/core/init/InitTaskLog.java
  15. 2
      src/mightypork/gamecore/core/init/InitTaskLogHeader.java
  16. 40
      src/mightypork/gamecore/core/init/InitTaskResourceLoader.java
  17. 30
      src/mightypork/gamecore/core/init/InitTaskResourceLoaderAsync.java
  18. 21
      src/mightypork/gamecore/core/init/InitTaskResourceLoaderNone.java
  19. 34
      src/mightypork/gamecore/core/init/InitTaskResources.java
  20. 1
      src/mightypork/gamecore/core/init/InitTaskWorkdir.java
  21. 4
      src/mightypork/gamecore/core/init/OptionalInitTask.java
  22. 5
      src/mightypork/gamecore/core/plugins/AppPlugin.java
  23. 2
      src/mightypork/gamecore/core/plugins/screenshot/InitTaskPluginScreenshot.java
  24. 2
      src/mightypork/gamecore/core/plugins/screenshot/ScreenshotPlugin.java
  25. 30
      src/mightypork/gamecore/graphics/fonts/DeferredFont.java
  26. 5
      src/mightypork/gamecore/graphics/fonts/FontRegistry.java
  27. 31
      src/mightypork/gamecore/graphics/fonts/FontStyle.java
  28. 19
      src/mightypork/gamecore/graphics/textures/TextureRegistry.java
  29. 2
      src/mightypork/gamecore/gui/screens/impl/CrossfadeOverlay.java
  30. 104
      src/mightypork/gamecore/resources/Res.java
  31. 2
      src/mightypork/gamecore/resources/ResourceInitializer.java
  32. 24
      src/mightypork/gamecore/resources/loading/AsyncResourceLoader.java
  33. 2
      src/mightypork/gamecore/resources/loading/ResourceLoader.java

@ -7,7 +7,7 @@ import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import mightypork.gamecore.core.AppBackend; import mightypork.gamecore.core.AppBackend;
import mightypork.gamecore.resources.ResourceSetup; import mightypork.gamecore.resources.ResourceInitializer;
import mightypork.gamecore.resources.loading.AsyncResourceLoader; import mightypork.gamecore.resources.loading.AsyncResourceLoader;
import mightypork.gamecore.resources.loading.ResourceLoader; import mightypork.gamecore.resources.loading.ResourceLoader;
@ -27,7 +27,7 @@ public class AppInitOptions {
String configFile = "settings.cfg"; String configFile = "settings.cfg";
String configComment = "Main config file"; String configComment = "Main config file";
final List<ResourceSetup> resourceLists = new ArrayList<>(); final List<ResourceInitializer> resourceLists = new ArrayList<>();
final List<KeySetup> keyLists = new ArrayList<>(); final List<KeySetup> keyLists = new ArrayList<>();
final List<ConfigSetup> configLists = new ArrayList<>(); final List<ConfigSetup> configLists = new ArrayList<>();
@ -56,7 +56,7 @@ public class AppInitOptions {
} }
public void addResources(ResourceSetup res) public void addResources(ResourceInitializer res)
{ {
resourceLists.add(res); resourceLists.add(res);
} }

@ -10,7 +10,7 @@ import mightypork.gamecore.core.config.Config;
import mightypork.gamecore.gui.screens.ScreenRegistry; import mightypork.gamecore.gui.screens.ScreenRegistry;
import mightypork.gamecore.gui.screens.impl.CrossfadeOverlay; import mightypork.gamecore.gui.screens.impl.CrossfadeOverlay;
import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.Res;
import mightypork.gamecore.resources.ResourceSetup; import mightypork.gamecore.resources.ResourceInitializer;
import mightypork.utils.files.WorkDir; import mightypork.utils.files.WorkDir;
import mightypork.utils.logging.Log; import mightypork.utils.logging.Log;
@ -140,7 +140,7 @@ public abstract class BaseApp extends App implements UncaughtExceptionHandler {
Res.setBaseDir(this); Res.setBaseDir(this);
for (final ResourceSetup rl : opt.resourceLists) { for (final ResourceInitializer rl : opt.resourceLists) {
Res.load(rl); Res.load(rl);
} }

@ -29,14 +29,14 @@ public abstract class DeferredAudio extends BaseDeferredResource implements IAud
@Override @Override
public void play(double gain, double pitch, boolean loop) public void play(double gain, double pitch, boolean loop)
{ {
play(gain, pitch, loop, App.audio().getListenerPos()); play(gain, pitch, loop, App.sound().getListenerPos());
} }
@Override @Override
public void play(double gain, double pitch, boolean loop, double x, double y) public void play(double gain, double pitch, boolean loop, double x, double y)
{ {
play(gain, pitch, loop, x, y, App.audio().getListenerPos().z()); play(gain, pitch, loop, x, y, App.sound().getListenerPos().z());
} }

@ -19,7 +19,7 @@ public interface IAudio extends Destroyable {
/** /**
* Resume loop (if was paused) * Resume loop (if was looping and paused)
*/ */
void resumeLoop(); void resumeLoop();
@ -34,7 +34,8 @@ public interface IAudio extends Destroyable {
/** /**
* Stop audio playback, free source. * Stop audio playback, free source. Meaningful for loops, may not work
* properly for effects.
*/ */
void stop(); void stop();

@ -6,6 +6,8 @@ import java.util.Map;
import mightypork.gamecore.audio.players.EffectPlayer; import mightypork.gamecore.audio.players.EffectPlayer;
import mightypork.gamecore.audio.players.LoopPlayer; import mightypork.gamecore.audio.players.LoopPlayer;
import mightypork.gamecore.core.App;
import mightypork.utils.exceptions.KeyAlreadyExistsException;
/** /**
@ -19,6 +21,28 @@ public class SoundRegistry {
private final Map<String, LoopPlayer> loops = new HashMap<>(); private final Map<String, LoopPlayer> loops = new HashMap<>();
/**
* Register effect resource
*
* @param key sound key
* @param resourcePath path to the effect resource
* @param gain gain adjustment
* @param pitch pitch adjustment
* @return the just created effect player
*/
public EffectPlayer addEffect(String key, String resourcePath, double gain, double pitch)
{
final EffectPlayer effect = App.sound().createEffect(resourcePath);
effect.setPitch(pitch);
effect.setGain(gain);
addEffect(key, effect);
return effect;
}
/** /**
* Register effect resource * Register effect resource
* *
@ -27,10 +51,37 @@ public class SoundRegistry {
*/ */
public void addEffect(String key, EffectPlayer effect) public void addEffect(String key, EffectPlayer effect)
{ {
if (effects.containsKey(key)) throw new KeyAlreadyExistsException();
effects.put(key, effect); effects.put(key, effect);
} }
/**
* Register loop resource (music / effect loop)
*
* @param key sound key
* @param resourcePath path to the effect resource
* @param gain gain adjustment
* @param pitch pitch adjustment
* @param fadeIn fadeIn time (s)
* @param fadeOut fadeOut time (s)
* @return the just created loop player
*/
public LoopPlayer addLoop(String key, String resourcePath, double gain, double pitch, double fadeIn, double fadeOut)
{
final LoopPlayer loop = App.sound().createLoop(resourcePath);
loop.setPitch(pitch);
loop.setGain(gain);
loop.setFadeTimes(fadeIn, fadeOut);
addLoop(key, loop);
return loop;
}
/** /**
* Register loop resource (music / effect loop) * Register loop resource (music / effect loop)
* *
@ -39,6 +90,8 @@ public class SoundRegistry {
*/ */
public void addLoop(String key, LoopPlayer loop) public void addLoop(String key, LoopPlayer loop)
{ {
if (loops.containsKey(key)) throw new KeyAlreadyExistsException();
loops.put(key, loop); loops.put(key, loop);
} }

@ -94,22 +94,22 @@ public abstract class AudioPlayer implements Destroyable {
/** /**
* Set base gain. 1 is original volume, 0 is silence. * Set base gain. 1 is original volume, 0 is silence.
* *
* @param baseGain base gain * @param gain base gain
*/ */
public void setGain(double baseGain) public void setGain(double gain)
{ {
this.baseGain = baseGain; this.baseGain = gain;
} }
/** /**
* Set base pitch. 1 is original pitch, less is deeper, more is higher. * Set base pitch. 1 is original pitch, less is deeper, more is higher.
* *
* @param basePitch base pitch * @param pitch base pitch
*/ */
public void setPitch(double basePitch) public void setPitch(double pitch)
{ {
this.basePitch = basePitch; this.basePitch = pitch;
} }
} }

@ -9,7 +9,7 @@ import mightypork.utils.math.animation.NumAnimated;
/** /**
* Audio loop player (with fading, good for music) * Audio loop player (with fading, for music)
* *
* @author Ondřej Hruška (MightyPork) * @author Ondřej Hruška (MightyPork)
*/ */

@ -7,6 +7,8 @@ import java.util.List;
import mightypork.gamecore.audio.AudioModule; import mightypork.gamecore.audio.AudioModule;
import mightypork.gamecore.core.config.Config; import mightypork.gamecore.core.config.Config;
import mightypork.gamecore.core.events.ShutdownEvent; import mightypork.gamecore.core.events.ShutdownEvent;
import mightypork.gamecore.core.init.InitTask;
import mightypork.gamecore.core.plugins.AppPlugin;
import mightypork.gamecore.graphics.GraphicsModule; import mightypork.gamecore.graphics.GraphicsModule;
import mightypork.gamecore.input.InputModule; import mightypork.gamecore.input.InputModule;
import mightypork.utils.annotations.Stub; import mightypork.utils.annotations.Stub;
@ -236,7 +238,7 @@ public class App extends BusNode {
* *
* @return audio module * @return audio module
*/ */
public static AudioModule audio() public static AudioModule sound()
{ {
return instance.backend.getAudio(); return instance.backend.getAudio();
} }

@ -1,7 +1,7 @@
package mightypork.gamecore.core.config; package mightypork.gamecore.core.config;
import mightypork.gamecore.core.InitTask; import mightypork.gamecore.core.init.InitTask;
import mightypork.utils.annotations.Stub; import mightypork.utils.annotations.Stub;

@ -1,4 +1,4 @@
package mightypork.gamecore.core; package mightypork.gamecore.core.init;
import java.util.ArrayList; import java.util.ArrayList;
@ -7,6 +7,7 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import mightypork.gamecore.core.App;
import mightypork.utils.Reflect; import mightypork.utils.Reflect;
import mightypork.utils.annotations.Stub; import mightypork.utils.annotations.Stub;
import mightypork.utils.logging.Log; import mightypork.utils.logging.Log;
@ -30,7 +31,7 @@ public abstract class InitTask {
* *
* @param app app * @param app app
*/ */
final void bind(App app) public final void bind(App app)
{ {
this.app = app; this.app = app;
} }

@ -4,7 +4,6 @@ package mightypork.gamecore.core.init;
import java.lang.Thread.UncaughtExceptionHandler; import java.lang.Thread.UncaughtExceptionHandler;
import mightypork.gamecore.core.App; import mightypork.gamecore.core.App;
import mightypork.gamecore.core.InitTask;
import mightypork.utils.annotations.Stub; import mightypork.utils.annotations.Stub;
import mightypork.utils.logging.Log; import mightypork.utils.logging.Log;

@ -1,7 +1,6 @@
package mightypork.gamecore.core.init; package mightypork.gamecore.core.init;
import mightypork.gamecore.core.InitTask;
import mightypork.gamecore.graphics.GraphicsModule; import mightypork.gamecore.graphics.GraphicsModule;

@ -3,7 +3,6 @@ package mightypork.gamecore.core.init;
import java.io.IOException; import java.io.IOException;
import mightypork.gamecore.core.InitTask;
import mightypork.utils.ion.Ion; import mightypork.utils.ion.Ion;
import mightypork.utils.ion.IonInput; import mightypork.utils.ion.IonInput;
import mightypork.utils.ion.IonOutput; import mightypork.utils.ion.IonOutput;

@ -4,7 +4,6 @@ package mightypork.gamecore.core.init;
import java.io.File; import java.io.File;
import java.util.logging.Level; import java.util.logging.Level;
import mightypork.gamecore.core.InitTask;
import mightypork.utils.files.WorkDir; import mightypork.utils.files.WorkDir;
import mightypork.utils.logging.Log; import mightypork.utils.logging.Log;
import mightypork.utils.logging.writers.LogWriter; import mightypork.utils.logging.writers.LogWriter;

@ -3,8 +3,6 @@ package mightypork.gamecore.core.init;
import java.io.IOException; import java.io.IOException;
import mightypork.gamecore.core.InitTask;
import mightypork.gamecore.core.OptionalInitTask;
import mightypork.utils.files.WorkDir; import mightypork.utils.files.WorkDir;
import mightypork.utils.logging.Log; import mightypork.utils.logging.Log;

@ -0,0 +1,40 @@
package mightypork.gamecore.core.init;
import mightypork.gamecore.resources.loading.ResourceLoader;
/**
* Task to add a resource loader.<br>
* By default the async resource loader is used
*
* @author Ondřej Hruška (MightyPork)
*/
public abstract class InitTaskResourceLoader extends InitTask {
/** The loader. */
protected ResourceLoader loader;
@Override
public void run()
{
loader = getLoaderImpl();
if (loader != null) loader.init();
}
/**
* Create a loader impl
*
* @return loader
*/
protected abstract ResourceLoader getLoaderImpl();
@Override
public String getName()
{
return "resource_loader";
}
}

@ -0,0 +1,30 @@
package mightypork.gamecore.core.init;
import mightypork.gamecore.resources.loading.AsyncResourceLoader;
import mightypork.gamecore.resources.loading.ResourceLoader;
/**
* Task to add a resource loader.<br>
* By default the async resource loader is used
*
* @author Ondřej Hruška (MightyPork)
*/
public class InitTaskResourceLoaderAsync extends InitTaskResourceLoader {
/**
* Create a loader impl
*
* @return loader
*/
@Override
protected ResourceLoader getLoaderImpl()
{
final AsyncResourceLoader loader = new AsyncResourceLoader();
// could now configure the loader
return loader;
}
}

@ -0,0 +1,21 @@
package mightypork.gamecore.core.init;
import mightypork.gamecore.resources.loading.ResourceLoader;
/**
* Task to add a resource loader.<br>
* By default the async resource loader is used
*
* @author Ondřej Hruška (MightyPork)
*/
public class InitTaskResourceLoaderNone extends InitTaskResourceLoader {
@Override
protected ResourceLoader getLoaderImpl()
{
return null;
}
}

@ -0,0 +1,34 @@
package mightypork.gamecore.core.init;
import mightypork.gamecore.resources.Res;
import mightypork.gamecore.resources.ResourceInitializer;
/**
* Task to initialize resources
*
* @author Ondřej Hruška (MightyPork)
*/
public abstract class InitTaskResources extends InitTask implements ResourceInitializer {
@Override
public void run()
{
Res.load(this);
}
@Override
public String getName()
{
return "resources";
}
@Override
public String[] getDependencies()
{
return new String[] { "resource_loader" };
}
}

@ -9,7 +9,6 @@ import java.util.Map.Entry;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import mightypork.gamecore.core.App; import mightypork.gamecore.core.App;
import mightypork.gamecore.core.InitTask;
import mightypork.utils.annotations.Stub; import mightypork.utils.annotations.Stub;
import mightypork.utils.files.InstanceLock; import mightypork.utils.files.InstanceLock;
import mightypork.utils.files.WorkDir; import mightypork.utils.files.WorkDir;

@ -1,4 +1,4 @@
package mightypork.gamecore.core; package mightypork.gamecore.core.init;
import java.lang.annotation.Documented; import java.lang.annotation.Documented;
@ -20,5 +20,5 @@ import java.lang.annotation.Target;
@Documented @Documented
@Inherited @Inherited
public @interface OptionalInitTask { public @interface OptionalInitTask {
//
} }

@ -1,6 +1,7 @@
package mightypork.gamecore.core; package mightypork.gamecore.core.plugins;
import mightypork.gamecore.core.App;
import mightypork.utils.annotations.Stub; import mightypork.utils.annotations.Stub;
import mightypork.utils.eventbus.clients.BusNode; import mightypork.utils.eventbus.clients.BusNode;
@ -23,7 +24,7 @@ public class AppPlugin extends BusNode {
* *
* @param app app * @param app app
*/ */
void bind(App app) public void bind(App app)
{ {
this.app = app; this.app = app;
} }

@ -1,7 +1,7 @@
package mightypork.gamecore.core.plugins.screenshot; package mightypork.gamecore.core.plugins.screenshot;
import mightypork.gamecore.core.InitTask; import mightypork.gamecore.core.init.InitTask;
import mightypork.utils.files.WorkDir; import mightypork.utils.files.WorkDir;

@ -2,8 +2,8 @@ package mightypork.gamecore.core.plugins.screenshot;
import mightypork.gamecore.core.App; import mightypork.gamecore.core.App;
import mightypork.gamecore.core.AppPlugin;
import mightypork.gamecore.core.events.MainLoopRequest; import mightypork.gamecore.core.events.MainLoopRequest;
import mightypork.gamecore.core.plugins.AppPlugin;
import mightypork.utils.Support; import mightypork.utils.Support;

@ -12,36 +12,6 @@ import mightypork.gamecore.resources.BaseDeferredResource;
*/ */
public abstract class DeferredFont extends BaseDeferredResource implements IFont { public abstract class DeferredFont extends BaseDeferredResource implements IFont {
/**
* Font style enum
*/
public static enum FontStyle
{
/** Plan style */
PLAIN(0),
/** Bold style */
BOLD(1),
/** Italic style */
ITALIC(2),
/** Bond and italic together */
BOLD_ITALIC(1 + 2);
/** Number associated with the style */
public int numval;
/**
* Font style
*
* @param style style index as in awt Font. Not using constants to be
* independent on awt.
*/
private FontStyle(int style)
{
this.numval = style;
}
}
/** /**
* Requested font size. For bitmap fonts, this should match the actual font * Requested font size. For bitmap fonts, this should match the actual font
* size (in pixels). The font can be scaled after loaded, but it may be * size (in pixels). The font can be scaled after loaded, but it may be

@ -46,7 +46,10 @@ public class FontRegistry extends BusNode {
/** /**
* Add a font alias. * Add a font alias. Useful to specify fonts to use for various parts of the
* app, without having to change the aliases throughout the app whenever the
* font alias is changed.<br>
* It is, however, NOT possible to make alias to alias.
* *
* @param alias_key alias key * @param alias_key alias key
* @param font_key font key * @param font_key font key

@ -0,0 +1,31 @@
package mightypork.gamecore.graphics.fonts;
/**
* Font style enum
*/
public enum FontStyle
{
/** Plan style */
PLAIN(0),
/** Bold style */
BOLD(1),
/** Italic style */
ITALIC(2),
/** Bond and italic together */
BOLD_ITALIC(1 + 2);
/** Number associated with the style */
public int numval;
/**
* Font style
*
* @param style style index as in awt Font. Not using constants to be
* independent on awt.
*/
private FontStyle(int style)
{
this.numval = style;
}
}

@ -23,17 +23,22 @@ public class TextureRegistry {
/** /**
* Load a texture from resource, without a key. This texture will not be * Load a texture from resource.
* added to the bank.
* *
* @param resourcePath resource path of the texture * @param resourcePath resource path of the texture
* @param filter filtering mode * @param filter filtering mode
* @param wrap wrapping mode * @param wrap wrapping mode
* @return texture reference * @return texture reference
*/ */
public ITexture addTexture(String resourcePath, FilterMode filter, WrapMode wrap) public ITexture loadTexture(String resourcePath, FilterMode filter, WrapMode wrap)
{ {
return addTexture(resourcePath, resourcePath, filter, wrap); final DeferredTexture texture = App.gfx().createTextureResource(resourcePath);
texture.setFilter(filter);
texture.setWrap(wrap);
App.bus().send(new ResourceLoadRequest(texture));
return texture;
} }
@ -51,11 +56,7 @@ public class TextureRegistry {
{ {
if (key != null) if (textures.containsKey(key)) throw new KeyAlreadyExistsException(); if (key != null) if (textures.containsKey(key)) throw new KeyAlreadyExistsException();
final DeferredTexture texture = App.gfx().createTextureResource(resourcePath); final ITexture texture = loadTexture(resourcePath, filter, wrap);
texture.setFilter(filter);
texture.setWrap(wrap);
App.bus().send(new ResourceLoadRequest(texture));
if (key != null) { if (key != null) {
textures.put(key, texture); textures.put(key, texture);

@ -76,7 +76,7 @@ public class CrossfadeOverlay extends Overlay {
if (screen == null) { if (screen == null) {
// going for halt // going for halt
App.audio().fadeOutAllLoops(); App.sound().fadeOutAllLoops();
} }
if (fromDark) { if (fromDark) {

@ -19,30 +19,18 @@ import mightypork.gamecore.graphics.textures.TxSheet;
*/ */
public final class Res { public final class Res {
private static TextureRegistry textures; private static TextureRegistry textures = new TextureRegistry();
private static SoundRegistry sounds; private static SoundRegistry sounds = new SoundRegistry();
private static FontRegistry fonts; private static FontRegistry fonts = new FontRegistry();
private static boolean initialized = false;
/** /**
* Load on behalf of given base app * Get a texture by key
* *
* @param app app access * @param key the key
* @return texture
*/ */
public static void init() public static ITexture texture(String key)
{
if (initialized) return;
initialized = true;
textures = new TextureRegistry();
sounds = new SoundRegistry();
fonts = new FontRegistry();
}
public static ITexture getTexture(String key)
{ {
return textures.getTexture(key); return textures.getTexture(key);
} }
@ -51,10 +39,10 @@ public final class Res {
/** /**
* Get a texture sheet by key * Get a texture sheet by key
* *
* @param key * @param key the key
* @return sheet * @return sheet
*/ */
public static TxSheet getTxSheet(String key) public static TxSheet txSheet(String key)
{ {
return textures.getSheet(key); return textures.getSheet(key);
} }
@ -63,38 +51,94 @@ public final class Res {
/** /**
* Get a texture quad by key * Get a texture quad by key
* *
* @param key * @param key the key
* @return quad * @return quad
*/ */
public static TxQuad getTxQuad(String key) public static TxQuad txQuad(String key)
{ {
return textures.getQuad(key); return textures.getQuad(key);
} }
public static LoopPlayer getSoundLoop(String key) /**
* Get a sound loop player by key
*
* @param key the key
* @return loop player
*/
public static LoopPlayer loop(String key)
{ {
return sounds.getLoop(key); return sounds.getLoop(key);
} }
public static EffectPlayer getSoundEffect(String key) /**
* Get a sound effect player by key
*
* @param key the key
* @return effect player
*/
public static EffectPlayer sound(String key)
{ {
return sounds.getEffect(key); return sounds.getEffect(key);
} }
public static IFont getFont(String key) /**
* Get a font by key
*
* @param key the key
* @return font
*/
public static IFont font(String key)
{ {
return fonts.getFont(key); return fonts.getFont(key);
} }
public static void load(ResourceSetup binder) /**
* Get internal texture registry
*
* @return registry
*/
public static TextureRegistry getTextureRegistry()
{
return textures;
}
/**
* Get internal font registry
*
* @return registry
*/
public static FontRegistry getFontRegistry()
{
return fonts;
}
/**
* Get internal sound registry
*
* @return registry
*/
public static SoundRegistry getSoundRegistry()
{
return sounds;
}
/**
* Load resources by a resource initializer.
*
* @param initializer the resource initializer
*/
public static void load(ResourceInitializer initializer)
{ {
binder.addFonts(fonts); initializer.addFonts(fonts);
binder.addTextures(textures); initializer.addTextures(textures);
binder.addSounds(sounds); initializer.addSounds(sounds);
} }
} }

@ -11,7 +11,7 @@ import mightypork.gamecore.graphics.textures.TextureRegistry;
* *
* @author Ondřej Hruška (MightyPork) * @author Ondřej Hruška (MightyPork)
*/ */
public interface ResourceSetup { public interface ResourceInitializer {
/** /**
* Add fonts to load. * Add fonts to load.

@ -28,27 +28,37 @@ public class AsyncResourceLoader extends Thread implements ResourceLoader, Destr
private volatile boolean mainLoopQueuing = true; private volatile boolean mainLoopQueuing = true;
/**
* Create a resource loader.
*/
public AsyncResourceLoader()
{
super("Deferred loader");
}
@Override @Override
public synchronized void init() public synchronized void init()
{ {
App.bus().subscribe(this); // FIXME bad App.bus().subscribe(this);
setDaemon(true); setDaemon(true);
super.start(); super.start();
} }
/**
* True to queue resources that must load in rendering context to main loop.
* May cause lag at the beginning, but results in smoother performance later
* (better than load-on-demand)
*
* @param yes true to allow queuing
*/
public void enableMainLoopQueuing(boolean yes) public void enableMainLoopQueuing(boolean yes)
{ {
mainLoopQueuing = yes; mainLoopQueuing = yes;
} }
public AsyncResourceLoader()
{
super("Deferred loader");
}
@Override @Override
public void loadResource(final DeferredResource resource) public void loadResource(final DeferredResource resource)
{ {

@ -20,7 +20,7 @@ public interface ResourceLoader {
/** /**
* Initialize the loader (Join the bus, start a stread etc) * Initialize the loader (Join the bus, start a thread etc)
* *
* @param app app the loader works for. The event bus must already be * @param app app the loader works for. The event bus must already be
* initialized. * initialized.

Loading…
Cancel
Save