Exemple #1
0
    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);
    }
Exemple #2
0
 public void ExitStopSignQueue(NPCControllerComponent npcController)
 {
     if (stopQueue.Count == 0)
     {
         return;
     }
     stopQueue.Remove(npcController);
 }
Exemple #3
0
    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);
     }
 }
Exemple #5
0
    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();
        }
    }
Exemple #7
0
 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);
 }
Exemple #10
0
 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();
        }
    }