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); }}}
Thread Rating:
Entit iteracja odwrócona
|
« Next Oldest | Next Newest »
|
Users browsing this thread: 1 Guest(s)