private void SpawnNPCPool() { for (int i = 0; i < currentPooledNPCs.Count; i++) { Destroy(currentPooledNPCs[i]); } currentPooledNPCs.Clear(); activeNPCCount = 0; int poolCount = Mathf.FloorToInt(npcCount + (npcCount * 0.1f)); for (int i = 0; i < poolCount; i++) { GameObject go = Instantiate(npcPrefab, transform); go.name = Instantiate(npcVehicles[RandomIndex(npcVehicles.Count)], go.transform).name; string genId = System.Guid.NewGuid().ToString(); npcControllerComponent = go.GetComponent <NPCControllerComponent>(); npcControllerComponent.id = genId; npcControllerComponent.Init(); go.name = go.name + genId; currentPooledNPCs.Add(go); go.SetActive(false); } SegmentationManager.Instance.OverrideMaterialsNPCsSpawned(currentPooledNPCs); }
public void ExitStopSignQueue(NPCControllerComponent npcController) { if (stopQueue.Count == 0) { return; } stopQueue.Remove(npcController); }
private void OnTriggerEnter(Collider other) { npcsInIntersection.Add(other.transform); NPCControllerComponent npcControllerComponent = other.GetComponent <NPCControllerComponent>(); if (npcControllerComponent != null && npcControllerComponent.currentIntersectionComponent == null) { npcControllerComponent.currentIntersectionComponent = this; } }
public bool CheckQueue(NPCControllerComponent npcController) { if (stopQueue.Count == 0 || npcController == stopQueue.Peek()) { return(true); } else { return(false); } }
private void OnTriggerExit(Collider other) { npcsInIntersection.Remove(other.transform); NPCControllerComponent npcControllerComponent = other.GetComponent <NPCControllerComponent>(); if (npcControllerComponent != null) { npcControllerComponent.RemoveFromStopSignQueue(); npcControllerComponent.currentIntersectionComponent = null; } }
public void ExitQueue(NPCControllerComponent npcController) { if (stopQueue.Count == 0) { return; } if (npcController == stopQueue.Peek()) { stopQueue.Dequeue(); } }
private void RemoveFirstElement() { if (stopQueue.Count == 0) { return; } if (Vector3.Distance(stopQueue[0].transform.position, transform.position) > intersectionC.yieldTrigger.radius * 2f) { NPCControllerComponent npcC = stopQueue[0].GetComponent <NPCControllerComponent>(); if (npcC != null) { ExitStopSignQueue(npcC); npcC.currentIntersectionComponent = null; } } }
public void EnterQueue(NPCControllerComponent npcController) { stopQueue.Enqueue(npcController); }
public void DespawnVehicle(NPCControllerComponent obj) { obj.currentIntersectionComponent?.npcsInIntersection.Remove(obj.transform); Destroy(obj.gameObject); }
public void EnterStopSignQueue(NPCControllerComponent npcController) { stopQueue.Add(npcController); }
private void CollisionCheck() { if (frontCenter == null || frontLeft == null || frontRight == null) { return; } frontClosestHitInfo = new RaycastHit(); rightClosestHitInfo = new RaycastHit(); leftClosestHitInfo = new RaycastHit(); if (Physics.Raycast(frontCenter.position, frontCenter.forward, out frontClosestHitInfo, frontRaycastDistance, carCheckBlockBitmask)) { } //Debug.DrawLine(frontCenter.position, frontClosestHitInfo.point, Color.blue, 0.25f); if (Physics.Raycast(frontRight.position, frontRight.forward, out rightClosestHitInfo, frontRaycastDistance, carCheckBlockBitmask)) { } //Debug.DrawLine(frontCenter.position, frontClosestHitInfo.point, Color.red, 0.25f); if (Physics.Raycast(frontLeft.position, frontLeft.forward, out leftClosestHitInfo, frontRaycastDistance, carCheckBlockBitmask)) { } //Debug.DrawLine(frontCenter.position, frontClosestHitInfo.point, Color.yellow, 0.25f); isFrontDetectWithinStopDistance = (frontClosestHitInfo.collider) && frontClosestHitInfo.distance < stopHitDistance; isRightDetectWithinStopDistance = (rightClosestHitInfo.collider) && rightClosestHitInfo.distance < stopHitDistance; isLeftDetectWithinStopDistance = (leftClosestHitInfo.collider) && leftClosestHitInfo.distance < stopHitDistance; // dodge if (isDodge) { return; } if (isFrontDetectWithinStopDistance) { NPCControllerComponent npcC = frontClosestHitInfo.collider.gameObject.GetComponent <NPCControllerComponent>(); VehicleController vC = frontClosestHitInfo.collider.gameObject.GetComponent <VehicleController>(); if (npcC) { if ((isLeftTurn && npcC.isLeftTurn || isRightTurn && npcC.isRightTurn) && Vector3.Dot(transform.TransformDirection(Vector3.forward), npcC.transform.TransformDirection(Vector3.forward)) < -0.7f) { if (currentIndex > 1) { SetDodge(isLeftTurn, true); } } } else if (vC) { // } else { // } } if (isLeftDetectWithinStopDistance || isRightDetectWithinStopDistance) { if (currentMapLaneSegmentBuilder == null) { return; } if (!currentMapLaneSegmentBuilder.isTrafficLane) { return; } // ignore npc or vc for now if (isLeftDetectWithinStopDistance) { if (leftClosestHitInfo.collider.gameObject.GetComponent <NPCControllerComponent>() == null)// && leftClosestHitInfo.collider.gameObject.GetComponent<VehicleController>() == null) { SetDodge(false); } } if (isRightDetectWithinStopDistance && !isDodge) { if (rightClosestHitInfo.collider.gameObject.GetComponent <NPCControllerComponent>() == null)// && rightClosestHitInfo.collider.gameObject.GetComponent<VehicleController>() == null) { SetDodge(true); } } } // ground collision groundCheckInfo = new RaycastHit(); if (!Physics.Raycast(transform.position + Vector3.up, Vector3.down, out groundCheckInfo, 5f, groundHitBitmask)) { Despawn(); } }