| 451 | } |
| 452 | |
| 453 | void CSkins::LoadSkinDirect(const char *pName) |
| 454 | { |
| 455 | if(m_Skins.contains(pName)) |
| 456 | { |
| 457 | return; |
| 458 | } |
| 459 | CSkinContainer SkinContainer(this, pName, CSkinContainer::EType::LOCAL, IStorage::TYPE_ALL); |
| 460 | auto &&pSkinContainer = std::make_unique<CSkinContainer>(std::move(SkinContainer)); |
| 461 | pSkinContainer->SetState(pSkinContainer->DetermineInitialState()); |
| 462 | const auto &[SkinIt, _] = m_Skins.insert({pSkinContainer->Name(), std::move(pSkinContainer)}); |
| 463 | |
| 464 | char aPath[IO_MAX_PATH_LENGTH]; |
| 465 | str_format(aPath, sizeof(aPath), "skins/%s.png", pName); |
| 466 | CSkinLoadData DefaultSkinData; |
| 467 | SkinIt->second->SetState(CSkinContainer::EState::LOADING); |
| 468 | if(!Graphics()->LoadPng(DefaultSkinData.m_Info, aPath, SkinIt->second->StorageType())) |
| 469 | { |
| 470 | log_error("skins", "Failed to load PNG of skin '%s' from '%s'", pName, aPath); |
| 471 | SkinIt->second->SetState(CSkinContainer::EState::ERROR); |
| 472 | } |
| 473 | else if(LoadSkinData(pName, DefaultSkinData)) |
| 474 | { |
| 475 | LoadSkinFinish(SkinIt->second.get(), DefaultSkinData); |
| 476 | } |
| 477 | else |
| 478 | { |
| 479 | SkinIt->second->SetState(CSkinContainer::EState::ERROR); |
| 480 | } |
| 481 | DefaultSkinData.m_Info.Free(); |
| 482 | DefaultSkinData.m_InfoGrayscale.Free(); |
| 483 | } |
| 484 | |
| 485 | void CSkins::OnConsoleInit() |
| 486 | { |
nothing calls this directly
no test coverage detected