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";