#include "ui.h" #include "game.h" #include "settings.h" void resizeInteractionChat(InteractionChat* chat, const Settings* settings) { float renderWidth = GetRenderWidth(); float renderHeight = GetRenderHeight(); float height = settings->interactionChatHeight; chat->rect = (Rectangle){ 0.0, renderHeight - height, renderWidth, height }; } void initInteractionChat(InteractionChat* chat, const Settings* settings) { memset(&chat->text, 0, INTERACTION_CHAT_MAX * sizeof(char)); chat->visible = false; chat->entityId = ENTITY_NONE; resizeInteractionChat(chat, settings); } void showInteractionChat(InteractionChat* chat) { chat->visible = true; } void hideInteractionChat(InteractionChat* chat) { chat->visible = false; } void setInteractionChat(InteractionChat* chat, const char* text) { strncpy(chat->text, text, INTERACTION_CHAT_MAX * sizeof(char) - 1); } void writeToInteractionChat(InteractionChat* chat, const char* text) { strncat(chat->text, text, INTERACTION_CHAT_MAX * sizeof(char) - 1); } void clearInteractionChat(InteractionChat* chat) { memset(&chat->text, 0, INTERACTION_CHAT_MAX * sizeof(char)); } void updateInteractionChat(InteractionChat* chat, Game* game) { if (IsWindowResized()) { resizeInteractionChat(chat, &game->settings); } if (!chat->visible) { return; } Color background = DARKGRAY; background.a = game->settings.interactionAlpha; DrawRectangleRec(chat->rect, background); float lineThickness = game->settings.interactionOutlineSize; float border = lineThickness + 1.0; int fontSize = game->settings.interactionFontSize; DrawRectangleLinesEx(chat->rect, lineThickness, BLACK); if (chat->entityId != ENTITY_NONE) { DrawText(TextFormat("%s says:", getEntityName(chat->entityId)), chat->rect.x + border, chat->rect.y + border, fontSize, WHITE); } DrawText(chat->text, chat->rect.x + border, chat->rect.y + (border * 2.0) + fontSize, fontSize, GREEN); DrawText("Hit enter to continue...", chat->rect.x + border, chat->rect.y + chat->rect.height - fontSize - border, fontSize, WHITE); } void resizeInteractionMenu(InteractionMenu* menu, const Settings* settings) { menu->rect.width = settings->interactionMenuWidth; menu->rect.height = (INTERACTION_MENU_MAX + 4) * settings->interactionFontSize; menu->rect.x = 0.0; menu->rect.y = GetRenderHeight() - settings->interactionChatHeight - menu->rect.height - settings->interactionOutlineSize; } void initInteractionMenu(InteractionMenu* menu, const Settings* settings) { resetInteractionMenu(menu); resizeInteractionMenu(menu, settings); menu->visible = false; menu->entityId = ENTITY_NONE; } void setInteractionMenu(InteractionMenu* menu, const InteractionItems items, int itemCount) { // Check for out of bounds. if (itemCount > INTERACTION_MENU_MAX) { TraceLog(LOG_ERROR, "itemCount > INTERACTION_MENU_MAX"); return; } menu->itemCount = itemCount; for (int index = 0; index < itemCount; ++index) { strncpy(menu->items[index], items[index], INTERACTION_LABEL_MAX * sizeof(char) - 1); } } void resetInteractionMenu(InteractionMenu* menu) { for (int index = 0; index < INTERACTION_MENU_MAX; ++index) { memset(menu->items[index], 0, INTERACTION_LABEL_MAX * sizeof(char)); } menu->itemCount = 0; } void showInteractionMenu(InteractionMenu* menu) { menu->visible = true; } void hideInteractionMenu(InteractionMenu* menu) { menu->visible = false; } void updateInteractionMenu(InteractionMenu* menu, Game* game) { if (IsWindowResized()) { resizeInteractionMenu(menu, &game->settings); } if (!menu->visible) { return; } // Draw background. Color background = DARKGRAY; background.a = game->settings.interactionAlpha; DrawRectangleRec(menu->rect, background); float lineThickness = game->settings.interactionOutlineSize; float border = lineThickness + 1.0; int fontSize = game->settings.interactionFontSize; DrawRectangleLinesEx(menu->rect, lineThickness, BLACK); Vector2 position = (Vector2){menu->rect.x + border, menu->rect.y + border}; // Draw top information. DrawText("Press a number key to select", position.x, position.y, fontSize, WHITE); position.y += fontSize + fontSize; // Draw items. for (int index = 0; index < menu->itemCount; ++index) { DrawText(TextFormat("%d: ", index + 1), position.x, position.y, fontSize, WHITE); DrawText(TextFormat(" %s", menu->items[index]), position.x, position.y, fontSize, GREEN); position.y += fontSize; } }