package mightypork.gamecore.core;
import mightypork.utils.annotations.Stub;
/**
* App initializer. A sequence of initializers is executed once the start()
* method on App is called. Adding initializers is one way to customize the App
* behavior and features.
*
* @author Ondřej Hruška (MightyPork)
*/
public abstract class InitTask {
protected App app;
/**
* Assign the initialized app instance to a protected "app" field.
*
* @param app app
*/
public void bind(App app)
{
if (this.app != null) {
throw new IllegalStateException("App instance is already set.");
}
this.app = app;
}
/**
* An intialization method that is called before the run() method.
* This method should be left unimplemented in the task, and can be used to
* configure the init task when using it as anonymous inner type.
*/
@Stub
public void init()
{
}
/**
* Run the initalizer on app.
*/
public abstract void run();
/**
* Get name of this initializer (for dependency resolver).
* The name should be short, snake_case and precise.
*
* @return name
*/
public abstract String getName();
/**
* Get what other initializers must be already loaded before this can load.
* Depending on itself or creating a circular dependency will cause error.
* If the dependencies cannot be satisfied, the initialization sequence will
* be aborted.
*
* @return array of names of required initializers.
*/
@Stub
public String[] getDependencies()
{
return new String[] {};
}
}