diff --git a/mod.hjson b/mod.hjson index c4b43edf..3c0b1c63 100644 --- a/mod.hjson +++ b/mod.hjson @@ -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 diff --git a/src/com/ceddie/skirmishai/SkirmishAIMod.java b/src/com/ceddie/skirmishai/SkirmishAIMod.java new file mode 100644 index 00000000..c87c461f --- /dev/null +++ b/src/com/ceddie/skirmishai/SkirmishAIMod.java @@ -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."); + } +} \ No newline at end of file diff --git a/src/com/ceddie/skirmishai/core/AIController.java b/src/com/ceddie/skirmishai/core/AIController.java new file mode 100644 index 00000000..7be84739 --- /dev/null +++ b/src/com/ceddie/skirmishai/core/AIController.java @@ -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; + } +} \ No newline at end of file diff --git a/src/com/ceddie/skirmishai/core/AIRegistry.java b/src/com/ceddie/skirmishai/core/AIRegistry.java new file mode 100644 index 00000000..707a640a --- /dev/null +++ b/src/com/ceddie/skirmishai/core/AIRegistry.java @@ -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 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; + } +} \ No newline at end of file diff --git a/src/com/ceddie/skirmishai/debug/AIDebugging.java b/src/com/ceddie/skirmishai/debug/AIDebugging.java new file mode 100644 index 00000000..5e995e3f --- /dev/null +++ b/src/com/ceddie/skirmishai/debug/AIDebugging.java @@ -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); + } +} \ No newline at end of file