Skip to content

Commit

Permalink
Move logger out of engine class
Browse files Browse the repository at this point in the history
  • Loading branch information
dpjudas committed Jul 1, 2024
1 parent 75e36c9 commit 6b08e37
Show file tree
Hide file tree
Showing 21 changed files with 177 additions and 132 deletions.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ set(SURREALCOMMON_SOURCES
SurrealEngine/EditorApp.h
SurrealEngine/DebuggerApp.cpp
SurrealEngine/DebuggerApp.h
SurrealEngine/Logger.cpp
SurrealEngine/Logger.h
SurrealEngine/Engine.cpp
SurrealEngine/Engine.h
SurrealEngine/Exception.cpp
Expand Down
2 changes: 1 addition & 1 deletion SurrealEngine/Audio/AudioDevice.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ class OpenALAudioDevice : public AudioDevice
ALSoundSource& source = sources[channel];
if (source.IsPlaying())
{
engine->LogMessage("Attempted to play sound on active channel " + channel);
LogMessage("Attempted to play sound on active channel " + channel);
return 0;
}

Expand Down
3 changes: 2 additions & 1 deletion SurrealEngine/DebuggerApp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ int DebuggerApp::Main(std::vector<std::string> args)
InitWidgetResources();
WidgetTheme::SetTheme(std::make_unique<DarkWidgetTheme>());

Logger::Get()->SetCallback([&](const LogMessageLine& line) { PrintLog(line); });

WriteOutput(ColorEscape(96) + "Welcome to the Surreal Engine debugger!" + ResetEscape() + NewLine());
WriteOutput(NewLine());
WriteOutput("Type " + ColorEscape(92) + "help" + ResetEscape() + " for a list of commands" + NewLine());
Expand All @@ -52,7 +54,6 @@ int DebuggerApp::Main(std::vector<std::string> args)

Engine engine(launchinfo);
engine.tickDebugger = [&]() { Tick(); };
engine.printLogDebugger = [&](const LogMessageLine& line) { PrintLog(line); };

WritePrompt();
while (!ExitRequested)
Expand Down
24 changes: 11 additions & 13 deletions SurrealEngine/EditorApp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,28 +17,26 @@ int EditorApp::main(std::vector<std::string> args)
InitWidgetResources();
WidgetTheme::SetTheme(std::make_unique<LightWidgetTheme>());

CommandLine cmd(args);
commandline = &cmd;

GameLaunchInfo info = GameFolderSelection::GetLaunchInfo();
if (!info.gameRootFolder.empty())
try
{
auto engine = std::make_unique<Engine>(info);
CommandLine cmd(args);
commandline = &cmd;

try
GameLaunchInfo info = GameFolderSelection::GetLaunchInfo();
if (!info.gameRootFolder.empty())
{
Engine engine(info);

auto editorWindow = std::make_unique<EditorMainWindow>();
editorWindow->SetFrameGeometry(Rect::xywh(0.0, 0.0, 1024.0, 768.0));
editorWindow->Show();

DisplayWindow::RunLoop();
}
catch (const std::exception& e)
{
auto log = std::move(engine->Log);
engine.reset();
ErrorWindow::ExecModal(e.what(), log);
}
}
catch (const std::exception& e)
{
ErrorWindow::ExecModal(e.what(), Logger::Get()->GetLog());
}

DeinitWidgetResources();
Expand Down
38 changes: 1 addition & 37 deletions SurrealEngine/Engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ void Engine::Run()
if (EntryLevel)
EntryLevelInfo->TimeSeconds() += entryLevelElapsed;
LevelInfo->TimeSeconds() += levelElapsed;
Logger::Get()->SetTimeSeconds(LevelInfo->TimeSeconds());

UpdateInput(realTimeElapsed);

Expand Down Expand Up @@ -1236,43 +1237,6 @@ void Engine::SetPause(bool value)
{
}

void Engine::LogMessage(const std::string& message)
{
if (!Frame::Callstack.empty() && Frame::Callstack.back()->Func)
{
UStruct* func = Frame::Callstack.back()->Func;
std::string name;
for (UStruct* s = func; s != nullptr; s = s->StructParent)
{
if (name.empty())
name = s->Name.ToString();
else
name = s->Name.ToString() + "." + name;
}

LogMessageLine line;
line.Time = LevelInfo ? LevelInfo->TimeSeconds() : 0.0f;
line.Source = name;
line.Text = message;
Log.push_back(std::move(line));
}
else
{
LogMessageLine line;
line.Time = LevelInfo ? LevelInfo->TimeSeconds() : 0.0f;
line.Text = message;
Log.push_back(std::move(line));
}

if (printLogDebugger)
printLogDebugger(Log.back());
}

void Engine::LogUnimplemented(const std::string& message)
{
LogMessage("Unimplemented: " + message);
}

const char* Engine::keynames[256] =
{
/*00*/ "None", "LeftMouse", "RightMouse", "Cancel",
Expand Down
14 changes: 1 addition & 13 deletions SurrealEngine/Engine.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once

#include "Logger.h"
#include "Math/vec.h"
#include "Math/mat.h"
#include "Math/floating.h"
Expand Down Expand Up @@ -52,13 +53,6 @@ struct FSceneNode;
struct FSurfaceFacet;
struct MeshFace;

struct LogMessageLine
{
float Time;
std::string Source;
std::string Text;
};

class Engine : public GameWindowHost
{
public:
Expand Down Expand Up @@ -141,11 +135,6 @@ class Engine : public GameWindowHost
bool TransferItems = false;
} ClientTravelInfo;

void LogMessage(const std::string& message);
void LogUnimplemented(const std::string& message);

std::list<LogMessageLine> Log;

GameLaunchInfo LaunchInfo;
std::unique_ptr<PackageManager> packages;
std::unique_ptr<GameWindow> window; // TODO: Move into UViewport
Expand Down Expand Up @@ -194,7 +183,6 @@ class Engine : public GameWindowHost
std::map<std::string, ActiveInputAxis> activeInputAxes;

std::function<void()> tickDebugger;
std::function<void(const LogMessageLine& line)> printLogDebugger;
};

extern Engine* engine;
27 changes: 13 additions & 14 deletions SurrealEngine/GameApp.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@

#include "Precomp.h"
#include "Exception.h"
#include "Logger.h"
#include "GameApp.h"
#include "CommandLine.h"
#include "GameFolder.h"
Expand All @@ -19,24 +20,22 @@ int GameApp::main(std::vector<std::string> args)
InitWidgetResources();
WidgetTheme::SetTheme(std::make_unique<DarkWidgetTheme>());

CommandLine cmd(args);
commandline = &cmd;

GameLaunchInfo info = GameFolderSelection::GetLaunchInfo();
if (!info.gameRootFolder.empty())
try
{
auto engine = std::make_unique<Engine>(info);
try
{
engine->Run();
}
catch (const std::exception& e)
CommandLine cmd(args);
commandline = &cmd;

GameLaunchInfo info = GameFolderSelection::GetLaunchInfo();
if (!info.gameRootFolder.empty())
{
auto log = std::move(engine->Log);
engine.reset();
ErrorWindow::ExecModal(e.what(), log);
Engine engine(info);
engine.Run();
}
}
catch (const std::exception& e)
{
ErrorWindow::ExecModal(e.what(), Logger::Get()->GetLog());
}

DeinitWidgetResources();
return 0;
Expand Down
57 changes: 57 additions & 0 deletions SurrealEngine/Logger.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@

#include "Precomp.h"
#include "Logger.h"
#include "VM/Frame.h"

void LogMessage(const std::string& message)
{
Logger::Get()->LogMessage(message);
}

void LogUnimplemented(const std::string& message)
{
Logger::Get()->LogUnimplemented(message);
}

void Logger::LogMessage(const std::string& message)
{
if (!Frame::Callstack.empty() && Frame::Callstack.back()->Func)
{
UStruct* func = Frame::Callstack.back()->Func;
std::string name;
for (UStruct* s = func; s != nullptr; s = s->StructParent)
{
if (name.empty())
name = s->Name.ToString();
else
name = s->Name.ToString() + "." + name;
}

LogMessageLine line;
line.Time = time;
line.Source = name;
line.Text = message;
Log.push_back(std::move(line));
}
else
{
LogMessageLine line;
line.Time = time;
line.Text = message;
Log.push_back(std::move(line));
}

if (printLogDebugger)
printLogDebugger(Log.back());
}

void Logger::LogUnimplemented(const std::string& message)
{
LogMessage("Unimplemented: " + message);
}

Logger* Logger::Get()
{
static Logger logger;
return &logger;
}
36 changes: 36 additions & 0 deletions SurrealEngine/Logger.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
#pragma once

#include <string>
#include <list>
#include <functional>

void LogMessage(const std::string& message);
void LogUnimplemented(const std::string& message);

struct LogMessageLine
{
float Time;
std::string Source;
std::string Text;
};

class Logger
{
public:
static Logger* Get();

void LogMessage(const std::string& message);
void LogUnimplemented(const std::string& message);
void SetTimeSeconds(float value) { time = value; }
void SetCallback(std::function<void(const LogMessageLine& line)> cb) { printLogDebugger = std::move(cb); }
const std::list<LogMessageLine>& GetLog() const { return Log; }

private:
float time = 0.0f;
std::list<LogMessageLine> Log;
std::function<void(const LogMessageLine& line)> printLogDebugger;

Logger() = default;
Logger(const Logger&) = delete;
Logger& operator=(const Logger&) = delete;
};
24 changes: 12 additions & 12 deletions SurrealEngine/Native/NActor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ void NActor::Destroy(UObject* Self, BitfieldBool& ReturnValue)

void NActor::Error(UObject* Self, const std::string& S)
{
engine->LogMessage("Error: " + S);
LogMessage("Error: " + S);
UObject::Cast<UActor>(Self)->Destroy();
}

Expand Down Expand Up @@ -516,55 +516,55 @@ void NActor::VisibleCollidingActors(UObject* Self, UObject* BaseClass, UObject*&

void NActor::GetPlayerPawn(UObject* Self, UObject*& ReturnValue)
{
engine->LogUnimplemented("Actor.GetPlayerPawn");
LogUnimplemented("Actor.GetPlayerPawn");
ReturnValue = nullptr;
}

void NActor::AIClearEvent(UObject* Self, const NameString& eventName)
{
engine->LogUnimplemented("Actor.AIClearEvent");
LogUnimplemented("Actor.AIClearEvent");
}

void NActor::AIClearEventCallback(UObject* Self, const NameString& eventName)
{
engine->LogUnimplemented("Actor.AIClearEventCallback");
LogUnimplemented("Actor.AIClearEventCallback");
}

void NActor::AIEndEvent(UObject* Self, const NameString& eventName, uint8_t eventType)
{
engine->LogUnimplemented("Actor.AIEndEvent");
LogUnimplemented("Actor.AIEndEvent");
}

void NActor::AIGetLightLevel(UObject* Self, const vec3& Location, float& ReturnValue)
{
engine->LogUnimplemented("Actor.AIGetLightLevel");
LogUnimplemented("Actor.AIGetLightLevel");
ReturnValue = 1.0f;
}

void NActor::AISendEvent(UObject* Self, const NameString& eventName, uint8_t eventType, float* Value, float* Radius)
{
engine->LogUnimplemented("Actor.AISendEvent");
LogUnimplemented("Actor.AISendEvent");
}

void NActor::AISetEventCallback(UObject* Self, const NameString& eventName, const NameString& callback, NameString* scoreCallback, BitfieldBool* bCheckVisibility, BitfieldBool* bCheckDir, BitfieldBool* bCheckCylinder, BitfieldBool* bCheckLOS)
{
engine->LogUnimplemented("Actor.AISetEventCallback");
LogUnimplemented("Actor.AISetEventCallback");
}

void NActor::AIStartEvent(UObject* Self, const NameString& eventName, uint8_t eventType, float* Value, float* Radius)
{
engine->LogUnimplemented("Actor.AIStartEvent");
LogUnimplemented("Actor.AIStartEvent");
}

void NActor::AIVisibility(UObject* Self, BitfieldBool* bIncludeVelocity, float& ReturnValue)
{
engine->LogUnimplemented("Actor.AIVisibility");
LogUnimplemented("Actor.AIVisibility");
ReturnValue = 0.0f;
}

void NActor::TraceTexture(UObject* Self, UObject* BaseClass, UObject*& Actor, NameString& texName, NameString& texGroup, int& flags, vec3& HitLoc, vec3& HitNorm, const vec3& End, vec3* Start, vec3* Extent)
{
engine->LogUnimplemented("Actor.TraceTexture");
LogUnimplemented("Actor.TraceTexture");
// Deus Ex
// Note: this is not correct, but it will give unrealscript an iterator
UActor* SelfActor = UObject::Cast<UActor>(Self);
Expand All @@ -576,7 +576,7 @@ void NActor::TraceTexture(UObject* Self, UObject* BaseClass, UObject*& Actor, Na

void NActor::TraceVisibleActors(UObject* Self, UObject* BaseClass, UObject*& Actor, vec3& HitLoc, vec3& HitNorm, const vec3& End, vec3* Start, vec3* Extent)
{
engine->LogUnimplemented("Actor.TraceVisibleActors");
LogUnimplemented("Actor.TraceVisibleActors");
// Deus Ex
// Note: this is not correct, but it will give unrealscript an iterator
UActor* SelfActor = UObject::Cast<UActor>(Self);
Expand Down
2 changes: 1 addition & 1 deletion SurrealEngine/Native/NConsole.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,5 @@ void NConsole::ConsoleCommand(UObject* Self, const std::string& S, BitfieldBool&

void NConsole::SaveTimeDemo(UObject* Self, const std::string& S)
{
engine->LogUnimplemented("Console.SaveTimeDemo(" + S + ")");
LogUnimplemented("Console.SaveTimeDemo(" + S + ")");
}
Loading

0 comments on commit 6b08e37

Please sign in to comment.