/**
* @file src/main.c
* @brief Sandbox game in Raylib
*
* @copyright
* Anyone is free to copy, modify, publish, use, compile, sell, or
* distribute this software, either in source code form or as a compiled
* binary, for any purpose, commercial or non-commercial, and by any
* means.
*
* In jurisdictions that recognize copyright laws, the author or authors
* of this software dedicate any and all copyright interest in the
* software to the public domain. We make this dedication for the benefit
* of the public at large and to the detriment of our heirs and
* successors. We intend this dedication to be an overt act of
* relinquishment in perpetuity of all present and future rights to this
* software under copyright law.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
* IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*
* For more information, please refer to
*/
#include "raylib.h"
#include "cells.h"
#include
#include
#include
#include
/* TODO
- Changing brush size
- Add more elements
- Add an interface
- Saving and loading world (+ better title screen)
*/
int main ()
{
srand(time(NULL));
int grid[CELL_AMOUNT][CELL_AMOUNT] = {0};
GameScreen currentScreen = TITLE;
CellType brush = SAND;
SetConfigFlags(FLAG_VSYNC_HINT | FLAG_WINDOW_HIGHDPI);
InitWindow(WINDOW_SIZE_PIXELS, WINDOW_SIZE_PIXELS, "Sandbox");
SetTargetFPS(TARGET_FPS);
// game loop
while (!WindowShouldClose())
{
/* Update */
switch (currentScreen)
{
case TITLE:
if (IsKeyPressed(KEY_SPACE)) {
currentScreen = GAME;
ClearBackground(BLACK);
}
break;
case GAME:
if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) {
Vector2 cellPosition = GetMousePosition();
int i = cellPosition.y/CELL_SIZE_PIXELS;
int j = cellPosition.x/CELL_SIZE_PIXELS;
putCell(grid, i, j, brush);
}
if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) {
// spawn some text corresponding to Brush Type, fading
if (brush < CELL_TYPE_MAX-1)
{
brush++;
} else {
brush = VOID;
}
printf("Brush changed for %d\n", brush);
}
break;
default:
break;
}
/* Drawing */
BeginDrawing();
ClearBackground(BLACK);
switch (currentScreen)
{
case TITLE:
int titleWidth = MeasureText("SANDBOX", 40);
DrawRectangle(0, 0, WINDOW_SIZE_PIXELS, WINDOW_SIZE_PIXELS, DARKBLUE);
DrawText("SANDBOX", (WINDOW_SIZE_PIXELS-titleWidth)/2, 20, 40, WHITE);
int controlsWidth = MeasureText("Controls", 30);
DrawText("Controls", (WINDOW_SIZE_PIXELS-controlsWidth)/2, 100, 30, WHITE);
DrawText("Left click to spawn sand", 25, 150, 30, WHITE);
int startGameWidth = MeasureText("Press Space to start!", 30);
DrawText("Press Space to start!", (WINDOW_SIZE_PIXELS-startGameWidth)/2, 400, 30, WHITE);
break;
case GAME:
updateGrid(grid);
drawGrid(grid);
break;
default:
break;
}
// end the frame and get ready for the next one (display frame, poll input, etc...)
EndDrawing();
}
// destroy the window and cleanup the OpenGL context
CloseWindow();
return 0;
}