aboutsummaryrefslogtreecommitdiff
path: root/examples/game/raylib.tm
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2025-03-11 17:49:04 -0400
committerBruce Hill <bruce@bruce-hill.com>2025-03-11 17:49:04 -0400
commit1f6e586b2a3fe7f8ca32ce95659032bafef0ad24 (patch)
tree49b6633bf0693952153f12e8ed4dce1dae1443cc /examples/game/raylib.tm
parentfb2d7b5379663e929ffabfbd8428de5b35ad67c4 (diff)
Support external structs with namespaced methods (also C-strings are now
`const char*` instead of `char*`)
Diffstat (limited to 'examples/game/raylib.tm')
-rw-r--r--examples/game/raylib.tm62
1 files changed, 62 insertions, 0 deletions
diff --git a/examples/game/raylib.tm b/examples/game/raylib.tm
new file mode 100644
index 00000000..2721d0e1
--- /dev/null
+++ b/examples/game/raylib.tm
@@ -0,0 +1,62 @@
+# Raylib wrapper for some functions and structs
+use libraylib.so
+use <raylib.h>
+use <raymath.h>
+
+struct Color(r,g,b:Byte,a=Byte(255); extern)
+struct Rectangle(x,y,width,height:Num32; extern):
+ func draw(r:Rectangle, color:Color):
+ DrawRectangleRec(r, color)
+
+struct Vector2(x,y:Num32; extern):
+ ZERO := Vector2(0, 0)
+ func plus(a,b:Vector2->Vector2; inline):
+ return Vector2(a.x+b.x, a.y+b.y)
+ func minus(a,b:Vector2->Vector2; inline):
+ return Vector2(a.x-b.x, a.y-b.y)
+ func times(a,b:Vector2->Vector2; inline):
+ return Vector2(a.x*b.x, a.y*b.y)
+ func negative(v:Vector2->Vector2; inline):
+ return Vector2(-v.x, -v.y)
+ func dot(a,b:Vector2->Num32; inline):
+ return ((a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y))!
+ func cross(a,b:Vector2->Num32; inline):
+ return a.x*b.y - a.y*b.x
+ func scaled_by(v:Vector2, k:Num32->Vector2; inline):
+ return Vector2(v.x*k, v.y*k)
+ func divided_by(v:Vector2, divisor:Num32->Vector2; inline):
+ return Vector2(v.x/divisor, v.y/divisor)
+ func length(v:Vector2->Num32; inline):
+ return (v.x*v.x + v.y*v.y)!:sqrt()
+ func dist(a,b:Vector2->Num32; inline):
+ return a:minus(b):length()
+ func angle(v:Vector2->Num32; inline):
+ return Num32.atan2(v.y, v.x)
+ func norm(v:Vector2->Vector2; inline):
+ if v.x == 0 and v.y == 0:
+ return v
+ len := v:length()
+ return Vector2(v.x/len, v.y/len)
+ func rotated(v:Vector2, radians:Num32 -> Vector2):
+ cos := radians:cos() or return v
+ sin := radians:sin() or return v
+ return Vector2(cos*v.x - sin*v.y, sin*v.x + cos*v.y)
+ func mix(a,b:Vector2, amount:Num32 -> Vector2):
+ return Vector2(
+ amount:mix(a.x, b.x),
+ amount:mix(a.y, b.y),
+ )
+
+extern InitWindow:func(width:Int32, height:Int32, title:CString)
+extern SetTargetFPS:func(fps:Int32)
+extern WindowShouldClose:func(->Bool)
+extern GetFrameTime:func(->Num32)
+extern BeginDrawing:func()
+extern EndDrawing:func()
+extern CloseWindow:func()
+extern ClearBackground:func(color:Color)
+extern DrawRectangle:func(x,y,width,height:Int32, color:Color)
+extern DrawRectangleRec:func(rec:Rectangle, color:Color)
+extern DrawText:func(text:CString, x,y:Int32, text_height:Int32, color:Color)
+extern GetScreenWidth:func(->Int32)
+extern GetScreenHeight:func(->Int32)