diff options
author | nathansmithsmith <thenathansmithsmith@gmail.com> | 2023-12-22 16:38:12 -0700 |
---|---|---|
committer | nathansmithsmith <thenathansmithsmith@gmail.com> | 2023-12-22 16:38:12 -0700 |
commit | 797381def454d1556f82a81e6452c7b8ee6d1bad (patch) | |
tree | e729f9da706aab789e7e3e7db8392de9036144f1 /src | |
parent | b321781f066608ad4c0c5f91096cbe103003825d (diff) |
Some more info about entities drawn on the preview
Diffstat (limited to 'src')
-rw-r--r-- | src/screens/infoScreen.c | 45 | ||||
-rw-r--r-- | src/screens/infoScreen.h | 10 |
2 files changed, 46 insertions, 9 deletions
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); |