DucktapeEngine / Ducktape

Ducktape - An open source 3d C++ game engine.
MIT License
127 stars 25 forks source link

Redirect std::cout to both Debug and stdout #172

Open aryanbaburajan opened 1 year ago

aryanbaburajan commented 1 year ago

Is your feature request related to a problem? Please describe. As of now, once an instance of Engine has been created, all std::cout and std::cerr logs get forwarded into the Debug class, instead of the default stdout/stderr. Though it's useful, it removes the ability of users to debug log normally, especially in scenarios where the Editor isn't open, or the Debug panel is inaccessible, for example in a released game distribution.

Describe the solution you'd like Copy std::cout/std::cerr instead of simply forwarding, so that it is forwarded to both stdout/stderr (otherwise, the terminal window), while also being logged in the Debug class.

Yeffian commented 1 year ago

Hey, could I be assigned to this?

aryanbaburajan commented 1 year ago

Due to the one std::streambuf limit per std::ostream, logging has been split into two. Printing to std::cout and std::cerr outputs to the default stdout (terminal), like normal. Printing to engine.debug outputs to the Editor's built in Console.

Example usage:

engine.debug.err << "This is an error\n";
engine.debug.log << "This is a log\n";

Styling based on log type yet to be implemented.

aryanbaburajan commented 1 year ago

On second thought this looks possible to me now. I'll give it a try soon.