27 |
#include <fcntl.h> |
#include <fcntl.h> |
28 |
#include <errno.h> |
#include <errno.h> |
29 |
|
|
30 |
|
#include <Foundation/Foundation.h> |
31 |
|
|
32 |
#include <Foundation/NSString.h> |
#include <Foundation/NSString.h> |
33 |
|
#include <Foundation/NSData.h> |
34 |
#include <Foundation/NSException.h> |
#include <Foundation/NSException.h> |
35 |
|
|
36 |
#include "Model/MD3Data.h" |
#include "Model/MD3Data.h" |
184 |
NSParameterAssert ([fileName length] != 0); |
NSParameterAssert ([fileName length] != 0); |
185 |
|
|
186 |
self = [super init]; |
self = [super init]; |
187 |
|
|
188 |
|
_dataBase = [[NSData alloc] initWithContentsOfMappedFile: fileName]; |
189 |
|
_data = (void *)[_dataBase bytes]; |
190 |
|
|
191 |
if (self != nil) |
// if (self != nil) |
192 |
{ |
// { |
193 |
int fileDescriptor; |
// int fileDescriptor; |
194 |
if ((fileDescriptor = open ([fileName cString], O_RDONLY)) == -1) |
// if ((fileDescriptor = open ([fileName cString], O_RDONLY)) == -1) |
195 |
{ |
// { |
196 |
fprintf (stderr, "Couldn't open file %s; %s\n", |
// fprintf (stderr, "Couldn't open file %s; %s\n", |
197 |
[fileName cString], strerror (errno)); |
// [fileName cString], strerror (errno)); |
198 |
return nil; |
// return nil; |
199 |
} |
// } |
200 |
|
|
201 |
if ([self _readData: fileDescriptor] == FAILURE) |
// if ([self _readData: fileDescriptor] == FAILURE) |
202 |
{ |
// { |
203 |
fprintf (stderr, "Couldn't read file %s\n", |
// fprintf (stderr, "Couldn't read file %s\n", |
204 |
[fileName cString]); |
// [fileName cString]); |
205 |
return nil; |
// return nil; |
206 |
} |
// } |
207 |
|
|
208 |
close (fileDescriptor); |
// close (fileDescriptor); |
209 |
} |
// } |
210 |
|
|
211 |
return self; |
return self; |
212 |
} |
} |
218 |
{ |
{ |
219 |
NSParameterAssert (_data); |
NSParameterAssert (_data); |
220 |
|
|
221 |
munmap (_data, _size); |
RELEASE(_dataBase); |
222 |
|
|
223 |
|
// munmap (_data, _size); |
224 |
|
|
225 |
[super dealloc]; |
[super dealloc]; |
226 |
} |
} |
247 |
{ |
{ |
248 |
NSParameterAssert (_data); |
NSParameterAssert (_data); |
249 |
|
|
250 |
return ((struct MD3Header_t *) _data)->numBoneFrames; |
return |
251 |
|
NSSwapLittleIntToHost(((struct MD3Header_t *) _data)->numBoneFrames); |
252 |
} |
} |
253 |
|
|
254 |
|
|
259 |
{ |
{ |
260 |
NSParameterAssert (_data); |
NSParameterAssert (_data); |
261 |
|
|
262 |
return ((struct MD3Header_t *) _data)->headerSize; |
return |
263 |
|
NSSwapLittleIntToHost(((struct MD3Header_t *) _data)->headerSize); |
264 |
} |
} |
265 |
|
|
266 |
|
|
271 |
{ |
{ |
272 |
NSParameterAssert (_data); |
NSParameterAssert (_data); |
273 |
|
|
274 |
return ((struct MD3Header_t *) _data)->numTags; |
return |
275 |
|
NSSwapLittleIntToHost(((struct MD3Header_t *) _data)->numTags); |
276 |
} |
} |
277 |
|
|
278 |
|
|
283 |
{ |
{ |
284 |
NSParameterAssert (_data); |
NSParameterAssert (_data); |
285 |
|
|
286 |
return ((struct MD3Header_t *) _data)->tagStart; |
return |
287 |
|
NSSwapLittleIntToHost(((struct MD3Header_t *) _data)->tagStart); |
288 |
} |
} |
289 |
|
|
290 |
|
|
295 |
{ |
{ |
296 |
NSParameterAssert (_data); |
NSParameterAssert (_data); |
297 |
|
|
298 |
return ((struct MD3Header_t *) _data)->numMeshes; |
return |
299 |
|
NSSwapLittleIntToHost(((struct MD3Header_t *) _data)->numMeshes); |
300 |
} |
} |
301 |
|
|
302 |
|
|
307 |
{ |
{ |
308 |
NSParameterAssert (_data); |
NSParameterAssert (_data); |
309 |
|
|
310 |
return ((struct MD3Header_t *) _data)->meshStart; |
return |
311 |
|
NSSwapLittleIntToHost(((struct MD3Header_t *) _data)->meshStart); |
312 |
} |
} |
313 |
|
|
314 |
|
|
389 |
NSParameterAssert (noBoneFrame < [self nbFrames]); |
NSParameterAssert (noBoneFrame < [self nbFrames]); |
390 |
|
|
391 |
struct MD3BoneFrame_t *boneFrame = [self _boneFrame: noBoneFrame]; |
struct MD3BoneFrame_t *boneFrame = [self _boneFrame: noBoneFrame]; |
392 |
return boneFrame->scale; |
return |
393 |
|
NSSwapLittleFloatToHost(boneFrame->scale); |
394 |
} |
} |
395 |
|
|
396 |
|
|
544 |
NSParameterAssert (noMesh < [self nbMeshes]); |
NSParameterAssert (noMesh < [self nbMeshes]); |
545 |
|
|
546 |
struct MD3MeshHeader_t *meshHeader = [self _mesh: noMesh]; |
struct MD3MeshHeader_t *meshHeader = [self _mesh: noMesh]; |
547 |
return meshHeader->numTextures; |
return |
548 |
|
NSSwapLittleIntToHost(meshHeader->numTextures); |
549 |
} |
} |
550 |
|
|
551 |
|
|
559 |
NSParameterAssert (noMesh < [self nbMeshes]); |
NSParameterAssert (noMesh < [self nbMeshes]); |
560 |
|
|
561 |
struct MD3MeshHeader_t *meshHeader = [self _mesh: noMesh]; |
struct MD3MeshHeader_t *meshHeader = [self _mesh: noMesh]; |
562 |
return meshHeader->numVertice; |
return |
563 |
|
NSSwapLittleIntToHost(meshHeader->numVertice); |
564 |
} |
} |
565 |
|
|
566 |
|
|
574 |
NSParameterAssert (noMesh < [self nbMeshes]); |
NSParameterAssert (noMesh < [self nbMeshes]); |
575 |
|
|
576 |
struct MD3MeshHeader_t *meshHeader = [self _mesh: noMesh]; |
struct MD3MeshHeader_t *meshHeader = [self _mesh: noMesh]; |
577 |
return meshHeader->numTriangles; |
return |
578 |
|
NSSwapLittleIntToHost(meshHeader->numTriangles); |
579 |
} |
} |
580 |
|
|
581 |
|
|
592 |
NSParameterAssert (noMesh < [self nbMeshes]); |
NSParameterAssert (noMesh < [self nbMeshes]); |
593 |
|
|
594 |
struct MD3MeshHeader_t *meshHeader = [self _mesh: noMesh]; |
struct MD3MeshHeader_t *meshHeader = [self _mesh: noMesh]; |
595 |
return meshHeader->triangleStart; |
return |
596 |
|
NSSwapLittleIntToHost(meshHeader->triangleStart); |
597 |
} |
} |
598 |
|
|
599 |
|
|
609 |
NSParameterAssert (noMesh < [self nbMeshes]); |
NSParameterAssert (noMesh < [self nbMeshes]); |
610 |
|
|
611 |
struct MD3MeshHeader_t *meshHeader = [self _mesh: noMesh]; |
struct MD3MeshHeader_t *meshHeader = [self _mesh: noMesh]; |
612 |
return meshHeader->textureCoordStart; |
return |
613 |
|
NSSwapLittleIntToHost(meshHeader->textureCoordStart); |
614 |
} |
} |
615 |
|
|
616 |
|
|
625 |
NSParameterAssert (noMesh >= 0 && noMesh < [self nbMeshes]); |
NSParameterAssert (noMesh >= 0 && noMesh < [self nbMeshes]); |
626 |
|
|
627 |
struct MD3MeshHeader_t *meshHeader = [self _mesh: noMesh]; |
struct MD3MeshHeader_t *meshHeader = [self _mesh: noMesh]; |
628 |
return meshHeader->vertexStart; |
return |
629 |
|
NSSwapLittleIntToHost(meshHeader->vertexStart); |
630 |
} |
} |
631 |
|
|
632 |
|
|