root/trunk/contrib/vmap_extractor_v2/vmapextract/adtfile.cpp

Revision 2, 5.0 kB (checked in by yumileroy, 17 years ago)

[svn] * Proper SVN structure

Original author: Neo2003
Date: 2008-10-02 16:23:55-05:00

Line 
1#include "adtfile.h"
2
3
4char * GetPlainName(char * FileName)
5{
6    char * szTemp;
7
8    if((szTemp = strrchr(FileName, '\\')) != NULL)
9        FileName = szTemp + 1;
10    return FileName;
11}
12
13void fixnamen(char *name, size_t len)
14{
15        for (size_t i=0; i<len-3; i++) {
16                if (i>0 && name[i]>='A' && name[i]<='Z' && isalpha(name[i-1])) 
17                {
18                        name[i] |= 0x20;
19                } else if ((i==0 || !isalpha(name[i-1])) && name[i]>='a' && name[i]<='z') 
20                {
21                        name[i] &= ~0x20;
22                }
23        }
24}
25void fixname2(char *name, size_t len)
26{
27        for (size_t i=0; i<len-3; i++) 
28        {
29                if(name[i] == ' ') 
30                name[i] = '_';
31        }
32}
33
34ADTFile::ADTFile(char* filename): ADT(filename)
35{
36        Adtfilename.append(filename);
37}
38
39bool ADTFile::init(char *map_id)
40{
41
42        if(ADT.isEof ())
43                return false;
44
45        size_t size;
46       
47        string xMap;
48        string yMap;
49       
50        Adtfilename.erase(Adtfilename.find(".adt"),4);
51        string TempMapNumber;
52        TempMapNumber = Adtfilename.substr(Adtfilename.length()-6,6);
53    xMap = TempMapNumber.substr(TempMapNumber.find("_")+1,(TempMapNumber.find_last_of("_")-1) - (TempMapNumber.find("_")));
54    yMap = TempMapNumber.substr(TempMapNumber.find_last_of("_")+1,(TempMapNumber.length()) - (TempMapNumber.find_last_of("_")));
55        Adtfilename.erase((Adtfilename.length()-xMap.length()-yMap.length()-2), (xMap.length()+yMap.length()+2));
56        string AdtMapNumber = xMap + ' ' + yMap + ' ' + GetPlainName((char*)Adtfilename.c_str());
57        printf("Processing map %s...\n", AdtMapNumber.c_str());
58        //printf("MapNumber = %s\n", TempMapNumber.c_str());
59    //printf("xMap = %s\n", xMap.c_str());
60    //printf("yMap = %s\n", yMap.c_str());
61
62        const char dirname[] = "buildings\\dir";
63        FILE *dirfile;
64    dirfile = fopen(dirname, "ab");
65        if(!dirfile)
66        {
67                printf("Can't open dirfile!'%s'\n");
68                return false;
69        }
70
71
72        while (!ADT.isEof  ())
73        {
74                char fourcc[5];
75                ADT.read(&fourcc,4);
76                ADT.read(&size, 4);
77                flipcc(fourcc);
78                fourcc[4] = 0;
79
80                size_t nextpos = ADT.getPos () + size;
81               
82                if (!strcmp(fourcc,"MCIN"))//MCIN
83                {
84               
85                }
86                else if (!strcmp(fourcc,"MTEX")) 
87                {
88                }
89                else if (!strcmp(fourcc,"MMDX")) 
90                {
91                       
92                        if (size) 
93                        {
94                            char *buf = new char[size];
95                                ADT.read(buf, size);
96                                char *p=buf;
97                                int t=0;       
98                                ModelInstansName = new string[size];
99                                while (p<buf+size) 
100                                {
101                                        fixnamen(p,strlen(p));
102                                        string path(p);
103                                        char* s=GetPlainName(p);
104                                        fixname2(s,strlen(s));
105                                        p=p+strlen(p)+1;
106                                        ModelInstansName[t++] = s;
107                        path.erase(path.length()-2,2);
108                        path.append("2");
109                                        char* szLocalFile[512];
110                                        sprintf((char*)szLocalFile, ".\\buildings\\%s", s);
111                                        FILE * output = fopen((char*)szLocalFile,"rb");
112                        if(!output)
113                        {
114                                       
115                                                Model * m2 = new Model(path);
116                                            if(m2->open())
117                                                {
118                                                   m2->ConvertToVMAPModel((char*)szLocalFile); 
119                                                }       
120                                                delete m2;
121
122                                        }
123                                        else
124                    fclose(output);   
125                                }
126                               
127                                delete[] buf;
128                        }
129                       
130                }
131                else if (!strcmp(fourcc,"MWMO")) 
132                {
133                        if (size) 
134                        {
135                       
136                                char *buf = new char[size];
137                                ADT.read(buf, size);
138                                char *p=buf;
139                                int q = 0;
140                WmoInstansName = new string[size];
141                                while (p<buf+size) 
142                                {
143                                        string path(p);
144                    char* s=GetPlainName(p);
145                                        fixnamen(s,strlen(s));
146                                        fixname2(s,strlen(s));
147                                        p=p+strlen(p)+1;
148                                        WmoInstansName[q++] = s;
149                                }
150                                delete[] buf;
151       
152                        }
153       
154                }
155        //======================
156        else if (!strcmp(fourcc,"MDDF"))
157        {
158            if (size)
159            {           
160            nMDX = (int)size / 36;
161            for (int i=0; i<nMDX; i++)
162                {
163                    int id;
164                    ADT.read(&id, 4);
165                    ModelInstance inst(ADT,ModelInstansName[id].c_str(),map_id, dirfile);//!!!!!!!!!!!
166                }
167            delete[] ModelInstansName;
168            }
169        }
170        else if (!strcmp(fourcc,"MODF"))
171        {
172            if (size)
173            {
174                nWMO = (int)size / 64;
175                for (int i=0; i<nWMO; i++)
176                {
177                    int id;
178                    ADT.read(&id, 4);
179                    WMOInstance inst(ADT,WmoInstansName[id].c_str(),map_id, dirfile);//!!!!!!!!!!!!!
180                }
181                delete[] WmoInstansName;
182            }       
183        }
184        //======================
185#if 0 
186                else if (!strcmp(fourcc,"MDDF"))
187                {
188                        if (size)
189            {                   
190                        nMDX = (int)size / 36;
191                        for (int i=0; i<nMDX; i++)
192                            {
193                                    int id;
194                                    ADT.read(&id, 4);
195                                    ModelInstance inst(ADT,ModelInstansName[id].c_str(),AdtMapNumber.c_str(), dirfile);
196                            }
197                        delete[] ModelInstansName;
198                        }
199                }
200                else if (!strcmp(fourcc,"MODF"))
201                {
202                        if (size)
203            {
204                                nWMO = (int)size / 64;
205                            for (int i=0; i<nWMO; i++)
206                            {
207                                    int id;
208                                    ADT.read(&id, 4);
209                                    WMOInstance inst(ADT,WmoInstansName[id].c_str(),AdtMapNumber.c_str(), dirfile);
210                            }
211                delete[] WmoInstansName;
212                        }               
213                }
214#endif
215                ADT.seek(nextpos);
216        }
217        ADT.close();
218    fclose(dirfile);
219        return true;
220}
221
222ADTFile::~ADTFile()
223{
224        ADT.close();
225}
226
227
Note: See TracBrowser for help on using the browser.