!B (Sandbox) (CE-21795) Importing models with multisubmaterials via fbx switches...
[CRYENGINE.git] / Code / CryEngine / CrySchematyc2 / Services / Log.h
blob8473f964cac2726d53f9c40d55e56d083cafe1db
1 // Copyright 2001-2019 Crytek GmbH / Crytek Group. All rights reserved.
3 #pragma once
5 #include <CrySchematyc2/Env/IEnvRegistry.h>
6 #include <CrySchematyc2/Services/ILog.h>
7 #include <CrySchematyc2/TemplateUtils/TemplateUtils_ScopedConnection.h>
9 namespace Schematyc2
11 struct ILogOutput;
13 DECLARE_SHARED_POINTERS(ILogOutput)
15 class CLog : public ILog
17 public:
19 CLog();
21 void Init();
23 // ILog
24 virtual ELogMessageType GetMessageType(const char* szMessageType) override;
25 virtual const char* GetMessageTypeName(ELogMessageType messageType) override;
26 virtual LogStreamId CreateStream(const char* szName, const LogStreamId& staticStreamId = LogStreamId::s_invalid) override;
27 virtual void DestroyStream(const LogStreamId& streamId) override;
28 virtual LogStreamId GetStreamId(const char* szName) const override;
29 virtual const char* GetStreamName(const LogStreamId& streamId) const override;
30 virtual void VisitStreams(const LogStreamVisitor& visitor) const override;
31 virtual ILogOutputPtr CreateFileOutput(const char* szFileName) override;
32 virtual void Comment(const LogStreamId& streamId, CLogMessageMetaInfo metaInfo, const char* szFormat, ...) override;
33 virtual void Warning(const LogStreamId& streamId, CLogMessageMetaInfo metaInfo, const char* szFormat, ...) override;
34 virtual void Error(const LogStreamId& streamId, CLogMessageMetaInfo metaInfo, const char* szFormat, ...) override;
35 virtual ECriticalErrorStatus CriticalError(const LogStreamId& streamId, CLogMessageMetaInfo metaInfo, const char* szFormat, ...) override;
36 virtual void FatalError(const LogStreamId& streamId, CLogMessageMetaInfo metaInfo, const char* szFormat, ...) override;
37 virtual void Update() override;
38 virtual SLogSignals& Signals() override;
39 virtual bool IsLoggingEnabled() const override;
40 // ~ILog
42 private:
44 struct SStream
46 SStream(const char* _szName, const LogStreamId& _id);
48 string name;
49 LogStreamId id;
52 typedef std::vector<SStream> Streams;
53 typedef std::vector<ILogOutputPtr> Outputs;
54 typedef std::vector<string> UserStreams;
55 typedef TemplateUtils::CDelegate<void ()> SettingsModifiedCallback;
57 struct SSettings : public IEnvSettings
59 SSettings(const SettingsModifiedCallback& _modifiedCallback);
61 // IEnvSettings
62 virtual void Serialize(Serialization::IArchive& archive) override;
63 // ~IEnvSettings
65 UserStreams userStreams;
66 SettingsModifiedCallback modifiedCallback;
69 DECLARE_SHARED_POINTERS(SSettings)
71 static const LogStreamId FIRST_DYNAMIC_STREAM_ID;
73 void OnSettingsModified();
74 size_t FindStream(const char* szName) const;
75 size_t FindStream(const LogStreamId& streamId) const;
76 void GetUserStreamsFileName(stack_string& fileName) const;
78 LogStreamId m_nextDynamicStreamId;
79 Streams m_streams;
80 Outputs m_outputs;
81 SSettingsPtr m_pSettings;
82 SLogSignals m_signals;
85 class CLogRecorder : public ILogRecorder
87 public:
89 ~CLogRecorder();
91 // ILogRecorder
92 virtual void Begin() override;
93 virtual void End() override;
94 virtual void VisitMessages(const LogMessageVisitor& visitor) override;
95 virtual void Clear() override;
96 // ~ILogRecorder
98 private:
100 // #SchematycTODO : This method of storing messages is far from optimal. If we start recording lots of messages we should think about creating pages of raw data.
101 struct SRecordedMessage
103 explicit SRecordedMessage(const SLogMessageData& _logMessageData);
105 LogStreamId streamId;
106 ELogMessageType messageType;
107 string message;
108 CLogMessageMetaInfo metaInfo;
111 typedef std::vector<SRecordedMessage> SRecordedMessageVector;
113 void OnLogMessage(const SLogMessageData& logMessageData);
115 SRecordedMessageVector m_recordedMessages;
116 TemplateUtils::CConnectionScope m_connectionScope;