Example #1
0
    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;
        }
    }
Example #2
0
    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;
            }
        }
    }
Example #3
0
 private void OnEnable()
 {
     runtimeActionList = null;
     inventoryManager  = null;
 }