DM: Refactor Thing POD

This commit is contained in:
WinterGrascph 2016-05-12 23:19:36 +02:00 committed by Bendegúz Nagy
parent 05fbf0b358
commit f39b22f321
2 changed files with 30 additions and 29 deletions

View file

@ -11,7 +11,6 @@ int8 dirIntoStepCountNorth[4] = {-1 /* North */, 0 /* East */, 1 /* West */, 0 /
void turnDirRight(direction &dir) { dir = (direction)((dir + 1) & 3); } void turnDirRight(direction &dir) { dir = (direction)((dir + 1) & 3); }
} }
using namespace DM; using namespace DM;
@ -225,12 +224,8 @@ void DungeonMan::loadDungeonFile() {
if (_dunData.squareFirstThings) if (_dunData.squareFirstThings)
delete[] _dunData.squareFirstThings; delete[] _dunData.squareFirstThings;
_dunData.squareFirstThings = new Thing[_fileHeader.squareFirstThingCount]; _dunData.squareFirstThings = new Thing[_fileHeader.squareFirstThingCount];
for (uint16 i = 0; i < _fileHeader.squareFirstThingCount; ++i) { for (uint16 i = 0; i < _fileHeader.squareFirstThingCount; ++i)
uint16 tmp = dunDataStream.readUint16BE(); _dunData.squareFirstThings[i].set(dunDataStream.readUint16BE());
_dunData.squareFirstThings[i].cell = tmp >> 14;
_dunData.squareFirstThings[i].type = (tmp >> 10) & 0xF;
_dunData.squareFirstThings[i].index = tmp & 0x1FF;
}
if (_messages.newGame) if (_messages.newGame)
for (uint16 i = 0; i < 300; ++i) for (uint16 i = 0; i < 300; ++i)
_dunData.squareFirstThings[i] = Thing::specThingNone; _dunData.squareFirstThings[i] = Thing::specThingNone;

View file

@ -52,13 +52,40 @@ class DungeonFileHeader {
uint16 thingCounts[16]; // @ ThingCount[16] uint16 thingCounts[16]; // @ ThingCount[16]
}; // @ DUNGEON_HEADER }; // @ DUNGEON_HEADER
class Map {
friend class DungeonMan;
uint32 rawDunDataOffset;
uint8 offsetMapX, offsetMapY;
uint8 level; // only used in DMII
uint8 width, height; // !!! THESRE ARE INCLUSIVE BOUNDARIES
// orn short for Ornament
uint8 wallOrnCount; /* May be used in a Sensor on a Wall or closed Fake Wall square */
uint8 randWallOrnCount; /* Used only on some Wall squares and some closed Fake Wall squares */
uint8 floorOrnCount; /* May be used in a Sensor on a Pit, open Fake Wall, Corridor or Teleporter square */
uint8 randFloorOrnCount; /* Used only on some Corridor squares and some open Fake Wall squares */
uint8 doorOrnCount;
uint8 creatureTypeCount;
uint8 difficulty;
uint8 floorSet, wallSet, doorSet0, doorSet1;
}; // @ MAP
class Thing { class Thing {
friend class DungeonMan; friend class DungeonMan;
static const Thing specThingNone; static const Thing specThingNone;
Thing(uint8 cell, uint8 type, uint8 index) : cell(cell), type(type), index(index) {}
Thing() {} Thing() {}
Thing(uint8 cell, uint8 type, uint8 index) : cell(cell), type(type), index(index) {}
void set(uint16 dat) {
cell = dat >> 14;
type = (dat >> 10) & 0xF;
index = dat & 0x1FF;
}
uint8 cell; uint8 cell;
uint8 type; uint8 type;
@ -109,27 +136,6 @@ private:
bool restartGameRequest = false; // @ G0523_B_RestartGameRequested bool restartGameRequest = false; // @ G0523_B_RestartGameRequested
}; // @ AGGREGATE }; // @ AGGREGATE
class Map {
friend class DungeonMan;
uint32 rawDunDataOffset;
uint8 offsetMapX, offsetMapY;
uint8 level; // only used in DMII
uint8 width, height; // !!! THESRE ARE INCLUSIVE BOUNDARIES
// orn short for Ornament
uint8 wallOrnCount; /* May be used in a Sensor on a Wall or closed Fake Wall square */
uint8 randWallOrnCount; /* Used only on some Wall squares and some closed Fake Wall squares */
uint8 floorOrnCount; /* May be used in a Sensor on a Pit, open Fake Wall, Corridor or Teleporter square */
uint8 randFloorOrnCount; /* Used only on some Corridor squares and some open Fake Wall squares */
uint8 doorOrnCount;
uint8 creatureTypeCount;
uint8 difficulty;
uint8 floorSet, wallSet, doorSet0, doorSet1;
}; // @ MAP