-
Notifications
You must be signed in to change notification settings - Fork 28
/
GigiAssert.cpp
130 lines (112 loc) · 2.58 KB
/
GigiAssert.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
///////////////////////////////////////////////////////////////////////////////
// Gigi Rapid Graphics Prototyping and Code Generation Suite //
// Copyright (c) 2024 Electronic Arts Inc. All rights reserved. //
///////////////////////////////////////////////////////////////////////////////
#include "GigiAssert.h"
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#define _SILENCE_ALL_MS_EXT_DEPRECATION_WARNINGS
#include "spdlog/spdlog.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
GigiPrintMessageFn g_printMessageFn = [](MessageType messageType, const char* msg)
{
switch (messageType)
{
case MessageType::Info: spdlog::info(msg); break;
case MessageType::Warn: spdlog::warn(msg); break;
case MessageType::Error: spdlog::error(msg); break;
}
};
bool g_headlessMode = false;
void SetGigiPrintMessage(const GigiPrintMessageFn& printMessageFn)
{
g_printMessageFn = printMessageFn;
}
void SetGigiHeadlessMode(bool headless)
{
g_headlessMode = headless;
}
bool AskForConfirmation(const char* msg, ...)
{
if (g_headlessMode)
return true;
char buffer[4096];
va_list args;
va_start(args, msg);
vsprintf_s(buffer, msg, args);
va_end(args);
return MessageBoxA(nullptr, buffer, "Gigi", MB_OKCANCEL) == IDOK;
}
void ShowMessageBox(const char* msg, ...)
{
if (!g_headlessMode)
{
char buffer[4096];
va_list args;
va_start(args, msg);
vsprintf_s(buffer, msg, args);
va_end(args);
MessageBoxA(nullptr, buffer, "Gigi", MB_OK);
}
}
void ShowInfoMessage(const char* msg, ...)
{
char buffer[4096];
{
va_list args;
va_start(args, msg);
vsprintf_s(buffer, msg, args);
va_end(args);
g_printMessageFn(MessageType::Info, buffer);
}
}
void ShowWarningMessage(const char* msg, ...)
{
char buffer[4096];
{
va_list args;
va_start(args, msg);
vsprintf_s(buffer, msg, args);
va_end(args);
g_printMessageFn(MessageType::Warn, buffer);
}
}
bool ShowErrorMessage(const char* msg, ...)
{
char buffer[4096];
{
va_list args;
va_start(args, msg);
vsprintf_s(buffer, msg, args);
va_end(args);
g_printMessageFn(MessageType::Error, buffer);
// to Visual Studio Output Debug
// so there is something when press the users presses "Retry"
OutputDebugStringA(buffer);
OutputDebugStringA("\n");
}
if (!g_headlessMode)
{
switch (MessageBoxA(nullptr, buffer, "Gigi Assert", MB_ABORTRETRYIGNORE | MB_DEFBUTTON3 | MB_ICONERROR))
{
case IDRETRY:
{
DebugBreak();
exit(100);
return false;
}
case IDIGNORE:
{
return false;
}
default:
case IDABORT:
{
return true;
}
}
}
return false;
}