Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Entit iteracja odwrócona
#1
Ostatnio zainteresowałem się odwróceniem sposobu, w jaki silnik przechowuje obiekty i jak je iteruje.   Poniższe funkcje zachowują się dokładnie tak samo jak silniki, z wyjątkiem tego, że używam std :: vector do przechowywania elementów zamiast iteratora silnika.   To działało przez ostatnie aktualizacje bez żadnych zmian, możesz zdecydować czy używać wirtualnych CreateActorIterator i GetEntity, czy też trochę zrozumieć, jak działają. Może to pomóc w znalezieniu tych funkcji w przyszłych aktualizacjach.           Kod:   IEntity * GetEntity (Identyfikator EntityId) {IEntity * pEnt = NULL; uint32 max_used = * (WORD *) ((DWORD) to + 0x400C2); uint32 dwI = (ID i (max_used> = ID | - (max_used> = ID))); pEnt = (IEntity *) * (DWORD *) (* (DWORD *) ((DWORD) to + 0x5C) + 4 * dwI); if (! pEnt || pEnt -> EntityID! = ID) pEnt = NULL; return pEnt; } Void CreateEntityIterator (wektor <IEntity *> i pEntity_pool) {uint32 max_used = * (WORD *) ((DWORD) to + 0x400C2); bool v3 = max_used == - 1; max_used ++; if (! v3) {for (uint32 dwI = 0; dwI <max_used; ++ dwI) {IEntity * pEnt = (IEntity *) (* (DWORD *) (* (DWORD *) ((DWORD) to + 0x5C) + 4 * dwI)); jeśli (! pEnt) kontynuować; pEntity_pool. push_back (pEnt); }}} Void CreateEntityIteratorByClass (wektor <IEntity *> i pEntity_pool, char * szClass) {uint32 max_used = * (WORD *) ((DWORD) to + 0x400C2); bool v3 = max_used == - 1; max_used ++; if (! v3) {for (uint32 dwI = 0; dwI <max_used; ++ dwI) {IEntity * pEnt = (IEntity *) (* (DWORD *) (* (DWORD *) ((DWORD) to + 0x5C) + 4 * dwI)); jeśli (! pEnt ||! pEnt -> pEntityClass) będzie kontynuowane; if (! strcmp (pEnt -> pEntityClass -> GetName (), szClass)) pEntity_pool. push_back (pEnt); }}}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)