private void OnTriggerExit(Collider other) { RoomInhabitantComponent inhabitant = other.GetComponentInParent <RoomInhabitantComponent>(); if (inhabitant != null) { inhabitant.OnRoomExited(this); _roomInhabitants.Remove(inhabitant); } CleanUpInhabitants(); }
private void OnTriggerEnter(Collider other) { RoomInhabitantComponent inhabitant = other.GetComponentInParent <RoomInhabitantComponent>(); if (inhabitant != null) { _roomInhabitants.Add(inhabitant); inhabitant.OnRoomEntered(this); } CleanUpInhabitants(); }
private void ApplyWoosh(RoomInhabitantComponent inhabitant, Vector3 suctionPoint) { Rigidbody rigidBody = inhabitant.PhysicsRigidBody; if (rigidBody != null) { Vector3 directionToAirlock = (suctionPoint - rigidBody.transform.position).WithY(0).normalized; bool isPastAirlock = Vector3.Dot(GetAirlockForward(), directionToAirlock) < 0; if (!isPastAirlock) { Vector3 ventForce = directionToAirlock * VentForceScale * Time.deltaTime; rigidBody.AddForce(ventForce, ForceMode.Acceleration); } } inhabitant.NotifySuckedIntoSpace(); }
private IEnumerator WooshAsync() { for (float timer = 0; timer < 1.5f; timer += Time.deltaTime) { yield return(null); } WaitForFixedUpdate fixedUpdate = new WaitForFixedUpdate(); Vector3 suctionPoint = transform.position; while (CurrentAirlockState == EAirlockState.Open) { for (int i = 0; i < _room.RoomInhabitants.Count; ++i) { RoomInhabitantComponent inhabitant = _room.RoomInhabitants[i]; ApplyWoosh(inhabitant, suctionPoint); } yield return(fixedUpdate); } }