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 }
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 { } } }