浏览代码

* Started sprite example. Doesn't work :-)

tags/v0.99.beta14
Sam Hocevar sam 17 年前
父节点
当前提交
4af5145c38
共有 1 个文件被更改,包括 58 次插入111 次删除
  1. +58
    -111
      examples/spritedit.c

+ 58
- 111
examples/spritedit.c 查看文件

@@ -14,134 +14,81 @@

#include "config.h"
#include "common.h"

#if !defined(__KERNEL__)
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
#endif

#include "cucul.h"
#include "caca.h"

#define MYDELAY 100
/* Courtesy of Zashi */
char *guy[] = {
" O_,= \n"
" | \n"
" /\\ \n"
" / / \n",

" O_,= \n"
" | \n"
" /| \n"
" / | \n",

" O_,= \n"
" | \n"
" |\\ \n"
" |/ \n",

" O_,= \n"
" | \n"
" |\\ \n"
" | \\ \n",
};

int main(int argc, char **argv)
{
#if 0
cucul_canvas_t *cv;
caca_display_t *dp;

int quit = 0;
cucul_sprite_t *sprite;
int frame = 0;
unsigned char play = 0;
unsigned int delay = 0;

if(argc < 2)
cucul_canvas_t *sprite;
unsigned long int len;
void *buffer;
int i;

/* Create a canvas with 4 frames */
sprite = cucul_create_canvas(0, 0);
for(i = 0; i < 3; i++)
cucul_create_frame(sprite, 0);

/* Load stuff in all 4 frames */
for(i = 0; i < 4; i++)
{
fprintf(stderr, "%s: missing argument (filename).\n", argv[0]);
return 1;
cucul_set_frame(sprite, i);
cucul_import_memory(sprite, guy[i], strlen(guy[i]), "text");
}

cv = cucul_create_canvas(0, 0);
if(!cv)
return 1;
dp = caca_create_display(cv);
if(!dp)
return 1;
/* Export our sprite in a memory buffer. We could save this to
* disk afterwards. */
buffer = cucul_export_memory(sprite, "caca", &len);

sprite = cucul_load_sprite(argv[1]);
/* Free our sprite and reload it from the memory buffer. We could
* load this from disk, too. */
cucul_free_canvas(sprite);
sprite = cucul_create_canvas(0, 0);
cucul_import_memory(sprite, buffer, len, "caca");
free(buffer);

if(!sprite)
/* Print each sprite frame to stdout */
for(i = 0; i < 4; i++)
{
caca_free_display(dp);
cucul_free_canvas(cv);
fprintf(stderr, "%s: could not open `%s'.\n", argv[0], argv[1]);
return 1;
cucul_set_frame(sprite, i);
printf("Frame #%i\n", i);
buffer = cucul_export_memory(sprite, "utf8", &len);
fwrite(buffer, len, 1, stdout);
free(buffer);
}

/* Go ! */
while(!quit)
{
caca_event_t ev;
int xa, ya, xb, yb;
char buf[BUFSIZ];

while(caca_get_event(dp, CACA_EVENT_KEY_PRESS, &ev, 0))
{
switch(caca_get_event_key_ch(&ev))
{
case 0:
break;
case 'q':
quit = 1;
break;
case '-':
if(frame > 0)
frame--;
break;
case '+':
if(frame < cucul_get_sprite_frames(sprite) - 1)
frame++;
break;
case 'p':
play=!play;

}
}

if(play) {
if(!delay) {
if(frame < cucul_get_sprite_frames(sprite) - 1) {
frame++;
}
else {
frame = 0;
}
}
delay++;
if(delay>=MYDELAY) {
delay = 0;
}
}


cucul_set_color_ansi(cv, CUCUL_LIGHTGRAY, CUCUL_BLACK);
cucul_clear_canvas(cv);

cucul_draw_thin_box(cv, 0, 0, cucul_get_canvas_width(cv) - 1,
cucul_get_canvas_height(cv) - 1);

cucul_put_str(cv, 3, 0, "[ Sprite editor for libcaca ]");

sprintf(buf, "sprite `%s'", argv[1]);
cucul_put_str(cv, 3, 2, buf);
sprintf(buf, "frame %i/%i", frame, cucul_get_sprite_frames(sprite) - 1);
cucul_put_str(cv, 3, 3, buf);

/* Crosshair */
cucul_draw_thin_line(cv, 57, 2, 57, 18);
cucul_draw_thin_line(cv, 37, 10, 77, 10);
cucul_put_char(cv, 57, 10, '+');

/* Boxed sprite */
xa = -1 - cucul_get_sprite_dx(sprite, frame);
ya = -1 - cucul_get_sprite_dy(sprite, frame);
xb = xa + 1 + cucul_get_sprite_width(sprite, frame);
yb = ya + 1 + cucul_get_sprite_height(sprite, frame);
cucul_set_color_ansi(cv, CUCUL_BLACK, CUCUL_BLACK);
cucul_fill_box(cv, 57 + xa, 10 + ya, 57 + xb, 10 + yb, " ");
cucul_set_color_ansi(cv, CUCUL_LIGHTGRAY, CUCUL_BLACK);
cucul_draw_thin_box(cv, 57 + xa, 10 + ya, 57 + xb, 10 + yb);
cucul_draw_sprite(cv, 57, 10, sprite, frame);

/* Free sprite */
cucul_draw_sprite(cv, 20, 10, sprite, frame);

caca_refresh_display(dp);
}

/* Clean up */
caca_free_display(dp);
cucul_free_canvas(cv);
#endif
/* Free our sprite */
cucul_free_canvas(sprite);

return 0;
}


正在加载...
取消
保存