#include "pong.h"
static void settings(Camera2D *MainCamera, Mix_Music *TitleScreenMusic) {
bool SettingsGoing = true;
int MusicBarY = 50;
int SoundBarY = 150;
Rectangle MouseCursor = {
0,0,1,1
};
Rectangle MusicBar[10] = {
{50,MusicBarY,50,50},
{105,MusicBarY,50,50},
{160,MusicBarY,50,50},
{215,MusicBarY,50,50},
{270,MusicBarY,50,50},
{325,MusicBarY,50,50},
{380,MusicBarY,50,50},
{435,MusicBarY,50,50},
{490,MusicBarY,50,50},
{545,MusicBarY,50,50},
};
Rectangle SoundBar[10] = {
{50,SoundBarY,50,50},
{105,SoundBarY,50,50},
{160,SoundBarY,50,50},
{215,SoundBarY,50,50},
{270,SoundBarY,50,50},
{325,SoundBarY,50,50},
{380,SoundBarY,50,50},
{435,SoundBarY,50,50},
{490,SoundBarY,50,50},
{545,SoundBarY,50,50},
};
// Back Selection
Rectangle BackButton = {
0,0,42,120
};
//Screen Buttons
int ScreenButtonLength = 250;
Rectangle ScreenButtons[3] = {
{95, 242, ScreenButtonLength, 42},
{95, 284, ScreenButtonLength, 42},
{95, 326, ScreenButtonLength, 42}
};
SetMousePosition(GetScreenWidth()/2, GetScreenHeight()/2);
while(SettingsGoing == true && GameGoing == true) {
MainCamera->zoom = GetScreenHeight()/720.0f;
MouseCursor.x = GetMouseX()/MainCamera->zoom;
MouseCursor.y = GetMouseY()/MainCamera->zoom;
Mix_VolumeMusic(GlobalSettings.MusicVolume);
BeginDrawing();
ClearBackground(BLACK);
BeginMode2D(*MainCamera);
// Back Button
if (CheckCollisionRecs(MouseCursor, BackButton)) {
DrawRectangleRec(BackButton, RED);
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
SettingsGoing = false;
}
}
// Music
DrawText("Music Volume:", 50, 10, 42, WHITE);
DrawText("<", 0,0,128,WHITE);
for(int i = 0; i < 10; i++) {
if (CheckCollisionRecs(MouseCursor, MusicBar[i]) && IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
GlobalSettings.MusicVolume = i*10;
}
if(i <= (GlobalSettings.MusicVolume/10)) {
DrawRectangleRec(MusicBar[i], RED);
}
}
// Sound
DrawText("Sound Volume:", 50, 108, 42, WHITE);
DrawText("<", 0,0,128,WHITE);
for(int i = 0; i < 10; i++) {
if (CheckCollisionRecs(MouseCursor, SoundBar[i]) && IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
play_audio(SOUND_BOUNCE);
GlobalSettings.SoundVolume = i*10;
}
if(i <= (GlobalSettings.SoundVolume/10)) {
DrawRectangleRec(SoundBar[i], RED);
}
}
// Fullscreen
bool MouseHovering = false;
for(int i = 0; i < 3; i++) {
if(CheckCollisionRecs(MouseCursor, ScreenButtons[i])) {
DrawRectangleRec(ScreenButtons[i], RED);
MouseHovering = true;
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
GlobalSettings.Fullscreen = i;
set_screen_mode();
}
}
}
if (MouseHovering == false) {
DrawRectangleRec(ScreenButtons[GlobalSettings.Fullscreen], GREEN);
}
DrawText("Screen Mode:", 50, 205, 42, WHITE);
DrawText("Windowed", 100, 242, 42, WHITE);
DrawText("Fullscreen", 100, 284, 42, WHITE);
DrawText("Borderless", 100, 326, 42, WHITE);
EndMode2D();
EndDrawing();
}
char *SettingsDirectory = SDL_GetPrefPath("iotib", "Pong");
char SettingsFilePath[8192];
snprintf(SettingsFilePath, sizeof(SettingsFilePath), "%s/settings.txt", SettingsDirectory);
FILE *SettingsFile;
// Put save to file here.
if ((SettingsFile = fopen(SettingsFilePath, "w")) == NULL) {
fprintf(stderr, "Unable to create settings file.\n");
exit(1);
}
fprintf(SettingsFile, "sound_volume %d\n", GlobalSettings.SoundVolume);
fprintf(SettingsFile, "music_volume %d\n", GlobalSettings.MusicVolume);
fprintf(SettingsFile, "fullscreen %d", GlobalSettings.Fullscreen);
fclose(SettingsFile);
return;
}
static void help_text() {
}
int title_screen() {
// Init Camera
Camera2D MainCamera;
MainCamera.offset = (Vector2){0,0};
MainCamera.target = (Vector2){0,0};
MainCamera.rotation = 0.0f;
bool TitleScreenGoing = true;
int Choice = 0;
// Selection
Rectangle Versus = {
20, 150, 230, 48
};
Rectangle Marathon = {
20, 200, 230, 48
};
Rectangle Settings = {
20, 250, 230, 48
};
Rectangle Help = {
20, 300, 230, 48
};
Rectangle Exit = {
20, 350, 230, 48
};
Rectangle Mouse = {
0, 0, 10, 10
};
Rectangle *Selected;
Selected = &Versus;
EnableCursor();
//Music
Mix_Music *TitleMusic = Mix_LoadMUS("resources/title.wav");
Mix_PlayMusic(TitleMusic, -1);
Mix_VolumeMusic(GlobalSettings.MusicVolume);
while(TitleScreenGoing == true && GameGoing == true) {
if (WindowShouldClose()) { //Quit Game if the window is closed.
GameGoing = false;
TitleScreenGoing = false;
}
MainCamera.zoom = GetScreenHeight()/720.0f;
Mouse.x = GetMouseX()/MainCamera.zoom;
Mouse.y = GetMouseY()/MainCamera.zoom;
if (CheckCollisionRecs(Mouse, Versus)) {
Selected = &Versus;
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
Choice = 0;
TitleScreenGoing = false;
}
} else if (CheckCollisionRecs(Mouse, Marathon)) {
Selected = &Marathon;
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
Choice = 1;
TitleScreenGoing = false;
}
} else if (CheckCollisionRecs(Mouse, Settings)) {
Selected = &Settings;
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
settings(&MainCamera, TitleMusic);
}
} else if (CheckCollisionRecs(Mouse, Help)) {
Selected = &Help;
} else if (CheckCollisionRecs(Mouse, Exit)) {
Selected = &Exit;
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) {
GameGoing = false;
Choice = -1;
}
}
BeginDrawing();
ClearBackground(BLACK);
BeginMode2D(MainCamera);
DrawRectangleRec(*Selected, RED);
DrawText("PONG", 0, 0, 128, WHITE);
DrawText("Versus", 20, 150, 48, WHITE);
DrawText("Marathon", 20, 200, 48, WHITE);
DrawText("Settings", 20, 250, 48, WHITE);
DrawText("Help", 20, 300, 48, WHITE);
DrawText("Exit", 20, 350, 48, WHITE);
EndMode2D();
DrawText(VersionString, GetScreenWidth()-400, GetScreenHeight()-32, 32, GREEN);
EndDrawing();
}
Mix_HaltMusic();
Mix_FreeMusic(TitleMusic);
return Choice;
}