#include #include #include #include "main.h" #include "list.h" #include "tux.h" #include "arena.h" #include "interface.h" #include "image.h" #include "radar.h" static image_t *g_radar; static list_t *listRadar; typedef struct radar_item_struct { int id; int x, y; int type; } radar_item_t; static radar_item_t* newRadarItem(int id, int x, int y, int type) { radar_item_t *new; new = malloc( sizeof(radar_item_t) ); new->id = id; new->x = x; new->y = y; new->type = type; return new; } static void destroyRadarItem(radar_item_t *p) { assert( p != NULL ); free(p); } void addToRadar(int id, int x, int y, int type) { int i; for( i = 0 ; i < listRadar->count ; i++ ) { radar_item_t *thisRadarItem; thisRadarItem = (radar_item_t *)listRadar->list[i]; if( thisRadarItem->id == id ) { thisRadarItem->x = x; thisRadarItem->y = y; thisRadarItem->type = type; return; } } addList(listRadar, newRadarItem(id, x, y, type) ); } void delFromRadar(int id) { int i; for( i = 0 ; i < listRadar->count ; i++ ) { radar_item_t *thisRadarItem; thisRadarItem = (radar_item_t *)listRadar->list[i]; if( thisRadarItem->id == id ) { delListItem(listRadar, i, destroyRadarItem); return; } } } void initRadar() { assert( isImageInicialized() == TRUE ); assert( isInterfaceInicialized() == TRUE ); g_radar = addImageData("radar.png", IMAGE_NO_ALPHA, "radar", IMAGE_GROUP_USER); listRadar = newList(); } void drawRadar(arena_t *arena) { int i; drawImage(g_radar, RADAR_LOCATION_X, RADAR_LOCATION_Y, 0, 0, RADAR_SIZE_X+2, RADAR_SIZE_Y+2); for( i = 0 ; i < listRadar->count ; i++ ) { radar_item_t *thisRadarItem; int x, y; thisRadarItem = (radar_item_t *)listRadar->list[i]; x = ( ( (float)RADAR_SIZE_X) / ( (float)arena->w ) ) * ( (float)thisRadarItem->x ); y = ( ( (float)RADAR_SIZE_Y) / ( (float)arena->h ) ) * ( (float)thisRadarItem->y ); if( x >= 0 && x <= RADAR_SIZE_X && y >= 0 && y <= RADAR_SIZE_Y ) { drawImage(g_radar, RADAR_LOCATION_X+1+x, RADAR_LOCATION_Y+1+y, 2*thisRadarItem->type, RADAR_SIZE_Y+2, 2, 2); } } } void quitRadar() { destroyListItem(listRadar, destroyRadarItem); }