72 lines
1.9 KiB
C
72 lines
1.9 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)
|
|
{
|
|
|
|
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, DIMAGE_NONE);
|
|
|
|
}
|
|
|
|
void display_water(int mx, int my, int sx, int sy)
|
|
{
|
|
|
|
char val=0x00; // on n'utilise que les 4 premiers bits 0<=val<=15 mais on multiplie nativement par 8
|
|
val|=(WATER==get_terrain(mx-1,my))<<3;
|
|
val|=(WATER==get_terrain(mx+1,my))<<4;
|
|
val|=(WATER==get_terrain(mx,my-1))<<5;
|
|
val|=(WATER==get_terrain(mx,my+1))<<6;
|
|
|
|
dsubimage(sx,sy, &img_water, val, 0, 8, 8, DIMAGE_NONE);
|
|
|
|
}
|
|
|
|
|
|
void display_case(int mx, int my, int sx, int sy)
|
|
{
|
|
int type=get_item_type(mx,my);
|
|
switch (type)
|
|
{
|
|
case WALL:
|
|
display_item_etendu(&img_wall,mx,my,sx,sy);
|
|
return;
|
|
case HOUSE:
|
|
display_item_etendu(&img_houses,mx,my,sx,sy);
|
|
return;
|
|
default:
|
|
if (get_terrain(mx,my)==WATER)
|
|
display_water(mx,my,sx,sy);
|
|
if (!get_visibility(mx,my))
|
|
display_brouillard(mx,my,sx,sy);
|
|
}
|
|
} |