void CSingularity::Suck() { float Len; CCharacter *p = (CCharacter *)GameServer()->m_World.FindFirst(CGameWorld::ENTTYPE_CHARACTER); for(; p; p = (CCharacter *)p->TypeNext()) { if(!p || !p->IsAlive()) continue; Len = distance(m_Pos, p->m_Pos); if(Len < m_KillRange) { if(m_Owner > -1) p->Die(m_Owner,WEAPON_RIFLE); else p->Die(p->GetPlayer()->GetCID(),WEAPON_WORLD); } else if(Len < m_Range) p->SetVel(p->GetVel() + (normalize(m_Pos - p->m_Pos) * exp((m_Range - Len)/(m_Range/2.5f)))); } // save CPU for projectiles if(m_SkipTick) return; CProjectile *s = (CProjectile *)GameServer()->m_World.FindFirst(CGameWorld::ENTTYPE_PROJECTILE); for(; s; s = (CProjectile *)s->TypeNext()) { if(!s) continue; Len = distance(m_Pos, s->m_Pos); if(Len < m_Range*1.5) s->SetVel(s->GetVel() + ((normalize(m_Pos - s->m_Pos) * exp((m_Range*1.5 - Len)/(m_Range*0.6f)))*0.04f)); } }