From de98c427504cde19c7d5ada5c0a238ca91147a4f Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sat, 24 Jan 2026 19:05:27 -0800 Subject: Make codex write some javadoc that I'm too lazy to do :P --- .../app/AbstractionEngineGame.java | 9 ++ .../abstractionengine/app/actor/BlockyButton.java | 115 ------------------- .../liz/abstractionengine/app/actor/Button.java | 126 +++++++++++++++++++++ .../abstractionengine/app/actor/LifeGridActor.java | 14 +++ .../liz/abstractionengine/app/actor/Logo.java | 14 +++ .../liz/abstractionengine/app/actor/Penguin.java | 26 +++++ .../liz/abstractionengine/app/life/CellState.java | 11 ++ .../liz/abstractionengine/app/life/LifeSystem.java | 16 +++ .../abstractionengine/app/screen/GameScreen.java | 29 +++++ .../liz/abstractionengine/app/screen/MainMenu.java | 37 +++++- .../abstractionengine/app/screen/ScrollLogo.java | 29 +++++ .../app/screen/mainmenu/MainMenuAudio.java | 21 +++- .../abstractionengine/app/utils/FunctionUtils.java | 9 ++ .../abstractionengine/app/utils/TimerUtils.java | 7 ++ 14 files changed, 342 insertions(+), 121 deletions(-) delete mode 100644 core/src/main/java/coffee/liz/abstractionengine/app/actor/BlockyButton.java create mode 100644 core/src/main/java/coffee/liz/abstractionengine/app/actor/Button.java (limited to 'core') diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/AbstractionEngineGame.java b/core/src/main/java/coffee/liz/abstractionengine/app/AbstractionEngineGame.java index b54776f..9d07220 100644 --- a/core/src/main/java/coffee/liz/abstractionengine/app/AbstractionEngineGame.java +++ b/core/src/main/java/coffee/liz/abstractionengine/app/AbstractionEngineGame.java @@ -21,6 +21,9 @@ public class AbstractionEngineGame extends Game { public FitViewport viewport; public ShapeRenderer shapeRenderer; + /** + * Game initialization hook. + */ public void create() { viewport = new FitViewport(WORLD_SIZE.getX(), WORLD_SIZE.getY()); batch = new SpriteBatch(); @@ -32,10 +35,16 @@ public class AbstractionEngineGame extends Game { viewport.update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), true); } + /** + * Game render hook. + */ public void render() { super.render(); } + /** + * Game cleanup hook. + */ public void dispose() { batch.dispose(); font.dispose(); diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/actor/BlockyButton.java b/core/src/main/java/coffee/liz/abstractionengine/app/actor/BlockyButton.java deleted file mode 100644 index df2c749..0000000 --- a/core/src/main/java/coffee/liz/abstractionengine/app/actor/BlockyButton.java +++ /dev/null @@ -1,115 +0,0 @@ -package coffee.liz.abstractionengine.app.actor; - -import coffee.liz.abstractionengine.app.Theme; -import com.badlogic.gdx.Gdx; -import com.badlogic.gdx.graphics.Color; -import com.badlogic.gdx.graphics.GL20; -import com.badlogic.gdx.graphics.g2d.Batch; -import com.badlogic.gdx.graphics.g2d.BitmapFont; -import com.badlogic.gdx.graphics.g2d.GlyphLayout; -import com.badlogic.gdx.graphics.glutils.ShapeRenderer; -import com.badlogic.gdx.scenes.scene2d.Actor; -import com.badlogic.gdx.scenes.scene2d.InputEvent; -import com.badlogic.gdx.scenes.scene2d.InputListener; -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; - -@RequiredArgsConstructor -public class BlockyButton extends Actor { - private static final float ALPHA = 0.85f; - private static final float BORDER_WIDTH = 1f; - - private final ShapeRenderer shapeRenderer; - private final BitmapFont font; - private final String text; - - @Setter - private Runnable onClick; - - @Getter - private boolean hovered = false; - @Getter - private boolean pressed = false; - - private final GlyphLayout layout = new GlyphLayout(); - private final Color bgColor = new Color(); - private final Color borderColor = new Color(); - - @Override - public void draw(final Batch batch, final float parentAlpha) { - batch.end(); - - Gdx.gl.glEnable(GL20.GL_BLEND); - Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); - - shapeRenderer.setProjectionMatrix(batch.getProjectionMatrix()); - shapeRenderer.setTransformMatrix(batch.getTransformMatrix()); - - final float effectiveAlpha = parentAlpha * ALPHA * getColor().a; - computeColors(effectiveAlpha); - - shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); - shapeRenderer.setColor(borderColor); - shapeRenderer.rect(getX(), getY(), getWidth(), getHeight()); - shapeRenderer.setColor(bgColor); - shapeRenderer.rect(getX() + BORDER_WIDTH, getY() + BORDER_WIDTH, getWidth() - BORDER_WIDTH * 2, - getHeight() - BORDER_WIDTH * 2); - shapeRenderer.end(); - - Gdx.gl.glDisable(GL20.GL_BLEND); - - batch.begin(); - - layout.setText(font, text); - final float textX = getX() + (getWidth() - layout.width) / 2f; - final float textY = getY() + (getHeight() + layout.height) / 2f; - - final Color textColor = hovered ? Theme.FG : Theme.MUTED; - font.setColor(textColor.r, textColor.g, textColor.b, effectiveAlpha); - font.draw(batch, text, textX, textY); - } - - private void computeColors(final float alpha) { - if (hovered) { - bgColor.set(Theme.SURFACE_ALT).a = alpha; - borderColor.set(Theme.PRIMARY).a = alpha; - } else { - bgColor.set(Theme.SURFACE).a = alpha; - borderColor.set(Theme.BORDER_LIGHT).a = alpha; - } - } - - public void addButtonListener() { - addListener(new InputListener() { - @Override - public boolean touchDown(final InputEvent event, final float x, final float y, final int pointer, - final int button) { - pressed = true; - return true; - } - - @Override - public void touchUp(final InputEvent event, final float x, final float y, final int pointer, - final int button) { - if (pressed && hovered && onClick != null) { - onClick.run(); - } - pressed = false; - } - - @Override - public void enter(final InputEvent event, final float x, final float y, final int pointer, - final Actor fromActor) { - hovered = true; - } - - @Override - public void exit(final InputEvent event, final float x, final float y, final int pointer, - final Actor toActor) { - hovered = false; - pressed = false; - } - }); - } -} diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/actor/Button.java b/core/src/main/java/coffee/liz/abstractionengine/app/actor/Button.java new file mode 100644 index 0000000..a7416b9 --- /dev/null +++ b/core/src/main/java/coffee/liz/abstractionengine/app/actor/Button.java @@ -0,0 +1,126 @@ +package coffee.liz.abstractionengine.app.actor; + +import coffee.liz.abstractionengine.app.Theme; +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Color; +import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.g2d.Batch; +import com.badlogic.gdx.graphics.g2d.BitmapFont; +import com.badlogic.gdx.graphics.g2d.GlyphLayout; +import com.badlogic.gdx.graphics.glutils.ShapeRenderer; +import com.badlogic.gdx.scenes.scene2d.Actor; +import com.badlogic.gdx.scenes.scene2d.InputEvent; +import com.badlogic.gdx.scenes.scene2d.InputListener; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; + +@RequiredArgsConstructor +public class Button extends Actor { + private static final float ALPHA = 0.85f; + private static final float BORDER_WIDTH = 1f; + + private final ShapeRenderer shapeRenderer; + private final BitmapFont font; + private final String text; + + @Setter + private Runnable onClick; + + @Getter + private boolean hovered = false; + @Getter + private boolean pressed = false; + + private final GlyphLayout layout = new GlyphLayout(); + private final Color bgColor = new Color(); + private final Color borderColor = new Color(); + + /** + * Actor draw hook. + * + * @param batch + * parent batch + * @param parentAlpha + * parent alpha multiplier + */ + @Override + public void draw(final Batch batch, final float parentAlpha) { + batch.end(); + + Gdx.gl.glEnable(GL20.GL_BLEND); + Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); + + shapeRenderer.setProjectionMatrix(batch.getProjectionMatrix()); + shapeRenderer.setTransformMatrix(batch.getTransformMatrix()); + + final float effectiveAlpha = parentAlpha * ALPHA * getColor().a; + computeColors(effectiveAlpha); + + shapeRenderer.begin(ShapeRenderer.ShapeType.Filled); + shapeRenderer.setColor(borderColor); + shapeRenderer.rect(getX(), getY(), getWidth(), getHeight()); + shapeRenderer.setColor(bgColor); + shapeRenderer.rect(getX() + BORDER_WIDTH, getY() + BORDER_WIDTH, getWidth() - BORDER_WIDTH * 2, + getHeight() - BORDER_WIDTH * 2); + shapeRenderer.end(); + + Gdx.gl.glDisable(GL20.GL_BLEND); + + batch.begin(); + + layout.setText(font, text); + final float textX = getX() + (getWidth() - layout.width) / 2f; + final float textY = getY() + (getHeight() + layout.height) / 2f; + + final Color textColor = hovered ? Theme.FG : Theme.MUTED; + font.setColor(textColor.r, textColor.g, textColor.b, effectiveAlpha); + font.draw(batch, text, textX, textY); + } + + private void computeColors(final float alpha) { + if (hovered) { + bgColor.set(Theme.SURFACE_ALT).a = alpha; + borderColor.set(Theme.PRIMARY).a = alpha; + } else { + bgColor.set(Theme.SURFACE).a = alpha; + borderColor.set(Theme.BORDER_LIGHT).a = alpha; + } + } + + /** + * Enables input handling for the button. + */ + public void addButtonListener() { + addListener(new InputListener() { + @Override + public boolean touchDown(final InputEvent event, final float x, final float y, final int pointer, + final int button) { + pressed = true; + return true; + } + + @Override + public void touchUp(final InputEvent event, final float x, final float y, final int pointer, + final int button) { + if (pressed && hovered && onClick != null) { + onClick.run(); + } + pressed = false; + } + + @Override + public void enter(final InputEvent event, final float x, final float y, final int pointer, + final Actor fromActor) { + hovered = true; + } + + @Override + public void exit(final InputEvent event, final float x, final float y, final int pointer, + final Actor toActor) { + hovered = false; + pressed = false; + } + }); + } +} diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/actor/LifeGridActor.java b/core/src/main/java/coffee/liz/abstractionengine/app/actor/LifeGridActor.java index 6692413..43b83a5 100644 --- a/core/src/main/java/coffee/liz/abstractionengine/app/actor/LifeGridActor.java +++ b/core/src/main/java/coffee/liz/abstractionengine/app/actor/LifeGridActor.java @@ -37,6 +37,12 @@ public class LifeGridActor extends Actor { @Setter private Vec2 parallaxOffset = Vec2f.ZERO; + /** + * Actor update hook. + * + * @param delta + * time since last frame + */ @Override public void act(final float delta) { super.act(delta); @@ -48,6 +54,14 @@ public class LifeGridActor extends Actor { world.update(new LifeInput(forcedAlive), Duration.ofMillis((int) (delta * 1000))); } + /** + * Actor draw hook. + * + * @param batch + * parent batch + * @param parentAlpha + * parent alpha multiplier + */ @Override public void draw(final Batch batch, final float parentAlpha) { if (viewport == null) { diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/actor/Logo.java b/core/src/main/java/coffee/liz/abstractionengine/app/actor/Logo.java index 41847b5..e8bf025 100644 --- a/core/src/main/java/coffee/liz/abstractionengine/app/actor/Logo.java +++ b/core/src/main/java/coffee/liz/abstractionengine/app/actor/Logo.java @@ -10,11 +10,22 @@ import com.badlogic.gdx.utils.Disposable; public class Logo extends Actor implements Disposable { private final Texture texture; + /** + * Creates a logo actor. + */ public Logo() { this.texture = new Texture(Gdx.files.internal("sprites/logo.png")); setSize(texture.getWidth(), texture.getHeight()); } + /** + * Actor draw hook. + * + * @param batch + * parent batch + * @param parentAlpha + * parent alpha multiplier + */ @Override public void draw(final Batch batch, final float parentAlpha) { final Color c = getColor(); @@ -22,6 +33,9 @@ public class Logo extends Actor implements Disposable { batch.draw(texture, getX(), getY(), getWidth(), getHeight()); } + /** + * Releases actor resources. + */ @Override public void dispose() { texture.dispose(); diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/actor/Penguin.java b/core/src/main/java/coffee/liz/abstractionengine/app/actor/Penguin.java index 09b3d5b..4a557e7 100644 --- a/core/src/main/java/coffee/liz/abstractionengine/app/actor/Penguin.java +++ b/core/src/main/java/coffee/liz/abstractionengine/app/actor/Penguin.java @@ -25,6 +25,9 @@ public class Penguin extends Actor implements Disposable { private Animation currentAnimation; private float stateTime = 0f; + /** + * Creates a penguin actor. + */ public Penguin() { this.texture = new Texture(Gdx.files.internal("sprites/penguins.png")); final TextureRegion[][] tmp = TextureRegion.split(texture, texture.getWidth() / PENGUIN_FRAMES.getX(), @@ -48,12 +51,26 @@ public class Penguin extends Actor implements Disposable { this.currentAnimation = tobaganning; } + /** + * Actor update hook. + * + * @param delta + * time since last frame + */ @Override public void act(final float delta) { super.act(delta); stateTime += delta; } + /** + * Actor draw hook. + * + * @param batch + * parent batch + * @param parentAlpha + * parent alpha multiplier + */ @Override public void draw(final Batch batch, final float parentAlpha) { final TextureRegion frame = currentAnimation.getKeyFrame(stateTime, true); @@ -62,6 +79,12 @@ public class Penguin extends Actor implements Disposable { batch.draw(frame, getX(), getY(), getWidth(), getHeight()); } + /** + * Sets the current animation state. + * + * @param state + * new state + */ public void setState(final State state) { this.currentAnimation = switch (state) { case EEPY -> eepy; @@ -70,6 +93,9 @@ public class Penguin extends Actor implements Disposable { }; } + /** + * Releases actor resources. + */ @Override public void dispose() { texture.dispose(); diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/life/CellState.java b/core/src/main/java/coffee/liz/abstractionengine/app/life/CellState.java index f25ad7c..025cde0 100644 --- a/core/src/main/java/coffee/liz/abstractionengine/app/life/CellState.java +++ b/core/src/main/java/coffee/liz/abstractionengine/app/life/CellState.java @@ -12,10 +12,21 @@ public class CellState implements Component { private final float alivePercentage; + /** + * Creates a cell state with a normalized alive percentage. + * + * @param alivePercentage + * alive value in the range [0, 1] + */ public CellState(final float alivePercentage) { this.alivePercentage = clamp(alivePercentage); } + /** + * Returns true when the cell is considered alive. + * + * @return whether the cell is alive + */ public boolean isAlive() { return alivePercentage >= (1.0f - EPS); } diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/life/LifeSystem.java b/core/src/main/java/coffee/liz/abstractionengine/app/life/LifeSystem.java index 82aa9c6..14c783f 100644 --- a/core/src/main/java/coffee/liz/abstractionengine/app/life/LifeSystem.java +++ b/core/src/main/java/coffee/liz/abstractionengine/app/life/LifeSystem.java @@ -20,10 +20,26 @@ public class LifeSystem extends BaseGridIndexSystem { private Duration sinceUpdate = Duration.ZERO; + /** + * Creates a life system. + * + * @param dimensions + * grid size + */ public LifeSystem(final Vec2 dimensions) { super(dimensions); } + /** + * Advances the simulation. + * + * @param world + * world to update + * @param state + * input state for this tick + * @param dt + * time step + */ @Override public void update(final World world, final LifeInput state, final Duration dt) { super.update(world, state, dt); diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/screen/GameScreen.java b/core/src/main/java/coffee/liz/abstractionengine/app/screen/GameScreen.java index adaad0e..c3fe2c8 100644 --- a/core/src/main/java/coffee/liz/abstractionengine/app/screen/GameScreen.java +++ b/core/src/main/java/coffee/liz/abstractionengine/app/screen/GameScreen.java @@ -8,36 +8,65 @@ import lombok.RequiredArgsConstructor; public class GameScreen implements Screen { private final AbstractionEngineGame game; + /** + * Screen lifecycle hook. + */ @Override public void show() { } + /** + * Screen render hook. + * + * @param delta + * time since last frame + */ @Override public void render(float delta) { } + /** + * Screen resize hook. + * + * @param width + * new width in pixels + * @param height + * new height in pixels + */ @Override public void resize(int width, int height) { } + /** + * Screen lifecycle hook. + */ @Override public void pause() { } + /** + * Screen lifecycle hook. + */ @Override public void resume() { } + /** + * Screen lifecycle hook. + */ @Override public void hide() { } + /** + * Screen cleanup hook. + */ @Override public void dispose() { diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/screen/MainMenu.java b/core/src/main/java/coffee/liz/abstractionengine/app/screen/MainMenu.java index f1b6b02..06d0b03 100644 --- a/core/src/main/java/coffee/liz/abstractionengine/app/screen/MainMenu.java +++ b/core/src/main/java/coffee/liz/abstractionengine/app/screen/MainMenu.java @@ -2,7 +2,7 @@ package coffee.liz.abstractionengine.app.screen; import coffee.liz.abstractionengine.app.AbstractionEngineGame; import coffee.liz.abstractionengine.app.Theme; -import coffee.liz.abstractionengine.app.actor.BlockyButton; +import coffee.liz.abstractionengine.app.actor.Button; import coffee.liz.abstractionengine.app.actor.LifeGridActor; import coffee.liz.abstractionengine.app.screen.mainmenu.MainMenuAudio; import coffee.liz.abstractionengine.app.life.CellState; @@ -44,6 +44,9 @@ public class MainMenu implements Screen { private LifeGridActor lifeGridActor; private MainMenuAudio audioSystem; + /** + * Screen lifecycle hook. + */ @Override public void show() { Mat2.init(GRID_DIMENSIONS, pos -> world.createEntity().add(new GridPosition(pos)) @@ -68,13 +71,13 @@ public class MainMenu implements Screen { final float centerX = (worldWidth - BUTTON_WIDTH) / 2f; final float startY = worldHeight / 2f + BUTTON_HEIGHT; - final BlockyButton playButton = createButton("Play", centerX, startY); + final Button playButton = createButton("play", centerX, startY); playButton.setOnClick(() -> game.setScreen(new GameScreen(game))); stage.addActor(playButton); } - private BlockyButton createButton(final String text, final float x, final float y) { - final BlockyButton button = new BlockyButton(game.shapeRenderer, game.font, text); + private Button createButton(final String text, final float x, final float y) { + final Button button = new Button(game.shapeRenderer, game.font, text); button.setPosition(x, y); button.setSize(BUTTON_WIDTH, BUTTON_HEIGHT); button.addButtonListener(); @@ -94,6 +97,12 @@ public class MainMenu implements Screen { return gliderPattern; } + /** + * Screen render hook. + * + * @param delta + * time since last frame + */ @Override public void render(final float delta) { game.viewport.apply(); @@ -116,24 +125,44 @@ public class MainMenu implements Screen { lifeGridActor.setParallaxOffset(parallax); } + /** + * Screen resize hook. + * + * @param width + * new width in pixels + * @param height + * new height in pixels + */ @Override public void resize(final int width, final int height) { game.viewport.update(width, height, true); } + /** + * Screen lifecycle hook. + */ @Override public void pause() { } + /** + * Screen lifecycle hook. + */ @Override public void resume() { } + /** + * Screen lifecycle hook. + */ @Override public void hide() { dispose(); } + /** + * Screen cleanup hook. + */ @Override public void dispose() { audioSystem.dispose(); diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/screen/ScrollLogo.java b/core/src/main/java/coffee/liz/abstractionengine/app/screen/ScrollLogo.java index 225457f..ab2aa5e 100644 --- a/core/src/main/java/coffee/liz/abstractionengine/app/screen/ScrollLogo.java +++ b/core/src/main/java/coffee/liz/abstractionengine/app/screen/ScrollLogo.java @@ -30,6 +30,9 @@ public class ScrollLogo implements Screen { private Penguin penguin; private Group animationGroup; + /** + * Screen lifecycle hook. + */ @Override public void show() { stage = new Stage(game.viewport, game.batch); @@ -73,6 +76,12 @@ public class ScrollLogo implements Screen { Actions.fadeOut(fadeDuration), Actions.run(this::requestTransition))); } + /** + * Screen render hook. + * + * @param delta + * time since last frame + */ @Override public void render(final float delta) { game.viewport.apply(); @@ -81,24 +90,44 @@ public class ScrollLogo implements Screen { stage.draw(); } + /** + * Screen resize hook. + * + * @param width + * new width in pixels + * @param height + * new height in pixels + */ @Override public void resize(final int width, final int height) { game.viewport.update(width, height, true); } + /** + * Screen lifecycle hook. + */ @Override public void pause() { } + /** + * Screen lifecycle hook. + */ @Override public void resume() { } + /** + * Screen lifecycle hook. + */ @Override public void hide() { dispose(); } + /** + * Screen cleanup hook. + */ @Override public void dispose() { if (logo != null) { diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/screen/mainmenu/MainMenuAudio.java b/core/src/main/java/coffee/liz/abstractionengine/app/screen/mainmenu/MainMenuAudio.java index 516fded..bb8beda 100644 --- a/core/src/main/java/coffee/liz/abstractionengine/app/screen/mainmenu/MainMenuAudio.java +++ b/core/src/main/java/coffee/liz/abstractionengine/app/screen/mainmenu/MainMenuAudio.java @@ -77,12 +77,21 @@ public class MainMenuAudio implements Runnable, Disposable { @Getter private Thread audioThread; + /** + * Creates a main menu audio controller. + * + * @param gridDimensions + * grid size used for scaling activity + */ public MainMenuAudio(final Vec2 gridDimensions) { this.device = Gdx.audio.newAudioDevice(SAMPLE_RATE, true); this.gridDimensions = gridDimensions; this.maxActivity = gridDimensions.getX() * gridDimensions.getY() * MAX_ACTIVITY_FRACTION; } + /** + * Starts the background audio thread. + */ public void start() { audioThread = new Thread(this, "main-menu-audio"); audioThread.setDaemon(true); @@ -90,8 +99,10 @@ public class MainMenuAudio implements Runnable, Disposable { } /** - * Updates activity metrics derived from current grid entities. This drives - * chord density and positional tones in the audio thread. + * Updates the audio inputs from current entities. + * + * @param entities + * grid entities to sample */ public void update(final Collection entities) { float totalActivity = 0.0f; @@ -121,6 +132,9 @@ public class MainMenuAudio implements Runnable, Disposable { } } + /** + * Audio thread loop. + */ @Override public void run() { while (running) { @@ -197,6 +211,9 @@ public class MainMenuAudio implements Runnable, Disposable { + (float) Math.sin(positionYPhase * TWO_PI) * positionVolume * POSITION_Y_GAIN; } + /** + * Releases audio resources. + */ @Override public void dispose() { running = false; diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/utils/FunctionUtils.java b/core/src/main/java/coffee/liz/abstractionengine/app/utils/FunctionUtils.java index 32f2dc1..8304977 100644 --- a/core/src/main/java/coffee/liz/abstractionengine/app/utils/FunctionUtils.java +++ b/core/src/main/java/coffee/liz/abstractionengine/app/utils/FunctionUtils.java @@ -4,6 +4,12 @@ public final class FunctionUtils { private FunctionUtils() { } + /** + * Runs the provided action and wraps failures. + * + * @param run + * action to execute + */ public static void runUninterrupted(final ThrowableRunnable run) { try { run.run(); @@ -14,6 +20,9 @@ public final class FunctionUtils { @FunctionalInterface public interface ThrowableRunnable { + /** + * Performs the action. + */ void run() throws E; } } diff --git a/core/src/main/java/coffee/liz/abstractionengine/app/utils/TimerUtils.java b/core/src/main/java/coffee/liz/abstractionengine/app/utils/TimerUtils.java index d411ddc..dea7bd2 100644 --- a/core/src/main/java/coffee/liz/abstractionengine/app/utils/TimerUtils.java +++ b/core/src/main/java/coffee/liz/abstractionengine/app/utils/TimerUtils.java @@ -6,6 +6,13 @@ public final class TimerUtils { private TimerUtils() { } + /** + * Creates a {@link Timer.Task} from a runnable. + * + * @param r + * action to run + * @return timer task that runs the action + */ public static Timer.Task sideEffectTask(final Runnable r) { return new Timer.Task() { @Override -- cgit v1.2.3-70-g09d2