private void GetReferences() { if (GameObject.FindWithTag(Tags.gameEngine) && GameObject.FindWithTag(Tags.gameEngine).GetComponent <RuntimeActionList>()) { runtimeActionList = GameObject.FindWithTag(Tags.gameEngine).GetComponent <RuntimeActionList>(); } if (AdvGame.GetReferences() && AdvGame.GetReferences().inventoryManager) { inventoryManager = AdvGame.GetReferences().inventoryManager; } }
private IEnumerator UseObject(InteractionType _interactionType) { Hotspot _hotspot = hotspot; hotspot.Deselect(); hotspot = null; player.EndPath(); Button _button = null; bool isUnhandled = false; if (_interactionType == InteractionType.Use) { _button = _hotspot.useButton; } else if (_interactionType == InteractionType.Examine) { _button = _hotspot.lookButton; } else if (_interactionType == InteractionType.Inventory) { foreach (Button invButton in _hotspot.invButtons) { if (invButton.invID == runtimeInventory.selectedID) { _button = invButton; break; } } if (_button == null) { isUnhandled = true; } } if (_button != null && _button.playerAction != PlayerAction.DoNothing) { stateHandler.gameState = GameState.Cutscene; Vector3 lookVector = _hotspot.transform.position - player.transform.position; lookVector.y = 0; player.SetLookDirection(lookVector, false); if (_button.playerAction == PlayerAction.TurnToFace) { while (player.IsTurning()) { yield return(new WaitForFixedUpdate()); } } Vector3 targetPos = _hotspot.transform.position; if (_button.playerAction == PlayerAction.WalkToMarker && _hotspot.walkToMarker) { if (sceneSettings && sceneSettings.navMesh && sceneSettings.navMesh.GetComponent <Collider>()) { Vector3[] pointArray = sceneSettings.navMesh.GetPointsArray(player.transform.position, _hotspot.walkToMarker.transform.position); player.MoveAlongPoints(pointArray, false); targetPos = pointArray [pointArray.Length - 1]; } else { player.MoveToPoint(_hotspot.walkToMarker.transform.position, false); } while (player.activePath) { yield return(new WaitForFixedUpdate()); } } else if (lookVector.magnitude > 2f && _button.playerAction == PlayerAction.WalkTo) { if (sceneSettings && sceneSettings.navMesh && sceneSettings.navMesh.GetComponent <Collider>()) { Vector3[] pointArray = sceneSettings.navMesh.GetPointsArray(player.transform.position, _hotspot.transform.position); player.MoveAlongPoints(pointArray, false); targetPos = pointArray [pointArray.Length - 1]; } else { player.MoveToPoint(_hotspot.transform.position, false); } if (_button.setProximity) { _button.proximity = Mathf.Max(_button.proximity, 1f); targetPos.y = player.transform.position.y; while (Vector3.Distance(player.transform.position, targetPos) > _button.proximity && player.activePath) { yield return(new WaitForFixedUpdate()); } } else { yield return(new WaitForSeconds(0.6f)); } } } else { player.charState = CharState.Decelerate; } player.EndPath(); yield return(new WaitForSeconds(0.1f)); runtimeInventory.SetNull(); if (isUnhandled) { // Unhandled event if (runtimeInventory.unhandledHotspot) { RuntimeActionList runtimeActionList = this.GetComponent <RuntimeActionList>(); runtimeInventory.SetNull(); runtimeActionList.Play(runtimeInventory.unhandledHotspot); } } else { if (_button.interaction) { _button.interaction.Interact(); } else { Debug.Log("No interaction object found for " + _hotspot.name); stateHandler.gameState = GameState.Normal; } } }
private void OnEnable() { runtimeActionList = null; inventoryManager = null; }