BitmapWars/src/item.c

58 lines
1.5 KiB
C

#include "item.h"
#include "map.h"
// displaying avec dépendance
/// murs, maisons, routes
int get_item_type(int mx,int my)
{
generic_item* item=get_item(mx,my);
if (item==0)
return EMPTY;
return item->type;
}
void display_item_etendu(image_t* res,int mx, int my, int sx, int sy)
{
int type=get_item_type(mx,my);
unsigned char val=0x00; // on n'utilise que les 4 premiers bits 0<=val<=15 mais on multiplie nativement par 8
val|=(get_item_type(mx-1,my)==type)<<3;
val|=(get_item_type(mx+1,my)==type)<<4;
val|=(get_item_type(mx,my-1)==type)<<5;
val|=(get_item_type(mx,my+1)==type)<<6;
dsubimage(sx,sy,res,val,0,8,8,0);
}
void display_brouillard(int mx, int my, int sx, int sy)
{
unsigned char val=0x00; // on n'utilise que les 4 premiers bits 0<=val<=15 mais on multiplie nativement par 8
val|=get_visibility(mx-1,my)<<3;
val|=get_visibility(mx+1,my)<<4;
val|=get_visibility(mx,my-1)<<5;
val|=get_visibility(mx,my+1)<<6;
dsubimage(sx,sy,&img_brouillard,val,0,8,8,0);
}
void display_item(int mx, int my, int sx, int sy)
{
int type=get_item_type(mx,my);
if (type==WALL)
display_item_etendu(&img_wall,mx,my,sx,sy);
if (type==HOUSE)
display_item_etendu(&img_houses,mx,my,sx,sy);
if (type==EMPTY)
display_item_etendu(&img_brouillard,mx,my,sx,sy);
}
void display_case(int mx, int my, int sx, int sy)
{
display_item(mx,my,sx,sy);
//display_brouillard(mx,my,sx,sy);
}