Changeset View
Changeset View
Standalone View
Standalone View
source/graphics/MapGenerator.cpp
Show First 20 Lines • Show All 109 Lines • ▼ Show 20 Lines | void* CMapGeneratorWorker::RunThread(CMapGeneratorWorker* self) | ||||
// and can die. The data will be stored in m_MapData already if successful, or m_Progress | // and can die. The data will be stored in m_MapData already if successful, or m_Progress | ||||
// will contain an error value on failure. | // will contain an error value on failure. | ||||
return NULL; | return NULL; | ||||
} | } | ||||
bool CMapGeneratorWorker::Run() | bool CMapGeneratorWorker::Run() | ||||
{ | { | ||||
ScriptInterface::Request rq(m_ScriptInterface); | ScriptRequest rq(m_ScriptInterface); | ||||
// Parse settings | // Parse settings | ||||
JS::RootedValue settingsVal(rq.cx); | JS::RootedValue settingsVal(rq.cx); | ||||
if (!m_ScriptInterface->ParseJSON(m_Settings, &settingsVal) && settingsVal.isUndefined()) | if (!m_ScriptInterface->ParseJSON(m_Settings, &settingsVal) && settingsVal.isUndefined()) | ||||
{ | { | ||||
LOGERROR("CMapGeneratorWorker::Run: Failed to parse settings"); | LOGERROR("CMapGeneratorWorker::Run: Failed to parse settings"); | ||||
return false; | return false; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 193 Lines • ▼ Show 20 Lines | JS::Value CMapGeneratorWorker::LoadHeightmap(ScriptInterface::CmptPrivate* pCmptPrivate, const VfsPath& filename) | ||||
std::vector<u16> heightmap; | std::vector<u16> heightmap; | ||||
if (LoadHeightmapImageVfs(filename, heightmap) != INFO::OK) | if (LoadHeightmapImageVfs(filename, heightmap) != INFO::OK) | ||||
{ | { | ||||
LOGERROR("Could not load heightmap file '%s'", filename.string8()); | LOGERROR("Could not load heightmap file '%s'", filename.string8()); | ||||
return JS::UndefinedValue(); | return JS::UndefinedValue(); | ||||
} | } | ||||
CMapGeneratorWorker* self = static_cast<CMapGeneratorWorker*>(pCmptPrivate->pCBData); | CMapGeneratorWorker* self = static_cast<CMapGeneratorWorker*>(pCmptPrivate->pCBData); | ||||
ScriptInterface::Request rq(self->m_ScriptInterface); | ScriptRequest rq(self->m_ScriptInterface); | ||||
JS::RootedValue returnValue(rq.cx); | JS::RootedValue returnValue(rq.cx); | ||||
ToJSVal_vector(rq, &returnValue, heightmap); | ToJSVal_vector(rq, &returnValue, heightmap); | ||||
return returnValue; | return returnValue; | ||||
} | } | ||||
// See CMapReader::UnpackTerrain, CMapReader::ParseTerrain for the reordering | // See CMapReader::UnpackTerrain, CMapReader::ParseTerrain for the reordering | ||||
JS::Value CMapGeneratorWorker::LoadMapTerrain(ScriptInterface::CmptPrivate* pCmptPrivate, const VfsPath& filename) | JS::Value CMapGeneratorWorker::LoadMapTerrain(ScriptInterface::CmptPrivate* pCmptPrivate, const VfsPath& filename) | ||||
{ | { | ||||
CMapGeneratorWorker* self = static_cast<CMapGeneratorWorker*>(pCmptPrivate->pCBData); | CMapGeneratorWorker* self = static_cast<CMapGeneratorWorker*>(pCmptPrivate->pCBData); | ||||
ScriptInterface::Request rq(self->m_ScriptInterface); | ScriptRequest rq(self->m_ScriptInterface); | ||||
if (!VfsFileExists(filename)) | if (!VfsFileExists(filename)) | ||||
{ | { | ||||
self->m_ScriptInterface->ReportError( | ScriptException::Raise(rq, "Terrain file \"%s\" does not exist!", filename.string8().c_str()); | ||||
("Terrain file \"" + filename.string8() + "\" does not exist!").c_str()); | |||||
return JS::UndefinedValue(); | return JS::UndefinedValue(); | ||||
} | } | ||||
CFileUnpacker unpacker; | CFileUnpacker unpacker; | ||||
unpacker.Read(filename, "PSMP"); | unpacker.Read(filename, "PSMP"); | ||||
if (unpacker.GetVersion() < CMapIO::FILE_READ_VERSION) | if (unpacker.GetVersion() < CMapIO::FILE_READ_VERSION) | ||||
{ | { | ||||
self->m_ScriptInterface->ReportError( | ScriptException::Raise(rq, "Could not load terrain file \"%s\" too old version!", filename.string8().c_str()); | ||||
("Could not load terrain file \"" + filename.string8() + "\" too old version!").c_str()); | |||||
return JS::UndefinedValue(); | return JS::UndefinedValue(); | ||||
} | } | ||||
// unpack size | // unpack size | ||||
ssize_t patchesPerSide = (ssize_t)unpacker.UnpackSize(); | ssize_t patchesPerSide = (ssize_t)unpacker.UnpackSize(); | ||||
size_t verticesPerSide = patchesPerSide * PATCH_SIZE + 1; | size_t verticesPerSide = patchesPerSide * PATCH_SIZE + 1; | ||||
// unpack heightmap | // unpack heightmap | ||||
▲ Show 20 Lines • Show All 74 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator