void CheckInteractable()
    {
        var              ray = GameDataManager.MainCamera.ScreenPointToRay(Input.mousePosition);
        RaycastHit       hit;
        MonoInteractable obj = null;

        if (Physics.Raycast(ray, out hit))
        {
            var dist = hit.collider.transform.position - this.transform.position;
            if (dist.sqrMagnitude < interactableDistance * interactableDistance &&
                !EventSystem.current.IsPointerOverGameObject())
            {
                obj = hit.collider.GetComponentInParent <MonoInteractable>();
            }
        }

        if (obj == currentObj)
        {
            return;
        }

        if (obj == null && currentObj != null && currentObj.IsInteracting)
        {
            currentObj.StopInteracting();
        }
        currentObj = obj;
    }
 void Awake()
 {
     _rb              = GetComponent <Rigidbody>();
     _interact        = GetComponent <MonoInteractable>();
     _coinSound       = gameObject.AddComponent <StudioEventEmitter>();
     _coinSound.Event = "event:/coin";
 }
Exemple #3
0
 void OnTriggerExit(Collider other)
 {
     if (LayerMaskUtil.GetLayerMask(MyLayers.Interactable).Contains(other.gameObject.layer))
     {
         if (other.GetComponent <MonoInteractable>() == currentInteractable)
         {
             currentInteractable = null;
             EventBus.Post(new InteractableChangedEvent());
         }
     }
 }
Exemple #4
0
 void OnTriggerEnter(Collider other)
 {
     if (LayerMaskUtil.GetLayerMask(MyLayers.Interactable).Contains(other.gameObject.layer))
     {
         var interactble = other.gameObject.GetComponent <MonoInteractable>();
         if (interactble && interactble.enabled)
         {
             currentInteractable = interactble;
             EventBus.Post(new InteractableChangedEvent());
         }
     }
 }
Exemple #5
0
 public void StandMissionStart()
 {
     disableControlCount.Add(MonoStandMission.CTRL_KEY);
     currentInteractable = null;
     EventBus.Post(new InteractableChangedEvent());
 }
Exemple #6
0
    void FixedUpdate()
    {
        var vel   = _rb.velocity;
        var input = InputUtil.Player;

        if (input == null || !GameContext.Instance || !GameContext.Instance.mainCamera)
        {
            return;
        }

        if (dead || disableControlCount.Count > 0)
        {
            vel.x        = vel.z = 0f;
            _rb.velocity = vel;
            return;
        }

        var mainCamera = GameContext.Instance.mainCamera.transform;
        var xz         = new Vector2(vel.x, vel.z);

        var fwd = mainCamera.forward;

        fwd.y = 0;
        fwd   = fwd.normalized;

        var right = new Vector3(fwd.z, 0, -fwd.x);

        var     targetDir3 = (right * input.GetAxis(InputUtil.AxisX)) + (fwd * input.GetAxis(InputUtil.AxisY));
        Vector2 targetDir  = new Vector2(targetDir3.x, targetDir3.z);

        float acc, targetSpeed;

        if (targetDir.sqrMagnitude > .1f)
        {
            targetDir = targetDir.normalized;
            // xz = targetDir * Vector2.Dot(xz, targetDir);
            acc         = moveAcc;
            targetSpeed = moveSpeed;
        }
        else
        {
            targetDir   = xz;
            acc         = moveDeacc;
            targetSpeed = .0f;
        }

        var curSpeed = xz.magnitude;
        var newSpeed = Mathf.MoveTowards(curSpeed, targetSpeed, acc * Time.deltaTime);

        if (targetDir.sqrMagnitude > .1f)
        {
            var newVelXZ = newSpeed * targetDir.normalized;
            _rb.velocity = new Vector3(newVelXZ.x, vel.y, newVelXZ.y);
        }

        if (!(currentInteractable is null) && (!currentInteractable || !currentInteractable.isActiveAndEnabled))
        {
            currentInteractable = null;
            EventBus.Post(new InteractableChangedEvent());
        }
    }