From 797381def454d1556f82a81e6452c7b8ee6d1bad Mon Sep 17 00:00:00 2001
From: nathansmithsmith <thenathansmithsmith@gmail.com>
Date: Fri, 22 Dec 2023 16:38:12 -0700
Subject: Some more info about entities drawn on the preview

---
 src/screens/infoScreen.c | 45 +++++++++++++++++++++++++++++++++++++++------
 src/screens/infoScreen.h | 10 +++++++---
 2 files changed, 46 insertions(+), 9 deletions(-)

(limited to 'src/screens')

diff --git a/src/screens/infoScreen.c b/src/screens/infoScreen.c
index 02476c4..58a19ed 100644
--- a/src/screens/infoScreen.c
+++ b/src/screens/infoScreen.c
@@ -54,6 +54,7 @@ void initInfoScreen(Game * game) {
 
     infoScreen->goBackButton = (Rectangle){0.0, 25.0, 100.0, 50.0};
 
+    // Camera.
     infoScreen->camera = (Camera3D){
         .position = (Vector3){0.0, 0.0, infoScreenEntityInfo[0].cameraDistance},
         .target = Vector3Zero(),
@@ -70,6 +71,8 @@ void initInfoScreen(Game * game) {
     // Set distances.
     for (int i = 0; i < ENTITY_USER_INFO_MSG_MAX; ++i)
         infoScreen->distances[i] = infoScreenEntityInfo[i].cameraDistance;
+
+    resizeInfoScreen(game, infoScreen);
 }
 
 void updateInfoScreenCameraControls(Game * game, InfoScreen * infoScreen) {
@@ -77,6 +80,7 @@ void updateInfoScreenCameraControls(Game * game, InfoScreen * infoScreen) {
     Camera3D * camera = &infoScreen->camera;
     int currentEntity = infoScreen->currentEntity;
 
+    // Reset mouse.
     if (infoScreen->resetMouse) {
         infoScreen->resetMouse = false;
         SetMousePosition(0, 0);
@@ -110,7 +114,40 @@ void updateInfoScreenCamera(Game * game, InfoScreen * infoScreen) {
     Camera3D * camera = &infoScreen->camera;
     int currentEntity = infoScreen->currentEntity;
 
-    camera->position = (Vector3){infoScreen->distances[currentEntity], infoScreen->distances[currentEntity], infoScreen->distances[currentEntity]};
+    camera->position = (Vector3){0.0, 0.0, infoScreen->distances[currentEntity]};
+}
+
+void drawInfoScreenUI(Game * game, InfoScreen * infoScreen) {
+    int currentEntity = infoScreen->currentEntity;
+
+    // Back button.
+    if (GuiButton(infoScreen->goBackButton, "Back"))
+        game->screenId = SCREEN_MAIN_MENU;
+
+    // Draw ship name.
+    EntityType type = infoScreenEntityInfo[currentEntity].type;
+    const char * name = entityTypeInfo[type].name;
+    size_t nameSize = strnlen(name, ENTITY_TYPE_INFO_NAME_MAX);
+
+    DrawText(
+        name,
+        GetScreenWidth() / 2.0 - ((nameSize + 1) * (ENTITY_INFO_NAME_FONT_SIZE / 2.0) / 2.0),
+        10.0,
+        ENTITY_INFO_NAME_FONT_SIZE,
+        GREEN
+    );
+
+    // Draw entity info.
+    const char * msg = infoScreenEntityInfo[currentEntity].msg;
+    size_t msgSize = strnlen(msg, ENTITY_USER_INFO_MSG_MAX);
+
+    DrawText(
+        msg,
+        GetScreenWidth() / 2.0 - ((msgSize + 1) * (ENTITY_INFO_FONT_SIZE / 2.0) / 2.0),
+        ENTITY_INFO_NAME_FONT_SIZE + 10,
+        ENTITY_INFO_FONT_SIZE,
+        GREEN
+    );
 }
 
 void updateInfoScreen(Game * game) {
@@ -140,9 +177,7 @@ void updateInfoScreen(Game * game) {
     if (IsMouseButtonDown(MOUSE_RIGHT_BUTTON)) {
         updateInfoScreenCameraControls(game, infoScreen);
     } else {
-         // Back button.
-        if (GuiButton(infoScreen->goBackButton, "Back"))
-            game->screenId = SCREEN_MAIN_MENU;
+        drawInfoScreenUI(game, infoScreen);
     }
 
     EntityUserInfo info = infoScreenEntityInfo[currentEntity];
@@ -156,8 +191,6 @@ void updateInfoScreen(Game * game) {
     game->assets.models[info.assetId].transform = QuaternionToMatrix(infoScreen->rotation);
     DrawModelWires(game->assets.models[info.assetId], Vector3Zero(), 1.0, GREEN);
 
-    //DrawGrid(32, 5.0);
-
     EndMode3D();
 }
 
diff --git a/src/screens/infoScreen.h b/src/screens/infoScreen.h
index 071eea6..0c2f93d 100644
--- a/src/screens/infoScreen.h
+++ b/src/screens/infoScreen.h
@@ -5,9 +5,12 @@
 #ifndef INFO_SCREEN_H
 #define INFO_SCREEN_H
 
-#define ENTITY_USER_INFO_MSG_MAX 100
+#define ENTITY_USER_INFO_MSG_MAX 70
 #define INFO_SCREEN_ENTITY_COUNT 7
 
+#define ENTITY_INFO_NAME_FONT_SIZE 30
+#define ENTITY_INFO_FONT_SIZE 18
+
 typedef struct EntityUserInfo {
     EntityType type;
     AssetId assetId;
@@ -19,14 +22,15 @@ extern const EntityUserInfo infoScreenEntityInfo[INFO_SCREEN_ENTITY_COUNT];
 
 typedef struct InfoScreen {
     Rectangle goBackButton;
+
     Camera3D camera;
+    float distances[ENTITY_USER_INFO_MSG_MAX];
+
     int currentEntity;
 
     Vector2 lastMouse;
     Quaternion rotation;
     bool resetMouse;
-
-    float distances[ENTITY_USER_INFO_MSG_MAX];
 } InfoScreen;
 
 void initInfoScreen(Game * game);
-- 
cgit v1.2.3