Continue menu
This commit is contained in:
parent
6bf3a950dc
commit
1efeee9c36
2 changed files with 68 additions and 57 deletions
120
game.h
120
game.h
|
@ -358,6 +358,11 @@ void LCR_seekResourceByIndex(unsigned int index, char magicNumber)
|
||||||
|
|
||||||
while (index)
|
while (index)
|
||||||
{
|
{
|
||||||
|
c = LCR_gameGetNextResourceFileChar();
|
||||||
|
|
||||||
|
if (c == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
if (c == magicNumber)
|
if (c == magicNumber)
|
||||||
index--;
|
index--;
|
||||||
|
|
||||||
|
@ -372,10 +377,9 @@ void LCR_seekResourceByIndex(unsigned int index, char magicNumber)
|
||||||
c != LCR_RESOURCE_FILE_SEPARATOR && c != 0);
|
c != LCR_RESOURCE_FILE_SEPARATOR && c != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void LCR_gameStartRun(void)
|
void LCR_gameStartRun(unsigned int mapIndex)
|
||||||
{
|
{
|
||||||
LCR_seekResourceByIndex(0,'M'); // TODO
|
LCR_seekResourceByIndex(mapIndex,'M');
|
||||||
|
|
||||||
LCR_mapLoadFromStr(LCR_gameGetNextResourceStrChar);
|
LCR_mapLoadFromStr(LCR_gameGetNextResourceStrChar);
|
||||||
LCR_rendererLoadMap();
|
LCR_rendererLoadMap();
|
||||||
LCR_gameResetRun();
|
LCR_gameResetRun();
|
||||||
|
@ -389,6 +393,7 @@ void LCR_gameInit(void)
|
||||||
LCR_game.keyStates[i] = 0;
|
LCR_game.keyStates[i] = 0;
|
||||||
|
|
||||||
LCR_rendererInit();
|
LCR_rendererInit();
|
||||||
|
|
||||||
LCR_racingInit();
|
LCR_racingInit();
|
||||||
LCR_audioInit();
|
LCR_audioInit();
|
||||||
|
|
||||||
|
@ -397,20 +402,18 @@ void LCR_gameInit(void)
|
||||||
LCR_game.resourceFile.loadedItemCount = 0;
|
LCR_game.resourceFile.loadedItemCount = 0;
|
||||||
LCR_game.resourceFile.itemsTotal = 0;
|
LCR_game.resourceFile.itemsTotal = 0;
|
||||||
|
|
||||||
for (int i = 0; i < LCR_RESOURCE_ITEM_CHUNK; ++i)
|
LCR_game.menuSelectedTab = 0;
|
||||||
for (int j = 0; j < LCR_MENU_STRING_SIZE; ++j)
|
LCR_game.menuSelectedItem = 0;
|
||||||
LCR_game.resourceFile.loadedItemNames[i * LCR_MENU_STRING_SIZE + j] = 0;
|
|
||||||
|
|
||||||
|
|
||||||
LCR_game.menuSelectedTab = 0;
|
|
||||||
LCR_game.menuSelectedItem = 0;
|
|
||||||
|
|
||||||
LCR_game.frame = 0;
|
LCR_game.frame = 0;
|
||||||
LCR_game.musicVolume = 255;
|
LCR_game.musicVolume = 255;
|
||||||
LCR_game.nextRenderFrameTime = 0;
|
LCR_game.nextRenderFrameTime = 0;
|
||||||
LCR_game.nextRacingTickTime = 0;
|
LCR_game.nextRacingTickTime = 0;
|
||||||
LCR_game.controlMode = LCR_CONTROL_MODE_DRIVE;
|
LCR_game.controlMode = LCR_CONTROL_MODE_DRIVE;
|
||||||
LCR_gameStartRun();
|
|
||||||
|
LCR_gameSetState(LCR_GAME_STATE_MENU);
|
||||||
|
|
||||||
|
LCR_currentMap.blockCount = 0; // means no map loaded
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -421,68 +424,70 @@ void LCR_gameLoadResourceFileChunk(unsigned int startIndex, char magicNumber)
|
||||||
{
|
{
|
||||||
LCR_LOG1("loading resources");
|
LCR_LOG1("loading resources");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
char c;
|
char c;
|
||||||
unsigned char state = 0;
|
unsigned char state = 0;
|
||||||
|
|
||||||
for (int i = 0; i < LCR_RESOURCE_ITEM_CHUNK * LCR_MENU_STRING_SIZE; ++i)
|
for (int i = 0; i < LCR_RESOURCE_ITEM_CHUNK * LCR_MENU_STRING_SIZE; ++i)
|
||||||
LCR_game.resourceFile.loadedItemNames[i] = 0;
|
LCR_game.resourceFile.loadedItemNames[i] = 0;
|
||||||
|
|
||||||
LCR_game.resourceFile.loadedItemCount = 0;
|
LCR_game.resourceFile.loadedItemCount = 0;
|
||||||
LCR_game.resourceFile.firstItemIndex = startIndex;
|
LCR_game.resourceFile.firstItemIndex = startIndex;
|
||||||
LCR_game.resourceFile.itemsTotal = 0;
|
LCR_game.resourceFile.itemsTotal = 0;
|
||||||
|
|
||||||
LCR_gameRewindResourceFile();
|
LCR_gameRewindResourceFile();
|
||||||
|
|
||||||
/* 3 iterations: in first we seek to the start index, in second we load the
|
/* 3 iterations: in first we seek to the start index, in second we load the
|
||||||
names, in third we just read the rest to get the total count. */
|
names, in third we just read the rest to get the total count. */
|
||||||
for (int i = 0; i < 3; ++i)
|
for (int i = 0; i < 3; ++i)
|
||||||
while (1)
|
|
||||||
{
|
{
|
||||||
if (i == 0 && !startIndex)
|
while (1)
|
||||||
break;
|
|
||||||
|
|
||||||
c = LCR_gameGetNextResourceFileChar();
|
|
||||||
|
|
||||||
if (c == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (state == 0) // second magic char
|
|
||||||
{
|
{
|
||||||
state = 255;
|
if (i == 0 && !startIndex)
|
||||||
|
break;
|
||||||
|
|
||||||
if (c == magicNumber)
|
c = LCR_gameGetNextResourceFileChar();
|
||||||
{
|
|
||||||
LCR_game.resourceFile.itemsTotal++;
|
|
||||||
|
|
||||||
if (i == 0)
|
if (c == 0)
|
||||||
startIndex--;
|
return;
|
||||||
else if (i == 1)
|
|
||||||
state = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
if (state == 0) // second magic char
|
||||||
else if (i == 1 && state != 255)
|
|
||||||
{
|
|
||||||
if (c == LCR_RESOURCE_FILE_SEPARATOR2 ||
|
|
||||||
state >= 1 + LCR_MENU_STRING_SIZE - 1)
|
|
||||||
{
|
{
|
||||||
state = 255;
|
state = 255;
|
||||||
LCR_game.resourceFile.loadedItemCount++;
|
|
||||||
|
|
||||||
if (LCR_game.resourceFile.loadedItemCount >= LCR_RESOURCE_ITEM_CHUNK)
|
if (c == magicNumber)
|
||||||
break;
|
{
|
||||||
|
LCR_game.resourceFile.itemsTotal++;
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
|
startIndex--;
|
||||||
|
else if (i == 1)
|
||||||
|
state = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (i == 1 && state != 255)
|
||||||
|
{
|
||||||
|
if (
|
||||||
|
c == LCR_RESOURCE_FILE_SEPARATOR ||
|
||||||
|
c == LCR_RESOURCE_FILE_SEPARATOR2 ||
|
||||||
|
state >= 1 + LCR_MENU_STRING_SIZE - 1)
|
||||||
|
{
|
||||||
|
state = 255;
|
||||||
|
LCR_game.resourceFile.loadedItemCount++;
|
||||||
|
|
||||||
|
if (LCR_game.resourceFile.loadedItemCount >= LCR_RESOURCE_ITEM_CHUNK)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
LCR_game.resourceFile.loadedItemNames[LCR_MENU_STRING_SIZE *
|
||||||
|
LCR_game.resourceFile.loadedItemCount + state - 1] = c;
|
||||||
|
|
||||||
|
state++;
|
||||||
}
|
}
|
||||||
|
|
||||||
LCR_game.resourceFile.loadedItemNames[LCR_MENU_STRING_SIZE *
|
if (c == LCR_RESOURCE_FILE_SEPARATOR)
|
||||||
LCR_game.resourceFile.loadedItemCount + state - 1] = c;
|
state = 0;
|
||||||
|
|
||||||
state++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c == LCR_RESOURCE_FILE_SEPARATOR)
|
|
||||||
state = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -630,7 +635,7 @@ void LCR_gameHandleInput(void)
|
||||||
scrolled = 1;
|
scrolled = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (LCR_game.keyStates[LCR_KEY_B] == 1)
|
else if (LCR_game.keyStates[LCR_KEY_B] == 1 && LCR_currentMap.blockCount)
|
||||||
{
|
{
|
||||||
LCR_LOG1("menu quit");
|
LCR_LOG1("menu quit");
|
||||||
LCR_gameSetState(LCR_GAME_STATE_RUN);
|
LCR_gameSetState(LCR_GAME_STATE_RUN);
|
||||||
|
@ -653,6 +658,11 @@ void LCR_gameHandleInput(void)
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
LCR_gameStartRun(
|
||||||
|
LCR_game.resourceFile.firstItemIndex + LCR_game.menuSelectedItem);
|
||||||
|
break;
|
||||||
|
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1010,6 +1010,7 @@ uint8_t LCR_rendererInit(void)
|
||||||
|
|
||||||
LCR_renderer.frame = 0;
|
LCR_renderer.frame = 0;
|
||||||
LCR_renderer.carModel = LCR_renderer.models + 8;
|
LCR_renderer.carModel = LCR_renderer.models + 8;
|
||||||
|
|
||||||
LCR_renderer.ghostModel = LCR_renderer.models + 9;
|
LCR_renderer.ghostModel = LCR_renderer.models + 9;
|
||||||
|
|
||||||
S3L_model3DInit(
|
S3L_model3DInit(
|
||||||
|
@ -1747,7 +1748,7 @@ void LCR_rendererDrawMenu(const char **items, unsigned char itemCount,
|
||||||
}
|
}
|
||||||
|
|
||||||
i = stripHeight +
|
i = stripHeight +
|
||||||
(stripHeight2 - LCR_rendererComputeTextHeight(4)) / 2;
|
(stripHeight2 - LCR_rendererComputeTextHeight(3)) / 2;
|
||||||
|
|
||||||
for (int j = 0; j < itemCount; ++j)
|
for (int j = 0; j < itemCount; ++j)
|
||||||
{
|
{
|
||||||
|
@ -1755,7 +1756,7 @@ void LCR_rendererDrawMenu(const char **items, unsigned char itemCount,
|
||||||
for (int y = i - 10; y < i + LCR_rendererComputeTextHeight(3) + 10; ++y)
|
for (int y = i - 10; y < i + LCR_rendererComputeTextHeight(3) + 10; ++y)
|
||||||
for (int x = LCR_EFFECTIVE_RESOLUTION_X / 4;
|
for (int x = LCR_EFFECTIVE_RESOLUTION_X / 4;
|
||||||
x < LCR_EFFECTIVE_RESOLUTION_X - LCR_EFFECTIVE_RESOLUTION_X / 4; ++x)
|
x < LCR_EFFECTIVE_RESOLUTION_X - LCR_EFFECTIVE_RESOLUTION_X / 4; ++x)
|
||||||
LCR_drawPixelXYSafe(x,y,0x5c1b);
|
LCR_drawPixelXYSafe(x,y,0x5c1b + 4 * ((x & 0x10) == (y & 0x10)));
|
||||||
|
|
||||||
LCR_rendererDrawText(items[j],(LCR_EFFECTIVE_RESOLUTION_X -
|
LCR_rendererDrawText(items[j],(LCR_EFFECTIVE_RESOLUTION_X -
|
||||||
LCR_rendererComputeTextWidth(items[j],3)) / 2,i,0xffff,3);
|
LCR_rendererComputeTextWidth(items[j],3)) / 2,i,0xffff,3);
|
||||||
|
|
Loading…
Reference in a new issue