Files
lib_compiler/examples/sandbox/main.lc
2024-04-13 15:29:53 +02:00

94 lines
2.2 KiB
Plaintext

import "raylib";
Tile :: struct {
value: int;
}
Map :: struct {
tiles: *Tile;
x: int;
y: int;
}
CreateMap :: proc(x: int, y: int, map: *int): Map {
result: Map = {x = x, y = y};
result.tiles = MemAlloc(:uint(x*y) * sizeof(:Tile));
for i := 0; i < x*y; i += 1 {
result.tiles[i].value = map[i];
}
return result;
}
main :: proc(): int {
TestArena();
return 0;
InitWindow(800, 600, "Thing");
SetTargetFPS(60);
XPIX :: 32;
YPIX :: 32;
camera: Camera2D = {
zoom = 1.0,
};
_map_x :: 8;
_map_y :: 8;
map := CreateMap(_map_x, _map_y, &:[_map_x * _map_y]int{
1,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,1,
0,0,0,0,1,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
}[0]);
for !WindowShouldClose() {
if IsMouseButtonDown(MOUSE_BUTTON_LEFT) {
delta := GetMouseDelta();
camera.offset = Vector2Add(camera.offset, delta);
}
BeginDrawing();
ClearBackground(RAYWHITE);
BeginMode2D(camera);
for y_it := 0; y_it < map.y; y_it += 1 {
for x_it := 0; x_it < map.x; x_it += 1 {
tile := &map.tiles[x_it + y_it * map.x];
original_rect := RectFromSize({XPIX * :float(x_it), YPIX * :float(y_it)}, {XPIX, YPIX});
rect := Shrink(original_rect, 2);
r := RectToRectangle(rect);
min_screen := GetWorldToScreen2D(original_rect.min, camera);
size := GetRectSize(original_rect);
screen_rect: Rectangle = {min_screen.x, min_screen.y, size.x, size.y};
mouse_p := GetMousePosition();
if tile.value == 1 {
DrawRectangleRec(r, RED);
} else {
DrawRectangleRec(r, GREEN);
}
if CheckCollisionPointRec(mouse_p, screen_rect) {
DrawRectangleRec(r, BLUE);
}
}
}
EndMode2D();
// DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
EndDrawing();
}
CloseWindow();
return 0;
}