IEnumerator FadeOut() { Destroy(GameObject.Find("BootupText")); // Why are we doing this? So the glitch effect plays? Debug.Log("IT'S Gone"); textCanvasGrewp.alpha = 0; while (textCanvasGrewp.alpha < 1) { textCanvasGrewp.alpha += Time.deltaTime / textFadeDuration; yield return(null); } yield return(new WaitForSeconds(textShowDuration)); while (fadeCanvasGrewp.alpha < 1) { fadeCanvasGrewp.alpha += Time.deltaTime / textFadeDuration; yield return(null); } // Set scene transition fade up before moving the player in preparation for the handoff to GameStateHome fading it out CanvasGroup sceneTransitionFade = GameObject.Find("SceneTransitionFade").GetComponent <CanvasGroup>(); sceneTransitionFade.alpha = 1f; // Before sending player back home, destroy held item PickupHolder pickupHolder = FindObjectOfType <PickupHolder>(); if (pickupHolder) { Pickupable heldItem = pickupHolder.GetHeldItem(); if (heldItem) { Object.Destroy(heldItem.gameObject); } } FindObjectOfType <PlayableDirector>().enabled = false; EventBus.PublishEvent(new ReturnHomeEvent()); }
public override void DoUpdate() { if (canPause && (Input.GetKeyUp(KeyCode.Escape) || player.GetButtonUp("Pause"))) { this.stateMachine.ChangeState(pauseMenuState); return; } if (debugCheatsEnabled) { // Hold back tick, then press 'O' to cheat an objective item in front of you if (Input.GetKey(KeyCode.BackQuote) && Input.GetKeyDown(KeyCode.O)) { // Debug.Log("Cheat Keys Hit"); ObjectivePickupable objectiveItem = GameObject.FindObjectOfType <ObjectivePickupable>(); if (objectiveItem) { // Debug.Log("Objective Item Found"); if (Vector3.Distance(movement.transform.position, objectiveItem.transform.position) > 5f) { Debug.Log("Dropping " + objectiveItem + " in front of player."); Vector3 playerForwardDirection = movement.transform.TransformDirection(Vector3.forward); objectiveItem.transform.position = movement.transform.position + (playerForwardDirection * 3f) + Vector3.up; } } } } if (Input.GetKey("space") || player.GetAxis("ShowPhoto") > 0) { photo.ShowPhoto(); } else { photo.HidePhoto(); } Interactable focusedInteractable = interactionDetector.GeInteractableInFocus(); // Note: the held item is never focused // Handle Movement & Looking if (focusedInteractable == null || !focusedInteractable.IsInteractionRestrictingMovement()) { float keyboardVertical = Input.GetAxisRaw("Vertical"); float keyboardHorizontal = Input.GetAxisRaw("Horizontal"); float forward = Mathf.Abs(keyboardVertical) > 0 ? keyboardVertical : player.GetAxis("Move Vertical"); float strafe = Mathf.Abs(keyboardHorizontal) > 0 ? keyboardHorizontal : player.GetAxis("Move Horizontal"); Vector3 moveVector = Vector3.forward * forward + Vector3.right * strafe; moveVector = moveVector.sqrMagnitude > 1f ? moveVector.normalized : moveVector; bool isRunning = (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift) || player.GetAxis("Run") > 0f); movement.Move(moveVector, isRunning); } if (focusedInteractable == null || !focusedInteractable.IsInteractionRestrictingView()) { float lookX = player.GetAxis("Look Horizontal"); // Input.GetAxis("Mouse X"); float lookY = player.GetAxis("Look Vertical"); // Input.GetAxis("Mouse Y"); Vector2 lookVector = Vector2.up * lookY + Vector2.right * lookX; playerView.Look(lookVector); // Looking along vertical axis only rotates the camera view playerView.AddToYaw(lookX); // Looking along horizontal axis rotates the player } /// IsInteracting == true isInteracting == false /// focusedInteractable == null N\A | attempt pick up / drop /// -------------------------------|-------------------------------------- /// focusedInteractable != null handle multi interaction | begin interaction attempt // Handle Interactions if (focusedInteractable != null) { // Handle Beginning of Interaction if (!focusedInteractable.IsInteracting()) { // Handle Picking Up item Pickupable focusedPickupable = focusedInteractable.GetComponent <Pickupable>(); if (focusedPickupable != null && pickupHolder.GetHeldItem() == null) { // Possibly split out pick and and drop if we map these actions to different inputs bool pickUp = player.GetButtonDown("Pickup/Drop"); // Input.GetMouseButtonDown(0); if (pickUp) { Debug.Log("Pick Up at " + Time.time); } if (pickUp) { pickupHolder.TryPickupOrDrop(); // This will try to pickup when held item is null } } // Attempt beginning of iteraction else { bool interact = player.GetButtonDown("Interact"); // Input.GetMouseButtonDown(0); if (interact) { Debug.Log("Interact at " + Time.time); } if (interact && focusedInteractable != null) { interactionDetector.PerformInteraction(); } } } // Handle Multiple Input Interaction else { // Do stuff here } } // Drop item else { // Possibly split out pick and and drop if we map these actions to different inputs bool drop = player.GetButtonDown("Pickup/Drop"); // Input.GetMouseButtonDown(0); if (drop) { Debug.Log("Drop at " + Time.time); } if (drop) { pickupHolder.TryPickupOrDrop(); // This will drop the held item if not null } } }
private void UpdateInteractableInFocus() { /* For the moment, we will allow other interactables to come into focus while other interactions are ongoing * // Do not change the interactableInFocus if it is currently being interacted with * if (interactableInFocus != null && interactableInFocus.IsInteracting()) * { * return; // Exit update and do not reset interactableInFocus * } */ // Check whether a new interactable should now be in focus /// Note: A variety of events will affect what is currently the nearest valid interactable /// These events include: Player moving and/or looking around /// Player dropping current item or picking up a new one /// New interactable entering or exiting detector /// Interactable internal state changing, resulting in CanInteractWith() => true /// This effectively means that we may as well check every frame which item should be in focus if (interactablesInRange.Count > 0) { SortInteractablesInRange(); foreach (Interactable interactable in interactablesInRange) { if (!interactable) { continue; } Pickupable pickupable = interactable.GetComponent <Pickupable>(); // Ignore the currently held item if (pickupable && pickupable == pickupHolder.GetHeldItem()) { continue; } // Ignore pickupables that are currently enclosed within a container if (pickupable && Container.CheckContained(pickupable.gameObject)) { continue; } // Ignore interactables if they cannot be interacted with given the currently held item if (!interactable.CanInteractWith(pickupHolder.GetHeldItem())) { continue; } // Update outline highlight if nearest valid interactable is different from the previous interactable in focus if (interactable != interactableInFocus) { if (interactableInFocus != null) { OutlineManager.Instance.UnapplyOutline(interactableInFocus.gameObject); // Highlighted is the Highlander... } OutlineManager.Instance.ApplyOutline(interactable.gameObject); // ...There can only be one! interactableInFocus = interactable; } return; // Exit once interactableInFocus is found, whether current or new } } // If there are no valid interactables in range, set interactableInFocus to null // UnapplyOutline here rather than in OnTriggerExit? interactableInFocus = null; }