65 lines
2.0 KiB
C
65 lines
2.0 KiB
C
#include "../../../include/microfx/ext/gametools.h"
|
|
#include "../../../include/microfx/ext/img.h"
|
|
#include "../../../include/microfx/microfx.h"
|
|
|
|
void vmap(int sx, int sy, MMap *map) {
|
|
/* Dessine la map à l'écran. */
|
|
/* x et y contiendront la position à laquelle je suis dans la boucle. */
|
|
int x, y;
|
|
/* Le nombre de tuiles sur x avant le bout de carte qu'on voit est dans tx,
|
|
pareil pour y. */
|
|
int tx = sx/map->tw, ty = sy/map->th;
|
|
/* mx contient le nombre de pixels qui seront cachés sur x, pareil pour
|
|
y. */
|
|
int mx = sx-tx*map->tw, my = sy-ty*map->th;
|
|
/* tile contient la tuile à dessiner */
|
|
unsigned char tile;
|
|
/* J'ajuste sx. */
|
|
if(sx-SWIDTH/2<0){
|
|
/* Si je ne peux pas centrer le joueur car je suis trop proche du bord
|
|
gauche de la map. */
|
|
map->px = sx;
|
|
sx = 0;
|
|
}else if(sx+SWIDTH/2>map->w*map->tw){
|
|
/* Si je ne peux pas centrer le joueur car je suis trop proche du bord
|
|
droit de la map. */
|
|
map->px = sx-(map->w*map->tw-SWIDTH/2);
|
|
sx = map->w*map->tw-SWIDTH/2;
|
|
}else{
|
|
/* Sinon je peux centrer le joueur. */
|
|
sx = sx-SWIDTH/2;
|
|
map->px = SWIDTH/2;
|
|
}
|
|
/* J'ajuste sy. */
|
|
if(sy-SHEIGHT/2<0){
|
|
/* Si je ne peux pas centrer le joueur car je suis trop proche du haut
|
|
de la map. */
|
|
map->py = sy;
|
|
sy = 0;
|
|
}else if(sy+SHEIGHT/2>map->h*map->th){
|
|
/* Si je ne peux pas centrer le joueur car je suis trop proche du bas de
|
|
la map. */
|
|
map->py = sy-(map->h*map->th-SHEIGHT/2);
|
|
sy = map->h*map->th-SHEIGHT/2;
|
|
}else{
|
|
/* Sinon je peux centrer le joueur. */
|
|
sy = sy-SHEIGHT/2;
|
|
map->py = SHEIGHT/2;
|
|
}
|
|
tx = sx/map->tw;
|
|
ty = sy/map->th;
|
|
for(y=0;y<map->h;y++){
|
|
for(x=0;x<map->w;x++){
|
|
/* Je récupère la tuile dans map et je la dessine si tx+x est plus
|
|
petit que la largeur de la map. */
|
|
if(tx+x < map->w){
|
|
tile = map->map[(ty+y)*map->w+tx+x];
|
|
if(tile > 0){
|
|
simage(x*map->tw-mx, y*map->th-my, map->tw, map->th,
|
|
map->tileset[(int)tile-1], SNORMAL);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|