示例#1
0
        void Update()
        {
            Vector3 marblePos = Vector3.zero;

            if (isShowing)
            {
                if (rightHand.graspedObject != null)
                {
                    var marble = (rightHand.graspedObject as MonoBehaviour).GetComponent <WearableUI>();
                    if (marble != null)
                    {
                        marblePos    = marble.transform.position;
                        thrownMarble = marble;
                    }
                }

                transform.position = Vector3.Lerp(transform.position, marblePos + Vector3.up * 0.06f, 0.1f);
                transform.rotation = Quaternion.LookRotation(transform.position - Camera.main.transform.position);

                firstLine.enabled = true;
                firstLine.SetPosition(0, Vector3.Lerp(transform.position, marblePos, Mathf.Lerp(0.3f, 0.9f, fade)));
                firstLine.SetPosition(1, Vector3.Lerp(transform.position, marblePos, 0.5f));
            }
            else if (_workstationTipGiven && text.gameObject.activeInHierarchy)
            {
                transform.position = Vector3.Lerp(transform.position, thrownMarble.transform.position - (Vector3.Cross(thrownMarble.transform.position - Camera.main.transform.position, Vector3.up).normalized * 0.32f), 0.1f);
                transform.rotation = Quaternion.LookRotation(transform.position - Camera.main.transform.position);

                firstLine.SetPosition(0, Vector3.Lerp(transform.position, thrownMarble.transform.position, 0.5F));
                firstLine.SetPosition(1, Vector3.Lerp(transform.position, thrownMarble.transform.position, 0.9F));

                if (!_showWorkstationTipLine && Vector3.Distance(transform.position, thrownMarble.transform.position) < 0.4F)
                {
                    _showWorkstationTipLine = true;
                }
            }

            firstLine.enabled = isShowing || _showWorkstationTipLine;
        }
示例#2
0
        public Vector3 ValidateTargetWorkstationPosition(Vector3 targetPosition, WearableUI workstation)
        {
            float targetPosHeight = targetPosition.y;

            for (int i = 0; i < _wearableUIs.Length; i++)
            {
                if (_wearableUIs[i] == workstation || !_wearableUIs[i].IsWorkstation)
                {
                    continue;
                }
                else
                {
                    Vector3 estPosition         = _wearableUIs[i].transform.position; // established workstation position
                    Vector3 estPositionToTarget = targetPosition - estPosition;
                    float   totalDangerRadius   = workstation.GetWorkstationDangerZoneRadius() + _wearableUIs[i].GetWorkstationDangerZoneRadius();
                    if (estPositionToTarget.magnitude >= totalDangerRadius)
                    {
                        continue;
                    }
                    else
                    {
                        estPositionToTarget = new Vector3(estPositionToTarget.x, 0F, estPositionToTarget.z);
                        if (estPositionToTarget.magnitude < 0.00001F)
                        {
                            Debug.LogWarning("Workstation position validation: Too close on XZ -- doing camera logic.");
                            Vector3 cameraXZAlignedEstWorkstationPos = new Vector3(estPosition.x, Camera.main.transform.position.y, estPosition.z);
                            Vector3 estOffsetDirection = Quaternion.LookRotation(cameraXZAlignedEstWorkstationPos - Camera.main.transform.position) * Vector3.right;
                            targetPosition = estPosition + estOffsetDirection * totalDangerRadius;
                        }
                        else
                        {
                            targetPosition = estPosition + estPositionToTarget.normalized * totalDangerRadius;
                        }
                        targetPosition = new Vector3(targetPosition.x, targetPosHeight, targetPosition.z);
                    }
                }
            }
            return(targetPosition);
        }