Skip to content

Commit

Permalink
Map Importer: Cleanup
Browse files Browse the repository at this point in the history
Don't allocate AutoStrs when importing the map (was 2 per sector and 3 per side).
  • Loading branch information
skyjake committed Dec 12, 2019
1 parent cc8f1fc commit 1c1789e
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 46 deletions.
4 changes: 2 additions & 2 deletions doomsday/apps/api/api_mapedit.h
Expand Up @@ -99,9 +99,9 @@ DENG_API_TYPEDEF(MPE)
* @return Index of the newly created line else @c -1 if there was an error.
*/
int (*LineCreate)(int v1, int v2, int frontSector, int backSector, int flags, int archiveIndex);
void (*LineAddSide)(int line, int side, short flags, ddstring_t const *topMaterial, float topOffsetX, float topOffsetY, float topRed, float topGreen, float topBlue, ddstring_t const *middleMaterial, float middleOffsetX, float middleOffsetY, float middleRed, float middleGreen, float middleBlue, float middleAlpha, const ddstring_t* bottomMaterial, float bottomOffsetX, float bottomOffsetY, float bottomRed, float bottomGreen, float bottomBlue, int archiveIndex);
void (*LineAddSide)(int line, int side, short flags, const char *topMaterial, float topOffsetX, float topOffsetY, float topRed, float topGreen, float topBlue, const char *middleMaterial, float middleOffsetX, float middleOffsetY, float middleRed, float middleGreen, float middleBlue, float middleAlpha, const char *bottomMaterial, float bottomOffsetX, float bottomOffsetY, float bottomRed, float bottomGreen, float bottomBlue, int archiveIndex);
int (*SectorCreate)(float lightlevel, float red, float green, float blue, int archiveIndex);
int (*PlaneCreate)(int sector, coord_t height, ddstring_t const *materialUri, float matOffsetX, float matOffsetY, float r, float g, float b, float a, float normalX, float normalY, float normalZ, int archiveIndex);
int (*PlaneCreate)(int sector, coord_t height, const char *materialUri, float matOffsetX, float matOffsetY, float r, float g, float b, float a, float normalX, float normalY, float normalZ, int archiveIndex);
int (*PolyobjCreate)(int const *lines, int linecount, int tag, int sequenceType, coord_t originX, coord_t originY, int archiveIndex);
dd_bool (*GameObjProperty)(char const *objName, int idx, char const *propName, valuetype_t type, void *data);
}
Expand Down
3 changes: 2 additions & 1 deletion doomsday/apps/api/apis.h
Expand Up @@ -127,7 +127,8 @@ enum {
DE_API_MAP_EDIT_v1 = 1200, // 1.10
DE_API_MAP_EDIT_v2 = 1201, // 1.11
DE_API_MAP_EDIT_v3 = 1202, // 2.0
DE_API_MAP_EDIT = DE_API_MAP_EDIT_v3,
DE_API_MAP_EDIT_v4 = 1203, // 2.2
DE_API_MAP_EDIT = DE_API_MAP_EDIT_v4,

DE_API_MATERIALS_v1 = 1300, // 1.10
DE_API_MATERIALS = DE_API_MATERIALS_v1,
Expand Down
23 changes: 12 additions & 11 deletions doomsday/apps/client/src/api_mapedit.cpp
Expand Up @@ -104,7 +104,7 @@ static void printMissingMaterialsInDict()
*
* @return Pointer to the found material; otherwise @c 0.
*/
static Material *findMaterialInDict(String const &materialUriStr)
static Material *findMaterialInDict(const String &materialUriStr)
{
if(materialUriStr.isEmpty()) return 0;

Expand Down Expand Up @@ -158,10 +158,10 @@ static Material *findMaterialInDict(String const &materialUriStr)
return material;
}

static inline Material *findMaterialInDict(ddstring_t const *materialUriStr)
static inline Material *findMaterialInDict(const char *materialUriStr)
{
if(!materialUriStr) return 0;
return findMaterialInDict(Str_Text(materialUriStr));
if (!materialUriStr) return nullptr;
return findMaterialInDict(String(materialUriStr));
}

Map *MPE_Map()
Expand Down Expand Up @@ -261,12 +261,13 @@ int MPE_LineCreate(int v1, int v2, int frontSectorIdx, int backSectorIdx, int fl
}

#undef MPE_LineAddSide
void MPE_LineAddSide(int lineIdx, int sideId, short flags, ddstring_t const *topMaterialUri,
float topOffsetX, float topOffsetY, float topRed, float topGreen, float topBlue,
ddstring_t const *middleMaterialUri, float middleOffsetX, float middleOffsetY, float middleRed,
float middleGreen, float middleBlue, float middleOpacity, ddstring_t const *bottomMaterialUri,
float bottomOffsetX, float bottomOffsetY, float bottomRed, float bottomGreen,
float bottomBlue, int archiveIndex)
void MPE_LineAddSide(int lineIdx, int sideId, short flags, const char *topMaterialUri,
float topOffsetX, float topOffsetY, float topRed, float topGreen,
float topBlue, const char *middleMaterialUri, float middleOffsetX,
float middleOffsetY, float middleRed, float middleGreen, float middleBlue,
float middleOpacity, const char *bottomMaterialUri, float bottomOffsetX,
float bottomOffsetY, float bottomRed, float bottomGreen, float bottomBlue,
int archiveIndex)
{
ERROR_IF_NOT_INITIALIZED();

Expand Down Expand Up @@ -300,7 +301,7 @@ void MPE_LineAddSide(int lineIdx, int sideId, short flags, ddstring_t const *top
}

#undef MPE_PlaneCreate
int MPE_PlaneCreate(int sectorIdx, coord_t height, ddstring_t const *materialUri,
int MPE_PlaneCreate(int sectorIdx, coord_t height, const char *materialUri,
float matOffsetX, float matOffsetY, float tintRed, float tintGreen, float tintBlue, float opacity,
float normalX, float normalY, float normalZ, int archiveIndex)
{
Expand Down
89 changes: 57 additions & 32 deletions doomsday/apps/plugins/importidtech1/src/mapimporter.cpp
Expand Up @@ -315,7 +315,7 @@ struct SectorDef : public Id1MapElement
case Id1MapRecognizer::HexenFormat: {
Block name;
from.readBytes(8, name);
floorMaterial= map().toMaterialId(name.constData(), PlaneMaterials);
floorMaterial = map().toMaterialId(name.constData(), PlaneMaterials);

from.readBytes(8, name);
ceilMaterial = map().toMaterialId(name.constData(), PlaneMaterials);
Expand All @@ -326,7 +326,7 @@ struct SectorDef : public Id1MapElement
case Id1MapRecognizer::Doom64Format: {
duint16 idx;
from >> idx;
floorMaterial= map().toMaterialId(idx, PlaneMaterials);
floorMaterial = map().toMaterialId(idx, PlaneMaterials);

from >> idx;
ceilMaterial = map().toMaterialId(idx, PlaneMaterials);
Expand Down Expand Up @@ -687,20 +687,6 @@ DENG2_PIMPL(MapImporter)
Impl(Public *i) : Base(i), format(Id1MapRecognizer::UnknownFormat)
{}

/*
inline dint vertexCount() const {
return int(vertices.size());
}
inline Vector2d vertexAsVector2d(dint vertexIndex) const {
return vertices[vertexIndex].pos;
}*/

/// @todo fixme: A real performance killer...
inline AutoStr *composeMaterialRef(MaterialId id) {
return AutoStr_FromTextStd(materials.find(id).toUtf8().constData());
}

void readVertexes(de::Reader &from, dint numElements)
{
vertices.resize(size_t(numElements));
Expand Down Expand Up @@ -954,6 +940,15 @@ DENG2_PIMPL(MapImporter)
{
Time begunAt;

// Detect map hacks.
{
// Deep water via flat bleeding. Used in TNT MAP02.
for (SectorDef &sector : sectors)
{

}
}

if(format == Id1MapRecognizer::HexenFormat)
{
LOGDEV_MAP_XVERBOSE("Locating polyobjs...", "");
Expand Down Expand Up @@ -997,9 +992,9 @@ DENG2_PIMPL(MapImporter)
{
dint idx = MPE_SectorCreate(dfloat(i->lightLevel) / 255.0f, 1, 1, 1, i->index);

MPE_PlaneCreate(idx, i->floorHeight, composeMaterialRef(i->floorMaterial),
MPE_PlaneCreate(idx, i->floorHeight, materials.find(i->floorMaterial).toUtf8(),
0, 0, 1, 1, 1, 1, 0, 0, 1, -1);
MPE_PlaneCreate(idx, i->ceilHeight, composeMaterialRef(i->ceilMaterial),
MPE_PlaneCreate(idx, i->ceilHeight, materials.find(i->ceilMaterial).toUtf8(),
0, 0, 1, 1, 1, 1, 0, 0, -1, -1);

MPE_GameObjProperty("XSector", idx, "Tag", DDVT_SHORT, &i->tag);
Expand Down Expand Up @@ -1036,24 +1031,54 @@ DENG2_PIMPL(MapImporter)
back? back->sector : -1, i->ddFlags, i->index);
if(front)
{
MPE_LineAddSide(lineIdx, LineDef::Front, sideFlags,
composeMaterialRef(front->topMaterial),
front->offset[VX], front->offset[VY], 1, 1, 1,
composeMaterialRef(front->middleMaterial),
front->offset[VX], front->offset[VY], 1, 1, 1, 1,
composeMaterialRef(front->bottomMaterial),
front->offset[VX], front->offset[VY], 1, 1, 1,
MPE_LineAddSide(lineIdx,
LineDef::Front,
sideFlags,
materials.find(front->topMaterial).toUtf8(),
front->offset[VX],
front->offset[VY],
1,
1,
1,
materials.find(front->middleMaterial).toUtf8(),
front->offset[VX],
front->offset[VY],
1,
1,
1,
1,
materials.find(front->bottomMaterial).toUtf8(),
front->offset[VX],
front->offset[VY],
1,
1,
1,
front->index);
}
if(back)
{
MPE_LineAddSide(lineIdx, LineDef::Back, sideFlags,
composeMaterialRef(back->topMaterial),
back->offset[VX], back->offset[VY], 1, 1, 1,
composeMaterialRef(back->middleMaterial),
back->offset[VX], back->offset[VY], 1, 1, 1, 1,
composeMaterialRef(back->bottomMaterial),
back->offset[VX], back->offset[VY], 1, 1, 1,
MPE_LineAddSide(lineIdx,
LineDef::Back,
sideFlags,
materials.find(back->topMaterial).toUtf8(),
back->offset[VX],
back->offset[VY],
1,
1,
1,
materials.find(back->middleMaterial).toUtf8(),
back->offset[VX],
back->offset[VY],
1,
1,
1,
1,
materials.find(back->bottomMaterial).toUtf8(),
back->offset[VX],
back->offset[VY],
1,
1,
1,
back->index);
}

Expand Down

0 comments on commit 1c1789e

Please sign in to comment.