void Hu_DrawMapTitle(float alpha, dd_bool mapIdInsteadOfAuthor) { de::Uri const mapUri = COMMON_GAMESESSION->mapUri(); de::String const title = G_MapTitle(mapUri); de::String const author = G_MapAuthor(mapUri, CPP_BOOL(cfg.common.hideIWADAuthor)); float y = 0; DGL_Enable(DGL_TEXTURE_2D); DGL_Color4f(1, 1, 1, alpha); FR_SetFont(FID(GF_FONTB)); FR_LoadDefaultAttrib(); FR_SetColorAndAlpha(defFontRGB[0], defFontRGB[1], defFontRGB[2], alpha); #if __JDOOM__ || __JDOOM64__ patchid_t patchId = 0; de::Uri const titleImage = G_MapTitleImage(mapUri); if(!titleImage.isEmpty()) { if(!titleImage.scheme().compareWithoutCase("Patches")) { patchId = R_DeclarePatch(titleImage.path().toUtf8().constData()); } } WI_DrawPatch(patchId, Hu_ChoosePatchReplacement(PRM_ALLOW_TEXT, patchId, title), de::Vector2i(), ALIGN_TOP, 0, DTF_ONLY_SHADOW); // Following line of text placed according to patch height. y += Hu_MapTitleFirstLineHeight(); #elif __JHERETIC__ || __JHEXEN__ if(!title.isEmpty()) { FR_DrawTextXY3(title.toUtf8().constData(), 0, 0, ALIGN_TOP, DTF_ONLY_SHADOW); y += 20; } #endif if(mapIdInsteadOfAuthor) { FR_SetFont(FID(GF_FONTA)); #if defined(__JHERETIC__) || defined(__JHEXEN__) FR_SetColorAndAlpha(.85f, .85f, .85f, alpha); #else FR_SetColorAndAlpha(.6f, .6f, .6f, alpha); #endif FR_DrawTextXY3(mapUri.path().toUtf8().constData(), 0, y, ALIGN_TOP, DTF_ONLY_SHADOW); } else if(!author.isEmpty()) { FR_SetFont(FID(GF_FONTA)); FR_SetColorAndAlpha(.5f, .5f, .5f, alpha); FR_DrawTextXY3(author.toUtf8().constData(), 0, y, ALIGN_TOP, DTF_ONLY_SHADOW); } DGL_Disable(DGL_TEXTURE_2D); }
void WI_DrawPatch(patchid_t patchId, de::String const &replacement, de::Vector2i const &origin, int alignFlags, int patchFlags, short textFlags) { if(!replacement.isEmpty()) { // Use the replacement string. Point2Raw const originAsPoint2Raw(origin.x, origin.y); FR_DrawText3(replacement.toUtf8().constData(), &originAsPoint2Raw, alignFlags, textFlags); return; } // Use the original patch. GL_DrawPatch(patchId, origin, alignFlags, patchFlags); }
static void NetSv_CycleToMapNum(de::Uri const &mapUri) { de::String const warpCommand = de::String("warp ") + mapUri.compose(de::Uri::DecodePath); DD_Execute(false, warpCommand.toUtf8().constData()); // In a couple of seconds, send everyone the rules of this map. for(int i = 0; i < MAXPLAYERS; ++i) { cycleRulesCounter[i] = 3 * TICSPERSEC; } cycleMode = CYCLE_IDLE; cycleCounter = 0; }
static void readUri(Uri* uri, Reader* reader, de::String defaultScheme = "") { Uri_Clear(uri); ddstring_t scheme; Str_InitStd(&scheme); Str_Read(&scheme, reader); ddstring_t path; Str_InitStd(&path); Str_Read(&path, reader); if(Str_IsEmpty(&scheme) && !defaultScheme.isEmpty()) { Str_Set(&scheme, defaultScheme.toUtf8().constData()); } Uri_SetScheme(uri, Str_Text(&scheme)); Uri_SetPath (uri, Str_Text(&path )); }