mirror of
				https://github.com/halpz/re3.git
				synced 2025-11-04 08:24:55 +00:00 
			
		
		
		
	fixed roadblocks
This commit is contained in:
		
							parent
							
								
									f69313237e
								
							
						
					
					
						commit
						0803c821ae
					
				| 
						 | 
				
			
			@ -404,11 +404,10 @@ CPathFind::PreparePathData(void)
 | 
			
		|||
			maxX = 0.0f;
 | 
			
		||||
			maxY = 0.0f;
 | 
			
		||||
			for(j = 0; j < 12; j++){
 | 
			
		||||
				k = i*12 + j;
 | 
			
		||||
				k = m_mapObjects[i]->GetModelIndex()*12 + j;
 | 
			
		||||
				if(InfoForTileCars[k].type == NodeTypeExtern){
 | 
			
		||||
					numExtern++;
 | 
			
		||||
					if(InfoForTileCars[k].numLeftLanes + InfoForTileCars[k].numRightLanes > numLanes)
 | 
			
		||||
						numLanes = InfoForTileCars[k].numLeftLanes + InfoForTileCars[k].numRightLanes;
 | 
			
		||||
					numLanes = Max(numLanes, InfoForTileCars[k].numLeftLanes + InfoForTileCars[k].numRightLanes);
 | 
			
		||||
					maxX = Max(maxX, Abs(InfoForTileCars[k].x));
 | 
			
		||||
					maxY = Max(maxY, Abs(InfoForTileCars[k].y));
 | 
			
		||||
				}else if(InfoForTileCars[k].type == NodeTypeIntern)
 | 
			
		||||
| 
						 | 
				
			
			@ -417,7 +416,7 @@ CPathFind::PreparePathData(void)
 | 
			
		|||
 | 
			
		||||
			if(numIntern == 1 && numExtern == 2){
 | 
			
		||||
				if(numLanes < 4){
 | 
			
		||||
					if((i & 7) == 4){		// WHAT?
 | 
			
		||||
					if((i & 7) == 4){		// 1/8 probability
 | 
			
		||||
						m_objectFlags[i] |= UseInRoadBlock;
 | 
			
		||||
						if(maxX > maxY)
 | 
			
		||||
							m_objectFlags[i] |= ObjectEastWest;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -132,58 +132,58 @@ CRoadBlocks::GenerateRoadBlocks(void)
 | 
			
		|||
					CColModel *pVehicleColModel = CModelInfo::GetModelInfo(vehicleId)->GetColModel();
 | 
			
		||||
					float fModelRadius = 2.0f * pVehicleColModel->boundingSphere.radius + 0.25f;
 | 
			
		||||
					int16 radius = (int16)(fMapObjectRadius / fModelRadius);
 | 
			
		||||
					if (radius > 0 && radius < 6) {
 | 
			
		||||
						CVector2D vecDistanceToCamera = TheCamera.GetPosition() - mapObject->GetPosition();
 | 
			
		||||
						float fDotProduct = DotProduct2D(vecDistanceToCamera, mapObject->GetForward());
 | 
			
		||||
						float fOffset = 0.5f * fModelRadius * (float)(radius - 1);
 | 
			
		||||
						for (int16 i = 0; i < radius; i++) {
 | 
			
		||||
							uint8 nRoadblockType = fDotProduct < 0.0f;
 | 
			
		||||
							if (CGeneral::GetRandomNumber() & 1) {
 | 
			
		||||
								offsetMatrix.SetRotateZ(((CGeneral::GetRandomNumber() & 0xFF) - 128.0f) * 0.003f + HALFPI);
 | 
			
		||||
					if (radius >= 6)
 | 
			
		||||
						continue;
 | 
			
		||||
					CVector2D vecDistanceToCamera = TheCamera.GetPosition() - mapObject->GetPosition();
 | 
			
		||||
					float fDotProduct = DotProduct2D(vecDistanceToCamera, mapObject->GetForward());
 | 
			
		||||
					float fOffset = 0.5f * fModelRadius * (float)(radius - 1);
 | 
			
		||||
					for (int16 i = 0; i < radius; i++) {
 | 
			
		||||
						uint8 nRoadblockType = fDotProduct < 0.0f;
 | 
			
		||||
						if (CGeneral::GetRandomNumber() & 1) {
 | 
			
		||||
							offsetMatrix.SetRotateZ(((CGeneral::GetRandomNumber() & 0xFF) - 128.0f) * 0.003f + HALFPI);
 | 
			
		||||
						}
 | 
			
		||||
						else {
 | 
			
		||||
							nRoadblockType = !nRoadblockType;
 | 
			
		||||
							offsetMatrix.SetRotateZ(((CGeneral::GetRandomNumber() & 0xFF) - 128.0f) * 0.003f - HALFPI);
 | 
			
		||||
						}
 | 
			
		||||
						if (ThePaths.m_objectFlags[RoadBlockObjects[nRoadblockNode]] & ObjectEastWest)
 | 
			
		||||
							offsetMatrix.GetPosition() = CVector(0.0f, i * fModelRadius - fOffset, 0.6f);
 | 
			
		||||
						else
 | 
			
		||||
							offsetMatrix.GetPosition() = CVector(i * fModelRadius - fOffset, 0.0f, 0.6f);
 | 
			
		||||
						CMatrix vehicleMatrix = mapObject->m_matrix * offsetMatrix;
 | 
			
		||||
						float fModelRadius = CModelInfo::GetModelInfo(vehicleId)->GetColModel()->boundingSphere.radius - 0.25f;
 | 
			
		||||
						int16 colliding = 0;
 | 
			
		||||
						CWorld::FindObjectsKindaColliding(vehicleMatrix.GetPosition(), fModelRadius, 0, &colliding, 2, nil, false, true, true, false, false);
 | 
			
		||||
						if (!colliding) {
 | 
			
		||||
							CAutomobile *pVehicle = new CAutomobile(vehicleId, RANDOM_VEHICLE);
 | 
			
		||||
							pVehicle->SetStatus(STATUS_ABANDONED);
 | 
			
		||||
							// pVehicle->GetHeightAboveRoad(); // called but return value is ignored?
 | 
			
		||||
							vehicleMatrix.GetPosition().z += fModelRadius - 0.6f;
 | 
			
		||||
							pVehicle->m_matrix = vehicleMatrix;
 | 
			
		||||
							pVehicle->PlaceOnRoadProperly();
 | 
			
		||||
							pVehicle->bIsStatic = false;
 | 
			
		||||
							pVehicle->m_matrix.UpdateRW();
 | 
			
		||||
							pVehicle->m_nDoorLock = CARLOCK_UNLOCKED;
 | 
			
		||||
							CCarCtrl::JoinCarWithRoadSystem(pVehicle);
 | 
			
		||||
							pVehicle->bIsLocked = false;
 | 
			
		||||
							pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
 | 
			
		||||
							pVehicle->AutoPilot.m_nTempAction = TEMPACT_NONE;
 | 
			
		||||
							pVehicle->AutoPilot.m_nCurrentLane = 0;
 | 
			
		||||
							pVehicle->AutoPilot.m_nNextLane = 0;
 | 
			
		||||
							pVehicle->AutoPilot.m_fMaxTrafficSpeed = 0.0f;
 | 
			
		||||
							pVehicle->AutoPilot.m_nCruiseSpeed = 0.0f;
 | 
			
		||||
							pVehicle->bExtendedRange = true;
 | 
			
		||||
							if (pVehicle->UsesSiren(pVehicle->GetModelIndex()) && CGeneral::GetRandomNumber() & 1)
 | 
			
		||||
								pVehicle->m_bSirenOrAlarm = true;
 | 
			
		||||
							if (pVehicle->GetUp().z > 0.94f) {
 | 
			
		||||
								CVisibilityPlugins::SetClumpAlpha(pVehicle->GetClump(), 0);
 | 
			
		||||
								CWorld::Add(pVehicle);
 | 
			
		||||
								pVehicle->bCreateRoadBlockPeds = true;
 | 
			
		||||
								pVehicle->m_nRoadblockType = nRoadblockType;
 | 
			
		||||
								pVehicle->m_nRoadblockNode = nRoadblockNode;
 | 
			
		||||
							}
 | 
			
		||||
							else {
 | 
			
		||||
								nRoadblockType = !nRoadblockType;
 | 
			
		||||
								offsetMatrix.SetRotateZ(((CGeneral::GetRandomNumber() & 0xFF) - 128.0f) * 0.003f - HALFPI);
 | 
			
		||||
							}
 | 
			
		||||
							if (ThePaths.m_objectFlags[RoadBlockObjects[nRoadblockNode]] & ObjectEastWest)
 | 
			
		||||
								offsetMatrix.GetPosition() = CVector(0.0f, -fOffset, 0.6f);
 | 
			
		||||
							else
 | 
			
		||||
								offsetMatrix.GetPosition() = CVector(-fOffset, 0.0f, 0.6f);
 | 
			
		||||
							CMatrix vehicleMatrix = mapObject->m_matrix * offsetMatrix;
 | 
			
		||||
							float fModelRadius = CModelInfo::GetModelInfo(vehicleId)->GetColModel()->boundingSphere.radius - 0.25f;
 | 
			
		||||
							int16 colliding = 0;
 | 
			
		||||
							CWorld::FindObjectsKindaColliding(vehicleMatrix.GetPosition(), fModelRadius, 0, &colliding, 2, nil, false, true, true, false, false);
 | 
			
		||||
							if (!colliding) {
 | 
			
		||||
								CAutomobile *pVehicle = new CAutomobile(vehicleId, RANDOM_VEHICLE);
 | 
			
		||||
								pVehicle->SetStatus(STATUS_ABANDONED);
 | 
			
		||||
								// pVehicle->GetHeightAboveRoad(); // called but return value is ignored?
 | 
			
		||||
								vehicleMatrix.GetPosition().z += fModelRadius - 0.6f;
 | 
			
		||||
								pVehicle->m_matrix = vehicleMatrix;
 | 
			
		||||
								pVehicle->PlaceOnRoadProperly();
 | 
			
		||||
								pVehicle->bIsStatic = false;
 | 
			
		||||
								pVehicle->m_matrix.UpdateRW();
 | 
			
		||||
								pVehicle->m_nDoorLock = CARLOCK_UNLOCKED;
 | 
			
		||||
								CCarCtrl::JoinCarWithRoadSystem(pVehicle);
 | 
			
		||||
								pVehicle->bIsLocked = false;
 | 
			
		||||
								pVehicle->AutoPilot.m_nCarMission = MISSION_NONE;
 | 
			
		||||
								pVehicle->AutoPilot.m_nTempAction = TEMPACT_NONE;
 | 
			
		||||
								pVehicle->AutoPilot.m_nCurrentLane = 0;
 | 
			
		||||
								pVehicle->AutoPilot.m_nNextLane = 0;
 | 
			
		||||
								pVehicle->AutoPilot.m_fMaxTrafficSpeed = 0.0f;
 | 
			
		||||
								pVehicle->AutoPilot.m_nCruiseSpeed = 0.0f;
 | 
			
		||||
								pVehicle->bExtendedRange = true;
 | 
			
		||||
								if (pVehicle->UsesSiren(pVehicle->GetModelIndex()) && CGeneral::GetRandomNumber() & 1)
 | 
			
		||||
									pVehicle->m_bSirenOrAlarm = true;
 | 
			
		||||
								if (pVehicle->GetUp().z > 0.94f) {
 | 
			
		||||
									CVisibilityPlugins::SetClumpAlpha(pVehicle->GetClump(), 0);
 | 
			
		||||
									CWorld::Add(pVehicle);
 | 
			
		||||
									pVehicle->bCreateRoadBlockPeds = true;
 | 
			
		||||
									pVehicle->m_nRoadblockType = nRoadblockType;
 | 
			
		||||
									pVehicle->m_nRoadblockNode = nRoadblockNode;
 | 
			
		||||
								}
 | 
			
		||||
								else {
 | 
			
		||||
									delete pVehicle;
 | 
			
		||||
								}
 | 
			
		||||
								delete pVehicle;
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue