예제 #1
0
        private void Start()
        {
            GetComponent <PhotonView>().OwnershipTransfer = OwnershipOption.Takeover;

            if (TargetManager.Instance.Type == TargetManager.PlayerType.Primary)
            {
#if UNITY_ANDROID
                _trackable = PickupTarget.Instance.GetComponent <TrackableBehaviour>();
#endif

                lineRenderer = gameObject.AddComponent <LineRenderer>();
                lineRenderer.widthMultiplier = 0.001f;
                lineRenderer.material        = OOIUI.Instance.HeightLineMaterial;


                PickupTarget.Instance.GotPlayer += player =>
                {
                    var treveris = Treveris.GetTreverisByPlayer(player.GetComponent <PhotonView>().Owner);
                    if (transform.IsChildOf(treveris.transform))
                    {
                        GetComponent <PhotonView>().TransferOwnership(PhotonNetwork.LocalPlayer);
                    }
                };

                PickupTarget.Instance.LostPlayer += player =>
                {
                    var treveris = Treveris.GetTreverisByPlayer(player.GetComponent <PhotonView>().Owner);
                    if (transform.IsChildOf(treveris.transform))
                    {
                        GetComponent <PhotonView>().TransferOwnership(player.GetComponent <PhotonView>().Owner);
                    }
                };
            }
        }
예제 #2
0
        // Start is called before the first frame update
        void Start()
        {
            TargetManager.Instance.OnConnection += () =>
            {
                PhotonNetwork.SetInterestGroups((byte)PhotonNetwork.LocalPlayer.ActorNumber, true);
            };

            Scaler = new GameObject("Scaler");
            Scaler.transform.parent        = transform;
            Scaler.transform.localPosition = Vector3.zero;
            Scaler.transform.localScale    = new Vector3(Scale, Scale, Scale);

            LostPlayer += (player) =>
            {
                var t        = Current.transform;
                var localPos = t.localPosition;
                t.parent        = MapTarget.Instance.Scaler.transform;
                t.localPosition = localPos;
                Current         = null;

                StartCoroutine(removeTreverisNextFrame());
                IEnumerator removeTreverisNextFrame()
                {
                    yield return(new WaitForEndOfFrame());

                    Treveris.RemoveTreveris();
                    _treveris = null;
                }
            };
        }
예제 #3
0
        public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
        {
            if (IsEmpty)
            {
                return;
            }

            if (stream.IsWriting)
            {
                if (PickupTarget.Instance.Current == null)
                {
                    return;
                }

                stream.SendNext(IsLocked);

                if (!IsLocked)
                {
                    var localTransform =
                        Treveris.GetTreverisByPlayer(PickupTarget.Instance.Current.GetComponent <PhotonView>().Owner)
                        .transform;
                    var position = localTransform.InverseTransformPoint(transform.position);

                    this.m_Direction      = position - this.m_StoredPosition;
                    this.m_StoredPosition = position;

                    stream.SendNext(position);
                    stream.SendNext(this.m_Direction);

                    stream.SendNext(Quaternion.Inverse(localTransform.transform.rotation) * transform.rotation);
                }
                stream.SendNext(transform.lossyScale.x / PickupTarget.Instance.Current.transform.lossyScale.x);
            }
            else
            {
                this.IsLocked = (bool)stream.ReceiveNext();

                if (!IsLocked)
                {
                    this.m_NetworkPosition = (Vector3)stream.ReceiveNext();
                    this.m_Direction       = (Vector3)stream.ReceiveNext();

                    if (m_firstTake)
                    {
                        transform.localPosition = this.m_NetworkPosition;
                        this.m_Distance         = 0f;
                    }
                    else
                    {
                        float lag = Mathf.Abs((float)(PhotonNetwork.Time - info.SentServerTime));
                        this.m_NetworkPosition += this.m_Direction * lag;
                        this.m_Distance         = Vector3.Distance(transform.localPosition, this.m_NetworkPosition);
                    }

                    this.m_NetworkRotation = (Quaternion)stream.ReceiveNext();

                    if (m_firstTake)
                    {
                        this.m_Angle            = 0f;
                        transform.localRotation = this.m_NetworkRotation;
                    }
                    else
                    {
                        this.m_Angle = Quaternion.Angle(transform.localRotation, this.m_NetworkRotation);
                    }

                    if (m_firstTake)
                    {
                        m_firstTake = false;
                    }
                }

                var scale = (float)stream.ReceiveNext();
                transform.localScale = new Vector3(scale, scale, scale);
            }
        }
