Source: src/cl_room.cc


Annotated List
Files
Globals
Hierarchy
Index
//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.