summaryrefslogtreecommitdiff
path: root/saedit/sae.c
diff options
context:
space:
mode:
Diffstat (limited to 'saedit/sae.c')
-rw-r--r--saedit/sae.c212
1 files changed, 0 insertions, 212 deletions
diff --git a/saedit/sae.c b/saedit/sae.c
deleted file mode 100644
index 70e7c7d..0000000
--- a/saedit/sae.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/*=======================================*\
-| ____ ____ |
-| / \ /\ | |
-| \____ / \ |____ |
-| \ /____\ | |
-| \____/prite / \nimation |____ditor |
-| |
-| Copyleft Vasily_Makarov 2011 |
-| |
-\*=======================================*/
-
-#include "sae.h"
-
-void kill_timeout(guint tag) {
- if (tag > 0)
- g_source_remove(tag);
-}
-
-Frame *frame_new(int index1, int offsetX, int offsetY, int delay) {
- Frame *res = g_new0(Frame, 1);
- res->index = index1;
- res->offsetX = offsetX;
- res->offsetY = offsetY;
- res->delay = delay;
- return res;
-}
-
-Imageset *imageset_new() {
- Imageset *res = g_new0(Imageset, 1);
- res->width = SPRITE_WIDTH_DEFAULT;
- res->height = SPRITE_HEIGHT_DEFAULT;
- return res;
-}
-
-SAEInfo *sae_info_new() {
- SAEInfo *res = g_new0(SAEInfo, 1);
- res->ground = sae_info_ground_new();
- res->sprite = frame_new(-1, 0, 0, 0);
- res->imageset = imageset_new();
- return res;
-}
-
-GdkPixbuf *sae_info_ground_new() {
- GdkPixbuf *ground = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, GRID_SIZE * 3, GRID_SIZE * 3);
- gdk_pixbuf_fill(ground, 0x00000000);
- return ground;
-}
-
-GdkPixbuf* get_sprite_by_index(int index1, SAEInfo *sae_info) {
- if (index1 == -1) {
- GdkPixbuf *res = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8,
- sae_info->imageset->width,
- sae_info->imageset->height);
- gdk_pixbuf_fill(res, 0x00000000);
- return res;
- }
-
- if (index1 >= 0) {
- size_t w = sae_info->imageset->spriteset_width/sae_info->imageset->width;
- if (sae_info->imageset->spriteset == NULL) return NULL;
-
- return gdk_pixbuf_new_subpixbuf(sae_info->imageset->spriteset,
- index1%w*sae_info->imageset->width,
- index1/w*sae_info->imageset->height,
- sae_info->imageset->width,
- sae_info->imageset->height);
- }
-
- return NULL;
-}
-
-inline void _add_frame(SAEInfo *sae_info, int index1, int offsetX, int offsetY, int delay, int line) {
-
- Frame *sprite = frame_new(index1, offsetX, offsetY, delay);
- sprite->line_number = line;
- sprite->pixbuf = get_sprite_by_index(index1, sae_info);
-
- if (sae_info->animation != NULL)
- sae_info->animation = g_list_append(sae_info->animation, sprite);
- else {
- sae_info->animation = g_list_alloc();
- sae_info->animation->data = sprite;
- }
-}
-
-gboolean set_up_animation_by_direction(SAEInfo *sae_info, const gchar *direction) {
- if (sae_info->imageset->spriteset == NULL)
- return FALSE;
- sae_info->animation = NULL;
-
- GList *list = g_list_find_custom(sae_info->animations,
- xml_attr_new("direction", direction),
- (GCompareFunc)xml_node_compare_with_attr_func);
- if (list == NULL)
- return FALSE;
-
- XMLNode *anode = list->data;
- list = anode->sub_nodes;
-
- while (list != NULL) {
- XMLNode *node = list->data;
-
- //sequence tag attributes
- int offsetX = 0, offsetY = 0,
- delay = 0,
- start = -1, end = -1,
- repeat = 1;
- gchar *value = NULL;
-
- gchar *ofX_attr, *ofY_attr;
- ofX_attr = xml_node_get_attr_value(node, "offsetX");
- if (ofX_attr != NULL)
- sscanf(ofX_attr, "%d", &offsetX);
-
- ofY_attr = xml_node_get_attr_value(node, "offsetY");
- if (ofY_attr != NULL)
- sscanf(ofY_attr, "%d", &offsetY);
-
- gchar *delay_attr = xml_node_get_attr_value(node, "delay");
- if (delay_attr != NULL)
- sscanf(delay_attr, "%d", &delay);
-
- if (g_str_equal(node->name, "frame")) {
-
- gchar *index_attr = xml_node_get_attr_value(node, "index");
- if (index_attr != NULL) {
- sscanf(index_attr, "%d", &start);
- end = start;
- }
-
- } else if (g_str_equal(node->name, "sequence")) {
-
- gchar *start_attr = xml_node_get_attr_value(node, "start");
- if (start_attr != NULL)
- sscanf(start_attr, "%d", &start);
-
- gchar *end_attr = xml_node_get_attr_value(node, "end");
- if (end_attr != NULL)
- sscanf(end_attr, "%d", &end);
-
- value = xml_node_get_attr_value(node, "value");
-
- gchar *repeat_attr = xml_node_get_attr_value(node, "repeat");
- if (repeat_attr != NULL)
- sscanf(repeat_attr, "%d", &repeat);
-
- } else if (g_str_equal(node->name, "pause")) {
-
- value = (gchar *)"p";
-
- gchar *repeat_attr = xml_node_get_attr_value(node, "repeat");
- if (repeat_attr != NULL)
- sscanf(repeat_attr, "%d", &repeat);
-
- }
-
- if (start >= 0) { //start-end case
-
- int r = 0, i = 0;
- for (r = 1; r <= repeat; r++) {
- for (i = start; i <= end; i++) {
- _add_frame(sae_info, i, offsetX, offsetY, delay, node->line_number);
- }
- }
-
- } else
- if (value != NULL) { //value case
-
- gchar **values = g_strsplit(value, ",", 0);
-
- int r;
- for (r = 0; r < repeat; r++) { //TODO: remove multiparsing
- gchar **iter = values;
- while (*iter != NULL) {
-
- if (g_str_equal(*iter, "p")) { //pause
-
- _add_frame(sae_info, -1, 0, 0, delay, node->line_number);
-
- } else {
-
- unsigned f, s;
-
- if (sscanf(*iter, "%u-%u", &f, &s) == 2) {
-
- int i;
- for (i = f; i <= s; i++) {
- _add_frame(sae_info, i, offsetX, offsetY, delay, node->line_number);
- }
-
- } else if (sscanf(*iter, "%u", &f) == 1) {
-
- _add_frame(sae_info, f, offsetX, offsetY, delay, node->line_number);
-
- }
-
- }
- iter++;
- }
- }
-
- g_strfreev(values);
-
- }
-
- list = g_list_next(list);
- }
- if (sae_info->animation == NULL)
- return FALSE;
-
- return TRUE;
-}