예제 #4
0
        // Update is called once per frame
        void Update()
        {
            if (_prevStatus != _trackableBehaviour.CurrentStatus)
            {
                OnStatusChange.Invoke(_trackableBehaviour.CurrentStatus);
                _prevStatus = _trackableBehaviour.CurrentStatus;
            }

            if (_trackableBehaviour.CurrentStatus == TrackableBehaviour.Status.NO_POSE)
            {
                return;
            }

            if (Current == null && !_locked)
            {
                foreach (var synchronizer in MapTarget.Instance.GetComponentsInChildren <PlayerSynchronizer>())
                {
                    if (Vector3.Distance(transform.position, synchronizer.transform.position) < PickupDistance && MapTarget.Instance.GetComponent <TrackableBehaviour>().CurrentStatus != TrackableBehaviour.Status.NO_POSE && GetComponent <TrackableBehaviour>().CurrentStatus == TrackableBehaviour.Status.TRACKED)
                    {
                        Current = synchronizer;
                        StartCoroutine(AnimateTransition());
                    }
                }
            }

            if (Current != null && !_locked && ARUI.Instance.LockCam.isOn)
            {
                if (_treveris != null)
                {
                    var t             = _treveris.transform;
                    var localPosition = Current.transform.localPosition;
                    t.localPosition = t.localScale.x * -new Vector3(localPosition.x, 0, localPosition.z);
                }
            }


            if (_treveris != null && Current != null)
            {
                /*
                 * foreach (Transform child in _treveris.transform)
                 * {
                 *  if (Vector3.Distance(child.position, Current.transform.position) > ViewDistance)
                 *  {
                 *      foreach (var inChild in child.GetComponentsInChildren<Renderer>())
                 *      {
                 *          inChild.enabled = false;
                 *      }
                 *  }
                 * }
                 *
                 *
                 * foreach (var childRenderer in _treveris.GetComponentsInChildren<Renderer>())
                 * {
                 *
                 *  if (Vector3.Distance(childRenderer.bounds.ClosestPoint(Current.transform.position), Current.transform.position) > ViewDistance)
                 *  {
                 *      if (childRenderer.enabled)
                 *          childRenderer.enabled = false;
                 *  }
                 *  else
                 *  {
                 *      if (!childRenderer.enabled)
                 *          childRenderer.enabled = true;
                 *  }
                 * }
                 */
            }


            IEnumerator AnimateTransition()
            {
                _locked = true;

                var startingLocalPos = Current.transform.localPosition;

                _treveris = Treveris.GetTreverisByPlayer(Current.GetComponent <PhotonView>().Owner);
                Current.transform.parent = _treveris.transform;

                var elapsedTime   = 0f;
                var startingPos   = Current.transform.position;
                var startingScale = Current.transform.localScale;


                while (elapsedTime < TransitionTime)
                {
                    if (Current == null)
                    {
                        _locked = false;
                        yield break;
                    }

                    Current.transform.position   = Vector3.Lerp(startingPos, transform.position, (elapsedTime / TransitionTime));
                    Current.transform.localScale = Vector3.Lerp(startingScale, Vector3.one, (elapsedTime / TransitionTime));
                    elapsedTime += Time.deltaTime;
                    yield return(new WaitForEndOfFrame());
                }

                if (Current != null)
                {
                    Current.transform.localPosition = startingLocalPos;
                    Current.transform.localScale    = Vector3.one;
                    GotPlayer.Invoke(Current.gameObject);
                }

                _locked = false;
            }
        }
