added a second message to the intro etc etc, I need to start commiting after every change, fuck
This commit is contained in:
parent
dc3233343a
commit
65f1c203a7
1 changed files with 25 additions and 20 deletions
43
src/main.c
43
src/main.c
|
|
@ -30,7 +30,6 @@ typedef struct {
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool is_running; // Controls the main game loop
|
bool is_running; // Controls the main game loop
|
||||||
float escape_timer; // Tracks how long the Escape key has been held (in ms)
|
|
||||||
// Message 1: "Hello, human."
|
// Message 1: "Hello, human."
|
||||||
const char* message1;
|
const char* message1;
|
||||||
int visible_chars1; // Number of characters revealed in message1
|
int visible_chars1; // Number of characters revealed in message1
|
||||||
|
|
@ -41,6 +40,8 @@ typedef struct {
|
||||||
uint32_t last_char_time2; // Timestamp of last character revealed in message2
|
uint32_t last_char_time2; // Timestamp of last character revealed in message2
|
||||||
int message_stage; // 0: showing message1, 1: showing message2
|
int message_stage; // 0: showing message1, 1: showing message2
|
||||||
uint32_t message1_finish_time; // Timestamp when message1 finished revealing (0 if not finished)
|
uint32_t message1_finish_time; // Timestamp when message1 finished revealing (0 if not finished)
|
||||||
|
// Escape key handling
|
||||||
|
uint32_t escape_press_time; // Timestamp when Escape was first pressed (0 if not pressed)
|
||||||
// Fonts
|
// Fonts
|
||||||
TTF_Font* font_large; // Font for message1 (120pt)
|
TTF_Font* font_large; // Font for message1 (120pt)
|
||||||
TTF_Font* font_small; // Font for message2 (24pt)
|
TTF_Font* font_small; // Font for message2 (24pt)
|
||||||
|
|
@ -99,7 +100,7 @@ bool init_game(Game *game) {
|
||||||
|
|
||||||
// Setup initial state
|
// Setup initial state
|
||||||
game->is_running = true;
|
game->is_running = true;
|
||||||
game->escape_timer = 0.0f;
|
game->escape_press_time = 0; // Not pressing escape initially
|
||||||
game->message1 = "Hello, human.";
|
game->message1 = "Hello, human.";
|
||||||
game->visible_chars1 = 0;
|
game->visible_chars1 = 0;
|
||||||
game->last_char_time1 = SDL_GetTicks();
|
game->last_char_time1 = SDL_GetTicks();
|
||||||
|
|
@ -134,15 +135,17 @@ void handle_input(Game *game, float delta_time) {
|
||||||
const uint8_t *state = SDL_GetKeyboardState(NULL);
|
const uint8_t *state = SDL_GetKeyboardState(NULL);
|
||||||
|
|
||||||
// ESCAPE KEY LOGIC:
|
// ESCAPE KEY LOGIC:
|
||||||
// If Escape is held, we add the actual time passed (delta_time) to the timer.
|
|
||||||
if (state[SDL_SCANCODE_ESCAPE]) {
|
if (state[SDL_SCANCODE_ESCAPE]) {
|
||||||
game->escape_timer += delta_time;
|
if (game->escape_press_time == 0) {
|
||||||
if (game->escape_timer >= 1000.0f) { // Exactly 1000ms = 1 second
|
// Just pressed
|
||||||
|
game->escape_press_time = SDL_GetTicks();
|
||||||
|
} else if (SDL_GetTicks() - game->escape_press_time >= 1000) {
|
||||||
|
// Held for 1 second
|
||||||
game->is_running = false;
|
game->is_running = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Reset timer immediately if key is released
|
// Released
|
||||||
game->escape_timer = 0.0f;
|
game->escape_press_time = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Player Movement (Invisible for now)
|
// Player Movement (Invisible for now)
|
||||||
|
|
@ -186,23 +189,15 @@ void update(Game *game) {
|
||||||
}
|
}
|
||||||
game->last_char_time1 = current_time;
|
game->last_char_time1 = current_time;
|
||||||
}
|
}
|
||||||
// Check if we just finished message1
|
// Check if we just finished message1 (transition from not finished to finished)
|
||||||
if (game->visible_chars1 == (int)strlen(game->message1)) {
|
if (game->visible_chars1 == (int)strlen(game->message1) &&
|
||||||
|
game->message1_finish_time == 0) {
|
||||||
game->message1_finish_time = current_time;
|
game->message1_finish_time = current_time;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if we should switch to message2 (after 3.5 seconds of finishing message1)
|
|
||||||
if (game->message1_finish_time != 0 &&
|
|
||||||
(current_time - game->message1_finish_time >= 3500)) {
|
|
||||||
game->message_stage = 1;
|
|
||||||
game->visible_chars2 = 0;
|
|
||||||
game->last_char_time2 = current_time;
|
|
||||||
game->current_font = game->font_small; // Switch to small font
|
|
||||||
}
|
|
||||||
} else if (game->message_stage == 1) {
|
} else if (game->message_stage == 1) {
|
||||||
// Handling message2: "It is a known fact that C, is superior to every other programming language."
|
// Handling message2: "It is a known fact that C, is superior to every other programming language."
|
||||||
if (current_time - game->last_char_time2 >= 333) { // Adjusted timing
|
if (current_time - game->last_char_time2 >= 60) { // 2.5x faster timing for second message
|
||||||
if (game->visible_chars2 < (int)strlen(game->message2)) {
|
if (game->visible_chars2 < (int)strlen(game->message2)) {
|
||||||
char current_char = game->message2[game->visible_chars2];
|
char current_char = game->message2[game->visible_chars2];
|
||||||
game->visible_chars2++;
|
game->visible_chars2++;
|
||||||
|
|
@ -218,6 +213,16 @@ void update(Game *game) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if we should switch to message2 (after 3.5 seconds of finishing message1)
|
||||||
|
// This check happens regardless of which message we're currently displaying
|
||||||
|
if (game->message_stage == 0 && game->message1_finish_time != 0 &&
|
||||||
|
(current_time - game->message1_finish_time >= 3500)) {
|
||||||
|
game->message_stage = 1;
|
||||||
|
game->visible_chars2 = 0;
|
||||||
|
game->last_char_time2 = current_time;
|
||||||
|
game->current_font = game->font_small; // Switch to small font
|
||||||
|
}
|
||||||
|
|
||||||
// Keep player within screen bounds
|
// Keep player within screen bounds
|
||||||
if (game->player.x < 0) game->player.x = 0;
|
if (game->player.x < 0) game->player.x = 0;
|
||||||
if (game->player.x > SCREEN_WIDTH - game->player.size) game->player.x = SCREEN_WIDTH - game->player.size;
|
if (game->player.x > SCREEN_WIDTH - game->player.size) game->player.x = SCREEN_WIDTH - game->player.size;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue