bool Resource::Load(C4GroupSet &rFromGroup) { // load gfx - using helper funcs from Game.GraphicsResource here... if (!Game.GraphicsResource.LoadFile(sfcCaption, "GUICaption", rFromGroup, idSfcCaption)) return false; barCaption.SetHorizontal(sfcCaption, sfcCaption.Hgt, 32); if (!Game.GraphicsResource.LoadFile(sfcButton, "GUIButton", rFromGroup, idSfcButton)) return false; barButton.SetHorizontal(sfcButton); if (!Game.GraphicsResource.LoadFile(sfcButtonD, "GUIButtonDown", rFromGroup, idSfcButtonD)) return false; barButtonD.SetHorizontal(sfcButtonD); if (!Game.GraphicsResource.LoadFile(fctButtonHighlight, "GUIButtonHighlight", rFromGroup)) return false; if (!Game.GraphicsResource.LoadFile(fctIcons, "GUIIcons", rFromGroup)) return false; fctIcons.Set(fctIcons.Surface,0,0,C4GUI_IconWdt,C4GUI_IconHgt); if (!Game.GraphicsResource.LoadFile(fctIconsEx, "GUIIcons2", rFromGroup)) return false; fctIconsEx.Set(fctIconsEx.Surface,0,0,C4GUI_IconExWdt,C4GUI_IconExHgt); if (!Game.GraphicsResource.LoadFile(sfcScroll, "GUIScroll", rFromGroup, idSfcScroll)) return false; sfctScroll.Set(C4Facet(&sfcScroll,0,0,32,32)); if (!Game.GraphicsResource.LoadFile(sfcContext, "GUIContext", rFromGroup, idSfcContext)) return false; fctContext.Set(&sfcContext,0,0,16,16); if (!Game.GraphicsResource.LoadFile(fctSubmenu, "GUISubmenu", rFromGroup)) return false; if (!Game.GraphicsResource.LoadFile(fctCheckbox, "GUICheckbox", rFromGroup)) return false; fctCheckbox.Set(fctCheckbox.Surface, 0,0,fctCheckbox.Hgt,fctCheckbox.Hgt); if (!Game.GraphicsResource.LoadFile(fctBigArrows, "GUIBigArrows", rFromGroup)) return false; fctBigArrows.Set(fctBigArrows.Surface, 0,0, fctBigArrows.Wdt/4, fctBigArrows.Hgt); if (!Game.GraphicsResource.LoadFile(fctProgressBar, "GUIProgress", rFromGroup)) return false; fctProgressBar.Set(fctProgressBar.Surface, 1,0, fctProgressBar.Wdt-2, fctProgressBar.Hgt); // loaded sucessfully pRes = this; return true; }
C4Facet Icon::GetIconFacet(Icons icoIconIndex) { if (icoIconIndex == Ico_None) return C4Facet(); C4Facet &rFacet = (icoIconIndex & Ico_Extended) ? ::GraphicsResource.fctIconsEx : ::GraphicsResource.fctIcons; icoIconIndex = Icons(icoIconIndex & (Ico_Extended-1)); int32_t iXMax, iYMax; rFacet.GetPhaseNum(iXMax, iYMax); if (!iXMax) iXMax = 6; return rFacet.GetPhase(icoIconIndex % iXMax, icoIconIndex / iXMax); }
C4Facet Icon::GetIconFacet(Icons icoIconIndex) { if (icoIconIndex == Ico_None) return C4Facet(); C4Facet *rFacet; switch (icoIconIndex & ~0xff) { case Ico_Extended: rFacet = &::GraphicsResource.fctIconsEx; break; case Ico_Controller: rFacet = &::GraphicsResource.fctControllerIcons; break; default: rFacet = &::GraphicsResource.fctIcons; } icoIconIndex = Icons(icoIconIndex & 0xff); int32_t iXMax, iYMax; rFacet->GetPhaseNum(iXMax, iYMax); if (!iXMax) iXMax = 6; return rFacet->GetPhase(icoIconIndex % iXMax, icoIconIndex / iXMax); }
bool C4GraphicsResource::Init() { if (!RegisterGlobalGraphics()) return false; // update group set if (!RegisterMainGroups()) { LogFatal(LoadResStr("IDS_ERR_GFX_REGISTERMAIN")); return false; } #ifndef USE_CONSOLE // Pre-load all shader files Files.PreCacheEntries(C4CFN_ShaderFiles); if (!pGL->InitShaders(&Files)) { LogFatal(LoadResStr("IDS_ERR_GFX_INITSHADERS")); return false; } #endif Game.SetInitProgress(11.0f); ProgressStart = 12.0f; ProgressIncrement = 0.35f; // TODO: This should be changed so that it stops at 25%, no matter how many graphics we load. // The progress bar is the only graphic besides the background that is // used during startup, so load it early if (!LoadFile(fctProgressBar, "GUIProgress", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; fctProgressBar.Set(fctProgressBar.Surface, 1,0, fctProgressBar.Wdt-2, fctProgressBar.Hgt); if (!InitFonts()) return false; // load GUI files if (!LoadFile(sfcCaption, "GUICaption", Files, idSfcCaption, 0)) return false; barCaption.SetHorizontal(sfcCaption, sfcCaption.Hgt, 32); if (!LoadFile(sfcButton, "GUIButton", Files, idSfcButton, 0)) return false; barButton.SetHorizontal(sfcButton); if (!LoadFile(sfcButtonD, "GUIButtonDown", Files, idSfcButtonD, 0)) return false; barButtonD.SetHorizontal(sfcButtonD); if (!LoadFile(fctButtonHighlight, "GUIButtonHighlight", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; if (!LoadFile(fctButtonHighlightRound, "GUIButtonHighlightRound", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; if (!LoadFile(fctIcons, "GUIIcons", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; fctIcons.Set(fctIcons.Surface,0,0,C4GUI_IconWdt,C4GUI_IconHgt); if (!LoadFile(fctIconsEx, "GUIIcons2", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; fctIconsEx.Set(fctIconsEx.Surface,0,0,C4GUI_IconExWdt,C4GUI_IconExHgt); if (!LoadFile(sfcScroll, "GUIScroll", Files, idSfcScroll, 0)) return false; sfctScroll.Set(C4Facet(&sfcScroll,0,0,32,32)); if (!LoadFile(sfcContext, "GUIContext", Files, idSfcContext, 0)) return false; fctContext.Set(&sfcContext,0,0,16,16); if (!LoadFile(fctSubmenu, "GUISubmenu", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; if (!LoadFile(fctCheckbox, "GUICheckbox", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; fctCheckbox.Set(fctCheckbox.Surface, 0,0,fctCheckbox.Hgt,fctCheckbox.Hgt); if (!LoadFile(fctBigArrows, "GUIBigArrows", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; fctBigArrows.Set(fctBigArrows.Surface, 0,0, fctBigArrows.Wdt/4, fctBigArrows.Hgt); // Control if (!LoadFile(sfcControl, "Control", Files, idSfcControl, 0)) return false; fctKeyboard.Set(&sfcControl,0,0,80,36); fctCommand.Set(&sfcControl,0,36,32,32); fctKey.Set(&sfcControl,0,100,64,64); fctOKCancel.Set(&sfcControl,128,100,32,32); fctMouse.Set(&sfcControl,198,100,32,32); // Clonk style selection if (!LoadFile(sfcClonkSkins, "ClonkSkins", Files, idSfcClonkSkins, 0)) return false; fctClonkSkin.Set(&sfcClonkSkins,0,0,64,64); // Facet bitmap resources if (!LoadFile(fctFire, "Fire", Files, C4FCT_Height, C4FCT_Full, false, 0)) return false; if (!LoadFile(fctBackground, "Background", Files, C4FCT_Full, C4FCT_Full, false, C4SF_Tileable)) return false; // tileable if (!LoadFile(fctFlag, "Flag", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; // (new format) if (!LoadFile(fctCrew, "Crew", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; // (new format) if (!LoadFile(fctWealth, "Wealth", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; // (new) if (!LoadFile(fctPlayer, "Player", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; // (new format) if (!LoadFile(fctRank, "Rank", Files, C4FCT_Height, C4FCT_Full, false, 0)) return false; if (!LoadFile(fctCaptain, "Captain", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; if (!LoadCursorGfx()) return false; if (!LoadFile(fctSelectMark, "SelectMark", Files, C4FCT_Height, C4FCT_Full, false, 0)) return false; if (!LoadFile(fctMenu, "Menu", Files, 35, 35, false, 0)) return false; if (!LoadFile(fctLogo, "Logo", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; if (!LoadFile(fctConstruction,"Construction", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; // (new) if (!LoadFile(fctEnergy, "Energy", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; // (new) if (!LoadFile(fctOptions, "Options", Files, C4FCT_Height, C4FCT_Full, false, 0)) return false; if (!LoadFile(fctUpperBoard, "UpperBoard", Files, C4FCT_Full, C4FCT_Full, false, C4SF_Tileable)) return false; // tileable if (!LoadFile(fctArrow, "Arrow", Files, C4FCT_Height, C4FCT_Full, false, 0)) return false; if (!LoadFile(fctExit, "Exit", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; if (!LoadFile(fctHand, "Hand", Files, C4FCT_Height, C4FCT_Full, false, 0)) return false; if (!LoadFile(fctGamepad, "Gamepad", Files, 80, C4FCT_Full, false, 0)) return false; if (!LoadFile(fctBuild, "Build", Files, C4FCT_Full, C4FCT_Full, false, 0)) return false; // achievements if (!Achievements.Init(Files)) return false; // create ColorByOwner overlay surfaces if (fctCrew.idSourceGroup != fctCrewClr.idSourceGroup) { if (!fctCrewClr.CreateClrByOwner(fctCrew.Surface)) { LogFatal("ClrByOwner error! (1)"); return false; } fctCrewClr.Wdt=fctCrew.Wdt; fctCrewClr.Hgt=fctCrew.Hgt; fctCrewClr.idSourceGroup = fctCrew.idSourceGroup; } if (fctFlag.idSourceGroup != fctFlagClr.idSourceGroup) { if (!fctFlagClr.CreateClrByOwner(fctFlag.Surface)) { LogFatal("ClrByOwner error! (1)"); return false; } fctFlagClr.Wdt=fctFlag.Wdt; fctFlagClr.Hgt=fctFlag.Hgt; fctFlagClr.idSourceGroup = fctFlag.idSourceGroup; } if (fctPlayer.idSourceGroup != fctPlayerClr.idSourceGroup) { if (!fctPlayerClr.CreateClrByOwner(fctPlayer.Surface)) { LogFatal("ClrByOwner error! (1)"); return false; } fctPlayerClr.Wdt=fctPlayer.Wdt; fctPlayerClr.Hgt=fctPlayer.Hgt; fctPlayerClr.idSourceGroup = fctPlayer.idSourceGroup; } // get number of ranks int32_t Q; fctRank.GetPhaseNum(iNumRanks, Q); if (!iNumRanks) iNumRanks=1; // CloseFiles() must not be called now: // The sky still needs to be loaded from the global graphics // group in C4Game::InitGame -> C4Sky::Init so we need to keep the group(s) open. // In activated NETWORK2, the files mustn't be closed either, because there will be // multiple calls to this function to allow overloadings // mark initialized fInitialized = true; return true; }