MCPcopy Create free account
hub / github.com/ZDoom/Raze / FindModel

Function FindModel

source/common/models/model.cpp:144–239  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

142//===========================================================================
143
144unsigned FindModel(const char * path, const char * modelfile, bool silent)
145{
146 FModel * model = nullptr;
147 FString fullname;
148
149 if (path) fullname.Format("%s%s", path, modelfile);
150 else fullname = modelfile;
151 int lump = fileSystem.CheckNumForFullName(fullname.GetChars());
152
153 if (lump<0)
154 {
155 Printf(PRINT_HIGH, "FindModel: '%s' not found\n", fullname.GetChars());
156 return -1;
157 }
158
159 for(unsigned i = 0; i< Models.Size(); i++)
160 {
161 if (Models[i]->mFileName.CompareNoCase(fullname) == 0) return i;
162 }
163
164 auto len = fileSystem.FileLength(lump);
165 if (len >= 0x80000000ll)
166 {
167 Printf(PRINT_HIGH, "LoadModel: File to large: '%s'\n", fullname.GetChars());
168 return -1;
169 }
170
171 auto lumpd = fileSystem.ReadFile(lump);
172 const char * buffer = lumpd.string();
173
174 if ( (size_t)fullname.LastIndexOf("_d.3d") == fullname.Len()-5 )
175 {
176 FString anivfile = fullname.GetChars();
177 anivfile.Substitute("_d.3d","_a.3d");
178 if ( fileSystem.CheckNumForFullName(anivfile.GetChars()) > 0 )
179 {
180 model = new FUE1Model;
181 }
182 }
183 else if ( (size_t)fullname.LastIndexOf("_a.3d") == fullname.Len()-5 )
184 {
185 FString datafile = fullname.GetChars();
186 datafile.Substitute("_a.3d","_d.3d");
187 if ( fileSystem.CheckNumForFullName(datafile.GetChars()) > 0 )
188 {
189 model = new FUE1Model;
190 }
191 }
192 else if ( (size_t)fullname.LastIndexOf(".obj") == fullname.Len() - 4 )
193 {
194 model = new FOBJModel;
195 }
196 else if (!memcmp(buffer, "DMDM", 4))
197 {
198 model = new FDMDModel;
199 }
200 else if (!memcmp(buffer, "IDP2", 4))
201 {

Callers 1

LoadModelMethod · 0.85

Calls 15

PrintfFunction · 0.85
R_LoadKVXFunction · 0.85
CheckNumForFullNameMethod · 0.80
CompareNoCaseMethod · 0.80
FileLengthMethod · 0.80
stringMethod · 0.80
LastIndexOfMethod · 0.80
LenMethod · 0.80
FormatMethod · 0.45
GetCharsMethod · 0.45
SizeMethod · 0.45
ReadFileMethod · 0.45

Tested by

no test coverage detected