/// <summary> /// Transition player through an interior door to building exterior. Player must be inside. /// Interior stores information about exterior, no need for extra params. /// </summary> public void TransitionExterior(bool doFade = false) { // Exit if missing required components or not currently inside if (!ReferenceComponents() || !interior || !isPlayerInside) { return; } // Raise event RaiseOnPreTransitionEvent(TransitionType.ToBuildingExterior); // Find closest door and position player outside of it StaticDoor closestDoor; Vector3 closestDoorPos = DaggerfallStaticDoors.FindClosestDoor(transform.position, ExteriorDoors, out closestDoor); Vector3 normal = DaggerfallStaticDoors.GetDoorNormal(closestDoor); Vector3 position = closestDoorPos + normal * (controller.radius * 3f); world.SetAutoReposition(StreamingWorld.RepositionMethods.Offset, position); EnableExteriorParent(); // Player is now outside building isPlayerInside = false; // Fire event RaiseOnTransitionExteriorEvent(); // Fade in from black if (doFade) { DaggerfallUI.Instance.FadeHUDFromBlack(); } }
/// <summary> /// Transition player through an interior door to building exterior. Player must be inside. /// Interior stores information about exterior, no need for extra params. /// </summary> public void TransitionExterior(bool doFade = false) { // Exit if missing required components or not currently inside if (!ReferenceComponents() || !interior || !isPlayerInside) { return; } // Raise event RaiseOnPreTransitionEvent(TransitionType.ToBuildingExterior); //// Find closest exterior door //Vector3 exitDoorPos = Vector3.zero; //int doorIndex = -1; //DaggerfallStaticDoors exteriorDoors = interior.ExteriorDoors; //if (exteriorDoors) //{ // if (!exteriorDoors.FindClosestDoorToPlayer(transform.position, interior.EntryDoor.recordIndex, out exitDoorPos, out doorIndex)) // { // // Could not find exterior door or fall back to entry door // // Just push player outside of building, better than having them trapped inside // exitDoorPos = transform.position + transform.forward * 4; // } //} // Find closest door and position player outside of it StaticDoor closestDoor; Vector3 closestDoorPos = DaggerfallStaticDoors.FindClosestDoor(transform.position, exteriorDoors, out closestDoor); Vector3 normal = DaggerfallStaticDoors.GetDoorNormal(closestDoor); Vector3 position = closestDoorPos + normal * (controller.radius * 2f); world.SetAutoReposition(StreamingWorld.RepositionMethods.Offset, position); EnableExteriorParent(); //// Set player outside exterior door position //transform.position = exitDoorPos; //if (doorIndex >= 0) //{ // // Adjust player position and facing // Vector3 normal = exteriorDoors.GetDoorNormal(doorIndex); // transform.position += normal * (controller.radius * 2f); // //SetFacing(normal); // SetStanding(); //} // Player is now outside building isPlayerInside = false; // Fire event RaiseOnTransitionExteriorEvent(); // Fade in from black if (doFade) { DaggerfallUI.Instance.FadeHUDFromBlack(); } }