Plasma Engine  2.0
Loading...
Searching...
No Matches
Console.h
1#pragma once
2
3#include <Core/Console/ConsoleFunction.h>
4#include <Foundation/Communication/Event.h>
5#include <Foundation/Configuration/CVar.h>
6#include <Foundation/Containers/Deque.h>
7#include <Foundation/Containers/Map.h>
8#include <Foundation/Containers/StaticArray.h>
9#include <Foundation/Strings/StringBuilder.h>
10#include <Foundation/Threading/Mutex.h>
11#include <Foundation/Types/RefCounted.h>
12#include <Foundation/Types/SharedPtr.h>
13
14struct PL_CORE_DLL plConsoleString
15{
16 enum class Type : plUInt8
17 {
18 Default,
19 Error,
20 SeriousWarning,
21 Warning,
22 Note,
23 Success,
24 Executed,
25 VarName,
26 FuncName,
27 Dev,
28 Debug,
29 };
30
31 Type m_Type = Type::Default;
32 plString m_sText;
33 plColor GetColor() const;
34
35 bool operator<(const plConsoleString& rhs) const { return m_sText < rhs.m_sText; }
36};
37
38struct PL_CORE_DLL plCommandInterpreterState
39{
40 plStringBuilder m_sInput;
42
43 void AddOutputLine(const plFormatString& text, plConsoleString::Type type = plConsoleString::Type::Default);
44};
45
46class PL_CORE_DLL plCommandInterpreter : public plRefCounted
47{
48public:
49 virtual void Interpret(plCommandInterpreterState& inout_state) = 0;
50
51 virtual void AutoComplete(plCommandInterpreterState& inout_state);
52
54 static void FindPossibleCVars(plStringView sVariable, plDeque<plString>& ref_commonStrings, plDeque<plConsoleString>& ref_consoleStrings);
55
57 static void FindPossibleFunctions(plStringView sVariable, plDeque<plString>& ref_commonStrings, plDeque<plConsoleString>& ref_consoleStrings);
58
60 static const plString FindCommonString(const plDeque<plString>& strings);
61};
62
65{
66 enum class Type : plInt32
67 {
69 };
70
71 Type m_Type;
72
75};
76
77class PL_CORE_DLL plConsole
78{
79public:
80 plConsole();
81 virtual ~plConsole();
82
85
86public:
88 const plEvent<const plConsoleEvent&>& Events() const { return m_Events; }
89
90protected:
93
95
98
99public:
101 plMutex& GetMutex() const { return m_Mutex; }
102
103 static void SetMainConsole(plConsole* pConsole);
104 static plConsole* GetMainConsole();
105
106protected:
107 mutable plMutex m_Mutex;
108
109private:
110 static plConsole* s_pMainConsole;
111
113
116
117public:
121 void SetCommandInterpreter(const plSharedPtr<plCommandInterpreter>& pInterpreter) { m_pCommandInterpreter = pInterpreter; }
122
124 const plSharedPtr<plCommandInterpreter>& GetCommandInterpreter() const { return m_pCommandInterpreter; }
125
130 virtual bool AutoComplete(plStringBuilder& ref_sText);
131
135 virtual void ExecuteCommand(plStringView sInput);
136
137protected:
138 plSharedPtr<plCommandInterpreter> m_pCommandInterpreter;
139
141
144
145public:
149 virtual void AddConsoleString(plStringView sText, plConsoleString::Type type = plConsoleString::Type::Default);
150
152
155
156public:
158 void AddToInputHistory(plStringView sText);
159
163 const plStaticArray<plString, 16>& GetInputHistory() const { return m_InputHistory; }
164
166 void RetrieveInputHistory(plInt32 iHistoryUp, plStringBuilder& ref_sResult);
167
169 plResult SaveInputHistory(plStringView sFile);
170
172 void LoadInputHistory(plStringView sFile);
173
174protected:
175 plInt32 m_iCurrentInputHistoryElement = -1;
176 plStaticArray<plString, 16> m_InputHistory;
177
179};
plColor represents an RGBA color in linear color space. Values are stored as float,...
Definition Color.h:44
Definition Console.h:47
Definition Console.h:78
plEvent< const plConsoleEvent & > m_Events
The console event variable, to attach to.
Definition Console.h:92
const plSharedPtr< plCommandInterpreter > & GetCommandInterpreter() const
Returns the currently used command interpreter.
Definition Console.h:124
void SetCommandInterpreter(const plSharedPtr< plCommandInterpreter > &pInterpreter)
Replaces the current command interpreter.
Definition Console.h:121
const plEvent< const plConsoleEvent & > & Events() const
Grants access to subscribe and unsubscribe from console events.
Definition Console.h:88
plMutex & GetMutex() const
Returns the mutex that's used to prevent multi-threaded access.
Definition Console.h:101
const plStaticArray< plString, 16 > & GetInputHistory() const
Returns the current input history.
Definition Console.h:163
Definition Deque.h:270
Definition Event.h:177
Implements formating of strings with placeholders and formatting options.
Definition FormatString.h:59
A hybrid array uses in-place storage to handle the first few elements without any allocation....
Definition HybridArray.h:12
Provides a simple mechanism for mutual exclusion to prevent multiple threads from accessing a shared ...
Definition Mutex.h:13
Base class for reference counted objects.
Definition RefCounted.h:52
A Shared ptr manages a shared object and destroys that object when no one references it anymore....
Definition SharedPtr.h:10
Wraps a C-style array, which has a fixed size at compile-time, with a more convenient interface.
Definition StaticArray.h:13
plStringBuilder is a class that is meant for creating and modifying strings.
Definition StringBuilder.h:35
plStringView represent a read-only sub-string of a larger string, as it can store a dedicated string ...
Definition StringView.h:34
Definition Console.h:39
The event data that is broadcast by the console.
Definition Console.h:65
const plConsoleString * m_AddedpConsoleString
The console string that was just added.
Definition Console.h:74
Type
Definition Console.h:67
@ OutputLineAdded
A string was added to the console.
Definition Console.h:15
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54