From edf303f6ba8e30e04e828cb0b9b268d534f194c4 Mon Sep 17 00:00:00 2001
From: Treeki <treeki@gmail.com>
Date: Thu, 18 Oct 2012 03:55:02 +0200
Subject: refactored level info a little

---
 src/koopatlas/core.cpp        |  7 +------
 src/koopatlas/core.h          |  3 ---
 src/koopatlas/hud.cpp         |  4 ++--
 src/koopatlas/pathmanager.cpp |  2 +-
 src/levelinfo.cpp             | 20 ++++++++++++++++++++
 src/levelinfo.h               |  2 ++
 src/pregame.cpp               | 23 ++---------------------
 7 files changed, 28 insertions(+), 33 deletions(-)

diff --git a/src/koopatlas/core.cpp b/src/koopatlas/core.cpp
index 462b995..b635ba0 100644
--- a/src/koopatlas/core.cpp
+++ b/src/koopatlas/core.cpp
@@ -176,9 +176,7 @@ bool WMInit_LoadResources1(void *ptr) {
 
 	dScKoopatlas_c *wm = (dScKoopatlas_c*)ptr;
 
-	bool result1 = wm->mapListLoader.load("/Maps/List.txt");
-	bool result2 = wm->levelInfoLoader.load("/NewerRes/LevelInfo.bin");
-	return result1 && result2;
+	return wm->mapListLoader.load("/Maps/List.txt");
 }
 
 bool WMInit_LoadResources2(void *ptr) {
@@ -250,8 +248,6 @@ bool WMInit_SetupExtra(void *ptr) {
 	wm->player->modelHandler->mdlClass->startAnimation(0, 1.2f, 10.0f, 0.0f);
 
 	// since we've got all the resources, set up the path data too
-	SpammyReport("preparing level info\n");
-	wm->levelInfo.load(wm->levelInfoLoader.buffer);
 	SpammyReport("preparing path manager\n");
 	wm->pathManager.setup();
 
@@ -424,7 +420,6 @@ int dScKoopatlas_c::onDelete() {
 	DVD_FreeFile(GetDVDClass2(), "SI_propeller");
 	DVD_FreeFile(GetDVDClass2(), "SI_star");
 
-	levelInfoLoader.unload();
 	mapListLoader.unload();
 
 	CleanUpEffectThings();
diff --git a/src/koopatlas/core.h b/src/koopatlas/core.h
index 0f7c3a3..88efdba 100644
--- a/src/koopatlas/core.h
+++ b/src/koopatlas/core.h
@@ -113,9 +113,6 @@ class dScKoopatlas_c : public dScene_c {
 		const char *getMapNameForIndex(int index);
 		int getIndexForMapName(const char *name);
 
-		dDvdLoader_c levelInfoLoader;
-		dLevelInfo_c levelInfo;
-
 		void startLevel(dLevelInfo_c::entry_s *level);
 
 		bool canDoStuff();
diff --git a/src/koopatlas/hud.cpp b/src/koopatlas/hud.cpp
index a32d32a..2288fe7 100644
--- a/src/koopatlas/hud.cpp
+++ b/src/koopatlas/hud.cpp
@@ -322,7 +322,7 @@ void dWMHud_c::playHideAnim(int id) {
 
 
 void dWMHud_c::loadHeaderInfo() {
-	dLevelInfo_c *levelInfo = &dScKoopatlas_c::instance->levelInfo;
+	dLevelInfo_c *levelInfo = &dLevelInfo_c::s_info;
 
 	dLevelInfo_c::entry_s *infEntry = levelInfo->searchBySlot(
 			nodeForHeader->levelNumber[0]-1, nodeForHeader->levelNumber[1]-1);
@@ -464,7 +464,7 @@ void dWMHud_c::loadFooterInfo() {
 	bool starVisibility[3];
 	starVisibility[0] = false;
 
-	dLevelInfo_c *linfo = &dScKoopatlas_c::instance->levelInfo;
+	dLevelInfo_c *linfo = &dLevelInfo_c::s_info;
 	dLevelInfo_c::entry_s *lastLevel = linfo->searchByDisplayNum(save->newerWorldID, lastLevelIDs[save->newerWorldID]);
 	if (lastLevel) {
 		starVisibility[0] = (save->GetLevelCondition(lastLevel->worldSlot,lastLevel->levelSlot) & COND_NORMAL);
diff --git a/src/koopatlas/pathmanager.cpp b/src/koopatlas/pathmanager.cpp
index 5cf029c..95c545f 100644
--- a/src/koopatlas/pathmanager.cpp
+++ b/src/koopatlas/pathmanager.cpp
@@ -746,7 +746,7 @@ void dWMPathManager_c::activatePoint() {
 
 		isEnteringLevel = true;
 		levelStartWait = 40;
-		enteredLevel = dScKoopatlas_c::instance->levelInfo.searchBySlot(w, l);
+		enteredLevel = dLevelInfo_c::s_info.searchBySlot(w, l);
 	}
 }
 
diff --git a/src/levelinfo.cpp b/src/levelinfo.cpp
index d5ef8e7..4d80492 100644
--- a/src/levelinfo.cpp
+++ b/src/levelinfo.cpp
@@ -1,5 +1,25 @@
 #include "levelinfo.h"
 
+dDvdLoader_c s_levelInfoLoader;
+bool s_levelInfoLoaded = false;
+
+dLevelInfo_c dLevelInfo_c::s_info;
+
+bool LoadLevelInfo() {
+	if (s_levelInfoLoaded)
+		return true;
+
+	void *data = s_levelInfoLoader.load("/NewerRes/LevelInfo.bin");
+	if (data) {
+		dLevelInfo_c::s_info.load(data);
+		s_levelInfoLoaded = true;
+		return true;
+	}
+
+	return false;
+}
+
+
 void dLevelInfo_c::load(void *buffer) {
 	data = (header_s*)buffer;
 
diff --git a/src/levelinfo.h b/src/levelinfo.h
index 8c8fe58..1e9ee6c 100644
--- a/src/levelinfo.h
+++ b/src/levelinfo.h
@@ -47,6 +47,8 @@ public:
 	const char *getNameForLevel(entry_s *entry) {
 		return (const char*)data + entry->nameOffset;
 	}
+
+	static dLevelInfo_c s_info;
 };
 
 
diff --git a/src/pregame.cpp b/src/pregame.cpp
index 7600902..3a2e89c 100644
--- a/src/pregame.cpp
+++ b/src/pregame.cpp
@@ -2,25 +2,6 @@
 #include "levelinfo.h"
 #include <newer.h>
 
-dDvdLoader_c s_levelInfoLoader;
-dLevelInfo_c s_levelInfo;
-bool s_levelInfoLoaded = false;
-
-// TODO: refactor this a tiny bit
-bool LoadLevelInfo() {
-	if (s_levelInfoLoaded)
-		return true;
-
-	void *data = s_levelInfoLoader.load("/NewerRes/LevelInfo.bin");
-	if (data) {
-		s_levelInfo.load(data);
-		s_levelInfoLoaded = true;
-		return true;
-	}
-
-	return false;
-}
-
 class PregameLytHandler {
 	public:
 		m2d::EmbedLayout_c layout;
@@ -84,10 +65,10 @@ void PregameLytHandler::hijack_loadLevelNumber() {
 	LevelName = layout.findTextBoxByName("LevelName");
 
 	// work out the thing now
-	dLevelInfo_c::entry_s *level = s_levelInfo.searchBySlot(CurrentWorld, CurrentLevel);
+	dLevelInfo_c::entry_s *level = dLevelInfo_c::s_info.searchBySlot(CurrentWorld, CurrentLevel);
 	if (level) {
 		wchar_t convLevelName[160];
-		const char *srcLevelName = s_levelInfo.getNameForLevel(level);
+		const char *srcLevelName = dLevelInfo_c::s_info.getNameForLevel(level);
 		int i = 0;
 		while (i < 159 && srcLevelName[i]) {
 			convLevelName[i] = srcLevelName[i];
-- 
cgit v1.2.3