|
|
//Store of map. One room that can be displayed on screen #include "cl_room.h" void ROOM::init() { int i; for(i=0;i!=ROOM_LAYERS;i++) { layer[i] = NULL; } tile_w = tile_h = 16; layer_w = layer_h = 0; } void ROOM::create_layers() { int s = layer_w * layer_h * sizeof(int); int i; destroy_layers(); if(s) { for(i=0;i!=ROOM_LAYERS;i++) { layer[i] = (int *)malloc(s); bzero(layer[i],s); } } } void ROOM::destroy_layers() { int i; for(i=0;i!=ROOM_LAYERS;i++) { if(layer[i]!=NULL) { free(layer[i]); layer[i]=NULL; } } } int ROOM::tile_line(int l, int i, string data) { int f,g,dl; tile_w=0; if((!layer_w) || (!layer_h)) { error("Map size is not defined, no modifications are allowed"); return 3; } dl = (int)data.length(); if(dl > layer_w) { message("Too long map line %i (expected %i)",dl,layer_w); } if(i>=layer_h) { error("Setting map line - out of range!"); return 1; } if(dl >= layer_w) { g = layer_w; } else { g = dl; message("Too small map line %i (expected %i)",g,layer_w); } for(f = 0; f != g; f++) { layer[l][i*layer_w + f] = data[f] - zero_tile; } return 0; } void ROOM::tile_matrix(int l, deque&d) { int i, s = d.size(); for(i=0; i!=s; i++) { tile_line(l,i,d[i]); //treba napisat iterator poriadne } } void ROOM::tile_bg(deque &d) { tile_matrix(0,d); } void ROOM::tile_mid(deque &d) { tile_matrix(1,d); } void ROOM::tile_fg(deque &d) { tile_matrix(2,d); } void ROOM::tile_size(int x, int y) { if((tile_w != x) || (tile_h != y)) { tile_w = x; tile_h = y; create_layers(); } } void ROOM::layer_size(int w, int h) { if((layer_w != w) || (layer_h != h)) { layer_w = w; layer_h = h; create_layers(); } } void ROOM::layer_size() { message("Internal layer size [%i, %i]", layer_w, layer_h); } void ROOM::zero(char c) { zero_tile = c; } char ROOM::zero() { return zero_tile; }
Generated by: georgik on armada on Sat Jul 24 07:07:15 2004, using kdoc 2.0a54. |