logger toggle debug window
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good

This commit is contained in:
austin 2024-08-16 22:20:09 -04:00
parent b729208fc3
commit 277b9b6ee3
7 changed files with 205 additions and 16 deletions

View File

@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
#Fri Aug 16 18:09:29 EDT 2024
buildNumber=257
#Fri Aug 16 19:38:51 EDT 2024
buildNumber=258

View File

@ -601,6 +601,7 @@ Fix ui alignment for item panels in inventory menus (ie dont have to place in co
Netconfig file support
Fix rotation not sending correctly on initialization of creatures on client
Fix F2 menu not regaining controls when Xing menu instead of hitting F2 to close
Logger toggle debug window
# TODO

View File

@ -20,12 +20,17 @@ public class Logger {
//the level of this log
LogLevel level;
//The name of the logger
String name;
/**
* Creates a logger channel
* @param name The name of the logger
* @param level The level of message to report on this channel
*/
public Logger(LogLevel level){
public Logger(String name, LogLevel level){
this.name = name;
this.level = level;
}
@ -118,7 +123,39 @@ public class Logger {
* @param message The message
*/
public void PRINT(LogLevel level, String message){
switch(level){
case ERROR:{
this.ERROR(new Exception(message));
} break;
case WARNING:{
this.WARNING(message);
} break;
case INFO:{
this.INFO(message);
} break;
case DEBUG:{
this.DEBUG(message);
} break;
case LOOP_DEBUG:{
this.DEBUG_LOOP(message);
} break;
}
}
/**
* Gets the level of the logger
* @return The level
*/
public LogLevel getLevel(){
return this.level;
}
/**
* Gets the name of the logger
* @return the name
*/
public String getName(){
return this.name;
}
}

View File

@ -1,5 +1,8 @@
package electrosphere.logger;
import java.util.Arrays;
import java.util.List;
import electrosphere.logger.Logger.LogLevel;
/**
@ -26,18 +29,41 @@ public class LoggerInterface {
* Initializes all logic objects
*/
public static void initLoggers(){
loggerStartup = new Logger(LogLevel.WARNING);
loggerNetworking = new Logger(LogLevel.WARNING);
loggerFileIO = new Logger(LogLevel.WARNING);
loggerGameLogic = new Logger(LogLevel.WARNING);
loggerRenderer = new Logger(LogLevel.WARNING);
loggerEngine = new Logger(LogLevel.WARNING);
loggerAuth = new Logger(LogLevel.WARNING);
loggerDB = new Logger(LogLevel.WARNING);
loggerAudio = new Logger(LogLevel.WARNING);
loggerUI = new Logger(LogLevel.WARNING);
loggerScripts = new Logger(LogLevel.WARNING);
loggerAI = new Logger(LogLevel.LOOP_DEBUG);
loggerStartup = new Logger("Startup", LogLevel.WARNING);
loggerNetworking = new Logger("Networking", LogLevel.WARNING);
loggerFileIO = new Logger("File IO", LogLevel.WARNING);
loggerGameLogic = new Logger("Game Logic", LogLevel.WARNING);
loggerRenderer = new Logger("Renderer", LogLevel.WARNING);
loggerEngine = new Logger("Engine", LogLevel.WARNING);
loggerAuth = new Logger("Auth", LogLevel.WARNING);
loggerDB = new Logger("DB", LogLevel.WARNING);
loggerAudio = new Logger("Audio", LogLevel.WARNING);
loggerUI = new Logger("UI", LogLevel.WARNING);
loggerScripts = new Logger("Scripts", LogLevel.WARNING);
loggerAI = new Logger("AI", LogLevel.WARNING);
loggerStartup.INFO("Initialized loggers");
}
/**
* Gets the list of all loggers
* @return The list of all loggers
*/
public static List<Logger> getLoggers(){
Logger[] loggerList = new Logger[]{
loggerAI,
loggerAudio,
loggerAuth,
loggerNetworking,
loggerFileIO,
loggerGameLogic,
loggerRenderer,
loggerEngine,
loggerStartup,
loggerDB,
loggerUI,
loggerScripts,
};
return Arrays.asList(loggerList);
}
}

View File

@ -0,0 +1,111 @@
package electrosphere.menu.debug;
import electrosphere.engine.Globals;
import electrosphere.logger.Logger;
import electrosphere.logger.LoggerInterface;
import electrosphere.logger.Logger.LogLevel;
import electrosphere.renderer.ui.imgui.ImGuiWindow;
import electrosphere.renderer.ui.imgui.ImGuiWindow.ImGuiWindowCallback;
import imgui.ImGui;
/**
* Windows for dealing with loggers
*/
public class ImGuiLogger {
//window for viewing information about loggers
protected static ImGuiWindow loggersWindow;
/**
* Creates the windows in this file
*/
protected static void createLoggersWindows(){
createLoggersWindow();
}
/**
* loggers view
*/
protected static void createLoggersWindow(){
loggersWindow = new ImGuiWindow("Loggers");
loggersWindow.setCallback(new ImGuiWindowCallback() {
@Override
public void exec() {
//ui framework text
ImGui.text("Loggers");
ImGui.beginTable("Loggers", 6);
for(Logger logger : LoggerInterface.getLoggers()){
ImGui.tableNextRow();
ImGui.tableNextColumn();
ImGui.text(logger.getName() + ": ");
ImGui.tableNextColumn();
if(logger.getLevel() == LogLevel.ERROR){
ImGui.text("Error");
} else {
ImGui.pushID(logger.getName() + "error");
if(ImGui.button("Error")){
logger.setLevel(LogLevel.ERROR);
}
ImGui.popID();
}
ImGui.tableNextColumn();
if(logger.getLevel() == LogLevel.WARNING){
ImGui.text("Warning");
} else {
ImGui.pushID(logger.getName() + "warning");
if(ImGui.button("Warning")){
logger.setLevel(LogLevel.WARNING);
}
ImGui.popID();
}
ImGui.tableNextColumn();
if(logger.getLevel() == LogLevel.INFO){
ImGui.text("Info");
} else {
ImGui.pushID(logger.getName() + "info");
if(ImGui.button("Info")){
logger.setLevel(LogLevel.INFO);
}
ImGui.popID();
}
ImGui.tableNextColumn();
if(logger.getLevel() == LogLevel.DEBUG){
ImGui.text("Debug");
} else {
ImGui.pushID(logger.getName() + "debug");
if(ImGui.button("Debug")){
logger.setLevel(LogLevel.DEBUG);
}
ImGui.popID();
}
ImGui.tableNextColumn();
if(logger.getLevel() == LogLevel.LOOP_DEBUG){
ImGui.text("Debug_Loop");
} else {
ImGui.pushID(logger.getName() + "debug_loop");
if(ImGui.button("Debug_Loop")){
logger.setLevel(LogLevel.LOOP_DEBUG);
}
ImGui.popID();
}
}
ImGui.endTable();
}
});
loggersWindow.setOpen(false);
Globals.renderingEngine.getImGuiPipeline().addImGuiWindow(loggersWindow);
}
}

View File

@ -46,6 +46,7 @@ public class ImGuiWindowMacros {
ImGuiControls.createControlsWindows();
ImGuiAI.createAIDebugWindow();
ImGuiAudio.createAudioDebugMenu();
ImGuiLogger.createLoggersWindows();
}
/**
@ -156,6 +157,10 @@ public class ImGuiWindowMacros {
if(ImGui.button("AI State Debug")){
ImGuiAI.aiWindow.setOpen(true);
}
//logger state control
if(ImGui.button("Loggers")){
ImGuiLogger.loggersWindow.setOpen(true);
}
//close button
if(ImGui.button("Close")){
mainDebugWindow.setOpen(false);

View File

@ -34,7 +34,7 @@ public class MeleeTargetingNode implements AITreeNode {
@Override
public AITreeNodeResult evaluate(Entity entity, Blackboard blackboard){
if(MeleeTargetingNode.hasTarget(blackboard)){
if(MeleeTargetingNode.hasTarget(blackboard) && this.targetIsValid(entity)){
return AITreeNodeResult.SUCCESS;
}
@ -65,6 +65,15 @@ public class MeleeTargetingNode implements AITreeNode {
return null;
}
/**
* Makes sure the target is valid
* @param entity The target entity
* @return true if valid, false otherwise
*/
private boolean targetIsValid(Entity entity){
return Globals.realmManager.getEntityRealm(entity) != null;
}
/**
* checks if the blackboard contains a melee target
* @param blackboard The blackboard