AI debug menu
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2024-07-21 16:56:21 -04:00
parent b10b7e8407
commit 9c53027bf0
5 changed files with 89 additions and 2 deletions

View File

@ -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);
}
}

View File

@ -60,6 +60,7 @@ public class ImGuiWindowMacros {
ImGuiEntityMacros.createClientEntityWindows(); ImGuiEntityMacros.createClientEntityWindows();
ImGuiUIFramework.createUIFrameworkWindows(); ImGuiUIFramework.createUIFrameworkWindows();
ImGuiControls.createControlsWindows(); ImGuiControls.createControlsWindows();
ImGuiAI.createAIDebugWindow();
} }
/** /**
@ -279,6 +280,10 @@ public class ImGuiWindowMacros {
if(ImGui.button("Control State Debug")){ if(ImGui.button("Control State Debug")){
ImGuiControls.controlsWindow.setOpen(true); ImGuiControls.controlsWindow.setOpen(true);
} }
//controls state debug
if(ImGui.button("AI State Debug")){
ImGuiAI.aiWindow.setOpen(true);
}
//close button //close button
if(ImGui.button("Close")){ if(ImGui.button("Close")){
mainDebugWindow.setOpen(false); mainDebugWindow.setOpen(false);

View File

@ -36,6 +36,11 @@ public class AI {
*/ */
List<AITree> trees = new LinkedList<AITree>(); List<AITree> trees = new LinkedList<AITree>();
/**
* The currently active tree
*/
AITree currentTree = null;
/** /**
* Constructs an AI from a list of trees that should be present on the ai * 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 * @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 //Update state and find the highest priority tree
AITree currentTree = null;
for(AITree tree : trees){ for(AITree tree : trees){
tree.updateStateAndPriority(); tree.updateStateAndPriority();
if(currentTree == null){ if(currentTree == null){
@ -134,4 +138,20 @@ public class AI {
} }
} }
/**
* 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;
}
} }

View File

@ -68,6 +68,14 @@ public class AIManager {
return active; return active;
} }
/**
* Gets the list of all registered AIs
* @return The list of AIs
*/
public List<AI> getAIList(){
return this.aiList;
}
/** /**
* Attaches an AI to an entity * Attaches an AI to an entity
* @param entity The entity * @param entity The entity

View File

@ -6,7 +6,6 @@ import electrosphere.engine.Globals;
import electrosphere.entity.Entity; import electrosphere.entity.Entity;
import electrosphere.entity.Scene; import electrosphere.entity.Scene;
import electrosphere.game.server.world.ServerWorldData; import electrosphere.game.server.world.ServerWorldData;
import electrosphere.logger.LoggerInterface;
import electrosphere.net.parser.net.message.NetworkMessage; import electrosphere.net.parser.net.message.NetworkMessage;
import electrosphere.script.ScriptEngine; import electrosphere.script.ScriptEngine;
import electrosphere.server.content.ServerContentManager; import electrosphere.server.content.ServerContentManager;