@@ -160,7 +160,7 @@ void CCollisionManager::OnNetworkedEntityCreated(object oEntity)
160
160
void CCollisionManager::OnNetworkedEntityDeleted (CBaseEntity *pEntity)
161
161
{
162
162
FOR_EACH_VEC (m_vecRules, i) {
163
- m_vecRules[i]->OnEntityDeleted (( void *) pEntity);
163
+ m_vecRules[i]->OnEntityDeleted (pEntity);
164
164
}
165
165
}
166
166
@@ -422,14 +422,14 @@ bool CCollisionManager::ShouldHitEntity(IHandleEntity *pHandleEntity, int conten
422
422
}
423
423
424
424
FOR_EACH_VEC (pManager->m_vecRules , i) {
425
- if (!pManager->m_vecRules [i]->ShouldHitEntity ((void *)scope.m_pFilter ->m_pPassEnt , (void *)pHandleEntity)) {
425
+ if (!pManager->m_vecRules [i]->ShouldHitEntity ((CBaseEntity *)scope.m_pFilter ->m_pPassEnt , (CBaseEntity *)pHandleEntity)) {
426
426
scope.m_pCache ->SetResult (uiIndex, false );
427
427
return false ;
428
428
}
429
429
}
430
430
431
431
if (scope.m_bIsPlayer ) {
432
- static CPlayerCollisionListenerManager *OnPlayerCollision = GetOnPlayerCollisionListenerManager ();
432
+ static CCollisionListenerManager *OnPlayerCollision = GetOnPlayerCollisionListenerManager ();
433
433
if (!OnPlayerCollision->GetCount ()) {
434
434
scope.m_pCache ->SetResult (uiIndex, true );
435
435
return true ;
@@ -451,7 +451,7 @@ bool CCollisionManager::ShouldHitEntity(IHandleEntity *pHandleEntity, int conten
451
451
return true ;
452
452
}
453
453
454
- static CEntityCollisionListenerManager *OnEntityCollision = GetOnEntityCollisionListenerManager ();
454
+ static CCollisionListenerManager *OnEntityCollision = GetOnEntityCollisionListenerManager ();
455
455
if (!OnEntityCollision->GetCount ()) {
456
456
scope.m_pCache ->SetResult (uiIndex, true );
457
457
return true ;
@@ -563,78 +563,146 @@ CCollisionHash::~CCollisionHash()
563
563
physics->DestroyObjectPairHash (m_pHash);
564
564
}
565
565
566
- void CCollisionHash::OnEntityDeleted (void *pEntity)
566
+ void CCollisionHash::OnEntityDeleted (CBaseEntity *pEntity)
567
567
{
568
568
RemovePairs (pEntity);
569
569
}
570
570
571
- bool CCollisionHash::ShouldHitEntity (void *pEntity, void *pOther)
571
+ bool CCollisionHash::ShouldHitEntity (CBaseEntity *pEntity, CBaseEntity *pOther)
572
572
{
573
573
return !HasPair (pEntity, pOther);
574
574
}
575
575
576
- void CCollisionHash::AddPair (void *pEntity, void *pOther)
576
+ void CCollisionHash::AddPair (CBaseEntityWrapper *pEntity, CBaseEntityWrapper *pOther)
577
577
{
578
- if (!IsValidNetworkedEntityPointer ( pEntity) || !IsValidNetworkedEntityPointer ( pOther)) {
578
+ if (!pEntity-> IsNetworked ( ) || !pOther-> IsNetworked ( )) {
579
579
BOOST_RAISE_EXCEPTION (
580
580
PyExc_ValueError,
581
- " Given entity pointer invalid or not networked."
581
+ " Given entity is not networked."
582
582
)
583
583
}
584
584
585
585
m_pHash->AddObjectPair (pEntity, pOther);
586
586
}
587
587
588
- void CCollisionHash::RemovePair (void *pEntity , void *pOther)
588
+ void CCollisionHash::RemovePair (void *pObject , void *pOther)
589
589
{
590
- m_pHash->RemoveObjectPair (pEntity , pOther);
590
+ m_pHash->RemoveObjectPair (pObject , pOther);
591
591
}
592
592
593
- void CCollisionHash::RemovePairs (void *pEntity )
593
+ void CCollisionHash::RemovePairs (void *pObject )
594
594
{
595
- m_pHash->RemoveAllPairsForObject (pEntity );
595
+ m_pHash->RemoveAllPairsForObject (pObject );
596
596
}
597
597
598
- bool CCollisionHash::Contains (void *pEntity )
598
+ bool CCollisionHash::Contains (void *pObject )
599
599
{
600
- return m_pHash->IsObjectInHash (pEntity );
600
+ return m_pHash->IsObjectInHash (pObject );
601
601
}
602
602
603
- bool CCollisionHash::HasPair (void *pEntity , void *pOther)
603
+ bool CCollisionHash::HasPair (void *pObject , void *pOther)
604
604
{
605
- return m_pHash->IsObjectPairInHash (pEntity , pOther);
605
+ return m_pHash->IsObjectPairInHash (pObject , pOther);
606
606
}
607
607
608
- int CCollisionHash::GetCount (void *pEntity )
608
+ int CCollisionHash::GetCount (void *pObject )
609
609
{
610
- return m_pHash->GetPairCountForObject (pEntity );
610
+ return m_pHash->GetPairCountForObject (pObject );
611
611
}
612
612
613
- list CCollisionHash::GetPairs (void *pEntity )
613
+ list CCollisionHash::GetPairs (void *pObject )
614
614
{
615
- list oEntities ;
616
- int nCount = m_pHash->GetPairCountForObject (pEntity );
615
+ list oObjects ;
616
+ int nCount = m_pHash->GetPairCountForObject (pObject );
617
617
618
618
if (!nCount) {
619
- return oEntities ;
619
+ return oObjects ;
620
620
}
621
621
622
- void **ppEntities = (void **)stackalloc (nCount * sizeof (void *));
623
- m_pHash->GetPairListForObject (pEntity , nCount, ppEntities );
622
+ void **ppObjects = (void **)stackalloc (nCount * sizeof (void *));
623
+ m_pHash->GetPairListForObject (pObject , nCount, ppObjects );
624
624
625
625
for (int i = 0 ; i < nCount; ++i) {
626
- pEntity = ppEntities [i];
627
- if (!pEntity ) {
626
+ pObject = ppObjects [i];
627
+ if (!pObject ) {
628
628
continue ;
629
629
}
630
630
631
- oEntities .append (pEntity );
631
+ oObjects .append (pObject );
632
632
}
633
633
634
- return oEntities ;
634
+ return oObjects ;
635
635
}
636
636
637
637
638
+ // -----------------------------------------------------------------------------
639
+ // CCollisionSet class.
640
+ // -----------------------------------------------------------------------------
641
+ void CCollisionSet::Add (CBaseEntityWrapper *pEntity)
642
+ {
643
+ if (Contains (pEntity)) {
644
+ return ;
645
+ }
646
+
647
+ if (!pEntity->IsNetworked ()) {
648
+ BOOST_RAISE_EXCEPTION (
649
+ PyExc_ValueError,
650
+ " Given entity is not networked."
651
+ )
652
+ }
653
+
654
+ m_pSet.insert (pEntity);
655
+ }
656
+
657
+ void CCollisionSet::Remove (void *pObject)
658
+ {
659
+ m_pSet.erase (pObject);
660
+ }
661
+
662
+ bool CCollisionSet::Contains (void *pObject)
663
+ {
664
+ return m_pSet.find (pObject) != m_pSet.end ();
665
+ }
666
+
667
+ void CCollisionSet::Clear (void *pObject)
668
+ {
669
+ m_pSet.clear ();
670
+ }
671
+
672
+ unsigned int CCollisionSet::GetSize ()
673
+ {
674
+ return m_pSet.size ();
675
+ }
676
+
677
+ bool CCollisionSet::HasElements ()
678
+ {
679
+ return !m_pSet.empty ();
680
+ }
681
+
682
+ object CCollisionSet::Iterate ()
683
+ {
684
+ list oElements;
685
+
686
+ if (HasElements ()) {
687
+ for (boost::unordered_set<void *>::const_iterator it = m_pSet.begin (); it != m_pSet.end (); it++) {
688
+ oElements.append (*it);
689
+ }
690
+ }
691
+
692
+ return oElements.attr (" __iter__" )();
693
+ }
694
+
695
+ void CCollisionSet::OnEntityDeleted (CBaseEntity *pEntity)
696
+ {
697
+ Remove (pEntity);
698
+ };
699
+
700
+ bool CCollisionSet::ShouldHitEntity (CBaseEntity *pEntity, CBaseEntity *pOther)
701
+ {
702
+ return !(Contains (pEntity) || Contains (pOther));
703
+ };
704
+
705
+
638
706
// -----------------------------------------------------------------------------
639
707
// CCollisionListenerManager class.
640
708
// -----------------------------------------------------------------------------
@@ -682,20 +750,16 @@ bool CCollisionListenerManager::CallCallbacks(object oEntity, object oOther)
682
750
683
751
684
752
// -----------------------------------------------------------------------------
685
- // CEntityCollisionListenerManager singleton accessor .
753
+ // Singleton accessors .
686
754
// -----------------------------------------------------------------------------
687
- static CEntityCollisionListenerManager s_OnEntityCollision;
688
- CEntityCollisionListenerManager *GetOnEntityCollisionListenerManager ()
755
+ static CCollisionListenerManager s_OnEntityCollision;
756
+ CCollisionListenerManager *GetOnEntityCollisionListenerManager ()
689
757
{
690
758
return &s_OnEntityCollision;
691
759
}
692
760
693
-
694
- // -----------------------------------------------------------------------------
695
- // CPlayerCollisionListenerManager singleton accessor.
696
- // -----------------------------------------------------------------------------
697
- static CPlayerCollisionListenerManager s_OnPlayerCollision;
698
- CPlayerCollisionListenerManager *GetOnPlayerCollisionListenerManager ()
761
+ static CCollisionListenerManager s_OnPlayerCollision;
762
+ CCollisionListenerManager *GetOnPlayerCollisionListenerManager ()
699
763
{
700
764
return &s_OnPlayerCollision;
701
765
}
0 commit comments