speedcat/pong.cat
Slendi 95057fd359 Add support for enums in the parser
Signed-off-by: Slendi <slendi@socopon.com>
2024-04-29 16:42:28 +03:00

194 lines
4.4 KiB
Plaintext

enum MyEnum {
EnumItem1,
EnumItem2 = 1,
EnumItem3,
EnumItem4,
}
enum MyTypedEnum : i8 {
EnumItem1,
EnumItem2,
EnumItem3 = 105,
EnumItem4,
}
\struct Vec2 {
\ x y: f32,
\}
\
\struct Rect {
\ pos size: Vec2,
\}
\
\let CONSTPOS :: .Vec2 {20.0 20.0}
\let CONSTSZ :: .Vec2 {100.0 100.0}
\let CONST :: .Rect {(CONSTPOS) (CONSTSZ)}
\
\\ FIXME: LLVM IR geneartion is borked
\\ let CONST :: .Rect { .Vec2 { 20.0 20.0 } .Vec2 { 100.0 100.0 } }
\
\struct Color {
\ r g b a: u8,
\}
\
\let KEY_R :: 82
\
\fn InitWindow(w h: i32, title: []u8)
\fn CloseWindow
\fn BeginDrawing
\fn SetTargetFPS(fps: i32)
\fn EndDrawing
\fn DrawFPS(x y: i32)
\fn WindowShouldClose i32
\fn TextSubtext(text: []u8, start end: i32) []u8
\fn IsKeyPressed(key: i32) u1
\
\struct Rectangle {
\ x y w h: f32,
\}
\
\fn ColorToRaylib(c: Color) u32 {
\ ret c.a as u32 << 24 as u32 | c.b as u32 << 16 as u32 | c.g as u32 << 8 as u32 | c.r
\}
\
\fn ClearBackgroundWrap(c: Color) {
\ fn ClearBackground(c: u32)
\ ClearBackground (ColorToRaylib c)
\}
\
\fn DrawRectangleWrap(x y w h: i32, c: Color) {
\ fn DrawRectangle(x y w h: i32, c: u32)
\ DrawRectangle x y w h (ColorToRaylib c)
\}
\
\fn DrawCircleWrap(x y: i32, r: f32, c: Color) {
\ fn DrawCircle(x y: i32, r: f32, c: u32)
\ DrawCircle x y r (ColorToRaylib c)
\}
\
\fn DrawRectangleRecWrap(r: Rectangle, c: Color) {
\ fn DrawRectangleRec(r: Rectangle, c: u32)
\ DrawRectangleRec r (ColorToRaylib c)
\}
\
\fn DrawTextWrap(text: []u8, x y size: i32, c: Color) {
\ fn DrawText(text: []u8, x y size: i32, c: u32)
\ DrawText text x y size (ColorToRaylib c)
\}
\
\let WHITE :: .Color {255 255 255 255}
\let BLACK :: .Color {0 0 0 255}
\let RED :: .Color {255 0 0 255}
\let BLUE :: .Color {0 0 255 255}
\
\InitWindow 800 450 Raylib
\SetTargetFPS 60
\
\fn GetScreenWidth i32
\fn GetScreenHeight i32
\
\fn DrawRect(rect: Rect, c: Color) {
\ DrawRectangleWrap (rect.pos.x as i32) (rect.pos.y as i32) (rect.size.x as i32) (rect.size.y as i32) c
\}
\
\let logox := GetScreenWidth / 2 - 128
\let logoy := GetScreenHeight / 2 - 128
\
\\ FIXME: Cannot inline
\let fc := 0
\let lc := 0
\let top_side_rec_width := 16
\let left_side_rec_height := 16
\let bottom_side_rec_width := 16
\let right_side_rec_height := 16
\
\let state := 0
\let alpha := 1.0
\
\for WindowShouldClose == 0 {
\ if state == 0 {
\ if ++fc == 120 {
\ state = 1
\ fc = 0
\ }
\ } elif state == 1 {
\ top_side_rec_width = top_side_rec_width + 4
\ left_side_rec_height = left_side_rec_height + 4
\
\ if top_side_rec_width == 256 {
\ state = 2
\ }
\ } elif state == 2 {
\ bottom_side_rec_width = bottom_side_rec_width + 4
\ right_side_rec_height = right_side_rec_height + 4
\
\ if bottom_side_rec_width == 256 {
\ state = 3
\ }
\ } elif state == 3 {
\ if ++fc / 12 != 0 {
\ ++lc
\ fc = 0
\ }
\
\ if lc >= 10 {
\ alpha = alpha - 0.01
\ if alpha <= 0.0 {
\ alpha = 0.0
\ state = 4
\ }
\ }
\ } elif IsKeyPressed(KEY_R) { \
\ fc = lc = 0
\
\ top_side_rec_width = 16
\ left_side_rec_height = 16
\ bottom_side_rec_width = 16
\ right_side_rec_height = 16
\
\ state = 0
\ alpha = 1.0
\ }
\
\ BeginDrawing
\ ClearBackgroundWrap WHITE
\ DrawFPS 20 20
\
\ DrawRect CONST RED
\
\ if state == 0 {
\ if (fc/15)%2 != 0 {
\ DrawRectangleWrap logox logoy 16 16 BLACK
\ }
\ } elif state == 1 {
\ DrawRectangleWrap logox logoy top_side_rec_width 16 BLACK
\ DrawRectangleWrap logox logoy 16 left_side_rec_height BLACK
\ } elif state == 2 {
\ DrawRectangleWrap logox logoy top_side_rec_width 16 BLACK
\ DrawRectangleWrap logox logoy 16 left_side_rec_height BLACK
\
\ DrawRectangleWrap logox+240 logoy 16 right_side_rec_height BLACK
\ DrawRectangleWrap logox logoy+240 bottom_side_rec_width 16 BLACK
\ } elif state == 3 {
\ let colorw := .Color{255 255 255 (alpha*255.0) as u8}
\ let colorb := .Color{0 0 0 (alpha*255.0) as u8}
\ \ FIXME: ADD field access assignment
\ \color.a = (alpha * 255.0) as u8
\ DrawRectangleWrap logox logoy top_side_rec_width 16 colorb
\ DrawRectangleWrap logox logoy+16 16 left_side_rec_height-32 colorb
\
\ DrawRectangleWrap logox+240 logoy+16 16 right_side_rec_height-32 cbolor
\ DrawRectangleWrap logox logoy+240 bottom_side_rec_width 16 colorb
\
\ DrawRectangleWrap GetScreenWidth/2-112 GetScreenHeight/2-112 224 224 colorw
\
\ DrawTextWrap (TextSubtext raylib 0 lc) GetScreenWidth/2-44 GetScreenHeight/2+48 50 colorb
\ } else {
\ DrawTextWrap "[R] REPLAY" 340 200 20 BLACK
\ }
\
\ EndDrawing
\}
\CloseWindow
\