| 404 | CBulletManager::UpdateWorkload(); |
| 405 | } |
| 406 | void CBulletManager::CommitEvents() // @ the start of frame |
| 407 | { |
| 408 | for (auto& E : m_Events) |
| 409 | { |
| 410 | switch (E.Type) |
| 411 | { |
| 412 | case EVENT_HIT: { |
| 413 | if (E.dynamic) |
| 414 | DynamicObjectHit(E); |
| 415 | else |
| 416 | StaticObjectHit(E); |
| 417 | if (E.bullet.isOnBulletHit()) |
| 418 | { |
| 419 | CObject* O = Level().Objects.net_Find(E.bullet.weapon_id); |
| 420 | if (O) |
| 421 | { |
| 422 | CWeapon* W = smart_cast<CWeapon*>(O); |
| 423 | if (W) |
| 424 | W->OnBulletHit(); |
| 425 | } |
| 426 | } |
| 427 | } |
| 428 | break; |
| 429 | case EVENT_REMOVE: { |
| 430 | m_Bullets[E.tgt_material] = m_Bullets.back(); |
| 431 | m_Bullets.pop_back(); |
| 432 | } |
| 433 | break; |
| 434 | } |
| 435 | } |
| 436 | m_Events.clear(); |
| 437 | |
| 438 | if (m_Bullets.empty()) |
| 439 | m_dwTimeRemainder = 0; |
| 440 | } |
| 441 | |
| 442 | void CBulletManager::RegisterEvent(EventType Type, BOOL _dynamic, SBullet* bullet, const Fvector& end_point, collide::rq_result& R, u16 tgt_material) |
| 443 | { |
no test coverage detected