MCPcopy Create free account
hub / github.com/ddnet/ddnet / LoadSkinPart

Method LoadSkinPart

src/game/client/components/skins7.cpp:121–169  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

119}
120
121bool CSkins7::LoadSkinPart(int PartType, const char *pName, int DirType)
122{
123 size_t PartNameSize, PartNameCount;
124 str_utf8_stats(pName, str_length(pName) - str_length(".png") + 1, IO_MAX_PATH_LENGTH, &PartNameSize, &PartNameCount);
125 if(PartNameSize >= protocol7::MAX_SKIN_ARRAY_SIZE || PartNameCount > protocol7::MAX_SKIN_LENGTH)
126 {
127 log_error("skins7", "Failed to load skin part '%s/%s': name too long", CSkins7::ms_apSkinPartNames[PartType], pName);
128 return false;
129 }
130
131 char aFilename[IO_MAX_PATH_LENGTH];
132 str_format(aFilename, sizeof(aFilename), SKINS_DIR "/%s/%s", CSkins7::ms_apSkinPartNames[PartType], pName);
133 CImageInfo Info;
134 if(!Graphics()->LoadPng(Info, aFilename, DirType))
135 {
136 log_error("skins7", "Failed to load skin part '%s/%s': failed to load PNG file", CSkins7::ms_apSkinPartNames[PartType], pName);
137 return false;
138 }
139 if(!Graphics()->IsImageFormatRgba(aFilename, Info))
140 {
141 log_error("skins7", "Failed to load skin part '%s/%s': must be RGBA format", CSkins7::ms_apSkinPartNames[PartType], pName);
142 Info.Free();
143 return false;
144 }
145
146 CSkinPart Part;
147 Part.m_Type = PartType;
148 Part.m_Flags = 0;
149 if(IsSpecialSkin(pName))
150 {
151 Part.m_Flags |= SKINFLAG_SPECIAL;
152 }
153 if(DirType != IStorage::TYPE_SAVE)
154 {
155 Part.m_Flags |= SKINFLAG_STANDARD;
156 }
157 str_copy(Part.m_aName, pName, minimum<int>(PartNameSize + 1, sizeof(Part.m_aName)));
158 Part.m_OriginalTexture = Graphics()->LoadTextureRaw(Info, 0, aFilename);
159 Part.m_BloodColor = DetermineBloodColor(Part.m_Type, Info);
160 ConvertToGrayscale(Info);
161 Part.m_ColorableTexture = Graphics()->LoadTextureRawMove(Info, 0, aFilename);
162
163 if(Config()->m_Debug)
164 {
165 log_trace("skins7", "Loaded skin part '%s/%s'", CSkins7::ms_apSkinPartNames[PartType], Part.m_aName);
166 }
167 m_avSkinParts[PartType].emplace_back(Part);
168 return true;
169}
170
171class CSkinScanData
172{

Callers 1

SkinPartScanMethod · 0.80

Calls 13

str_utf8_statsFunction · 0.85
str_lengthFunction · 0.85
str_formatFunction · 0.85
GraphicsFunction · 0.85
DetermineBloodColorFunction · 0.85
ConvertToGrayscaleFunction · 0.85
IsImageFormatRgbaMethod · 0.80
LoadTextureRawMethod · 0.80
LoadTextureRawMoveMethod · 0.80
str_copyFunction · 0.50
ConfigFunction · 0.50
LoadPngMethod · 0.45

Tested by

no test coverage detected