Exemplo n.º 1
0
        private void OnNavigationEvent(INavigationEvent args)
        {
            if (hasFreeCamera || args.CausedByFocusing)
            {
                return;
            }

            var aFocusNode = navigationService.Current.GetComponent <IFocusNodeComponent>();
            var newNode    = aFocusNode.Node;
            var newCamera  = aFocusNode.DefaultViewpointMechanism.CreateControlledViewpoint();

            if (mainLayer.Camera == null || newNode.Scene != FocusNode.Scene)
            {
                mainLayer.Camera = newCamera;
            }

            // todo: find real one
            var layoutInstance     = storyService.RootLayoutInstance;
            var initialCameraProps = mainLayer.Camera.GetProps();
            var interLevel         = navigationService.InterLevelTransition;
            var path = layoutInstance.GetPath(initialCameraProps, navigationService.Current.Id, navigationService.State, interLevel);

            switch (args.Type)
            {
            case NavigationEventType.Reset:
                if (mainLayer.Camera == null)
                {
                    mainLayer.Camera = newCamera;
                }
                else
                {
                    mainLayer.Camera = new SceneTransitionCamera(mainLayer.Camera, newCamera, TransitionDuration,
                                                                 () => mainLayer.VisibleScene = newNode.Scene, () => mainLayer.Camera = newCamera);
                }
                break;

            case NavigationEventType.MoveToNextFork:
                mainLayer.Camera = args.MoveInstantly
                        ? newCamera
                        : new StoryPathCamera(path, initialCameraProps, null, OnReachedFork);
                break;

            case NavigationEventType.MoveToPrevFork:
                mainLayer.Camera = args.MoveInstantly
                        ? newCamera
                        : new StoryPathCamera(path, initialCameraProps, null, OnReachedFork);
                break;

            case NavigationEventType.MoveToSpecific:
                mainLayer.Camera = args.MoveInstantly
                        ? newCamera
                        : new StoryPathCamera(path, initialCameraProps, newCamera.GetProps(), () => { mainLayer.Camera = newCamera; });
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(args.Type), args.Type, null);
            }

            FocusNode = navigationService.Current;
        }
Exemplo n.º 2
0
        private void OnNavigationEvent(INavigationEvent evnt)
        {
            var cFocusNode = navigationService.Current.GetComponent <IFocusNodeComponent>();
            var newCamera  = cFocusNode.DefaultViewpointMechanism.CreateControlledViewpoint();

            //todo: refactor this mess
            var initialFloorHeight = (float?)null;
            var targetFloorHeight  = (float?)null;
            var cameraPosition     = camera.GetEye();
            // todo: find real one
            var layoutInstance = storyService.RootLayoutInstance;

            if (layoutInstance.AllowsFreeCamera)
            {
                var collisionMesh       = layoutInstance.GetCollisionMesh();
                var currentWalkableArea = collisionMesh.GetWalkableAreas().Where(x => x.Contains(cameraPosition)).FirstOrNull();
                if (currentWalkableArea.HasValue)
                {
                    // todo: fix when walkable areas are fixed
                    initialFloorHeight = currentWalkableArea.Value.Center.Y;
                }
                var targetWalkableArea = collisionMesh.GetWalkableAreas().Where(x => x.Contains(newCamera.GetEye())).FirstOrNull();
                if (targetWalkableArea.HasValue)
                {
                    // todo: fix when walkable areas are fixed
                    targetFloorHeight = targetWalkableArea.Value.Center.Y;
                }
            }

            var initialCameraProps = camera.GetProps();

            initialCameraProps.Frame.Eye.X = globalObjectService.VrPlayerCarrier.transform.position.x;
            initialCameraProps.Frame.Eye.Z = -globalObjectService.VrPlayerCarrier.transform.position.z;
            var interLevel = navigationService.InterLevelTransition;
            var path       = layoutInstance.GetPath(initialCameraProps, navigationService.Current.Id, navigationService.State, interLevel);

            switch (evnt.Type)
            {
            case NavigationEventType.Reset:
            case NavigationEventType.MoveToSpecific:
                vrInputDispatcher.NavigateTo(navigationService.Current, path, initialCameraProps, initialFloorHeight, targetFloorHeight);
                break;

            case NavigationEventType.MoveToNextFork:
            case NavigationEventType.MoveToPrevFork:
                OnReachedFork();
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        void Init(EventBase evt)
        {
            var type = evt.GetType();

            eventBaseName  = EventDebugger.GetTypeDisplayName(type);
            eventTypeId    = evt.eventTypeId;
            eventId        = evt.eventId;
            triggerEventId = evt.triggerEventId;

            timestamp = evt.timestamp;

            target = evt.target;

            skipElements = evt.skipElements;

            isPropagationStopped          = evt.isPropagationStopped;
            isImmediatePropagationStopped = evt.isImmediatePropagationStopped;
            isDefaultPrevented            = evt.isDefaultPrevented;

            var mouseEvent         = evt as IMouseEvent;
            var mouseEventInternal = evt as IMouseEventInternal;

            hasUnderlyingPhysicalEvent = mouseEvent != null &&
                                         mouseEventInternal != null &&
                                         mouseEventInternal.triggeredByOS;

            propagationPhase = evt.propagationPhase;

            originalMousePosition = evt.originalMousePosition;
            currentTarget         = evt.currentTarget;

            dispatch = evt.dispatch;

            if (mouseEvent != null)
            {
                modifiers      = mouseEvent.modifiers;
                mousePosition  = mouseEvent.mousePosition;
                button         = mouseEvent.button;
                pressedButtons = mouseEvent.pressedButtons;
                clickCount     = mouseEvent.clickCount;

                var wheelEvent = mouseEvent as WheelEvent;
                if (wheelEvent != null)
                {
                    delta = wheelEvent.delta;
                }
            }

            var pointerEvent = evt as IPointerEvent;

            if (pointerEvent != null)
            {
                var pointerEventInternal = evt as IPointerEventInternal;
                hasUnderlyingPhysicalEvent = pointerEvent != null &&
                                             pointerEventInternal != null &&
                                             pointerEventInternal.triggeredByOS;

                modifiers      = pointerEvent.modifiers;
                mousePosition  = pointerEvent.position;
                button         = pointerEvent.button;
                pressedButtons = pointerEvent.pressedButtons;
                clickCount     = pointerEvent.clickCount;
            }

            IKeyboardEvent keyboardEvent = evt as IKeyboardEvent;

            if (keyboardEvent != null)
            {
                character = keyboardEvent.character;
                keyCode   = keyboardEvent.keyCode;
            }

            ICommandEvent commandEvent = evt as ICommandEvent;

            if (commandEvent != null)
            {
                commandName = commandEvent.commandName;
            }

            INavigationEvent navigationEvent = evt as INavigationEvent;

            if (navigationEvent != null)
            {
                deviceType = navigationEvent.deviceType;
                if (evt is NavigationMoveEvent nme)
                {
                    navigationDirection = nme.direction;
                }
            }
        }