CEntity * CCameraSA::GetTargetEntity ( void ) { CEntitySAInterface * pInterface = this->GetInterface()->pTargetEntity; CPoolsSA * pPools = ((CPoolsSA *)pGame->GetPools()); CEntity * pReturn = NULL; if ( pPools && pInterface ) { switch ( pInterface->nType ) { case ENTITY_TYPE_PED: pReturn = (CEntity*)(pPools->GetPed((DWORD *)pInterface)); break; case ENTITY_TYPE_VEHICLE: pReturn = (CEntity*)(pPools->GetVehicle((DWORD *)pInterface)); break; case ENTITY_TYPE_OBJECT: pReturn = (CEntity*)(pPools->GetObject ((DWORD *)pInterface)); break; default: break; } } return pReturn; }
CEntity * CEventDamageSA::GetInflictingEntity ( void ) { CEntity * pReturn = NULL; CEntitySAInterface * pInterface = m_pInterface->pInflictor; if ( pInterface ) { CPoolsSA * pPools = ((CPoolsSA *)pGame->GetPools()); switch( pInterface->nType ) { case ENTITY_TYPE_PED: pReturn = pPools->GetPed((DWORD *)pInterface); break; case ENTITY_TYPE_VEHICLE: pReturn = pPools->GetVehicle ( (DWORD *)pInterface ); break; } } return pReturn; }
bool CWorldSA::ProcessLineOfSight(const CVector * vecStart, const CVector * vecEnd, CColPoint ** colCollision, CEntity ** CollisionEntity, const SLineOfSightFlags flags, SLineOfSightBuildingResult* pBuildingResult ) { DEBUG_TRACE("VOID CWorldSA::ProcessLineOfSight(CVector * vecStart, CVector * vecEnd, CColPoint * colCollision, CEntity * CollisionEntity)"); DWORD dwPadding[100]; // stops the function missbehaving and overwriting the return address dwPadding [0] = 0; // prevent the warning and eventual compiler optimizations from removing it CColPointSA * pColPointSA = new CColPointSA(); CColPointSAInterface * pColPointSAInterface = pColPointSA->GetInterface(); //DWORD targetEntity; CEntitySAInterface * targetEntity = NULL; bool bReturn = false; DWORD dwFunc = FUNC_ProcessLineOfSight; // bool bCheckBuildings = true, bool bCheckVehicles = true, bool bCheckPeds = true, // bool bCheckObjects = true, bool bCheckDummies = true, bool bSeeThroughStuff = false, // bool bIgnoreSomeObjectsForCamera = false, bool bShootThroughStuff = false MemPutFast < BYTE > ( VAR_CWorld_bIncludeCarTires, flags.bCheckCarTires ); _asm { push flags.bShootThroughStuff push flags.bIgnoreSomeObjectsForCamera push flags.bSeeThroughStuff push flags.bCheckDummies push flags.bCheckObjects push flags.bCheckPeds push flags.bCheckVehicles push flags.bCheckBuildings lea eax, targetEntity push eax push pColPointSAInterface push vecEnd push vecStart call dwFunc mov bReturn, al add esp, 0x30 } MemPutFast < BYTE > ( VAR_CWorld_bIncludeCarTires, 0 ); // Building info needed? if ( pBuildingResult ) { CPoolsSA * pPools = ((CPoolsSA *)pGame->GetPools()); if ( pPools ) { if ( targetEntity && targetEntity->nType == ENTITY_TYPE_BUILDING ) { pBuildingResult->bValid = true; pBuildingResult->usModelID = targetEntity->m_nModelIndex; if ( targetEntity->m_pLod ) pBuildingResult->usLODModelID = targetEntity->m_pLod->m_nModelIndex; else pBuildingResult->usLODModelID = 0; pBuildingResult->pInterface = targetEntity; pBuildingResult->vecPosition = targetEntity->Placeable.m_transform.m_translate; if ( targetEntity->Placeable.matrix ) { CVector& vecRotation = pBuildingResult->vecRotation; ConvertMatrixToEulerAngles ( *targetEntity->Placeable.matrix, vecRotation.fX, vecRotation.fY, vecRotation.fZ ); vecRotation = -vecRotation; } } if ( targetEntity && targetEntity->nType == ENTITY_TYPE_OBJECT ) { pBuildingResult->bValid = true; pBuildingResult->usModelID = targetEntity->m_nModelIndex; if ( targetEntity->m_pLod ) pBuildingResult->usLODModelID = targetEntity->m_pLod->m_nModelIndex; else pBuildingResult->usLODModelID = 0; pBuildingResult->pInterface = targetEntity; } } } if ( CollisionEntity ) { CPoolsSA * pPools = ((CPoolsSA *)pGame->GetPools()); if(pPools) { if(targetEntity) { switch (targetEntity->nType) { case ENTITY_TYPE_PED: *CollisionEntity = pPools->GetPed((DWORD *)targetEntity); break; case ENTITY_TYPE_OBJECT: *CollisionEntity = pPools->GetObject((DWORD *)targetEntity); break; case ENTITY_TYPE_VEHICLE: *CollisionEntity = pPools->GetVehicle((DWORD *)targetEntity); break; } /*CEntitySA * entity = new CEntitySA(); entity->SetInterface((CEntitySAInterface *)targetEntity); eEntityType EntityType = entity->GetEntityType(); delete entity; switch(EntityType) { case ENTITY_TYPE_PED: case ENTITY_TYPE_OBJECT: *CollisionEntity = pPools->GetPed((DWORD *)targetEntity); if ( *CollisionEntity ) break; *CollisionEntity = pPools->GetObject((CObjectSAInterface *)targetEntity); break; case ENTITY_TYPE_VEHICLE: *CollisionEntity = pPools->GetVehicle((CVehicleSAInterface *)targetEntity); break; }*/ } } } if ( colCollision ) *colCollision = pColPointSA; else pColPointSA->Destroy (); return bReturn; }