114 lines
3.3 KiB
Plaintext
114 lines
3.3 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_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"; |