Skip to content

Instantly share code, notes, and snippets.

@Geolykt
Created December 20, 2025 21:14
Show Gist options
  • Select an option

  • Save Geolykt/789ac5957968095f96c1a45dc424f81a to your computer and use it in GitHub Desktop.

Select an option

Save Geolykt/789ac5957968095f96c1a45dc424f81a to your computer and use it in GitHub Desktop.
Test class of SLAPI's chart API
package de.geolykt.starloader;
import java.util.Objects;
import org.jetbrains.annotations.NotNull;
import de.geolykt.starloader.api.Galimulator;
import de.geolykt.starloader.api.empire.ActiveEmpire;
import de.geolykt.starloader.api.empire.Empire;
import de.geolykt.starloader.api.event.EventHandler;
import de.geolykt.starloader.api.event.Listener;
import de.geolykt.starloader.api.event.lifecycle.LogicalTickEvent;
import de.geolykt.starloader.api.event.lifecycle.LogicalTickEvent.Phase;
import de.geolykt.starloader.api.gui.Drawing;
import de.geolykt.starloader.api.gui.Dynbind;
import de.geolykt.starloader.api.gui.graph.LineChartComponentSupplier;
import de.geolykt.starloader.api.gui.graph.RollingChartData;
import de.geolykt.starloader.api.gui.screen.ComponentSupplier;
import de.geolykt.starloader.api.gui.screen.LineWrappingInfo;
import de.geolykt.starloader.api.gui.screen.Screen;
import de.geolykt.starloader.api.gui.screen.ScreenBuilder;
import de.geolykt.starloader.api.gui.text.TextColor;
public class TestListener implements Listener {
private class ShowScienceChartKeybind implements Dynbind {
private Screen screen;
@Override
public @NotNull String getDescription() {
return "Shows a chart with the science levels of the empires.";
}
@Override
public @NotNull String getKeyDescription() {
return "Shift + S";
}
@Override
public boolean isValidChar(char character) {
return character == 'S';
}
@Override
public boolean isValidKeycode(int key) {
return false;
}
@Override
public void performAction() {
if (screen == null) {
ScreenBuilder builder = ScreenBuilder.getBuilder();
LineWrappingInfo lwInfo = new LineWrappingInfo(false, false, false, false);
ComponentSupplier supplier = new LineChartComponentSupplier(scienceLevels, lwInfo, 800, 500);
builder.addComponentSupplier(supplier);
builder.setHeaderColor(TextColor.DARK_GREEN);
builder.setHeaderEnabled(true);
builder.setTitle("Science Graph test");
builder.setWidth(820);
screen = builder.build();
}
Drawing.showScreen(Objects.requireNonNull(screen));
}
}
private @NotNull RollingChartData<Empire> scienceLevels = new RollingChartData<>(10_000);
public TestListener() {
Galimulator.registerKeybind(new ShowScienceChartKeybind());
}
@EventHandler
public void onTick(LogicalTickEvent event) {
if (event.getPhase() == Phase.PRE_LOGICAL && (Galimulator.getGameYear() % 100) == 0) {
scienceLevels.incrementPosition();
for (ActiveEmpire e : Galimulator.getEmpires()) {
scienceLevels.addNode(e, e.getTechnologyLevel());
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment