feat(examples): core/basic_screen_manager & core/window_flags (#78)
* feat(examples): add `core/basic_screen_manager` * feat(examples): add WIP `core/window_flags` * fix(examples): get `core/window_flags` working correctly
This commit is contained in:
parent
0e9d003926
commit
a488218d0e
3 changed files with 493 additions and 0 deletions
172
examples/core/basic_screen_manager.zig
Normal file
172
examples/core/basic_screen_manager.zig
Normal file
|
|
@ -0,0 +1,172 @@
|
|||
//! # raylib-zig [core] examples - basic screen manager
|
||||
//!
|
||||
//! NOTE: This example illustrates a very simple screen manager based on a
|
||||
//! states machines
|
||||
//!
|
||||
//! Example originally created with raylib-zig 5.0, last time updated with
|
||||
//! raylib-zig 5.0
|
||||
//!
|
||||
//! Copyright (c) Nikolas Wipper 2024
|
||||
|
||||
const rl = @import("raylib");
|
||||
|
||||
const screen_width = 800;
|
||||
const screen_height = 450;
|
||||
|
||||
/// Valid game states used in the state machine
|
||||
const GameScreen = enum {
|
||||
logo,
|
||||
title,
|
||||
gameplay,
|
||||
ending,
|
||||
};
|
||||
|
||||
pub fn main() anyerror!void {
|
||||
// Initialization
|
||||
// -------------------------------------------------------------------------
|
||||
rl.initWindow(
|
||||
screen_width,
|
||||
screen_height,
|
||||
"raylib-zig [core] example - basic screen height",
|
||||
);
|
||||
defer rl.closeWindow(); // Close window and OpenGL context
|
||||
|
||||
// TODO: Initialize all required variables and load all required data here!
|
||||
|
||||
var current_screen: GameScreen = .logo;
|
||||
|
||||
var frames_counter: i32 = 0; // Useful to count frames
|
||||
|
||||
rl.setTargetFPS(60); // Set desired framerate
|
||||
|
||||
// Main game loop
|
||||
while (!rl.windowShouldClose()) { // Detect window close button or ESC key
|
||||
// Update
|
||||
// ---------------------------------------------------------------------
|
||||
switch (current_screen) {
|
||||
.logo => {
|
||||
// TODO: Update `logo` state variables here!
|
||||
|
||||
frames_counter += 1; // Count frames
|
||||
|
||||
// Wait for 2 seconds (120 frames) before jumping to `title` screen
|
||||
if (frames_counter > 120) current_screen = .title;
|
||||
},
|
||||
.title => {
|
||||
// TODO: Update `title` state variables here!
|
||||
|
||||
// Press ENTER to change to `gameplay` state
|
||||
if (rl.isKeyPressed(.key_enter) or rl.isGestureDetected(.gesture_tap)) {
|
||||
current_screen = .gameplay;
|
||||
}
|
||||
},
|
||||
.gameplay => {
|
||||
// TODO: Update `gameplay` state variables here!
|
||||
|
||||
// Press ENTER to change to `ending` state
|
||||
if (rl.isKeyPressed(.key_enter) or rl.isGestureDetected(.gesture_tap)) {
|
||||
current_screen = .ending;
|
||||
}
|
||||
},
|
||||
.ending => {
|
||||
// TODO: Update `ending` state variables here!
|
||||
|
||||
// Press ENTER to return to `title` state
|
||||
if (rl.isKeyPressed(.key_enter) or rl.isGestureDetected(.gesture_tap)) {
|
||||
current_screen = .title;
|
||||
}
|
||||
},
|
||||
}
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
// Draw
|
||||
// ---------------------------------------------------------------------
|
||||
{
|
||||
rl.beginDrawing();
|
||||
defer rl.endDrawing();
|
||||
|
||||
rl.clearBackground(rl.Color.ray_white);
|
||||
|
||||
switch (current_screen) {
|
||||
.logo => {
|
||||
// TODO: Draw `logo` state here!
|
||||
rl.drawText("LOGO SCREEN", 20, 20, 40, rl.Color.light_gray);
|
||||
rl.drawText(
|
||||
"WAIT for 2 SECONDS...",
|
||||
290,
|
||||
220,
|
||||
20,
|
||||
rl.Color.gray,
|
||||
);
|
||||
},
|
||||
.title => {
|
||||
// TODO: Draw `title` state here!
|
||||
rl.drawRectangle(
|
||||
0,
|
||||
0,
|
||||
screen_width,
|
||||
screen_height,
|
||||
rl.Color.green,
|
||||
);
|
||||
rl.drawText(
|
||||
"TITLE SCREEN",
|
||||
20,
|
||||
20,
|
||||
40,
|
||||
rl.Color.dark_green,
|
||||
);
|
||||
rl.drawText(
|
||||
"PRESS ENTER or TAP to JUMP to GAMEPLAY SCREEN",
|
||||
120,
|
||||
220,
|
||||
20,
|
||||
rl.Color.dark_green,
|
||||
);
|
||||
},
|
||||
.gameplay => {
|
||||
// TODO: Draw `gameplay` state here!
|
||||
rl.drawRectangle(
|
||||
0,
|
||||
0,
|
||||
screen_width,
|
||||
screen_height,
|
||||
rl.Color.purple,
|
||||
);
|
||||
rl.drawText("GAMEPLAY SCREEN", 20, 20, 40, rl.Color.maroon);
|
||||
rl.drawText(
|
||||
"PRESS ENTER or TAP to JUMP to ENDING SCREEN",
|
||||
130,
|
||||
220,
|
||||
20,
|
||||
rl.Color.maroon,
|
||||
);
|
||||
},
|
||||
.ending => {
|
||||
// TODO: Draw `ending` state here!
|
||||
rl.drawRectangle(
|
||||
0,
|
||||
0,
|
||||
screen_width,
|
||||
screen_height,
|
||||
rl.Color.blue,
|
||||
);
|
||||
rl.drawText(
|
||||
"ENDING SCREEN",
|
||||
20,
|
||||
20,
|
||||
40,
|
||||
rl.Color.dark_blue,
|
||||
);
|
||||
rl.drawText(
|
||||
"PRESS ENTER or TAP to RETURN to TITLE SCREEN",
|
||||
120,
|
||||
220,
|
||||
20,
|
||||
rl.Color.dark_blue,
|
||||
);
|
||||
},
|
||||
}
|
||||
}
|
||||
// ---------------------------------------------------------------------
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue