diff options
author | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-06-14 13:46:46 +0330 |
---|---|---|
committer | A404M <ahmadmahmoudiprogrammer@gmail.com> | 2025-06-14 13:46:46 +0330 |
commit | 9e0005e248a26cb8f8ecc5138756a9157bf899b5 (patch) | |
tree | 57dfaaf88701a6397f17f552587aef7edd16ba76 /code/main.felan | |
parent | 4f0e7d81333f0e5f5cf3c5ff6c88bfed9648962b (diff) |
fix some bugs
implemented another raylib example
Diffstat (limited to 'code/main.felan')
-rw-r--r-- | code/main.felan | 129 |
1 files changed, 125 insertions, 4 deletions
diff --git a/code/main.felan b/code/main.felan index c146dce..92cc4e4 100644 --- a/code/main.felan +++ b/code/main.felan @@ -1,11 +1,132 @@ @import("basic.felan"); -t :: (comptime b:u8) -> void { - print(b); +raylib :: @c_library("/usr/lib/libraylib.so.5.5.0"); +InitWindow :: @c_function(raylib,"InitWindow",(i32,i32,*u8)->void); +SetTargetFPS :: @c_function(raylib,"SetTargetFPS",(i32)->void); +WindowShouldClose :: @c_function(raylib,"WindowShouldClose",()->bool); +CloseWindow :: @c_function(raylib,"CloseWindow",()->void); +BeginDrawing :: @c_function(raylib,"BeginDrawing",()->void); +ClearBackground :: @c_function(raylib,"ClearBackground",(Color)->void); +EndDrawing :: @c_function(raylib,"EndDrawing",()->void); +IsKeyPressed :: @c_function(raylib,"IsKeyPressed",(i32)->bool); +IsGestureDetected :: @c_function(raylib,"IsGestureDetected",(u32)->bool); +DrawText :: @c_function(raylib,"DrawText",(*u8,i32,i32,i32,Color)->void); +DrawRectangle :: @c_function(raylib,"DrawRectangle",(i32,i32,i32,i32,Color)->void); + +Color :: struct { + r:u8; + g:u8; + b:u8; + a:u8; }; +KEY_ENTER :: 257i32; + +GESTURE_TAP :: 1u32; + +LOGO :: 0; +TITLE :: 1; +GAMEPLAY :: 2; +ENDING :: 3; + main :: () -> void { - a := 3u8; - t(2u8); + SCREEN_WIDTH :: 800i32; + SCREEN_HEIGHT :: 450i32; + + RAYWHITE := color(245u8,245u8,245u8,255u8); + LIGHTGRAY := color(200u8,200u8,200u8,255u8); + GRAY := color(130u8,130u8,130u8,255u8); + GREEN := color(0u8,228u8,48u8,255u8); + DARKGREEN := color(0u8,117u8,44u8,255u8); + BLUE := color(0u8,121u8,241u8,255u8); + DARKBLUE := color(0u8,82u8,172u8,255u8); + PURPLE := color(200u8,122u8,255u8,255u8); + MAROON := color(100u8,33u8,55u8,255u8); + + title := "Hello\0"; + + InitWindow(SCREEN_WIDTH,SCREEN_HEIGHT,&title[0]); + + currentScreen := LOGO; + + framesCounter := 0; + + SetTargetFPS(60i32); + + while(!WindowShouldClose()){ + if currentScreen == LOGO { + framesCounter += 1; + if framesCounter > 120 { + currentScreen = TITLE; + } + } else if currentScreen == TITLE { + if IsKeyPressed(KEY_ENTER) || IsGestureDetected(GESTURE_TAP) { + currentScreen = GAMEPLAY; + } + } else if currentScreen == GAMEPLAY { + if IsKeyPressed(KEY_ENTER) || IsGestureDetected(GESTURE_TAP) { + currentScreen = ENDING; + } + } else if currentScreen == ENDING { + if IsKeyPressed(KEY_ENTER) || IsGestureDetected(GESTURE_TAP) { + currentScreen = TITLE; + } + } + + BeginDrawing(); + + ClearBackground(RAYWHITE); + + if currentScreen == LOGO { + title := "LOGO SCREEN\0"; + DrawText(&title[0],20i32,20i32,40i32,LIGHTGRAY); + text := "WAIT for 2 SECONDS...\0"; + DrawText(&text[0],290i32,220i32,20i32,LIGHTGRAY); + } else if currentScreen == TITLE { + DrawRectangle(0i32,0i32,SCREEN_WIDTH,SCREEN_HEIGHT,GREEN); + title := "TITLE SCREEN\0"; + DrawText(&title[0],20i32,20i32,40i32,DARKGREEN); + text := "PRESS ENTER or TAP to JUMP to GAMEPLAY SCREEN\0"; + DrawText(&text[0],120i32,220i32,20i32,DARKGREEN); + } else if currentScreen == GAMEPLAY { + DrawRectangle(0i32,0i32,SCREEN_WIDTH,SCREEN_HEIGHT,PURPLE); + title := "GAMEPLAY SCREEN\0"; + DrawText(&title[0],20i32,20i32,40i32,MAROON); + text := "PRESS ENTER or TAP to JUMP to ENDING SCREEN\0"; + DrawText(&text[0],120i32,220i32,20i32,MAROON); + } else if currentScreen == ENDING { + DrawRectangle(0i32,0i32,SCREEN_WIDTH,SCREEN_HEIGHT,BLUE); + title := "ENDING SCREEN\0"; + DrawText(&title[0],20i32,20i32,40i32,DARKBLUE); + text := "PRESS ENTER or TAP to JUMP to TITLE SCREEN\0"; + DrawText(&text[0],120i32,220i32,20i32,DARKBLUE); + } + + EndDrawing(); + } + + CloseWindow(); +}; + +color :: (r:u8,g:u8,b:u8,a:u8)->Color { + result:Color = undefined; + + result.r = r; + result.g = g; + result.b = b; + result.a = a; + + return result; }; + +color :: (value : u32) -> Color { + result:Color = undefined; + + result.r = @cast(value >> @cast(3*8,u32),u8); + result.g = @cast(value >> @cast(2*8,u32),u8); + result.b = @cast(value >> @cast(1*8,u32),u8); + result.a = @cast(value >> @cast(0*8,u32),u8); + + return result; +}; |