Changeset 182 for ttyvaders


Ignore:
Timestamp:
Nov 15, 2003, 1:42:38 PM (16 years ago)
Author:
Sam Hocevar
Message:
  • libee/ee.c: + Replaced ee_color_names[] with ee_get_color_name(). + Don't oversleep in ee_refresh().
  • libee/graphics.c: + Implemented ee_printf().
  • test/demo.c: + If new keypresses are detected, don't wait for the next screen refresh. + Added an fps counter on demos. + Added controls for outlines and drawing boundaries.
Location:
ttyvaders/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • ttyvaders/trunk/libee/ee.c

    r180 r182  
    4646#include "ee_internals.h"
    4747
    48 /* Global array with color names */
    49 const char *ee_color_names[16] =
    50 {
    51     "black",
    52     "blue",
    53     "green",
    54     "cyan",
    55     "red",
    56     "magenta",
    57     "brown",
    58     "lightgray",
    59     "darkgray",
    60     "lightblue",
    61     "lightgreen",
    62     "lightcyan",
    63     "lightred",
    64     "lightmagenta",
    65     "yellow",
    66     "white",
    67 };
    68 
    6948static unsigned int _ee_delay;
    7049static unsigned int _ee_rendertime;
     
    228207}
    229208
     209const char *ee_get_color_name(unsigned int color)
     210{
     211    static const char *color_names[16] =
     212    {
     213        "black",
     214        "blue",
     215        "green",
     216        "cyan",
     217        "red",
     218        "magenta",
     219        "brown",
     220        "light gray",
     221        "dark gray",
     222        "light blue",
     223        "light green",
     224        "light cyan",
     225        "light red",
     226        "light magenta",
     227        "yellow",
     228        "white",
     229    };
     230
     231    if(color < 0 || color > 15)
     232        return "unknown color";
     233
     234    return color_names[color];
     235}
     236
    230237static unsigned int _ee_getticks(void)
    231238{
     
    250257void ee_refresh(void)
    251258{
     259#define IDLE_USEC 10000
    252260    static unsigned int lastticks = 0;
    253261    unsigned int ticks = lastticks + _ee_getticks();
     
    266274
    267275    /* Wait until _ee_delay + time of last call */
    268     for(ticks += _ee_getticks(); ticks < _ee_delay; ticks += _ee_getticks())
    269         usleep(10000);
     276    ticks += _ee_getticks();
     277    for(; ticks < _ee_delay - IDLE_USEC; ticks += _ee_getticks())
     278        usleep(IDLE_USEC);
    270279
    271280    /* Update the sliding mean of the render time */
  • ttyvaders/trunk/libee/ee.h

    r180 r182  
    5252};
    5353
    54 extern const char *ee_color_names[16];
    55 
    5654/*
    5755 * Types
     
    6765unsigned int ee_get_width(void);
    6866unsigned int ee_get_height(void);
     67const char *ee_get_color_name(unsigned int);
    6968void ee_refresh(void);
    7069void ee_end(void);
     
    7675void ee_putchar(int, int, char);
    7776void ee_putstr(int, int, const char *);
     77void ee_printf(int, int, const char *, ...);
    7878void ee_clear(void);
    7979
  • ttyvaders/trunk/libee/graphics.c

    r180 r182  
    3535#include <string.h>
    3636#include <stdlib.h>
     37#include <stdarg.h>
    3738
    3839#include "ee.h"
    3940#include "ee_internals.h"
    4041
    41 static int ee_color = 0;
     42static int _ee_color = 0;
    4243
    4344void ee_set_color(int color)
     
    4647        return;
    4748
    48     ee_color = color;
     49    _ee_color = color;
    4950#if defined(USE_SLANG)
    5051    SLsmg_set_color(color + 1);
     
    5859int ee_get_color(void)
    5960{
    60     return ee_color;
     61    return _ee_color;
    6162}
    6263
     
    7475#elif defined(USE_CONIO)
    7576    _ee_screen[2 * (x + y * ee_get_width())] = c;
    76     _ee_screen[2 * (x + y * ee_get_width()) + 1] = ee_color;
     77    _ee_screen[2 * (x + y * ee_get_width()) + 1] = _ee_color;
    7778//    gotoxy(x + 1, y + 1);
    7879//    putch(c);
     
    116117    {
    117118        *buf++ = *s++;
    118         *buf++ = ee_color;
     119        *buf++ = _ee_color;
    119120    }
    120121//    gotoxy(x + 1, y + 1);
    121122//    cputs(s);
    122123#endif
     124}
     125
     126void ee_printf(int x, int y, const char *format, ...)
     127{
     128    char tmp[BUFSIZ];
     129    char *buf = tmp;
     130    va_list args;
     131
     132    if(y < 0 || y >= ee_get_height() || x >= ee_get_width())
     133        return;
     134
     135    if(ee_get_width() - x + 1 > BUFSIZ)
     136        buf = malloc(ee_get_width() - x + 1);
     137
     138    va_start(args, format);
     139    vsnprintf(buf, ee_get_width() - x + 1, format, args);
     140    buf[ee_get_width() - x] = '\0';
     141    va_end(args);
     142
     143    ee_putstr(x, y, buf);
     144
     145    if(buf != tmp)
     146        free(buf);
    123147}
    124148
  • ttyvaders/trunk/test/demo.c

    r178 r182  
    4141static void demo_sprites(void);
    4242
    43 int force_clipping = 0;
     43int bounds = 0;
    4444int outline = 0;
    45 int thin = 0;
    4645struct ee_sprite *sprite = NULL;
    4746
     
    6362    /* Main menu */
    6463    display_menu();
     64    ee_refresh();
    6565
    6666    /* Go ! */
     
    6868    {
    6969        char key = ee_get_key();
     70
    7071        if(key && demo)
    7172        {
    7273            display_menu();
     74            ee_refresh();
    7375            demo = NULL;
    7476        }
    7577        else if(key)
    7678        {
     79        handle_key:
    7780            switch(key)
    7881            {
    7982            case 'q':
     83            case 'Q':
    8084                demo = NULL;
    8185                quit = 1;
    8286                break;
     87            case 'o':
     88            case 'O':
     89                outline = (outline + 1) % 3;
     90                display_menu();
     91                break;
     92            case 'b':
     93            case 'B':
     94                bounds = (bounds + 1) % 2;
     95                display_menu();
     96                break;
    8397            case 'c':
     98                demo = demo_color;
     99                break;
     100            case 'f':
     101            case 'F':
     102                demo = demo_all;
     103                break;
     104            case '1':
     105                demo = demo_dots;
     106                break;
     107            case '2':
     108                demo = demo_lines;
     109                break;
     110            case '3':
     111                demo = demo_boxes;
     112                break;
     113            case '4':
     114                demo = demo_triangles;
     115                break;
     116            case '5':
     117                demo = demo_ellipses;
     118                break;
     119            case 's':
     120            case 'S':
     121                demo = demo_sprites;
     122                break;
     123            }
     124
     125            if(demo)
    84126                ee_clear();
    85                 demo = demo_color;
    86                 break;
    87             case '0':
    88                 ee_clear();
    89                 demo = demo_all;
    90                 break;
    91             case '1':
    92                 ee_clear();
    93                 demo = demo_dots;
    94                 break;
    95             case '2':
    96                 ee_clear();
    97                 demo = demo_lines;
    98                 thin = 0;
    99                 break;
    100             case '3':
    101                 ee_clear();
    102                 demo = demo_lines;
    103                 thin = 1;
    104                 break;
    105             case '4':
    106                 ee_clear();
    107                 demo = demo_boxes;
    108                 outline = 0;
    109                 break;
    110             case '5':
    111                 ee_clear();
    112                 demo = demo_boxes;
    113                 outline = 1;
    114                 break;
    115             case '6':
    116                 ee_clear();
    117                 demo = demo_ellipses;
    118                 break;
    119             case '7':
    120                 ee_clear();
    121                 demo = demo_triangles;
    122                 outline = 0;
    123                 break;
    124             case '8':
    125                 ee_clear();
    126                 demo = demo_triangles;
    127                 outline = 1;
    128                 break;
    129             case '9':
    130                 ee_clear();
    131                 demo = demo_sprites;
    132                 break;
    133             }
     127
     128            key = ee_get_key();
     129            if(key)
     130                goto handle_key;
     131
     132            ee_refresh();
    134133        }
    135134
    136135        if(demo)
     136        {
    137137            demo();
     138
     139            ee_set_color(EE_WHITE);
     140            ee_draw_thin_box(1, 1, ee_get_width() - 2, ee_get_height() - 2);
     141            ee_printf(4, 1, "[%i.%i fps]----",
     142                            1000000 / ee_get_rendertime(),
     143                            (10000000 / ee_get_rendertime()) % 10);
     144            ee_refresh();
     145        }
    138146    }
    139147
     
    157165    ee_putstr((xo - strlen("============")) / 2, 4, "============");
    158166
    159     ee_putstr(4, 6, "0: complete demo");
    160     ee_putstr(4, 7, "1: dots demo");
    161     ee_putstr(4, 8, "2: lines demo");
    162     ee_putstr(4, 9, "3: thin lines demo");
    163     ee_putstr(4, 10, "4: boxes demo");
    164     ee_putstr(4, 11, "5: outlined boxes demo");
    165     ee_putstr(4, 12, "6: ellipses demo");
    166     ee_putstr(4, 13, "7: triangles demo");
    167     ee_putstr(4, 14, "8: outlined triangles demo");
    168     ee_putstr(4, 15, "9: sprites demo");
    169 
    170     ee_putstr(4, yo - 2, "q: quit");
    171 
    172     ee_refresh();
     167    ee_putstr(4, 6, "demos:");
     168    ee_putstr(4, 7, "'f': full");
     169    ee_putstr(4, 8, "'1': dots");
     170    ee_putstr(4, 9, "'2': lines");
     171    ee_putstr(4, 10, "'3': boxes");
     172    ee_putstr(4, 11, "'4': triangles");
     173    ee_putstr(4, 12, "'5': ellipses");
     174    ee_putstr(4, 13, "'s': sprites");
     175    ee_putstr(4, 14, "'c': color");
     176
     177    ee_putstr(4, 16, "settings:");
     178    ee_printf(4, 17, "'o': outline: %s",
     179              outline == 0 ? "none" : outline == 1 ? "solid" : "thin");
     180    ee_printf(4, 18, "'b': drawing boundaries: %s",
     181              bounds == 0 ? "screen" : "infinite");
     182
     183    ee_putstr(4, yo - 2, "'q': quit");
    173184}
    174185
     
    268279                   ee_get_height() / 2 + sin(0.02*i) * ee_get_height() / 3,
    269280                   sprite, 0);
    270 
    271     ee_refresh();
    272281}
    273282
     
    284293        ee_putchar(ee_rand(0, xmax), ee_rand(0, ymax), '#');
    285294    }
    286     ee_refresh();
    287295}
    288296
     
    295303    for(i = 0; i < 16; i++)
    296304    {
    297         sprintf(buf, "'%c': %i (%s)", 'a' + i, i, ee_color_names[i]);
     305        sprintf(buf, "'%c': %i (%s)", 'a' + i, i, ee_get_color_name(i));
    298306        ee_set_color(EE_WHITE);
    299307        ee_putstr(4, i + 3, buf);
     
    301309        ee_putstr(40, i + 3, "XXXXXXXXXX-XX--X----------");
    302310    }
    303     ee_refresh();
    304311}
    305312
     
    310317    int xa, ya, xb, yb;
    311318
    312     if(force_clipping)
     319    if(bounds)
    313320    {
    314321        xa = ee_rand(- w, 2 * w); ya = ee_rand(- h, 2 * h);
     
    322329
    323330    ee_set_color(ee_rand(0, 15));
    324     if(thin)
     331    if(outline > 1)
    325332        ee_draw_thin_line(xa, ya, xb, yb);
    326333    else
    327334        ee_draw_line(xa, ya, xb, yb, '#');
    328 
    329     ee_refresh();
    330335}
    331336
     
    336341    int xa, ya, xb, yb;
    337342
    338     if(force_clipping)
     343    if(bounds)
    339344    {
    340345        xa = ee_rand(- w, 2 * w); ya = ee_rand(- h, 2 * h);
     
    350355    ee_fill_box(xa, ya, xb, yb, '#');
    351356
    352     if(outline)
    353     {
    354         ee_set_color(ee_rand(0, 15));
     357    ee_set_color(ee_rand(0, 15));
     358    if(outline == 2)
    355359        ee_draw_thin_box(xa, ya, xb, yb);
    356     }
    357 
    358     ee_refresh();
     360    else if(outline == 1)
     361        ee_draw_box(xa, ya, xb, yb, '#');
    359362}
    360363
     
    365368    int x, y, a, b;
    366369
    367     if(force_clipping)
     370    if(bounds)
    368371    {
    369372        x = ee_rand(- w, 2 * w); y = ee_rand(- h, 2 * h);
     
    383386    ee_fill_ellipse(x, y, a, b, '#');
    384387
    385     if(outline)
    386     {
    387         ee_set_color(ee_rand(0, 15));
     388    ee_set_color(ee_rand(0, 15));
     389    if(outline == 2)
    388390        ee_draw_thin_ellipse(x, y, a, b);
    389     }
    390 
    391     ee_refresh();
     391    else if(outline == 1)
     392        ee_draw_ellipse(x, y, a, b, '#');
    392393}
    393394
     
    398399    int xa, ya, xb, yb, xc, yc;
    399400
    400     if(force_clipping)
     401    if(bounds)
    401402    {
    402403        xa = ee_rand(- w, 2 * w); ya = ee_rand(- h, 2 * h);
     
    415416    ee_fill_triangle(xa, ya, xb, yb, xc, yc, '#');
    416417
    417     if(outline)
    418     {
    419         ee_set_color(ee_rand(0, 15));
     418    ee_set_color(ee_rand(0, 15));
     419    if(outline == 2)
    420420        ee_draw_thin_triangle(xa, ya, xb, yb, xc, yc);
    421     }
    422 
    423     ee_refresh();
     421    else if(outline == 1)
     422        ee_draw_triangle(xa, ya, xb, yb, xc, yc, '#');
    424423}
    425424
     
    428427    ee_draw_sprite(ee_rand(0, ee_get_width() - 1),
    429428                   ee_rand(0, ee_get_height() - 1), sprite, 0);
    430     ee_refresh();
    431 }
    432 
     429}
     430
Note: See TracChangeset for help on using the changeset viewer.