00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "tiles.h"
00031
00032 Tiles::Tiles(){
00033 tiles = new Tiledata[256];
00034 if(TILES_DEBUG) cerr << "Done initializing 256 tiles \n";
00035 }
00036
00037 Tiles::~Tiles(){
00038 free(tiles);
00039 }
00040
00041 void Tiles::set_num_frames(int tile_index, int num_frames){
00042 tiles[tile_index].set_frames(num_frames);
00043 }
00044
00045 void Tiles::set_name(int tile_index, char* name){
00046 tiles[tile_index].set_name(name);
00047 }
00048
00049 void Tiles::set_num_images(int tile_index, int number){
00050 tiles[tile_index].set_num_images(number);
00051 }
00052
00053 SDL_Surface* Tiles::get_frame(int tile_index, int frame_index){
00054 SDL_Surface* temp_surface;
00055 temp_surface = tiles[tile_index].get_image(frame_index);
00056 if(TILES_DEBUG)
00057 cerr << "TILES:: get_frame: " << tile_index << " " << frame_index << endl;
00058 return(temp_surface);
00059 }
00060
00061 int Tiles::get_num_frames(int tile_index){
00062 return(tiles[tile_index].get_frames());
00063 }
00064
00065 string Tiles::get_name(int tile_index){
00066
00067 return(tiles[tile_index].get_name());
00068 }
00069
00070 Tiledata * Tiles::get_tiledata(int index){
00071 return(&tiles[index]);
00072 }
00073
00074 void Tiles::load_tileimages(char* filename){
00075 string line;
00076 ifstream tilefile;
00077 char tilename[40];
00078 static char tilename_fixed[40];
00079 tile_info* info;
00080 char *temp_string = NULL;
00081 char* tilename2 = NULL;
00082 int i, j, level, index, wflag, hitpoints, damage;
00083 tilefile_name = filename;
00084 tilefile.open(filename, ios::in);
00085 if (tilefile.is_open()){
00086 while (! tilefile.eof() ){
00087 getline (tilefile, line);
00088
00089 if(line[0] != '#' && line[0] != ' ' && line[0] != '\n' && line.length()){
00090 wflag = hitpoints = damage = -9999;
00091 sscanf(line.c_str(), "%d %s %d %d %d", &index, tilename, &wflag, &hitpoints, &damage);
00092 if(TILES_DEBUG)printf("%d %s %d %d %d\n", index, tilename, wflag, hitpoints, damage);
00093 tilename2 = tilename;
00094 info = process_tile(index, wflag, tilename);
00095 if(TILES_DEBUG)cerr << "set_name: " << index << " " << tilename << endl;
00096 set_name(index, tilename2);
00097
00098 set_num_images(index, info->num_images);
00099 tiles[index].set_tile_info(info);
00100 if(TILES_DEBUG)cerr << "num_images: " << info->num_images;
00101 for(i=0; i<info->num_images; i++){
00102 j = 0;
00103 while((tilename_fixed[j] = tilename[j]) != '\0') j++;
00104 if(TILES_DEBUG)printf("%s ", tilename_fixed);
00105 temp_string = strcat(tilename_fixed, info->suffix[i]);
00106 if(TILES_DEBUG){ cerr << "here we are1 " << i;
00107 cerr << " " << tilename_fixed << endl;
00108 cerr << "loading file: " << temp_string << endl;
00109 }
00110 level = 0; if(index >= ENEMY_BEGIN) level = 1;
00111 if(tiles[index].load_image(i, temp_string, level) == 0){
00112 if(TILES_DEBUG)cerr << "Error opening file:" << temp_string << "\n\n";
00113 exit(1);
00114 }
00115 temp_string = NULL;
00116 }
00117 }
00118 }
00119 }
00120 }