void InitDefensiveness() { //decrease their top speed float topSpeed = baseTopSpeed; topSpeed -= GetModifier(topSpeed, defensiveness_); car_.SetMaxSpeed(topSpeed); if (vision_) { //make them look around more float lookAngle = baseLookAngle; lookAngle += GetModifier(lookAngle, defensiveness_); vision_.SetLookAngle(lookAngle); //make them look ahead more float visionDistance = baseVisionDistance; visionDistance += GetModifier(visionDistance, defensiveness_); vision_.SetVisionDistance(visionDistance); //make them stop more cautiously float stopping = baseStopping; stopping += GetModifier(stopping, defensiveness_); vision_.SetStoppingDistance(stopping); } if (error_) { //reduce the chance of distraction float distractionChance = baseDistractionChance; distractionChance -= GetModifier(distractionChance, defensiveness_); error_.SetDistractionChance(distractionChance); } if (purpose_) { //increase the chance of parking float parkChance = baseParkChance; parkChance += GetModifier(parkChance, inattentiveness_); purpose_.SetParkingChance(parkChance); } }
void OnCollisionEnter(Collision collision) { GameObject other = collision.collider.gameObject; if (other.tag != "Ground") { GetComponent <AudioSource>().PlayOneShot(crashNoise_); } if (purpose_ && purpose_.enabled) { purpose_.SoundHorn(); } if (tag == "Player") { return; } if (collision.relativeVelocity.magnitude > car_.GetMaxSpeed() * 0.25f) { car_.SetState(CarState.CS_CRASHED); } else { if (purpose_.enabled) { car_.MoveAwayFrom(other); purpose_.SetParkingChance(101.0f); } } if (other.tag == "Car" || other.tag == "Player") { //make sure only one car registers the event if (car_.DistanceToTarget() > other.GetComponent <Car>().DistanceToTarget()) { eventSender_.SendEvent(TrafficEvent.TE_COLLISION); } if (error_) { car_.SetState(CarState.CS_MOVING, true); } } //prevent the car from locking up if (tag == "Player") { car_.Brake(0); car_.Accelerate(0); body_.velocity *= 0.1f; } }
void Start() { vision_ = GetComponent <Vision>(); error_ = GetComponent <Error>(); purpose_ = GetComponent <Purpose>(); car_ = GetComponent <Car>(); if (random_) { aggression_ = Random.Range(0.0f, 1.0f); defensiveness_ = Random.Range(0.0f, 1.0f); inattentiveness_ = Random.Range(0.0f, 1.0f); if (purpose_) { purpose_.SetParkingChance(Random.Range(5, 50)); } } }