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_2(screen, offset, theta); cool_demo_1(screen, offset, theta); // dvd_logo_bounce(screen); // annoying_color_effect(screen, offset); 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(.{50, 20}, *t1); rotate(theta, get_triangle_centroid(t1), *t1); draw_triangle(screen, t1, #char ")"); t2 := t1; scale(.{0.2, 0.2}, *t1); draw_triangle(screen, t1, #char "%"); // draw centroid lines draw_text(screen, get_triangle_centroid(t2), " [ TEXT-BASED RENDERING DEMO ]"); draw_line(screen, get_triangle_centroid(t1), get_triangle_centroid(t2), #char "."); // connect triangles to eachother for fake 3d effect 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( .{50, 10}, .{60, 20} ); rotate(-theta * 4, .{55, 15}, *q1); translate(.{-30, 0}, *q1); draw_quad(screen, q1); q2 := q1; scale(.{3, 3}, *q1); // rotate(theta, .{60, 15}, *q1); rotate(theta, .{60, 15}, *q1); draw_quad(screen, q1); draw_line(screen, q1.p1, q2.p1, #char "."); draw_line(screen, q1.p2, q2.p2, #char "."); draw_line(screen, q1.p3, q2.p3, #char "."); draw_line(screen, q1.p4, q2.p4, #char "."); } dvd_logo_bounce :: (screen: *Screen) { draw_text(screen, .{0,0}, "⠀⠀⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣿⣿⣿⣶⣦⡀"); draw_text(screen, .{0,0}, "⠀⢠⣿⣿⡿⠀⠀⠈⢹⣿⣿⡿⣿⣿⣇⠀⣠⣿⣿⠟⣽⣿⣿⠇⠀⠀⢹⣿⣿⣿"); draw_text(screen, .{0,0}, "⠀⢸⣿⣿⡇⠀⢀⣠⣾⣿⡿⠃⢹⣿⣿⣶⣿⡿⠋⢰⣿⣿⡿⠀⠀⣠⣼⣿⣿⠏"); draw_text(screen, .{0,0}, "⠀⣿⣿⣿⣿⣿⣿⠿⠟⠋⠁⠀⠀⢿⣿⣿⠏⠀⠀⢸⣿⣿⣿⣿⣿⡿⠟⠋⠁⠀"); draw_text(screen, .{0,0}, "⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣀⣀⣸⣟⣁⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀"); draw_text(screen, .{0,0}, "⣠⣴⣶⣾⣿⣿⣻⡟⣻⣿⢻⣿⡟⣛⢻⣿⡟⣛⣿⡿⣛⣛⢻⣿⣿⣶⣦⣄⡀⠀"); draw_text(screen, .{0,0}, "⠉⠛⠻⠿⠿⠿⠷⣼⣿⣿⣼⣿⣧⣭⣼⣿⣧⣭⣿⣿⣬⡭⠾⠿⠿⠿⠛⠉⠀"); } #import "Console_Render"; #import "Basic"; #import "Math"; #import "Print_Color";