Files
console3d/src/main.jai

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