| 33 | } |
| 34 | |
| 35 | void CPickup::Tick() |
| 36 | { |
| 37 | Move(); |
| 38 | |
| 39 | // Check if a player intersected us |
| 40 | CEntity *apEnts[MAX_CLIENTS]; |
| 41 | int Num = GameWorld()->FindEntities(m_Pos, GetProximityRadius() + ms_CollisionExtraSize, apEnts, MAX_CLIENTS, CGameWorld::ENTTYPE_CHARACTER); |
| 42 | for(int i = 0; i < Num; ++i) |
| 43 | { |
| 44 | auto *pChr = static_cast<CCharacter *>(apEnts[i]); |
| 45 | |
| 46 | if(pChr && pChr->IsAlive()) |
| 47 | { |
| 48 | if(m_Layer == LAYER_SWITCH && m_Number > 0 && !Switchers()[m_Number].m_aStatus[pChr->Team()]) |
| 49 | continue; |
| 50 | bool Sound = false; |
| 51 | // player picked us up, is someone was hooking us, let them go |
| 52 | switch(m_Type) |
| 53 | { |
| 54 | case POWERUP_HEALTH: |
| 55 | if(pChr->Freeze()) |
| 56 | GameServer()->CreateSound(m_Pos, SOUND_PICKUP_HEALTH, pChr->TeamMask()); |
| 57 | break; |
| 58 | |
| 59 | case POWERUP_ARMOR: |
| 60 | if(pChr->Team() == TEAM_SUPER) |
| 61 | continue; |
| 62 | for(int j = WEAPON_SHOTGUN; j < NUM_WEAPONS; j++) |
| 63 | { |
| 64 | if(pChr->GetWeaponGot(j)) |
| 65 | { |
| 66 | pChr->SetWeaponGot(j, false); |
| 67 | pChr->SetWeaponAmmo(j, 0); |
| 68 | Sound = true; |
| 69 | } |
| 70 | } |
| 71 | pChr->SetNinjaActivationDir(vec2(0, 0)); |
| 72 | pChr->SetNinjaActivationTick(-500); |
| 73 | pChr->SetNinjaCurrentMoveTime(0); |
| 74 | if(Sound) |
| 75 | { |
| 76 | pChr->SetLastWeapon(WEAPON_GUN); |
| 77 | GameServer()->CreateSound(m_Pos, SOUND_PICKUP_ARMOR, pChr->TeamMask()); |
| 78 | } |
| 79 | if(pChr->GetActiveWeapon() >= WEAPON_SHOTGUN) |
| 80 | pChr->SetActiveWeapon(WEAPON_HAMMER); |
| 81 | break; |
| 82 | |
| 83 | case POWERUP_ARMOR_SHOTGUN: |
| 84 | if(pChr->Team() == TEAM_SUPER) |
| 85 | continue; |
| 86 | if(pChr->GetWeaponGot(WEAPON_SHOTGUN)) |
| 87 | { |
| 88 | pChr->SetWeaponGot(WEAPON_SHOTGUN, false); |
| 89 | pChr->SetWeaponAmmo(WEAPON_SHOTGUN, 0); |
| 90 | pChr->SetLastWeapon(WEAPON_GUN); |
| 91 | GameServer()->CreateSound(m_Pos, SOUND_PICKUP_ARMOR, pChr->TeamMask()); |
| 92 | } |
no test coverage detected