|
|
@@ -29,6 +29,8 @@ |
|
|
|
|
|
|
|
static void display_menu(void); |
|
|
|
|
|
|
|
static void demo_all(void); |
|
|
|
|
|
|
|
static void demo_dots(void); |
|
|
|
static void demo_lines(void); |
|
|
|
static void demo_thin_lines(void); |
|
|
@@ -37,7 +39,7 @@ static void demo_triangles(void); |
|
|
|
static void demo_outlined_triangles(void); |
|
|
|
static void demo_sprites(void); |
|
|
|
|
|
|
|
int clipping = 0; |
|
|
|
int force_clipping = 0; |
|
|
|
struct ee_sprite *sprite = NULL; |
|
|
|
|
|
|
|
int main(int argc, char **argv) |
|
|
@@ -73,6 +75,10 @@ int main(int argc, char **argv) |
|
|
|
demo = NULL; |
|
|
|
quit = 1; |
|
|
|
break; |
|
|
|
case '0': |
|
|
|
ee_clear(); |
|
|
|
demo = demo_all; |
|
|
|
break; |
|
|
|
case '1': |
|
|
|
ee_clear(); |
|
|
|
demo = demo_dots; |
|
|
@@ -133,18 +139,20 @@ static void display_menu(void) |
|
|
|
ee_putstr("============"); |
|
|
|
|
|
|
|
ee_goto(4, 6); |
|
|
|
ee_putstr("1: dots demo"); |
|
|
|
ee_putstr("0: complete demo"); |
|
|
|
ee_goto(4, 7); |
|
|
|
ee_putstr("2: lines demo"); |
|
|
|
ee_putstr("1: dots demo"); |
|
|
|
ee_goto(4, 8); |
|
|
|
ee_putstr("3: thin lines demo"); |
|
|
|
ee_putstr("2: lines demo"); |
|
|
|
ee_goto(4, 9); |
|
|
|
ee_putstr("4: circles demo"); |
|
|
|
ee_putstr("3: thin lines demo"); |
|
|
|
ee_goto(4, 10); |
|
|
|
ee_putstr("5: triangles demo"); |
|
|
|
ee_putstr("4: circles demo"); |
|
|
|
ee_goto(4, 11); |
|
|
|
ee_putstr("6: outlined triangles demo"); |
|
|
|
ee_putstr("5: triangles demo"); |
|
|
|
ee_goto(4, 12); |
|
|
|
ee_putstr("6: outlined triangles demo"); |
|
|
|
ee_goto(4, 13); |
|
|
|
ee_putstr("7: sprites demo"); |
|
|
|
|
|
|
|
ee_goto(4, yo - 2); |
|
|
@@ -153,6 +161,118 @@ static void display_menu(void) |
|
|
|
ee_refresh(); |
|
|
|
} |
|
|
|
|
|
|
|
static void demo_all(void) |
|
|
|
{ |
|
|
|
static int i = 0; |
|
|
|
|
|
|
|
int j, xo, yo, x1, y1, x2, y2, x3, y3; |
|
|
|
|
|
|
|
i++; |
|
|
|
|
|
|
|
ee_clear(); |
|
|
|
|
|
|
|
/* Draw the sun */ |
|
|
|
ee_color(EE_YELLOW); |
|
|
|
xo = ee_get_width() / 4; |
|
|
|
yo = ee_get_height() / 4 + 5 * sin(0.03*i); |
|
|
|
|
|
|
|
for(j = 0; j < 16; j++) |
|
|
|
{ |
|
|
|
x1 = xo - (30 + sin(0.03*i) * 8) * sin(0.03*i + M_PI*j/8); |
|
|
|
y1 = yo + (15 + sin(0.03*i) * 4) * cos(0.03*i + M_PI*j/8); |
|
|
|
ee_draw_thin_line(xo, yo, x1, y1); |
|
|
|
} |
|
|
|
|
|
|
|
ee_color(EE_WHITE); |
|
|
|
for(j = 15 + sin(0.03*i) * 8; j--;) |
|
|
|
{ |
|
|
|
ee_draw_circle(xo, yo, j, '#'); |
|
|
|
} |
|
|
|
|
|
|
|
ee_color(EE_YELLOW); |
|
|
|
ee_draw_circle(xo, yo, 15 + sin(0.03*i) * 8, '#'); |
|
|
|
|
|
|
|
/* Draw the pyramid */ |
|
|
|
xo = ee_get_width() * 5 / 8; |
|
|
|
yo = 2; |
|
|
|
|
|
|
|
x1 = ee_get_width() / 8 + sin(0.03*i) * 5; |
|
|
|
y1 = ee_get_height() / 2 + cos(0.03*i) * 5; |
|
|
|
|
|
|
|
x2 = ee_get_width() - 10 - cos(0.02*i) * 10; |
|
|
|
y2 = ee_get_height() * 3 / 4 - 5 + sin(0.02*i) * 5; |
|
|
|
|
|
|
|
x3 = ee_get_width() / 4 - sin(0.02*i) * 5; |
|
|
|
y3 = ee_get_height() * 3 / 4 + cos(0.02*i) * 5; |
|
|
|
|
|
|
|
ee_color(EE_GREEN); |
|
|
|
ee_fill_triangle(xo, yo, x2, y2, x1, y1, '%'); |
|
|
|
ee_color(EE_YELLOW); |
|
|
|
ee_draw_thin_line(xo, yo, x2, y2); |
|
|
|
ee_draw_thin_line(x2, y2, x1, y1); |
|
|
|
ee_draw_thin_line(x1, y1, xo, yo); |
|
|
|
|
|
|
|
ee_color(EE_RED); |
|
|
|
ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#'); |
|
|
|
ee_color(EE_YELLOW); |
|
|
|
ee_draw_thin_line(x1, y1, x2, y2); |
|
|
|
ee_draw_thin_line(x2, y2, x3, y3); |
|
|
|
ee_draw_thin_line(x3, y3, x1, y1); |
|
|
|
|
|
|
|
ee_color(EE_BLUE); |
|
|
|
ee_fill_triangle(xo, yo, x2, y2, x3, y3, '%'); |
|
|
|
ee_color(EE_YELLOW); |
|
|
|
ee_draw_thin_line(xo, yo, x2, y2); |
|
|
|
ee_draw_thin_line(x2, y2, x3, y3); |
|
|
|
ee_draw_thin_line(x3, y3, xo, yo); |
|
|
|
|
|
|
|
/* Draw a background triangle */ |
|
|
|
x1 = 2; |
|
|
|
y1 = 2; |
|
|
|
|
|
|
|
x2 = ee_get_width() - 3; |
|
|
|
y2 = ee_get_height() / 2; |
|
|
|
|
|
|
|
x3 = ee_get_width() / 3; |
|
|
|
y3 = ee_get_height() - 3; |
|
|
|
|
|
|
|
ee_color(EE_BLUE); |
|
|
|
// ee_fill_triangle(x1, y1, x2, y2, x3, y3, '.'); |
|
|
|
ee_color(EE_CYAN); |
|
|
|
ee_draw_thin_line(x1, y1, x3, y3); |
|
|
|
ee_draw_thin_line(x2, y2, x1, y1); |
|
|
|
ee_draw_thin_line(x3, y3, x2, y2); |
|
|
|
|
|
|
|
xo = ee_get_width() / 2 + cos(0.027*i) * ee_get_width() / 3; |
|
|
|
yo = ee_get_height() / 2 - sin(0.027*i) * ee_get_height() / 2; |
|
|
|
|
|
|
|
ee_draw_thin_line(x1, y1, xo, yo); |
|
|
|
ee_draw_thin_line(x2, y2, xo, yo); |
|
|
|
ee_draw_thin_line(x3, y3, xo, yo); |
|
|
|
|
|
|
|
/* Draw a sprite behind the pyramid */ |
|
|
|
ee_draw_sprite(xo, yo, sprite); |
|
|
|
|
|
|
|
/* Draw a trail behind the foreground sprite */ |
|
|
|
for(j = i - 60; j < i; j++) |
|
|
|
{ |
|
|
|
int delta = ee_rand(-5, 5); |
|
|
|
ee_color(ee_rand(1, 10)); |
|
|
|
ee_goto(ee_get_width() / 2 |
|
|
|
+ cos(0.02*j) * (delta + ee_get_width() / 4), |
|
|
|
ee_get_height() / 2 |
|
|
|
+ sin(0.02*j) * (delta + ee_get_height() / 3)); |
|
|
|
ee_putchar('#'); |
|
|
|
} |
|
|
|
|
|
|
|
/* Draw foreground sprite */ |
|
|
|
ee_draw_sprite(ee_get_width() / 2 + cos(0.02*i) * ee_get_width() / 4, |
|
|
|
ee_get_height() / 2 + sin(0.02*i) * ee_get_height() / 3, |
|
|
|
sprite); |
|
|
|
|
|
|
|
ee_refresh(); |
|
|
|
} |
|
|
|
|
|
|
|
static void demo_dots(void) |
|
|
|
{ |
|
|
|
int xmax = ee_get_width() - 1; |
|
|
@@ -176,7 +296,7 @@ static void demo_lines(void) |
|
|
|
|
|
|
|
/* Draw lines */ |
|
|
|
ee_color(ee_rand(1, 10)); |
|
|
|
if(clipping) |
|
|
|
if(force_clipping) |
|
|
|
{ |
|
|
|
ee_draw_line(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), |
|
|
|
ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), '#'); |
|
|
@@ -196,7 +316,7 @@ static void demo_thin_lines(void) |
|
|
|
|
|
|
|
/* Draw lines */ |
|
|
|
ee_color(ee_rand(1, 10)); |
|
|
|
if(clipping) |
|
|
|
if(force_clipping) |
|
|
|
{ |
|
|
|
ee_draw_thin_line(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), |
|
|
|
ee_rand(- w, 2 * w), ee_rand(- h, 2 * h)); |
|
|
@@ -215,7 +335,7 @@ static void demo_circles(void) |
|
|
|
int h = ee_get_height(); |
|
|
|
|
|
|
|
/* Draw circles */ |
|
|
|
if(clipping) |
|
|
|
if(force_clipping) |
|
|
|
{ |
|
|
|
ee_color(ee_rand(1, 10)); |
|
|
|
ee_draw_circle(ee_rand(- w, 2 * w), |
|
|
@@ -249,7 +369,7 @@ static void demo_triangles(void) |
|
|
|
|
|
|
|
/* Draw lines */ |
|
|
|
ee_color(ee_rand(1, 10)); |
|
|
|
if(clipping) |
|
|
|
if(force_clipping) |
|
|
|
{ |
|
|
|
ee_fill_triangle(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), |
|
|
|
ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), |
|
|
@@ -268,18 +388,21 @@ static void demo_outlined_triangles(void) |
|
|
|
{ |
|
|
|
int w = ee_get_width(); |
|
|
|
int h = ee_get_height(); |
|
|
|
int x1, y1, x2, y2, x3, y3; |
|
|
|
|
|
|
|
/* Draw lines */ |
|
|
|
ee_color(ee_rand(1, 10)); |
|
|
|
if(clipping) |
|
|
|
if(force_clipping) |
|
|
|
{ |
|
|
|
ee_fill_triangle(ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), |
|
|
|
ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), |
|
|
|
ee_rand(- w, 2 * w), ee_rand(- h, 2 * h), '#'); |
|
|
|
x1 = ee_rand(- w, 2 * w); |
|
|
|
y1 = ee_rand(- h, 2 * h); |
|
|
|
x2 = ee_rand(- w, 2 * w); |
|
|
|
y2 = ee_rand(- h, 2 * h); |
|
|
|
x3 = ee_rand(- w, 2 * w); |
|
|
|
y3 = ee_rand(- h, 2 * h); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
int x1, y1, x2, y2, x3, y3; |
|
|
|
|
|
|
|
x1 = ee_rand(0, w - 1); |
|
|
|
y1 = ee_rand(0, h - 1); |
|
|
@@ -287,52 +410,22 @@ static void demo_outlined_triangles(void) |
|
|
|
y2 = ee_rand(0, h - 1); |
|
|
|
x3 = ee_rand(0, w - 1); |
|
|
|
y3 = ee_rand(0, h - 1); |
|
|
|
} |
|
|
|
|
|
|
|
ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#'); |
|
|
|
|
|
|
|
ee_fill_triangle(x1, y1, x2, y2, x3, y3, '#'); |
|
|
|
ee_color(ee_rand(1, 10)); |
|
|
|
ee_draw_thin_line(x1, y1, x2, y2); |
|
|
|
ee_draw_thin_line(x2, y2, x3, y3); |
|
|
|
ee_draw_thin_line(x3, y3, x1, y1); |
|
|
|
|
|
|
|
ee_color(ee_rand(1, 10)); |
|
|
|
ee_draw_thin_line(x1, y1, x2, y2); |
|
|
|
ee_draw_thin_line(x2, y2, x3, y3); |
|
|
|
ee_draw_thin_line(x3, y3, x1, y1); |
|
|
|
} |
|
|
|
ee_refresh(); |
|
|
|
} |
|
|
|
|
|
|
|
static void demo_sprites(void) |
|
|
|
{ |
|
|
|
static int i = 0; |
|
|
|
|
|
|
|
int x1, y1, x2, y2, x3, y3; |
|
|
|
|
|
|
|
i++; |
|
|
|
|
|
|
|
x1 = 2; |
|
|
|
y1 = 2; |
|
|
|
|
|
|
|
x2 = ee_get_width() - 3; |
|
|
|
y2 = ee_get_height() / 2; |
|
|
|
|
|
|
|
x3 = ee_get_width() / 3; |
|
|
|
y3 = ee_get_height() - 3; |
|
|
|
|
|
|
|
ee_clear(); |
|
|
|
|
|
|
|
/* Draw a sprite behind the triangle */ |
|
|
|
ee_draw_sprite(ee_get_width() / 2 + cos(0.027*i) * 30, |
|
|
|
ee_get_height() / 2 - sin(0.027*i) * 20, sprite); |
|
|
|
|
|
|
|
/* Draw a background triangle */ |
|
|
|
ee_color(EE_BLUE); |
|
|
|
ee_fill_triangle(x1, y1, x2, y2, x3, y3, '.'); |
|
|
|
ee_color(EE_CYAN); |
|
|
|
ee_draw_thin_line(x1, y1, x3, y3); |
|
|
|
ee_draw_thin_line(x2, y2, x1, y1); |
|
|
|
ee_draw_thin_line(x3, y3, x2, y2); |
|
|
|
|
|
|
|
/* Draw foreground sprite */ |
|
|
|
ee_draw_sprite(ee_get_width() / 2 + cos(0.02*i) * 20, |
|
|
|
ee_get_height() / 2 + sin(0.02*i) * 10, sprite); |
|
|
|
|
|
|
|
ee_draw_sprite(ee_rand(0, ee_get_width() - 1), |
|
|
|
ee_rand(0, ee_get_height() - 1), sprite); |
|
|
|
ee_refresh(); |
|
|
|
} |
|
|
|
|
|
|
|