Files
console3d/src/main.jai
2024-10-11 01:52:10 -04:00

85 lines
1.8 KiB
Plaintext

main :: () {
screen := New(Screen);
w, h := get_console_size();
init_screen(screen, w, h);
offset := 0;
theta := 0;
increase := true;
while true {
theta += 1;
if offset == 0 then increase = true;
if offset == 100 then increase = false;
if increase {
offset += 1;
} else {
offset -= 1;
}
fill_entire_screen(screen, BLANK_PIXEL);
cool_demo_1(screen, offset, theta);
annoying_color_effect(screen, offset);
draw_text(screen, .{10, 10}, "[ TEXT-BASED RENDERING DEMO ]");
swap_buffer(screen);
sleep_milliseconds(20);
reset_temporary_storage();
}
}
annoying_color_effect :: (screen: *Screen, modifier: s64) {
if modifier % 3 == 0 {
set_console_color(.RED);
} else if modifier % 5 == 0 {
set_console_color(.GREEN);
} else {
set_console_color(.BLUE, .BOLD);
}
}
cool_demo_1 :: (screen: *Screen, offset: s64, theta: s64) {
t1 := Triangle.{
.{30 - offset, 20},
.{95, 10 - (offset / 2)},
.{90 + offset, 40},
};
scale(.{0.5, 0.8}, *t1);
translate(.{0, 20}, *t1);
translate(.{50, 5}, *t1);
rotate(theta, get_triangle_centroid(t1), *t1);
draw_triangle(screen, t1, #char "%");
t2 := t1;
scale(.{0.5, 0.5}, *t1);
draw_triangle(screen, t1, #char "%");
draw_line(screen, t1.p1, t2.p1, #char "%");
draw_line(screen, t1.p2, t2.p2, #char "%");
draw_line(screen, t1.p3, t2.p3, #char "%");
}
cool_demo_2 :: (screen: *Screen, offset: s64, theta: s64) {
q1 := make_quad_from_rect(
.{100, 10},
.{110, 20}
);
rotate(-theta, .{100, 10}, *q1);
draw_quad(screen, q1, #char "-");
}
#import "Console_Render";
#import "Basic";
#import "Math";
#import "Print_Color";