Continue arguments

This commit is contained in:
Miloslav Ciz 2025-01-28 20:24:28 +01:00
parent c57ede96c9
commit bf06697917
2 changed files with 58 additions and 12 deletions

View file

@ -44,6 +44,8 @@ static const char *LCR_texts[] =
"loading"
};
// TODO: define string for CLI arguments for frontends?
static const char *LCR_internalDataFile =
"Mtestmap;"
"52123 1 :*H1k0"

62
game.h
View file

@ -576,6 +576,29 @@ char LCR_gameGetNextDataStrChar(void)
return c != LCR_RESOURCE_FILE_SEPARATOR ? c : 0;
}
unsigned int LCR_countData(char magicNumber)
{
unsigned int result = 0;
LCR_gameRewindDataFile();
while (1)
{
char c = LCR_gameGetNextDataFileChar();
if (c == magicNumber)
result++;
while (c != 0 && c != LCR_RESOURCE_FILE_SEPARATOR)
c = LCR_gameGetNextDataFileChar();
if (c == 0)
break;
}
return result;
}
/**
Seeks to the Nth data string in the global data file, after the magic number,
so that the name is now available for reading.
@ -761,9 +784,12 @@ void LCR_gameInit(int argc, const char **argv)
LCR_game.nextRenderFrameTime = 0;
LCR_game.nextRacingTickTime = 0;
LCR_game.cameraMode = LCR_CAMERA_MODE_DRIVE;
LCR_currentMap.blockCount = 0; // means no map loaded
LCR_LOG2("parsing arguments");
uint8_t quickLoad = 0;
while (argc) // parse arguments
{
argc--;
@ -774,6 +800,9 @@ void LCR_gameInit(int argc, const char **argv)
case 'c': LCR_game.cameraMode = (argv[argc][2] - '0') % 4; break;
case 'm': LCR_game.musicOn = argv[argc][2] != '0'; break;
case 's': LCR_audio.on = argv[argc][2] != '0'; break;
case 'M': quickLoad = 1; break;
case 'R': quickLoad = 2; break;
case 'P': quickLoad = 3; break;
// TODO
@ -783,9 +812,23 @@ void LCR_gameInit(int argc, const char **argv)
}
}
if (quickLoad == 1)
{
LCR_gameLoadMap(LCR_countData('M') - 1);
LCR_gameSetState(LCR_GAME_STATE_LOADING);
LCR_game.menu.selectedTab = 1;
}
else if (quickLoad == 2 || quickLoad == 3)
{
LCR_gameLoadReplay(LCR_countData('R') - 1);
LCR_gameSetState(LCR_GAME_STATE_LOADING);
LCR_game.menu.selectedTab = quickLoad;
}
else
{
LCR_gameLoadMainMenuItems();
LCR_gameSetState(LCR_GAME_STATE_MENU);
LCR_currentMap.blockCount = 0; // means no map loaded
}
}
/**
@ -1151,14 +1194,14 @@ void LCR_gameHandleInput(void)
LCR_gameLoadMainMenuItems();
break;
case 1:
case 1: // maps
LCR_gameLoadMap(LCR_game.dataFile.firstItemIndex +
LCR_game.menu.selectedItem);
LCR_gameSetState(LCR_GAME_STATE_LOADING);
break;
case 2:
case 3:
case 2: // view replay
case 3: // play against replay
{
int mapIndex = LCR_gameLoadReplay(LCR_game.dataFile.firstItemIndex +
LCR_game.menu.selectedItem);
@ -1258,12 +1301,12 @@ void LCR_gameHandleInput(void)
uint8_t LCR_gameStep(uint32_t time)
{
LCR_LOG2("game step (start)");
uint32_t sleep = 0;
int paused = LCR_game.state == LCR_GAME_STATE_MENU ||
LCR_game.state == LCR_GAME_STATE_RUN_STARTING;
LCR_LOG2("game step (start)");
LCR_game.time = time;
for (int i = 0; i < LCR_KEYS_TOTAL; ++i)
@ -1321,12 +1364,12 @@ LCR_replayOutputStr(_LCR_gameDataCharWrite);
if (events & LCR_RACING_EVENT_CRASH_SMALL)
{
LCR_audioPlaySound(LCR_SOUND_CRASH_SMALL);
LCR_LOG1("crash (small)");
LCR_LOG2("crash (small)");
}
else if (events & LCR_RACING_EVENT_CRASH_BIG)
{
LCR_audioPlaySound(LCR_SOUND_CRASH_BIG);
LCR_LOG1("crash (big)");
LCR_LOG2("crash (big)");
}
int engineIntensity = LCR_carSpeedKMH() * 2;
@ -1343,7 +1386,8 @@ LCR_replayOutputStr(_LCR_gameDataCharWrite);
sleep = (3 * (LCR_game.nextRacingTickTime - time)) / 4;
// handle rendering:
if (time >= LCR_game.nextRenderFrameTime)
if (time >= LCR_game.nextRenderFrameTime ||
LCR_game.state == LCR_GAME_STATE_LOADING)
{
LCR_LOG2("rendering next frame");