1 /* 2 * HLLib 3 * Copyright (C) 2006-2010 Ryan Gregg 4 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later 9 * version. 10 */ 11 12 #ifndef BSPFILE_H 13 #define BSPFILE_H 14 15 #include "stdafx.h" 16 #include "Package.h" 17 18 #define HL_BSP_LUMP_COUNT 15 19 20 namespace HLLib 21 { 22 class HLLIB_API CBSPFile : public CPackage 23 { 24 private: 25 #pragma pack(1) 26 27 struct BSPLump 28 { 29 hlUInt uiOffset; 30 hlUInt uiLength; 31 }; 32 33 struct BSPHeader 34 { 35 hlUInt uiVersion; 36 BSPLump lpLumps[HL_BSP_LUMP_COUNT]; 37 }; 38 39 struct BSPTextureHeader 40 { 41 hlUInt uiTextureCount; 42 hlUInt lpOffsets[1]; 43 }; 44 45 struct BSPTexture 46 { 47 hlChar lpName[16]; 48 hlUInt uiWidth; 49 hlUInt uiHeight; 50 hlUInt lpOffsets[4]; 51 }; 52 53 #pragma pack() 54 55 private: 56 static const char *lpAttributeNames[]; 57 static const char *lpItemAttributeNames[]; 58 59 Mapping::CView *pHeaderView; 60 Mapping::CView *pTextureView; 61 62 const BSPHeader *pHeader; 63 const BSPTextureHeader *pTextureHeader; 64 65 public: 66 CBSPFile(); 67 virtual ~CBSPFile(); 68 69 virtual HLPackageType GetType() const; 70 virtual const hlChar *GetExtension() const; 71 virtual const hlChar *GetDescription() const; 72 73 protected: 74 virtual hlBool MapDataStructures(); 75 virtual hlVoid UnmapDataStructures(); 76 77 virtual CDirectoryFolder *CreateRoot(); 78 79 virtual hlUInt GetAttributeCountInternal() const; 80 virtual const hlChar *GetAttributeNameInternal(HLPackageAttribute eAttribute) const; 81 virtual hlBool GetAttributeInternal(HLPackageAttribute eAttribute, HLAttribute &Attribute) const; 82 83 virtual hlUInt GetItemAttributeCountInternal() const; 84 virtual const hlChar *GetItemAttributeNameInternal(HLPackageAttribute eAttribute) const; 85 virtual hlBool GetItemAttributeInternal(const CDirectoryItem *pItem, HLPackageAttribute eAttribute, HLAttribute &Attribute) const; 86 87 virtual hlBool GetFileSizeInternal(const CDirectoryFile *pFile, hlUInt &uiSize) const; 88 virtual hlBool GetFileSizeOnDiskInternal(const CDirectoryFile *pFile, hlUInt &uiSize) const; 89 90 virtual hlBool CreateStreamInternal(const CDirectoryFile *pFile, Streams::IStream *&pStream) const; 91 virtual hlVoid ReleaseStreamInternal(Streams::IStream &Stream) const; 92 93 private: 94 hlVoid GetFileName(hlChar *lpBuffer, hlUInt uiBufferSize); 95 96 hlBool GetLumpInfo(const CDirectoryFile &File, hlUInt &uiWidth, hlUInt &uiHeight, hlUInt &uiPaletteSize, hlUInt uiMipmap = 0) const; 97 hlBool GetLumpInfo(const CDirectoryFile &File, hlUInt &uiWidth, hlUInt &uiHeight, hlUInt &uiPaletteSize, const hlByte *&lpPalette, const hlByte *&lpPixels, hlUInt uiMipmap = 0) const; 98 }; 99 } 100 101 #endif 102