| 4247 | } |
| 4248 | |
| 4249 | void CGameClient::LoadParticlesSkin(const char *pPath, bool AsDir) |
| 4250 | { |
| 4251 | if(m_ParticlesSkinLoaded) |
| 4252 | { |
| 4253 | Graphics()->UnloadTexture(&m_ParticlesSkin.m_SpriteParticleSlice); |
| 4254 | Graphics()->UnloadTexture(&m_ParticlesSkin.m_SpriteParticleBall); |
| 4255 | for(auto &SpriteParticleSplat : m_ParticlesSkin.m_aSpriteParticleSplat) |
| 4256 | Graphics()->UnloadTexture(&SpriteParticleSplat); |
| 4257 | Graphics()->UnloadTexture(&m_ParticlesSkin.m_SpriteParticleSmoke); |
| 4258 | Graphics()->UnloadTexture(&m_ParticlesSkin.m_SpriteParticleShell); |
| 4259 | Graphics()->UnloadTexture(&m_ParticlesSkin.m_SpriteParticleExpl); |
| 4260 | Graphics()->UnloadTexture(&m_ParticlesSkin.m_SpriteParticleAirJump); |
| 4261 | Graphics()->UnloadTexture(&m_ParticlesSkin.m_SpriteParticleHit); |
| 4262 | |
| 4263 | for(auto &SpriteParticle : m_ParticlesSkin.m_aSpriteParticles) |
| 4264 | SpriteParticle = IGraphics::CTextureHandle(); |
| 4265 | |
| 4266 | m_ParticlesSkinLoaded = false; |
| 4267 | } |
| 4268 | |
| 4269 | char aPath[IO_MAX_PATH_LENGTH]; |
| 4270 | bool IsDefault = false; |
| 4271 | if(str_comp(pPath, "default") == 0) |
| 4272 | { |
| 4273 | str_copy(aPath, g_pData->m_aImages[IMAGE_PARTICLES].m_pFilename); |
| 4274 | IsDefault = true; |
| 4275 | } |
| 4276 | else |
| 4277 | { |
| 4278 | if(AsDir) |
| 4279 | str_format(aPath, sizeof(aPath), "assets/particles/%s/%s", pPath, g_pData->m_aImages[IMAGE_PARTICLES].m_pFilename); |
| 4280 | else |
| 4281 | str_format(aPath, sizeof(aPath), "assets/particles/%s.png", pPath); |
| 4282 | } |
| 4283 | |
| 4284 | CImageInfo ImgInfo; |
| 4285 | bool PngLoaded = Graphics()->LoadPng(ImgInfo, aPath, IStorage::TYPE_ALL); |
| 4286 | if(!PngLoaded && !IsDefault) |
| 4287 | { |
| 4288 | if(AsDir) |
| 4289 | LoadParticlesSkin("default"); |
| 4290 | else |
| 4291 | LoadParticlesSkin(pPath, true); |
| 4292 | } |
| 4293 | else if(PngLoaded && Graphics()->CheckImageDivisibility(aPath, ImgInfo, g_pData->m_aSprites[SPRITE_PART_SLICE].m_pSet->m_Gridx, g_pData->m_aSprites[SPRITE_PART_SLICE].m_pSet->m_Gridy, true) && Graphics()->IsImageFormatRgba(aPath, ImgInfo)) |
| 4294 | { |
| 4295 | m_ParticlesSkin.m_SpriteParticleSlice = Graphics()->LoadSpriteTexture(ImgInfo, &g_pData->m_aSprites[SPRITE_PART_SLICE]); |
| 4296 | m_ParticlesSkin.m_SpriteParticleBall = Graphics()->LoadSpriteTexture(ImgInfo, &g_pData->m_aSprites[SPRITE_PART_BALL]); |
| 4297 | for(int i = 0; i < 3; ++i) |
| 4298 | m_ParticlesSkin.m_aSpriteParticleSplat[i] = Graphics()->LoadSpriteTexture(ImgInfo, &g_pData->m_aSprites[SPRITE_PART_SPLAT01 + i]); |
| 4299 | m_ParticlesSkin.m_SpriteParticleSmoke = Graphics()->LoadSpriteTexture(ImgInfo, &g_pData->m_aSprites[SPRITE_PART_SMOKE]); |
| 4300 | m_ParticlesSkin.m_SpriteParticleShell = Graphics()->LoadSpriteTexture(ImgInfo, &g_pData->m_aSprites[SPRITE_PART_SHELL]); |
| 4301 | m_ParticlesSkin.m_SpriteParticleExpl = Graphics()->LoadSpriteTexture(ImgInfo, &g_pData->m_aSprites[SPRITE_PART_EXPL01]); |
| 4302 | m_ParticlesSkin.m_SpriteParticleAirJump = Graphics()->LoadSpriteTexture(ImgInfo, &g_pData->m_aSprites[SPRITE_PART_AIRJUMP]); |
| 4303 | m_ParticlesSkin.m_SpriteParticleHit = Graphics()->LoadSpriteTexture(ImgInfo, &g_pData->m_aSprites[SPRITE_PART_HIT01]); |
| 4304 | |
| 4305 | m_ParticlesSkin.m_aSpriteParticles[0] = m_ParticlesSkin.m_SpriteParticleSlice; |
| 4306 | m_ParticlesSkin.m_aSpriteParticles[1] = m_ParticlesSkin.m_SpriteParticleBall; |
no test coverage detected