(String name, boolean crash)
| 186 | */ |
| 187 | // todo: replace with constructor calls |
| 188 | model_t Mod_ForName(String name, boolean crash) |
| 189 | { |
| 190 | model_t mod = null; |
| 191 | int i; |
| 192 | |
| 193 | if (name == null || name.length() == 0) |
| 194 | Com.Error(Defines.ERR_DROP, "Mod_ForName: NULL name"); |
| 195 | |
| 196 | // |
| 197 | // inline models are grabbed only from worldmodel |
| 198 | // |
| 199 | if (name.charAt(0) == '*') |
| 200 | { |
| 201 | i = Integer.parseInt(name.substring(1)); |
| 202 | if (i < 1 || r_worldmodel == null || i >= r_worldmodel.numsubmodels) |
| 203 | Com.Error (Defines.ERR_DROP, "bad inline model number"); |
| 204 | return mod_inline[i]; |
| 205 | } |
| 206 | |
| 207 | // |
| 208 | // search the currently loaded models |
| 209 | // |
| 210 | for (i=0; i<mod_numknown ; i++) |
| 211 | { |
| 212 | mod = mod_known[i]; |
| 213 | |
| 214 | if (mod.name.length() == 0) |
| 215 | continue; |
| 216 | if (mod.name.equals(name) ) |
| 217 | return mod; |
| 218 | } |
| 219 | |
| 220 | // |
| 221 | // find a free model slot spot |
| 222 | // |
| 223 | for (i=0; i<mod_numknown ; i++) |
| 224 | { |
| 225 | mod = mod_known[i]; |
| 226 | |
| 227 | if (mod.name.length() == 0) |
| 228 | break; // free spot |
| 229 | } |
| 230 | if (i == mod_numknown) |
| 231 | { |
| 232 | if (mod_numknown == MAX_MOD_KNOWN) |
| 233 | Com.Error (Defines.ERR_DROP, "mod_numknown == MAX_MOD_KNOWN"); |
| 234 | mod_numknown++; |
| 235 | mod = mod_known[i]; |
| 236 | } |
| 237 | |
| 238 | mod.name = name; |
| 239 | |
| 240 | // |
| 241 | // load the file |
| 242 | // |
| 243 | fileBuffer = FS.LoadFile(name); |
| 244 | |
| 245 | if (fileBuffer == null) |
no test coverage detected