private float RandomiseWaitTime(DiffusionAvatarScript avatar)
 {
     // double randNum = GridManagerScript.NextGaussianDoubleBoxMuller(0, 1) * avatar.groupId.standartDeviation + avatar.groupId.avrgStayTime; // calculate stay time for group mean and deviation
     // //check for negatives
     // return (float) (randNum>0?randNum:0);
     return(avatar.groupId.avrgStayTime);
 }
 //figure out block condition
 //here
 void OnTriggerExit(Collider other)
 {
     if (other.gameObject.tag == "avatar")
     {
         DiffusionAvatarScript diffHit = other.gameObject.GetComponent <Trigger>().diff;
         if (((diffHit.entering && diff.entering) || (!diffHit.entering && !diff.entering)))
         {
             stop = false;
         }
     }
     else if (other.gameObject.tag == "bus")
     {
         stop = false;
     }
 }
    //if the car infront or around you changes it's light change yours as well
    private void OnTriggerStay(Collider other)
    {
        if (other.gameObject.tag == "trafficLight")
        {
            //change depending on traffic light if you're staying in it
            bool changeTo = other.gameObject.GetComponent <TrafficLightScript>().greenLight;
            trafficStop = !changeTo;
            stop        = !changeTo;
        }
        else if (other.gameObject.tag == "avatar")
        {
            Trigger hit = other.gameObject.GetComponent <Trigger>();
            trafficStop = hit.trafficStop;
            if (stop)
            {
                return;
            }


            DiffusionAvatarScript diffHit = hit.diff;
            if (diffHit.nextNode != diff.nextNode)
            {
                return;
            }

            float distanceMe  = Vector3.Distance(diff.avatar.transform.position, diff.nextNode.transform.position);
            float distanceHit = Vector3.Distance(diffHit.avatar.transform.position, diffHit.nextNode.transform.position);
            //if collider is closer to goal stop else don't

            //if at the back
            if (distanceMe > distanceHit && ((diffHit.entering && diff.entering) || (!diffHit.entering && !diff.entering)))
            {
                triggered  = true;
                this.other = other;
                //see if the car infront is at a red light
                stop = true;
            }
            //at the front
            else
            {
            }
        }
        else if (other.gameObject.tag == "bus")
        {
            BusTrigger diffHit = other.gameObject.GetComponent <BusTrigger>();
            trafficStop = diffHit.trafficStop;
        }
    }
    public void AddCar(DiffusionAvatarScript avatar)
    {
        if (savedSpaces.Contains(avatar.id))
        {
            savedSpaces.Remove(avatar.id);

            float stayTime = RandomiseWaitTime(avatar) * timeStep;
            CalculateRevenue(stayTime);
            Invoke("ReleaseCar", stayTime);
            //take measurement
            addOccupancyEntry();
        }
        //
        else if (currentOccupancy < capacity)
        {
            GridManagerScript.numberOfVehicles[GridManagerScript.getTimeOfDay()] =
                System.Math.Max(GridManagerScript.numberOfVehicles[GridManagerScript.getTimeOfDay()] - 1, 0);
            ++currentOccupancy;
            percentageFilled = currentOccupancy * 1.0f / capacity * 1.0f;

            //
            float stayTime = RandomiseWaitTime(avatar) * timeStep;
            CalculateRevenue(stayTime);
            Invoke("ReleaseCar", stayTime);
            //take measurement
            addOccupancyEntry();
        }
        else
        {
            // Checks if the lots should be open
            bool open = currentOccupancy < capacity && !GetComponent <NodeScript>().forceCloseParking;
            GetComponent <NodeScript>().openParking = open;
            GetComponent <NodeScript>().goal        = open;
            //GetComponent<NodeScript>().goalDiffusion = open ? 1000000 : 0;
            GetComponent <NodeScript>().NodeStatus = open ? NodeScript.NODE_STATUS.END : NodeScript.NODE_STATUS.UNSEARCHED;
        }

        //worthless non-nullable check
    }
Exemple #5
0
 public void ReDirect(DiffusionAvatarScript a)
 {
     a.redirected = true;
 }
    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "avatar")
        {
            if (stop)
            {
                return;
            }
            Trigger hit = other.gameObject.GetComponent <Trigger>();
            DiffusionAvatarScript diffHit = hit.diff;
            if (diffHit.nextNode != diff.nextNode)
            {
                return;
            }

            float distanceMe  = Vector3.Distance(diff.avatar.transform.position, diff.nextNode.transform.position);
            float distanceHit = Vector3.Distance(diffHit.avatar.transform.position, diffHit.nextNode.transform.position);
            //if collider is closer to goal stop else don't

            //if at the back
            if (distanceMe > distanceHit && ((diffHit.entering && diff.entering) || (!diffHit.entering && !diff.entering)))
            {
                triggered  = true;
                this.other = other;
                //see if the car infront is at a red light
                stop = true;
            }
            //at the front
            else
            {
            }
        }
        else if (other.gameObject.tag == "trafficLight")
        {
            bool changeTo = other.gameObject.GetComponent <TrafficLightScript>().greenLight;
            trafficStop = !changeTo;
            stop        = !changeTo;
            // randmSwitch = (int)UnityEngine.Random.Range(0f,10f);
        }

        else if (other.gameObject.tag == "trafficSign")
        {
            if (UnityEngine.Random.Range(0.0f, 1f) < other.gameObject.GetComponent <RedirectionSignScript>().chanceToRedirect)
            {
                other.gameObject.GetComponent <RedirectionSignScript>().ReDirect(diff);
            }
        }
        else if (other.gameObject.tag == "bus")
        {
            BusTrigger hit     = other.gameObject.GetComponent <BusTrigger>();
            BusScript  diffHit = hit.GetComponent <BusScript>();


            float distanceMe  = Vector3.Distance(diff.avatar.transform.position, diff.nextNode.transform.position);
            float distanceHit = Vector3.Distance(diffHit.transform.position, diffHit.nextNode.transform.position);
            //if collider is closer to goal stop else don't

            //if at the back
            if (distanceMe > distanceHit)
            {
                triggered  = true;
                this.other = other;
                //see if the car infront is at a red light
                stop = true;
            }
            //at the front
            else
            {
            }
        }
    }