Пример #1
0
        /// <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();
            }
        }