diff --git a/src/main/java/electrosphere/menu/debug/ImGuiAI.java b/src/main/java/electrosphere/menu/debug/ImGuiAI.java new file mode 100644 index 00000000..5dc3c94b --- /dev/null +++ b/src/main/java/electrosphere/menu/debug/ImGuiAI.java @@ -0,0 +1,55 @@ +package electrosphere.menu.debug; + +import electrosphere.engine.Globals; +import electrosphere.renderer.ui.imgui.ImGuiWindow; +import electrosphere.renderer.ui.imgui.ImGuiWindow.ImGuiWindowCallback; +import electrosphere.server.ai.AI; +import imgui.ImGui; + +/** + * AI debug menus + */ +public class ImGuiAI { + + //window for viewing information about the ai state + protected static ImGuiWindow aiWindow; + + /** + * Creates the windows in this file + */ + protected static void createAIWindows(){ + createAIDebugWindow(); + } + + /** + * Client scene entity view + */ + protected static void createAIDebugWindow(){ + aiWindow = new ImGuiWindow("AI"); + aiWindow.setCallback(new ImGuiWindowCallback() { + @Override + public void exec() { + //ui framework text + ImGui.text("AI"); + + //ai manager stuff + ImGui.text("AI Manager active: " + Globals.aiManager.isActive()); + if(ImGui.button("Toggle AI Manager")){ + Globals.aiManager.setActive(!Globals.aiManager.isActive()); + } + + if(ImGui.collapsingHeader("AI Statuses")){ + for(AI ai : Globals.aiManager.getAIList()){ + if(ai.getCurrentTree() != null){ + ImGui.text("Entity ID " + ai.getParent().getId() + " - Active Tree: " + ai.getCurrentTree().getCurrentStateName() + " - Priority: " + ai.getCurrentTree().getCurrentStatePriority()); + } + } + } + + } + }); + aiWindow.setOpen(false); + Globals.renderingEngine.getImGuiPipeline().addImGuiWindow(aiWindow); + } + +} diff --git a/src/main/java/electrosphere/menu/debug/ImGuiWindowMacros.java b/src/main/java/electrosphere/menu/debug/ImGuiWindowMacros.java index 581b7c8c..123de70e 100644 --- a/src/main/java/electrosphere/menu/debug/ImGuiWindowMacros.java +++ b/src/main/java/electrosphere/menu/debug/ImGuiWindowMacros.java @@ -60,6 +60,7 @@ public class ImGuiWindowMacros { ImGuiEntityMacros.createClientEntityWindows(); ImGuiUIFramework.createUIFrameworkWindows(); ImGuiControls.createControlsWindows(); + ImGuiAI.createAIDebugWindow(); } /** @@ -279,6 +280,10 @@ public class ImGuiWindowMacros { if(ImGui.button("Control State Debug")){ ImGuiControls.controlsWindow.setOpen(true); } + //controls state debug + if(ImGui.button("AI State Debug")){ + ImGuiAI.aiWindow.setOpen(true); + } //close button if(ImGui.button("Close")){ mainDebugWindow.setOpen(false); diff --git a/src/main/java/electrosphere/server/ai/AI.java b/src/main/java/electrosphere/server/ai/AI.java index fdb901ba..0219ca6a 100644 --- a/src/main/java/electrosphere/server/ai/AI.java +++ b/src/main/java/electrosphere/server/ai/AI.java @@ -36,6 +36,11 @@ public class AI { */ List trees = new LinkedList(); + /** + * The currently active tree + */ + AITree currentTree = null; + /** * Constructs an AI from a list of trees that should be present on the ai * @param treeData The list of data on trees to be provided @@ -75,7 +80,6 @@ public class AI { // //Update state and find the highest priority tree - AITree currentTree = null; for(AITree tree : trees){ tree.updateStateAndPriority(); if(currentTree == null){ @@ -133,5 +137,21 @@ public class AI { return null; } } + + /** + * Gets the parent entity of this AI + * @return The parent entity + */ + public Entity getParent(){ + return this.parent; + } + + /** + * Gets the current highest priority tree + * @return The highest priority tree + */ + public AITree getCurrentTree(){ + return this.currentTree; + } } diff --git a/src/main/java/electrosphere/server/ai/AIManager.java b/src/main/java/electrosphere/server/ai/AIManager.java index c818a757..fc28e521 100644 --- a/src/main/java/electrosphere/server/ai/AIManager.java +++ b/src/main/java/electrosphere/server/ai/AIManager.java @@ -68,6 +68,14 @@ public class AIManager { return active; } + /** + * Gets the list of all registered AIs + * @return The list of AIs + */ + public List getAIList(){ + return this.aiList; + } + /** * Attaches an AI to an entity * @param entity The entity diff --git a/src/main/java/electrosphere/server/datacell/Realm.java b/src/main/java/electrosphere/server/datacell/Realm.java index 0b1a9145..2ff732dc 100644 --- a/src/main/java/electrosphere/server/datacell/Realm.java +++ b/src/main/java/electrosphere/server/datacell/Realm.java @@ -6,7 +6,6 @@ import electrosphere.engine.Globals; import electrosphere.entity.Entity; import electrosphere.entity.Scene; import electrosphere.game.server.world.ServerWorldData; -import electrosphere.logger.LoggerInterface; import electrosphere.net.parser.net.message.NetworkMessage; import electrosphere.script.ScriptEngine; import electrosphere.server.content.ServerContentManager;