| 1 |
/////////////////////////////////////////////////////////// |
|---|
| 2 |
// TexGen // |
|---|
| 3 |
// утилита для подготовки текстур рельефа // |
|---|
| 4 |
// для игры Проклятые Земли // |
|---|
| 5 |
// Copyright (C) 2007-2008 Gipat Group // |
|---|
| 6 |
// Распространяется на условиях // |
|---|
| 7 |
// Gipat Group's opened EI-editor-utility license // |
|---|
| 8 |
// версии 1.0 // |
|---|
| 9 |
// // |
|---|
| 10 |
// www.gipatgroup.org // |
|---|
| 11 |
/////////////////////////////////////////////////////////// |
|---|
| 12 |
|
|---|
| 13 |
//К работе над данным файлом приложили руки, ноги.... короче аффтары: |
|---|
| 14 |
// 1) Снайпер (sniper-rifle@rambler.ru) |
|---|
| 15 |
|
|---|
| 16 |
//////////////////////////////////////////////////////////////////////// |
|---|
| 17 |
|
|---|
| 18 |
//--------------------------------------------------------------------------- |
|---|
| 19 |
|
|---|
| 20 |
#ifndef MaskH |
|---|
| 21 |
#define MaskH |
|---|
| 22 |
|
|---|
| 23 |
#include <dstring.h> |
|---|
| 24 |
#include <StrUtils.hpp> |
|---|
| 25 |
#include <SysUtils.hpp> |
|---|
| 26 |
#include <stdio.h> |
|---|
| 27 |
//--------------------------------------------------------------------------- |
|---|
| 28 |
class CTileMask |
|---|
| 29 |
{ |
|---|
| 30 |
//Формат файла маски(*.msk): |
|---|
| 31 |
// 2 байта: заголовок (TM) |
|---|
| 32 |
// 1 байт: версия файла маски (0) |
|---|
| 33 |
// 4 байта: длина в пикселях {W} |
|---|
| 34 |
// 4 байта: высота в пикселях {H} //Длина т.н. заголовка: 11 байт |
|---|
| 35 |
// W*H*3 байта: массив элементов типа "точка" |
|---|
| 36 |
// 4 байта: длина текста комментария {L} |
|---|
| 37 |
// L байт: текст комментария, либо теги |
|---|
| 38 |
// |
|---|
| 39 |
// Элемент типа "точка": |
|---|
| 40 |
// 6 бит: А, 2 бита - младшие разряды D |
|---|
| 41 |
// 6 бит: B, 2 бита - средние разряды D |
|---|
| 42 |
// 6 бит: C, 2 бита - старшие разряды D |
|---|
| 43 |
private: |
|---|
| 44 |
byte *buf; //buf - весь файл маски. 3 байта на точку. Используется для хранения на винчестере. |
|---|
| 45 |
byte *WorkData; //Несжатые рабочие данные - опимальная скорость доступа, 4 байта на точку. |
|---|
| 46 |
int BufLen; |
|---|
| 47 |
int Buf2Len; |
|---|
| 48 |
int W, H; |
|---|
| 49 |
byte MaskVersion; |
|---|
| 50 |
byte HeadLen; |
|---|
| 51 |
public: |
|---|
| 52 |
int Width(){return W;} |
|---|
| 53 |
int Height(){return H;} |
|---|
| 54 |
CTileMask(){BufLen=Buf2Len=W=H=0;buf=NULL; WorkData=NULL; MaskVersion = 0;HeadLen = 11;} |
|---|
| 55 |
~CTileMask(){Clear();ClearW();} |
|---|
| 56 |
void LoadMask(AnsiString FileName); |
|---|
| 57 |
void SaveMask(AnsiString FileName); |
|---|
| 58 |
void GetPoint(int X, int Y, byte *dwDest); |
|---|
| 59 |
void SetPoint(int X, int Y, byte *dwSrc); |
|---|
| 60 |
void GetPointW(int X, int Y, byte *dwDest); |
|---|
| 61 |
void SetPointW(int X, int Y, byte *dwSrc); |
|---|
| 62 |
void NewMask(int szW, int szH, bool Fill=true); |
|---|
| 63 |
void Uncompress(); |
|---|
| 64 |
void Compress(); |
|---|
| 65 |
void NormalizeW(int X, int Y);//см. ниже |
|---|
| 66 |
int CheckSumW(int X, int Y); //Имеет только W-вариант, ибо нефиг. |
|---|
| 67 |
void Clear(){if(BufLen>0){delete [] buf;BufLen=W=H=0;buf=NULL;}} |
|---|
| 68 |
void ClearW(){if(Buf2Len>0){delete [] WorkData; Buf2Len=0; WorkData=NULL;}} |
|---|
| 69 |
|
|---|
| 70 |
}; |
|---|
| 71 |
//--------------------------------------------------------------------------- |
|---|
| 72 |
#endif |
|---|