Начинающий
-
Автор темы
- #1
Как должна выглядеть нормальная система партиклей?
Тоесть у своем ранфрейм хуке у меня идёт такая херня:
Не могу придумать, как сделать так, чтобы можно было иметь два одинаковых партикля.
Кружочок радиуса 1200
Кружочок радиуса 250
Если я уберу
то там будет пиздец и у меня будет создавать дохрена кругов вокруг героя
Тоесть у своем ранфрейм хуке у меня идёт такая херня:
C++:
class PARTICLEMANAGER::Particle
{
const char* name;
UINT32 handle;
UINT32 pad = 0;
C_BaseEntity* entity;
}
PARTICLEMANAGER::Particle* PARTICLEMANAGER::GetParticle(const char* _name, C_BaseEntity* _entity)
{
for (auto& particle : ParticleContainer)
{
if (particle->entity == _entity && !strcmp(particle->name, _name))
{
return particle;
}
}
return nullptr;
}
bool PARTICLEMANAGER::CanCreateNewParticle(const char* _name, C_BaseEntity* _entity)
{
for (auto& particle : ParticleContainer)
{
if (particle->entity == _entity && !strcmp(particle->name, _name))
{
return false;
}
}
return true;
}
PARTICLEMANAGER::Particle* PARTICLEMANAGER::CreateParticle(const char* _name, ParticleAttachment_t type, C_BaseEntity* _entity)
{
if (!CanCreateNewParticle(_name, _entity))
{
return GetParticle(_name,_entity);
}
ParticleStruct structure{ _name,type,_entity };
Particle* particle = new Particle(_name, _entity);
//if(oCreateParticle)
//oCreateParticle(ParticleManager, particle->handle, &structure);
//Msg("fnCreateParticle %p\n",fnCreateParticle);
if (!oCreateParticle)
{
oCreateParticle = (_CreateParticle)VT_METHOD(ParticleManager, 7);
}
oCreateParticle(ParticleManager, particle->handle, &structure);
//ParticleManager->fnCreateParticle(particle->handle, &structure);
IncHandle();
ParticleContainer.push_back(particle);
return particle;
}
PARTICLEMANAGER::Particle* CreateCircle(C_BaseEntity* _entity, float _range, VECTOR color = {255,25,25 })
{
auto particle = CreateParticle(ParticleNames.ring, ParticleAttachment_t::PATTACH_ABSORIGIN_FOLLOW, _entity);
if (particle)
{
VECTOR range = {_range,255,0 };
particle->SetControlPoint(ControlPoint_t::Color, color);
particle->SetControlPoint(ControlPoint_t::Radius, range);
return particle;
}
return nullptr;
}
if (entity->IsLocalHero())
{
if (entity->HasItem("item_blink") || entity->HasItem("item_arcane_blink") || entity->HasItem("item_overwhelming_blink"))
{
ParticleManager->CreateCircle(entity, 1200, { 1,255,0 });
}
else
{
ParticleManager->DestroyParticle(ParticleManager->GetHandleForParticle(entity, ParticleNames.ring));
}
}
Кружочок радиуса 1200
Кружочок радиуса 250
Если я уберу
C++:
if (!CanCreateNewParticle(_name, _entity))
{
return GetParticle(_name,_entity);
}