view src/visibility.c @ 159:b90abd31a281

Postponse free of coords, shapes, and paints when the rdman is dirty. - Life-cycle of shapes and paints are managed by rdman. - Add redraw_man_t::free_objs to collect objects their freeing are postonsed. Know Issue: - Bullet of tank are not removed from screen when it is go out the range of the map.
author Thinker K.F. Li <thinker@branda.to>
date Sun, 05 Oct 2008 23:32:58 +0800
parents 1d74eb3861b7
children c7e5b8779bb5
line wrap: on
line source

#include <stdio.h>
#include <stdlib.h>
#include "animate.h"

typedef struct _mb_visibility mb_visibility_t;

struct _mb_visibility {
    mb_action_t action;
    int visibility;
    coord_t *coord;
};

static void mb_visibility_start(mb_action_t *act,
				const mb_timeval_t *now,
				const mb_timeval_t *playing_time,
				redraw_man_t *rdman) {
    mb_visibility_t *visibility = (mb_visibility_t *)act;

    switch(visibility->visibility) {
    case VIS_VISIBLE:
	coord_show(visibility->coord);
	break;
    case VIS_HIDDEN:
	coord_hide(visibility->coord);
	break;
    }
    rdman_coord_changed(rdman, visibility->coord);
}

static void mb_visibility_step(mb_action_t *act,
			       const mb_timeval_t *now,
			       redraw_man_t *rdman) {
}

static void mb_visibility_stop(mb_action_t *act,
			       const mb_timeval_t *now,
			       redraw_man_t *rdman) {
}

static void mb_visibility_free(mb_action_t *act) {
    free(act);
}

mb_action_t *mb_visibility_new(int visib, coord_t *coord,
			       mb_word_t *word) {
    mb_visibility_t *visibility;

    visibility = (mb_visibility_t *)malloc(sizeof(mb_visibility_t));
    if(visibility == NULL)
	return NULL;

    visibility->visibility = visib;
    visibility->coord = coord;

    visibility->action.start = mb_visibility_start;
    visibility->action.step = mb_visibility_step;
    visibility->action.stop = mb_visibility_stop;
    visibility->action.free = mb_visibility_free;

    mb_word_add_action(word, (mb_action_t *)visibility);

    return (mb_action_t *)visibility;
}