diff --git a/raylib/platform_android.go b/raylib/platform_android.go index d50dcaf..3e79e99 100644 --- a/raylib/platform_android.go +++ b/raylib/platform_android.go @@ -131,3 +131,7 @@ func (a *asset) Close() error { C.AAsset_close(a.ptr) return nil } + +func getInternalStoragePath() string { + return C.GoString(C.internal_storage_path) +} diff --git a/raylib/raylib.go b/raylib/raylib.go index e897128..a87909e 100644 --- a/raylib/raylib.go +++ b/raylib/raylib.go @@ -1195,16 +1195,25 @@ func newRenderTexture2DFromPointer(ptr unsafe.Pointer) RenderTexture2D { return *(*RenderTexture2D)(ptr) } -// Log message types +type TraceLogLevel int + +// Trace log level +// NOTE: Organized by priority level const ( - LogAll = iota + // Display all logs + LogAll TraceLogLevel = iota + // Trace logging, intended for internal use only LogTrace + // Debug logging, used for internal debugging, it should be disabled on release builds LogDebug + // Info logging, used for program execution info LogInfo + // Warning logging, used on recoverable failures LogWarning + // Error logging, used on unrecoverable failures LogError + // Fatal logging, used to abort program: exit(EXIT_FAILURE) LogFatal + // Disable logging LogNone ) - -var logTypeFlags byte = LogInfo | LogWarning | LogError diff --git a/raylib/utils.go b/raylib/utils.go index 39b1373..ea98082 100644 --- a/raylib/utils.go +++ b/raylib/utils.go @@ -1,49 +1,43 @@ -//go:build !android && !windows -// +build !android,!windows +//go:build !android +// +build !android package rl /* +#include "stdlib.h" #include "raylib.h" +void TraceLogWrapper(int logLevel, const char *text) +{ + TraceLog(logLevel, text); +} */ import "C" import ( "fmt" "os" + "unsafe" ) -// SetTraceLog - Enable trace log message types -func SetTraceLog(typeFlags byte) { - logTypeFlags = typeFlags - - ctypeFlags := (C.int)(typeFlags) - C.SetTraceLogLevel(ctypeFlags) +// Set the current threshold (minimum) log level +func SetTraceLog(logLevel TraceLogLevel) { + clogLevel := (C.int)(logLevel) + C.SetTraceLogLevel(clogLevel) } -// TraceLog - Show trace log messages (INFO, WARNING, ERROR, DEBUG) -func TraceLog(msgType int, text string, v ...interface{}) { - switch msgType { - case LogInfo: - if logTypeFlags&LogInfo != 0 { - fmt.Printf("INFO: "+text+"\n", v...) - } - case LogWarning: - if logTypeFlags&LogWarning != 0 { - fmt.Printf("WARNING: "+text+"\n", v...) - } - case LogError: - if logTypeFlags&LogError != 0 { - fmt.Printf("ERROR: "+text+"\n", v...) - } - case LogDebug: - if logTypeFlags&LogDebug != 0 { - fmt.Printf("DEBUG: "+text+"\n", v...) - } - } +// Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...) +func TraceLog(logLevel TraceLogLevel, text string, v ...interface{}) { + ctext := C.CString(fmt.Sprintf(text, v...)) + defer C.free(unsafe.Pointer(ctext)) + clogLevel := (C.int)(logLevel) + C.TraceLogWrapper(clogLevel, ctext) } // HomeDir - Returns user home directory -func HomeDir() string { - return os.Getenv("HOME") +// NOTE: On Android this returns internal data path and must be called after InitWindow +func HomeDir() string { + if homeDir, err := os.UserHomeDir(); err != nil { + return homeDir + } + return "" } diff --git a/raylib/utils_android.c b/raylib/utils_android.c deleted file mode 100644 index 2b80116..0000000 --- a/raylib/utils_android.c +++ /dev/null @@ -1,24 +0,0 @@ -// +build android - -#include "_cgo_export.h" -#include - -void log_info(const char *msg) { - __android_log_print(ANDROID_LOG_INFO, "raylib", "%s\n", msg); -} - -void log_warn(const char *msg) { - __android_log_print(ANDROID_LOG_WARN, "raylib", "%s\n", msg); -} - -void log_error(const char *msg) { - __android_log_print(ANDROID_LOG_ERROR, "raylib", "%s\n", msg); -} - -void log_debug(const char *msg) { - __android_log_print(ANDROID_LOG_DEBUG, "raylib", "%s\n", msg); -} - -const char* get_internal_storage_path() { - return internal_storage_path; -} diff --git a/raylib/utils_android.go b/raylib/utils_android.go index aa965f4..69c41c3 100644 --- a/raylib/utils_android.go +++ b/raylib/utils_android.go @@ -4,15 +4,12 @@ package rl /* +#include "stdlib.h" #include "raylib.h" -#include - -void log_info(const char *msg); -void log_warn(const char *msg); -void log_error(const char *msg); -void log_debug(const char *msg); - -extern char* get_internal_storage_path(); +void TraceLogWrapper(int logLevel, const char *text) +{ + TraceLog(logLevel, text); +} */ import "C" @@ -21,46 +18,22 @@ import ( "unsafe" ) -// SetTraceLog - Enable trace log message types (bit flags based) -func SetTraceLog(typeFlags byte) { - logTypeFlags = typeFlags - - ctypeFlags := (C.int)(typeFlags) - C.SetTraceLogLevel(ctypeFlags) +// Set the current threshold (minimum) log level +func SetTraceLog(logLevel TraceLogLevel) { + clogLevel := (C.int)(logLevel) + C.SetTraceLogLevel(clogLevel) } -// TraceLog - Trace log messages showing (INFO, WARNING, ERROR, DEBUG) -func TraceLog(msgType int, text string, v ...interface{}) { - switch msgType { - case LogInfo: - if logTypeFlags&LogInfo != 0 { - msg := C.CString(fmt.Sprintf("INFO: "+text, v...)) - defer C.free(unsafe.Pointer(msg)) - C.log_info(msg) - } - case LogWarning: - if logTypeFlags&LogWarning != 0 { - msg := C.CString(fmt.Sprintf("WARNING: "+text, v...)) - defer C.free(unsafe.Pointer(msg)) - C.log_warn(msg) - } - case LogError: - if logTypeFlags&LogError != 0 { - msg := C.CString(fmt.Sprintf("ERROR: "+text, v...)) - defer C.free(unsafe.Pointer(msg)) - C.log_error(msg) - } - case LogDebug: - if logTypeFlags&LogDebug != 0 { - msg := C.CString(fmt.Sprintf("DEBUG: "+text, v...)) - defer C.free(unsafe.Pointer(msg)) - C.log_debug(msg) - } - } +// Show trace log messages (LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERROR...) +func TraceLog(logLevel TraceLogLevel, text string, v ...interface{}) { + ctext := C.CString(fmt.Sprintf(text, v...)) + defer C.free(unsafe.Pointer(ctext)) + clogLevel := (C.int)(logLevel) + C.TraceLogWrapper(clogLevel, ctext) } // HomeDir - Returns user home directory // NOTE: On Android this returns internal data path and must be called after InitWindow func HomeDir() string { - return C.GoString(C.get_internal_storage_path()) + return getInternalStoragePath() } diff --git a/raylib/utils_windows.go b/raylib/utils_windows.go deleted file mode 100644 index 60ee359..0000000 --- a/raylib/utils_windows.go +++ /dev/null @@ -1,53 +0,0 @@ -//go:build windows -// +build windows - -package rl - -/* -#include "raylib.h" -*/ -import "C" - -import ( - "fmt" - "os" -) - -// SetTraceLog - Enable trace log message types (bit flags based) -func SetTraceLog(typeFlags byte) { - logTypeFlags = typeFlags - - ctypeFlags := (C.int)(typeFlags) - C.SetTraceLogLevel(ctypeFlags) -} - -// TraceLog - Show trace log messages (INFO, WARNING, ERROR, DEBUG) -func TraceLog(msgType int, text string, v ...interface{}) { - switch msgType { - case LogInfo: - if logTypeFlags&LogInfo != 0 { - fmt.Printf("INFO: "+text+"\n", v...) - } - case LogWarning: - if logTypeFlags&LogWarning != 0 { - fmt.Printf("WARNING: "+text+"\n", v...) - } - case LogError: - if logTypeFlags&LogError != 0 { - fmt.Printf("ERROR: "+text+"\n", v...) - } - case LogDebug: - if logTypeFlags&LogDebug != 0 { - fmt.Printf("DEBUG: "+text+"\n", v...) - } - } -} - -// HomeDir - Returns user home directory -func HomeDir() string { - home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH") - if home == "" { - home = os.Getenv("USERPROFILE") - } - return home -}