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" "loading"
}; };
// TODO: define string for CLI arguments for frontends?
static const char *LCR_internalDataFile = static const char *LCR_internalDataFile =
"Mtestmap;" "Mtestmap;"
"52123 1 :*H1k0" "52123 1 :*H1k0"

62
game.h
View file

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