-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ui.cpp
128 lines (105 loc) · 3.54 KB
/
ui.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
#include <iostream>
#include <string>
#include "raylib.h"
#if defined(PLATFORM_WEB)
#include <emscripten/emscripten.h>
#endif
#include "./include/erebus.hpp"
#define MAX_INPUT_CHARS 50
const int screenWidth = 800;
const int screenHeight = 450;
char buffer[MAX_INPUT_CHARS + 1] = "\0"; // Initialize name buffer
int letterCount = 0;
auto solver = Rori::Math::MathSolver();
f64 result = 0;
Rori::Math::ErrorKind error = Rori::Math::ErrorKind::None;
bool IsValidCharacter(int key) {
return (key >= '0' && key <= '9') || // Numeric digits
key == '/' || key == '-' || (key >= 'A' && key <= 'Z') || key == '.';
}
bool IsValidShiftCharacter(int key) {
return key == '=' || key == '9' || key == '0' || key == '8' || key == '6';
}
void UpdateDrawFrame(void) {
if (IsKeyPressed(KEY_BACKSPACE) && letterCount > 0) {
letterCount--;
buffer[letterCount] = '\0';
} else if (letterCount < MAX_INPUT_CHARS) {
int key = GetKeyPressed();
if (IsValidShiftCharacter(key) &&
(IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT))) {
if (key == '=') {
buffer[letterCount] = '+';
letterCount++;
} else if (key == '9') {
buffer[letterCount] = '(';
letterCount++;
} else if (key == '0') {
buffer[letterCount] = ')';
letterCount++;
} else if (key == '8') {
buffer[letterCount] = '*';
letterCount++;
} else if (key == '6') {
buffer[letterCount] = '^';
letterCount++;
}
} else if (IsValidCharacter(key)) { // Check if a valid key is pressed
buffer[letterCount] = (char)key;
letterCount++;
} else if (IsKeyPressed(KEY_ENTER)) {
auto [temp, err] = solver.evaluate(buffer);
if (err == Rori::Math::ErrorKind::None) {
result = temp;
} else {
result = 0;
}
error = err;
}
}
// Ensure text fits within the input box
if (MeasureText(buffer, 20) > 760) {
buffer[letterCount - 1] = '\0';
letterCount--;
}
BeginDrawing();
ClearBackground(RAYWHITE);
// Center the input box
int boxWidth = 760; // Width of the input box
int boxHeight = 30; // Height of the input box
int boxX =
(screenWidth - boxWidth) / 2; // X coordinate to center the input box
int boxY =
(screenHeight - boxHeight) / 2; // Y coordinate to center the input box
DrawText("Enter Math Expression:", boxX, boxY - 40, 20, DARKGRAY);
DrawRectangle(boxX, boxY, boxWidth, boxHeight, LIGHTGRAY);
DrawRectangleLines(boxX, boxY, boxWidth, boxHeight, DARKGRAY);
DrawText(TextSubtext(buffer, 0, MAX_INPUT_CHARS), boxX + 10, boxY + 10, 20,
MAROON);
DrawText("Available Math Function", boxX, boxY + 50, 18, DARKGRAY);
DrawText("sin, cos, tan, acos, asin, atan, floor, sqrt, log, floor ", boxX,
boxY + 80, 16, DARKGRAY);
DrawText("Result:", boxX, boxY - 180, 20, DARKGRAY);
if (error == Rori::Math::ErrorKind::None) {
std::string result2 = std::to_string(result);
DrawText(result2.c_str(), boxX, boxY - 140, 20, DARKGRAY);
} else {
DrawText("Syntax Error", boxX, boxY - 140, 20, RED);
}
EndDrawing();
}
int main() {
InitWindow(screenWidth, screenHeight, "Project Erebus");
#if defined(PLATFORM_WEB)
emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
#else
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//--------------------------------------------------------------------------------------
// Main game loop
while (!WindowShouldClose()) // Detect window close button or ESC key
{
UpdateDrawFrame();
}
#endif
CloseWindow();
}