private void OnCollisionEnter(Collision collision) { if (_driver == null) { return; } if (_lastHitTime > 0.0f) { _lastHitTime -= Time.deltaTime; return; } //if ((collision.gameObject.layer & LayerMask.healthNameToLayer("Road")) != 0) //{ // return; //} GameObject zombie = collision.gameObject; if (!zombie || zombie.layer != LayerMask.NameToLayer("Zombie")) { return; } if (zombie && zombie.GetComponent <Health>() && zombie.GetComponent <Health>().health <= 0) { return; } BikeLean bike = GetComponent <BikeLean>(); PlayerHealth player = null; if (bike) { player = GetComponentInChildren <PlayerHealth>(); } if (bike && player) { //zombie damages player player.GetHitByZombie(zombie); } else { //zombie damages vehicle if (health > 0) { //Debug.Log(gameObject.name + " docking health due to collision with " + collision.gameObject.name); health -= 0.5f; _vehHealthSlider.value = health; _lastHitTime = 0.5f; } else { health = 0.0f; } } }
private void TryExitVehicle() { if (_driver == null) { return; } _vehicleUIGroup.alpha = 0.0f; _vehicleExitButtonGroup.alpha = 0.0f; _vehExitButton.onClick.RemoveAllListeners(); speed = 0.0f; if (engineSource.isPlaying) { engineSource.Stop(); } BikeLean bike = GetComponent <BikeLean>(); if (bike) { bike.enabled = false; vehicleRB.constraints = RigidbodyConstraints.None; vehicleRB.centerOfMass = new Vector3(0, 0.5f, 0); } GameObject followCamera = gameObject.GetComponent <DisableVehicle>().followCamera; gameObject.GetComponent <DisableVehicle>().followCamera = null; _driver.GetComponent <DisableVehicle>().followCamera = followCamera; followCamera.GetComponent <FollowCamera>().target = _driver; Vector3 playerReposition = new Vector3( ((transform.localPosition.x - 5) + (transform.localScale.x)), ((transform.localPosition.y + 2) + (transform.localScale.y)), ((transform.localPosition.z) + (transform.localScale.z))); _driver.GetComponent <OccupyVehicle>().ExitVehicle(this, playerReposition); GameObject[] zombies = zombiesOnRoof.ToArray(); //copy because zombies will be removed while looping foreach (GameObject zombie in zombies) { zombie.GetComponent <ClimbOnVehicle>().DetachFromVehicle(); zombie.GetComponent <Rigidbody>().AddForce((transform.forward + Vector3.up * 0.5f).normalized * 500 * (speed / maxSpeed), ForceMode.Acceleration); } Camera.main.GetComponent <TransparentifyObject>().player = _driver.transform; _driver = null; timeNotMoving = 0.0f; }
protected virtual void EnterVehicle(BaseVehicleClass vehicle) { Transform driverTransform = vehicle.transform.Find("DriverTransform"); if (driverTransform == null) { gameObject.transform.Translate(0, 100, 0); } else { //place player on bike BikeLean bike = vehicle.GetComponent <BikeLean>(); bike.enabled = true; gameObject.transform.parent = driverTransform; gameObject.transform.localPosition = Vector3.zero; gameObject.transform.localRotation = Quaternion.identity; } GetComponent <Collider>().enabled = false; Rigidbody rb = GetComponent <Rigidbody>(); rb.useGravity = false; rb.constraints = RigidbodyConstraints.FreezeAll; gameObject.GetComponentInChildren <ZombieDetector>().enabled = false; // disable players zombie detector to prevent player using weapons while in vehicle }