Skip to content
Closed
12 changes: 6 additions & 6 deletions mod.hjson
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
#the mod name as displayed in-game
displayName: "Java Mod Template"
displayName: "Skirmish AI"

#the internal name of your mod
name: "example-java-mod"
name: "base-builder-ai-rework"

#your name
author: "You"
author: "Cedric <•>"

#the fully qualified main class of the mod
main: "example.ExampleJavaMod"
main: "com.ceddie.skirmishai.SkirmishAIMod"

#the mod description as seen in the mod dialog
description: "A Mindustry Java mod template."
description: "Newly improved Base Builder AI(?) Technically, it's a new AI."

#the mod version
version: 1.0.0
version: 0.1.0

#the minimum game build required to run this mod
minGameVersion: 160.3
Expand Down
35 changes: 35 additions & 0 deletions src/com/ceddie/skirmishai/SkirmishAIMod.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.ceddie.skirmishai;

import arc.util.Events;
import arc.util.Log;
import arc.util.Time;
import mindustry.game.EventType;
import mindustry.mod.Mod;

import com.ceddie.skirmishai.core.AIRegistry;

public class SkirmishAIMod extends Mod {

public SkirmishAIMod() {
Log.info("[Skirmish AI] Constructor initialized.");
}

@Override
public void init() {
Log.info("[Skirmish AI] Initializing systems...");

// Reset AI controllers whenever a world loads.
Events.on(EventType.WorldLoadEvent.class, event -> {
AIRegistry.clear();

Log.info("[Skirmish AI] World loaded. Registry reset.");
});

// Update registered AI controllers.
Events.run(EventType.Trigger.update, () -> {
AIRegistry.update(Time.delta);
});

Log.info("[Skirmish AI] Initialization complete.");
}
}
41 changes: 41 additions & 0 deletions src/com/ceddie/skirmishai/core/AIController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.ceddie.skirmishai.core;

import mindustry.game.Team;

public class AIController {

private final Team team;

private float elapsedTime;

public AIController(Team team) {
if (team == null) {
throw new IllegalArgumentException(
"AI team cannot be null."
);
}

this.team = team;
}

public void update(float delta) {
elapsedTime += delta;

// Future subsystem updates:
//
// Intelligence
// Strategy
// Economy
// Construction
// Defense
// Military
}

public Team getTeam() {
return team;
}

public float getElapsedTime() {
return elapsedTime;
}
}
55 changes: 55 additions & 0 deletions src/com/ceddie/skirmishai/core/AIRegistry.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package com.ceddie.skirmishai.core;

import arc.struct.Seq;
import mindustry.game.Team;

public final class AIRegistry {

private static final Seq<AIController> controllers =
new Seq<>();

private AIRegistry() {
}

public static void register(Team team) {
if (team == null || get(team) != null) {
return;
}

controllers.add(new AIController(team));
}

public static AIController get(Team team) {
for (AIController controller : controllers) {
if (controller.getTeam() == team) {
return controller;
}
}

return null;
}

public static void unregister(Team team) {
AIController controller = get(team);

if (controller != null) {
controllers.remove(controller, true);
}
}

public static void update(float delta) {
if (delta <= 0f) return;

for (AIController controller : controllers) {
controller.update(delta);
}
}

public static void clear() {
controllers.clear();
}

public static int size() {
return controllers.size;
}
}
27 changes: 27 additions & 0 deletions src/com/ceddie/skirmishai/debug/AIDebugging.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
//hello pls no bugs

package com.ceddie.skirmishai.debug;

import arc.util.Log;
import com.ceddie.skirmishai.core.AIRegistry;

public final class AIDebug {

private AIDebug() {
}

public static void printRegistry() {
Log.info(
"[Skirmish AI] Active controllers: @",
AIRegistry.size()
);
}

public static void log(String message) {
Log.info("[Skirmish AI] @", message);
}

public static void warn(String message) {
Log.warn("[Skirmish AI] @", message);
}
}