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); } }; } }
// 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; } }; }
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); } }
// 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; } }
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); } }; }