#include #include #include "raylib.h" Vector2 window = {1920, 1080}; int horloge_heure = 6; int horloge_min = 9; typedef struct Conversation { int active; Texture pp; char name[10]; char message[22]; } Conversation; #define MAX_CONV 5 Conversation conversations[MAX_CONV] = {0}; int conversation_idx = 0; #define CHOIX_PAD 2 #define CHOIX_COLOR WHITE #define CHOIX_COLOR_HOVER LIGHTGRAY int draw_1_choix(Rectangle box, const char* choix) { int pad = ((float)CHOIX_PAD/100)*box.width; Rectangle box1 = { box.x + pad, box.y + pad, box.width - pad*2, box.height - pad*2, }; if (CheckCollisionPointRec(GetMousePosition(), box1)) DrawRectangleRec(box1, CHOIX_COLOR_HOVER); else DrawRectangleRec(box1, CHOIX_COLOR); DrawText(choix, box1.x + pad, box1.y + box1.height/2 - pad*3/2, pad*3, BLACK); if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(GetMousePosition(), box1)) return 1; return 0; } int draw_2_choix(Rectangle box, const char* choix1, const char* choix2) { int pad = ((float)CHOIX_PAD/100)*box.width; Rectangle box1 = { box.x + pad, box.y + pad, box.width - pad*2, box.height/2 - pad*1.5, }; if (CheckCollisionPointRec(GetMousePosition(), box1)) DrawRectangleRec(box1, CHOIX_COLOR_HOVER); else DrawRectangleRec(box1, CHOIX_COLOR); DrawText(choix1, box1.x + pad, box1.y + box1.height/2 - pad*3/2, pad*3, BLACK); Rectangle box2 = { box.x + pad, box.y + pad/2 + box.height/2, box.width - pad*2, box.height/2 - pad*1.5, }; if (CheckCollisionPointRec(GetMousePosition(), box2)) DrawRectangleRec(box2, CHOIX_COLOR_HOVER); else DrawRectangleRec(box2, CHOIX_COLOR); DrawText(choix2, box2.x + pad, box2.y + box2.height/2 - pad*3/2, pad*3, BLACK); if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(GetMousePosition(), box1)) return 1; else if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(GetMousePosition(), box2)) return 2; return 0; } int draw_3_choix(Rectangle box, const char* choix1, const char* choix2, const char* choix3) { int pad = ((float)CHOIX_PAD/100)*box.width; Rectangle box1 = { box.x + pad, box.y + pad, box.width/2 - pad*1.5, box.height/2 - pad*1.5, }; if (CheckCollisionPointRec(GetMousePosition(), box1)) DrawRectangleRec(box1, CHOIX_COLOR_HOVER); else DrawRectangleRec(box1, CHOIX_COLOR); DrawText(choix1, box1.x + pad, box1.y + box1.height/2 - pad*3/2, pad*3, BLACK); Rectangle box2 = { box.x + pad/2 + box.width/2, box.y + pad, box.width/2 - pad*1.5, box.height/2 - pad*1.5, }; if (CheckCollisionPointRec(GetMousePosition(), box2)) DrawRectangleRec(box2, CHOIX_COLOR_HOVER); else DrawRectangleRec(box2, CHOIX_COLOR); DrawText(choix2, box2.x + pad, box2.y + box2.height/2 - pad*3/2, pad*3, BLACK); Rectangle box3 = { box.x + pad, box.y + pad/2 + box.height/2, box.width - pad*2, box.height/2 - pad*1.5, }; if (CheckCollisionPointRec(GetMousePosition(), box3)) DrawRectangleRec(box3, CHOIX_COLOR_HOVER); else DrawRectangleRec(box3, CHOIX_COLOR); DrawText(choix3, box3.x + pad, box3.y + box3.height/2 - pad*3/2, pad*3, BLACK); if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(GetMousePosition(), box1)) return 1; else if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(GetMousePosition(), box2)) return 2; else if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(GetMousePosition(), box3)) return 3; return 0; } int draw_4_choix(Rectangle box, const char* choix1, const char* choix2, const char* choix3, const char* choix4) { int pad = ((float)CHOIX_PAD/100)*box.width; Rectangle box1 = { box.x + pad, box.y + pad, box.width/2 - pad*1.5, box.height/2 - pad*1.5, }; if (CheckCollisionPointRec(GetMousePosition(), box1)) DrawRectangleRec(box1, CHOIX_COLOR_HOVER); else DrawRectangleRec(box1, CHOIX_COLOR); DrawText(choix1, box1.x + pad, box1.y + box1.height/2 - pad*3/2, pad*3, BLACK); Rectangle box2 = { box.x + pad/2 + box.width/2, box.y + pad, box.width/2 - pad*1.5, box.height/2 - pad*1.5, }; if (CheckCollisionPointRec(GetMousePosition(), box2)) DrawRectangleRec(box2, CHOIX_COLOR_HOVER); else DrawRectangleRec(box2, CHOIX_COLOR); DrawText(choix2, box2.x + pad, box2.y + box2.height/2 - pad*3/2, pad*3, BLACK); Rectangle box3 = { box.x + pad, box.y + pad/2 + box.height/2, box.width/2 - pad*1.5, box.height/2 - pad*1.5, }; if (CheckCollisionPointRec(GetMousePosition(), box3)) DrawRectangleRec(box3, CHOIX_COLOR_HOVER); else DrawRectangleRec(box3, CHOIX_COLOR); DrawText(choix3, box3.x + pad, box3.y + box3.height/2 - pad*3/2, pad*3, BLACK); Rectangle box4 = { box.x + pad/2 + box.width/2, box.y + pad/2 + box.height/2, box.width/2 - pad*1.5, box.height/2 - pad*1.5, }; if (CheckCollisionPointRec(GetMousePosition(), box4)) DrawRectangleRec(box4, CHOIX_COLOR_HOVER); else DrawRectangleRec(box4, CHOIX_COLOR); DrawText(choix4, box4.x + pad, box4.y + box4.height/2 - pad*3/2, pad*3, BLACK); if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(GetMousePosition(), box1)) return 1; else if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(GetMousePosition(), box2)) return 2; else if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(GetMousePosition(), box3)) return 3; else if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(GetMousePosition(), box4)) return 4; return 0; } int main() { InitWindow(window.x, window.y, "2025 brackey's game jam"); SetWindowState(FLAG_FULLSCREEN_MODE); SetWindowState(FLAG_WINDOW_RESIZABLE); SetTargetFPS(60); Texture phone_battery_tex = LoadTexture("data/phone-battery.png"); Texture left_arrow_tex = LoadTexture("data/left-arrow.png"); conversations[0].active = 1; conversations[0].pp = LoadTexture("data/viola.png"); strncpy(conversations[0].name, "Viola", 10); strncpy(conversations[0].message, "Salam Akhy.", 22); conversations[1].active = 1; conversations[1].pp = LoadTexture("data/archie.png"); strncpy(conversations[1].name, "Archie", 10); strncpy(conversations[1].message, "Je te fait pas con...", 22); conversations[2].active = 1; conversations[2].pp = LoadTexture("data/minuit.png"); strncpy(conversations[2].name, "Minuit", 10); strncpy(conversations[2].message, "je suis Minuit.", 22); conversations[3].active = 1; conversations[3].pp = LoadTexture("data/phillip.png"); strncpy(conversations[3].name, "Phillip", 10); strncpy(conversations[3].message, "je suis Phillip.", 22); conversations[4].active = 1; conversations[4].pp = LoadTexture("data/ed.png"); strncpy(conversations[4].name, "Ed", 10); strncpy(conversations[4].message, "je suis Ed.", 22); while (!WindowShouldClose()) { if (IsWindowResized()) { window.x = GetScreenWidth(); window.y = GetScreenHeight(); } Rectangle phone_box = { window.x/2-window.y/3, 0, window.y/3*2, window.y, }; BeginDrawing(); { ClearBackground(BEIGE); DrawRectangleRec(phone_box, RAYWHITE); Rectangle header_box = phone_box; header_box.height *= (float)15/100; DrawRectangleRec(header_box, BLUE); Rectangle notif_box = phone_box; notif_box.height *= (float)3/100; DrawRectangleRec(notif_box, DARKBLUE); DrawText(TextFormat("%02d:%02d", horloge_heure, horloge_min), notif_box.x+4, notif_box.y+2, notif_box.height-2, WHITE); float phone_battery_scale = notif_box.height/phone_battery_tex.height; DrawTextureEx( phone_battery_tex, (Vector2){ notif_box.x+notif_box.width-phone_battery_tex.width*phone_battery_scale, notif_box.y }, 0, phone_battery_scale, WHITE ); static int choix_active = 0; if (!choix_active) { float size = header_box.height*0.42; DrawText("Chat", header_box.x + header_box.width/2 - MeasureText("Chat", size)/2, header_box.y + size, size, WHITE); for (int i = 0; i < MAX_CONV; i++) { if (!conversations[i].active) continue; Rectangle conv_box = { phone_box.x, header_box.y+header_box.height + i*phone_box.height*0.1, phone_box.width, phone_box.height*0.1, }; float conv_scale = conv_box.height/conversations[i].pp.height; if (CheckCollisionPointRec(GetMousePosition(), conv_box)) DrawRectangleRec(conv_box, LIGHTGRAY); else DrawRectangleRec(conv_box, GRAY); DrawTextureEx(conversations[i].pp, (Vector2){conv_box.x, conv_box.y}, 0, conv_scale, WHITE); float name_size = 0.27*conv_box.height; DrawText(conversations[i].name, conv_box.x+conversations[i].pp.width*conv_scale+name_size, conv_box.y+name_size/2, name_size, GOLD); DrawText(conversations[i].message, conv_box.x+conversations[i].pp.width*conv_scale+name_size, conv_box.y+conv_box.height-name_size*1.5, name_size, WHITE); if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(GetMousePosition(), conv_box)) { choix_active = !choix_active; conversation_idx = i; } } } if (choix_active) { float left_arrow_scale = (header_box.height-notif_box.height-header_box.height*0.12)/left_arrow_tex.height; Rectangle left_arrow_box = { header_box.x+header_box.height*0.12/2, header_box.y+notif_box.height+header_box.height*0.12/2, left_arrow_tex.width*left_arrow_scale, left_arrow_tex.height*left_arrow_scale, }; DrawTextureEx(left_arrow_tex, (Vector2){left_arrow_box.x, left_arrow_box.y}, 0, left_arrow_scale, WHITE); if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT) && CheckCollisionPointRec(GetMousePosition(), left_arrow_box)) choix_active = !choix_active; float pp_scale = (header_box.height-notif_box.height-header_box.height*0.12)/conversations[conversation_idx].pp.height; Rectangle pp_box = left_arrow_box; pp_box.x += pp_box.width*1.42; DrawTextureEx(conversations[conversation_idx].pp, (Vector2){pp_box.x, pp_box.y}, 0, pp_scale, WHITE); float name_size = 0.42*pp_box.height; DrawText( conversations[conversation_idx].name, pp_box.x+conversations[conversation_idx].pp.width*pp_scale+name_size, pp_box.y+pp_box.height/2-name_size/2, name_size, GOLD ); Rectangle choix_box = phone_box; choix_box.height *= (float)35/100; choix_box.y = (phone_box.y+phone_box.height) - choix_box.height; DrawRectangleRec(choix_box, GRAY); Rectangle choix_titre_box = choix_box; choix_titre_box.height *= (float)15/100; DrawRectangleRec(choix_titre_box, BLACK); DrawText( "Que voulez vous répondre ?", choix_titre_box.x + 12, choix_titre_box.y + choix_titre_box.height*(1-0.69)/2, choix_titre_box.height * 0.69, RAYWHITE ); choix_box.y += choix_titre_box.height; choix_box.height -= choix_titre_box.height; static int s = 0; if (IsKeyPressed(KEY_SPACE)) s = (s+1)%4; int r = 0; switch (s) { case 0: r = draw_1_choix(choix_box, "choix 1"); break; case 1: r = draw_2_choix(choix_box, "choix 1", "choix 2"); break; case 2: r = draw_3_choix(choix_box, "choix 1", "choix 2", "choix 3"); break; case 3: r = draw_4_choix(choix_box, "choix 1", "choix 2", "choix 3", "choix 4"); break; } if (r) printf("%d\n", r); } DrawFPS(0,0); } EndDrawing(); } }