From b854fa55f6f17be4d8c45e84e81cdc7715d6a044 Mon Sep 17 00:00:00 2001
From: Treeki <treeki@gmail.com>
Date: Sun, 30 Sep 2012 01:02:21 +0200
Subject: levelinfo API improved a bit

---
 src/levelinfo.cpp | 19 ++++++++++++++++---
 src/levelinfo.h   | 14 ++++++--------
 2 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/src/levelinfo.cpp b/src/levelinfo.cpp
index 8ce2845..d5ef8e7 100644
--- a/src/levelinfo.cpp
+++ b/src/levelinfo.cpp
@@ -7,10 +7,9 @@ void dLevelInfo_c::load(void *buffer) {
 	for (int sect = 0; sect < sectionCount(); sect++) {
 		// parse this section
 		section_s *thisSect = getSectionByIndex(sect);
-		entry_s *levels = getLevelsForSection(thisSect);
 
 		for (int lev = 0; lev < thisSect->levelCount; lev++) {
-			entry_s *level = &levels[lev];
+			entry_s *level = &thisSect->levels[lev];
 
 			SetSomeConditionShit(level->worldSlot, level->levelSlot, level->flags);
 
@@ -28,7 +27,7 @@ dLevelInfo_c::entry_s *dLevelInfo_c::searchBySlot(int world, int level) {
 		section_s *sect = getSectionByIndex(i);
 
 		for (int j = 0; j < sect->levelCount; j++) {
-			entry_s *entry = &getLevelsForSection(sect)[j];
+			entry_s *entry = &sect->levels[j];
 			if (entry->worldSlot == world && entry->levelSlot == level)
 				return entry;
 		}
@@ -37,3 +36,17 @@ dLevelInfo_c::entry_s *dLevelInfo_c::searchBySlot(int world, int level) {
 	return 0;
 }
 
+dLevelInfo_c::entry_s *dLevelInfo_c::searchByDisplayNum(int world, int level) {
+	for (int i = 0; i < sectionCount(); i++) {
+		section_s *sect = getSectionByIndex(i);
+
+		for (int j = 0; j < sect->levelCount; j++) {
+			entry_s *entry = &sect->levels[j];
+			if (entry->displayWorld == world && entry->displayLevel == level)
+				return entry;
+		}
+	}
+
+	return 0;
+}
+
diff --git a/src/levelinfo.h b/src/levelinfo.h
index 20628d9..8c8fe58 100644
--- a/src/levelinfo.h
+++ b/src/levelinfo.h
@@ -11,10 +11,6 @@ public:
 		u32 sectionOffsets[1];
 	};
 
-	struct section_s {
-		u32 levelCount;
-	};
-
 	struct entry_s {
 		u8 worldSlot;
 		u8 levelSlot;
@@ -26,6 +22,11 @@ public:
 		u32 nameOffset;
 	};
 
+	struct section_s {
+		u32 levelCount;
+		entry_s levels[1];
+	};
+
 private:
 	header_s *data;
 
@@ -33,6 +34,7 @@ public:
 	void load(void *buffer);
 
 	entry_s *searchBySlot(int world, int level);
+	entry_s *searchByDisplayNum(int world, int level);
 
 	u32 sectionCount() {
 		return data->sectionCount;
@@ -42,10 +44,6 @@ public:
 		return (section_s*)(((char*)data) + data->sectionOffsets[index]);
 	}
 
-	entry_s *getLevelsForSection(section_s *section) {
-		return (entry_s*)(section + 1);
-	}
-
 	const char *getNameForLevel(entry_s *entry) {
 		return (const char*)data + entry->nameOffset;
 	}
-- 
cgit v1.2.3