public void InitiateObjectInteraction(RaycastHit interactableHit, KinematicObject kinematicObject)
 {
     if (InteractableObject.GetComponent <Tree>() != null)
     {
         kinematicObject.SetPlayerCanMove(false);
         _buildView.TreeClicked(interactableHit);
     }
     else if (InteractableObject.GetComponent <Base>() != null)
     {
         kinematicObject.SetPlayerCanMove(false);
         _buildView.BaseClicked(interactableHit);
     }
     else if (InteractableObject.GetComponent <SpaceshipPart>() != null)
     {
         _buildView.SpaceshipPartClicked(interactableHit);
     }
     else if (InteractableObject.GetComponent <Spaceship>() != null)
     {
         _buildView.SpaceshipClicked(interactableHit);
     }
 }
Ejemplo n.º 2
0
    private void Update()
    {
        //TODO find a better way to pass players positions
        PlayerPosition = transform.position;

        if (Input.GetMouseButtonDown(0))
        {
            if ((Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began))
            {
                if (EventSystem.current.IsPointerOverGameObject(Input.touches[0].fingerId))
                {
                    return;
                }
            }

            if (EventSystem.current.IsPointerOverGameObject())
            {
                return;
            }

            if (GameManager.CurrentGameMode == GameManager.GameMode.BuildingMode)
            {
                return;
            }

            if (!_playerAgent.enabled)
            {
                _playerAgent.path.ClearCorners();
                _kinematicObject.SetPlayerCanMove(true);
            }

            _rootPopUpController.DisablePopUps();

            RaycastHit moveHit = _kinematicObject.GetClickPosition(_moveableLayers, out _bMoveRaycastSucceeded);

            if (_bMoveRaycastSucceeded)
            {
                _kinematicObject.Move(moveHit.point);
            }

            RaycastHit interactableHit = _kinematicObject.GetClickPosition(_interactibleLayers, out _bInteractableRaycastSucceeded);

            if (_bInteractableRaycastSucceeded)
            {
                PlayerCurrentState = PlayerState.AboutToInteract;

                _kinematicObject.Move(interactableHit.point);

                _interactableManager.InteractableObject = interactableHit.transform.gameObject;
                _interactableHit = interactableHit;
            }
            else
            {
                PlayerCurrentState = PlayerState.Kinematic;

                _interactableManager.InteractableObject = null;
            }
        }

        if (PlayerCurrentState == PlayerState.AboutToInteract)
        {
            RaycastHit hit = _kinematicObject.IsPlayerReadyToInteract(_interactionRange, _interactibleLayers, out var hitsomething);

            if (hitsomething)
            {
                if (hit.collider.gameObject == _interactableManager.InteractableObject)
                {
                    PlayerInteracting();
                }
            }
        }

        if (PlayerCurrentState == PlayerState.AboutToRepairFence)
        {
            if (Math.Abs(PlayerPosition.x - _playerAgent.destination.x) < 0.1f && Math.Abs(PlayerPosition.z - _playerAgent.destination.z) < 0.1f)
            {
                _kinematicObject.SetPlayerCanMove(false);
                _interactableManager.InitiateObjectCreation(PopUp.PopUpType.RepairFence);
            }
        }
    }