예제 #5
0
        void Start()
        {
            PickupTarget.Instance.OnStatusChange += status =>
            {
                if (status == TrackableBehaviour.Status.NO_POSE)
                {
                    Deselect();
                }
            };

            PickupTarget.Instance.LostPlayer += player =>
            {
                Deselect();
            };

            Highlight.GetComponent <Button>().onClick.AddListener(() =>
            {
                CurrentSelected.Interact(OOI.OOI.InteractionFlag.Highlight);
                Deselect();
            });
            Animation.GetComponent <Button>().onClick.AddListener(() =>
            {
                CurrentSelected.Interact(OOI.OOI.InteractionFlag.Animation);
                Deselect();
            });
            Text.GetComponent <Button>().onClick.AddListener(() =>
            {
                CurrentSelected.Interact(OOI.OOI.InteractionFlag.Text);
                Deselect();
            });
            Video.GetComponent <Button>().onClick.AddListener(() =>
            {
                CurrentSelected.Interact(OOI.OOI.InteractionFlag.Video);
                Deselect();
            });
            Slider.GetComponent <Slider>().onValueChanged.AddListener(value =>
            {
                if (CurrentSelected != null)
                {
                    CurrentSelected.transform.localScale = new Vector3(value, value, value);
                }
            });
            TangibleLock.GetComponent <Toggle>().onValueChanged.AddListener(value =>
            {
                if (CurrentSelected == null)
                {
                    return;
                }

                if (value)
                {
                    var target = CurrentSelected.GetComponentInParent <TangibleTarget>();
                    CurrentSelected.transform.parent =
                        Treveris.GetTreverisByPlayer(PickupTarget.Instance.Current.photonView.Owner).transform;
                    CurrentSelected.GetComponent <TangibleView>().IsLocked = true;
                    target.AddOOI("Tangibles/" + ((AndroidTargetManager)TargetManager.Instance).EmptyTangible.name);
                    Delete.gameObject.SetActive(true);
                }
                else
                {
                    var targets = FindObjectsOfType <TangibleTarget>().Where(target => target.GetComponent <ImageTargetBehaviour>().CurrentStatus !=
                                                                             TrackableBehaviour.Status.NO_POSE && target.Current.GetComponent <TangibleView>().IsEmpty).ToList();

                    TangibleTarget closest = null;

                    foreach (var target in targets)
                    {
                        if (closest == null ||
                            Vector3.Distance(closest.transform.position, CurrentSelected.transform.position) >
                            Vector3.Distance(target.transform.position, CurrentSelected.transform.position))
                        {
                            closest = target;
                        }
                    }

                    PhotonNetwork.Destroy(closest.GetComponentInChildren <TangibleView>().gameObject);

                    CurrentSelected.transform.parent        = closest.transform;
                    CurrentSelected.transform.localPosition = Vector3.zero;
                    CurrentSelected.transform.localRotation = Quaternion.identity;
                    CurrentSelected.GetComponent <TangibleView>().IsLocked = false;
                    Delete.gameObject.SetActive(false);
                }
                //Deselect();
            });
            Dropdown.GetComponent <TMP_Dropdown>().onValueChanged.AddListener(value =>
            {
                if (CurrentSelected == null)
                {
                    return;
                }

                var current = CurrentSelected;
                Deselect();
                var target = current.GetComponentInParent <TangibleTarget>();
                PhotonNetwork.Destroy(current.gameObject);
                target.AddOOI("Tangibles/" + Dropdown.GetComponent <TMP_Dropdown>().options[value].text);
            });

            var options = ((AndroidTargetManager)AndroidTargetManager.Instance).TangiblePrefabs.Select(o => o.name)
                          .ToList();

            options.Insert(0, ((AndroidTargetManager)AndroidTargetManager.Instance).EmptyTangible.name);
            Dropdown.GetComponent <TMP_Dropdown>().AddOptions(options);

            Delete.GetComponent <Button>().onClick.AddListener(() =>
            {
                var current = CurrentSelected.gameObject;
                Deselect();
                PhotonNetwork.Destroy(current);
            });

            OnSelect += ooi =>
            {
                foreach (Transform child in transform)
                {
                    child.gameObject.SetActive(false);
                }

                if (PickupTarget.Instance.Current == null)
                {
                    return;
                }

                _buttons?.Clear();
                _buttons = GetButtons(ooi);

                if (ooi.Flags.HasFlag(OOI.OOI.InteractionFlag.Scale))
                {
                    Slider.gameObject.SetActive(true);
                    var scale  = ooi.transform.localScale.x;
                    var slider = Slider.GetComponent <Slider>();
                    slider.minValue = scale / 5f;
                    slider.value    = scale;
                    slider.maxValue = scale * 5f;
                }
                if (ooi.Flags.HasFlag(OOI.OOI.InteractionFlag.Changeable))
                {
                    var dropdown = Dropdown.GetComponent <TMP_Dropdown>();
                    var o        = dropdown.options.First(data => ooi.gameObject.name.Equals(data.text + "(Clone)"));
                    dropdown.value = dropdown.options.IndexOf(o);
                    Dropdown.gameObject.SetActive(true);
                }

                if (ooi.GetComponent <TangibleView>() && ooi.Flags.HasFlag(OOI.OOI.InteractionFlag.Lockable))
                {
                    TangibleLock.gameObject.SetActive(true);
                    TangibleLock.GetComponent <Toggle>().isOn = ooi.GetComponent <TangibleView>().IsLocked;
                }

                if (ooi.GetComponent <TangibleView>() && ooi.GetComponent <TangibleView>().IsLocked)
                {
                    Delete.gameObject.SetActive(true);
                }

                _center = new Vector3();
                var renderers = ooi.GetComponentsInChildren <MeshRenderer>();

                if (renderers.Length > 0)
                {
                    foreach (var child in renderers)
                    {
                        _center += child.bounds.center;
                    }
                    _center = _center / renderers.Length;
                    _center = _center - ooi.transform.position;
                }
            };

            OnDeselect += () =>
            {
                foreach (Transform child in transform)
                {
                    child.gameObject.SetActive(false);
                }
            };
        }