Added world creation screen
This commit is contained in:
@@ -22,7 +22,7 @@ long l, gameTime;
|
||||
World world = { 0 };
|
||||
|
||||
int
|
||||
/* 1: Main menu
|
||||
/* 0: Main menu
|
||||
* 2: World select
|
||||
* 3: World creation
|
||||
* 4: Loading
|
||||
@@ -135,6 +135,11 @@ int gameLoop (
|
||||
if (state_title(renderer, inputs, &gameState)) return 0;
|
||||
break;
|
||||
|
||||
// World creation menu
|
||||
case 3:
|
||||
state_newWorld(renderer, inputs, &gameState, &world.type);
|
||||
break;
|
||||
|
||||
// Generate a world and present a loading screen
|
||||
case 4:
|
||||
if (state_loading(renderer, &world, seed, player.pos)) {
|
||||
|
||||
53
src/gui.c
53
src/gui.c
@@ -43,7 +43,7 @@ int drawChar (SDL_Renderer *renderer,int c, int x, int y) {
|
||||
* specified x and y coordinates, and then returns the x position
|
||||
* it left off on.
|
||||
*/
|
||||
int drawStr (SDL_Renderer *renderer,char *str, int x, int y) {
|
||||
int drawStr (SDL_Renderer *renderer, const char *str, int x, int y) {
|
||||
while (*str > 0) {
|
||||
x += drawChar(renderer, *(str++), x, y);
|
||||
}
|
||||
@@ -53,7 +53,7 @@ int drawStr (SDL_Renderer *renderer,char *str, int x, int y) {
|
||||
/* shadowStr
|
||||
* Identical to drawStr, but draws white text with a grey shadow.
|
||||
*/
|
||||
int shadowStr (SDL_Renderer *renderer, char *str, int x, int y) {
|
||||
int shadowStr (SDL_Renderer *renderer, const char *str, int x, int y) {
|
||||
SDL_SetRenderDrawColor(renderer, 77, 77, 77, 255);
|
||||
drawStr(renderer, str, x + 1, y + 1);
|
||||
white(renderer);
|
||||
@@ -63,18 +63,17 @@ int shadowStr (SDL_Renderer *renderer, char *str, int x, int y) {
|
||||
/* centerStr
|
||||
* Identical to drawStr, but centers the text
|
||||
*/
|
||||
int centerStr (SDL_Renderer *renderer, char *str, int x, int y) {
|
||||
int centerStr (SDL_Renderer *renderer, const char *str, int x, int y) {
|
||||
x *= 2;
|
||||
char *strsave = str;
|
||||
while (*str > 0) {
|
||||
x -= font[(int)*(str++)][8];
|
||||
int i = 0;
|
||||
while (str[i] > 0) {
|
||||
x -= font[(int)str[i++]][8];
|
||||
}
|
||||
|
||||
str = strsave;
|
||||
x /= 2;
|
||||
|
||||
while(*str > 0) {
|
||||
x += drawChar(renderer, *(str++), x, y);
|
||||
i = 0;
|
||||
while(str[i] > 0) {
|
||||
x += drawChar(renderer, str[i++], x, y);
|
||||
}
|
||||
|
||||
return x;
|
||||
@@ -83,7 +82,7 @@ int centerStr (SDL_Renderer *renderer, char *str, int x, int y) {
|
||||
/* shadowStr
|
||||
* Identical to centerStr, but draws white text with a grey shadow.
|
||||
*/
|
||||
int shadowCenterStr (SDL_Renderer *renderer, char *str, int x, int y) {
|
||||
int shadowCenterStr (SDL_Renderer *renderer, const char *str, int x, int y) {
|
||||
SDL_SetRenderDrawColor(renderer, 77, 77, 77, 255);
|
||||
centerStr(renderer, str, x + 1, y + 1);
|
||||
white(renderer);
|
||||
@@ -93,15 +92,14 @@ int shadowCenterStr (SDL_Renderer *renderer, char *str, int x, int y) {
|
||||
/* drawBig
|
||||
* Draws centered text at a large scale
|
||||
*/
|
||||
int drawBig (SDL_Renderer *renderer, char *str, int x, int y) {
|
||||
char *strsave = str;
|
||||
while (*str > 0)
|
||||
x -= font[(int)*(str++)][8];
|
||||
int drawBig (SDL_Renderer *renderer, const char *str, int x, int y) {
|
||||
int i = 0;
|
||||
while (str[i] > 0)
|
||||
x -= font[(int)str[i++]][8];
|
||||
|
||||
str = strsave;
|
||||
|
||||
while (*str > 0) {
|
||||
int c = *(str++);
|
||||
i = 0;
|
||||
while (str[i] > 0) {
|
||||
int c = str[i++];
|
||||
for (int yy = 0; yy < 16; yy++) {
|
||||
for (int xx = 0; xx < 16; xx++) {
|
||||
if ((font[c][yy / 2] >> (7 - xx / 2)) & 0x1) {
|
||||
@@ -126,16 +124,15 @@ int drawBig (SDL_Renderer *renderer, char *str, int x, int y) {
|
||||
*/
|
||||
int drawBGStr (
|
||||
SDL_Renderer *renderer,
|
||||
char *str, int x, int y
|
||||
const char *str, int x, int y
|
||||
) {
|
||||
static int len;
|
||||
static SDL_Rect bg = {0, 0, 0, 9};
|
||||
static char *strBak;
|
||||
|
||||
strBak = str;
|
||||
int i = 0;
|
||||
len = 0;
|
||||
while(*str > 0) {
|
||||
len += font[(int)*(str++)][8];
|
||||
while(str[i] > 0) {
|
||||
len += font[(int)str[i++]][8];
|
||||
}
|
||||
|
||||
bg.x = x;
|
||||
@@ -146,7 +143,7 @@ int drawBGStr (
|
||||
SDL_RenderFillRect(renderer, &bg);
|
||||
|
||||
white(renderer);
|
||||
return drawStr(renderer, strBak, ++x, ++y);
|
||||
return drawStr(renderer, str, ++x, ++y);
|
||||
}
|
||||
|
||||
/* button
|
||||
@@ -156,7 +153,7 @@ int drawBGStr (
|
||||
*/
|
||||
int button (
|
||||
SDL_Renderer *renderer,
|
||||
char *str,
|
||||
const char *str,
|
||||
int x, int y, int w,
|
||||
int mouseX, int mouseY
|
||||
) {
|
||||
@@ -288,7 +285,7 @@ void dirtBg (SDL_Renderer *renderer) {
|
||||
*/
|
||||
void loadScreen (
|
||||
SDL_Renderer *renderer,
|
||||
char *str,
|
||||
const char *str,
|
||||
float prog, float max
|
||||
) {
|
||||
dirtBg(renderer);
|
||||
@@ -317,7 +314,7 @@ void loadScreen (
|
||||
/* chatAdd
|
||||
* Adds a message to chat
|
||||
*/
|
||||
void chatAdd (char *str) {
|
||||
void chatAdd (const char *str) {
|
||||
chatHistoryFade[chatHistoryIndex] = 480;
|
||||
memcpy (
|
||||
chatHistory[(chatHistoryIndex)++],
|
||||
|
||||
20
src/gui.h
20
src/gui.h
@@ -8,18 +8,18 @@
|
||||
#include "textures.h"
|
||||
|
||||
void strnum (char*, int, int);
|
||||
int drawChar (SDL_Renderer*, int, int, int);
|
||||
int drawStr (SDL_Renderer*, char*, int, int);
|
||||
int shadowStr (SDL_Renderer*, char*, int, int);
|
||||
int centerStr (SDL_Renderer*, char*, int, int);
|
||||
int shadowCenterStr (SDL_Renderer*, char*, int, int);
|
||||
int drawBig (SDL_Renderer*, char*, int, int);
|
||||
int drawBGStr (SDL_Renderer*, char*, int, int);
|
||||
int button (SDL_Renderer*, char*, int, int, int, int, int);
|
||||
int drawChar (SDL_Renderer*, int, int, int);
|
||||
int drawStr (SDL_Renderer*, const char*, int, int);
|
||||
int shadowStr (SDL_Renderer*, const char*, int, int);
|
||||
int centerStr (SDL_Renderer*, const char*, int, int);
|
||||
int shadowCenterStr (SDL_Renderer*, const char*, int, int);
|
||||
int drawBig (SDL_Renderer*, const char*, int, int);
|
||||
int drawBGStr (SDL_Renderer*, const char*, int, int);
|
||||
int button (SDL_Renderer*, const char*, int, int, int, int, int);
|
||||
int drawSlot (SDL_Renderer*, InvSlot*, int, int, int, int);
|
||||
void dirtBg (SDL_Renderer*);
|
||||
void loadScreen (SDL_Renderer*, char*, float, float);
|
||||
void chatAdd (char*);
|
||||
void loadScreen (SDL_Renderer*, const char*, float, float);
|
||||
void chatAdd (const char*);
|
||||
void white (SDL_Renderer*);
|
||||
void tblack (SDL_Renderer*);
|
||||
|
||||
|
||||
52
src/menus.c
52
src/menus.c
@@ -4,10 +4,7 @@ int menu_optionsMain (SDL_Renderer *, Inputs *, int *, int *);
|
||||
|
||||
/* === GAME STATES === */
|
||||
|
||||
int state_title (
|
||||
SDL_Renderer *renderer, Inputs *inputs,
|
||||
int *gameState
|
||||
) {
|
||||
int state_title (SDL_Renderer *renderer, Inputs *inputs, int *gameState) {
|
||||
inputs->mouse.x /= BUFFER_SCALE;
|
||||
inputs->mouse.y /= BUFFER_SCALE;
|
||||
|
||||
@@ -27,7 +24,7 @@ int state_title (
|
||||
inputs->mouse.x, inputs->mouse.y) &&
|
||||
inputs->mouse.left
|
||||
) {
|
||||
*gameState = 4;
|
||||
*gameState = 3;
|
||||
}
|
||||
|
||||
if (button(renderer, "Options",
|
||||
@@ -49,6 +46,49 @@ int state_title (
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *terrainNames[16] = {
|
||||
"Classic terrain",
|
||||
"New terrain",
|
||||
"Flat stone",
|
||||
"Flat grass"
|
||||
};
|
||||
|
||||
void state_newWorld (
|
||||
SDL_Renderer *renderer,
|
||||
Inputs *inputs,
|
||||
int *gameState,
|
||||
int *type
|
||||
) {
|
||||
inputs->mouse.x /= BUFFER_SCALE;
|
||||
inputs->mouse.y /= BUFFER_SCALE;
|
||||
|
||||
dirtBg(renderer);
|
||||
|
||||
if (button(renderer, terrainNames[*type],
|
||||
BUFFER_HALF_W - 64, 20, 128,
|
||||
inputs->mouse.x, inputs->mouse.y) &&
|
||||
inputs->mouse.left
|
||||
) {
|
||||
*type = (*type + 1) % 4;
|
||||
}
|
||||
|
||||
if (button(renderer, "Cancel",
|
||||
BUFFER_HALF_W - 64, 64, 61,
|
||||
inputs->mouse.x, inputs->mouse.y) &&
|
||||
inputs->mouse.left
|
||||
) {
|
||||
*gameState = 0;
|
||||
}
|
||||
|
||||
if (button(renderer, "Generate",
|
||||
BUFFER_HALF_W + 3, 64, 61,
|
||||
inputs->mouse.x, inputs->mouse.y) &&
|
||||
inputs->mouse.left
|
||||
) {
|
||||
*gameState = 4;
|
||||
}
|
||||
}
|
||||
|
||||
int state_loading (
|
||||
SDL_Renderer *renderer,
|
||||
World *world,
|
||||
@@ -72,7 +112,7 @@ int state_loading (
|
||||
world, seed,
|
||||
chunkLoadCoords.x,
|
||||
chunkLoadCoords.y,
|
||||
chunkLoadCoords.z, 1, 1,
|
||||
chunkLoadCoords.z, world->type, 1,
|
||||
center
|
||||
);
|
||||
loadScreen (
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "main.h"
|
||||
|
||||
int state_title (SDL_Renderer *, Inputs *, int *);
|
||||
void state_newWorld (SDL_Renderer *, Inputs *, int *, int *);
|
||||
int state_loading (SDL_Renderer *, World *, unsigned int, Coords);
|
||||
void state_options (SDL_Renderer *, Inputs *, int *, int *, int *);
|
||||
void state_egg (SDL_Renderer *, Inputs *, int *);
|
||||
|
||||
@@ -52,5 +52,6 @@ struct _Chunk {
|
||||
* Stores chunks.
|
||||
*/
|
||||
struct _World {
|
||||
int type;
|
||||
Chunk chunk[CHUNKARR_SIZE];
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user