85 lines
1.8 KiB
Plaintext
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"; |