public void RemoveButton(ButtonInteractable button) { if (pressedButtons.Contains(button) && button.isDoorMoving == false) { pressedButtons.Remove(button); } }
public void TryOpen(ButtonInteractable button) { pressedButtons.Add(button); if (pressedButtons.Count == 2) { StartCoroutine(Open(closedRotation, openRotation, 1.0f)); } }
private void Update() { m_LineRenderer.enabled = m_CubeRefracted; if (m_CubeRefracted) { m_CubeRefracted = false; if (!m_CubeRefracted && m_LastButtonHit != null && m_CreateRefraction) { m_LastButtonHit.ForceStop(); m_LastButtonHit = null; } m_CreateRefraction = false; } }
private void OnTriggerExit2D(Collider2D other) { GameObject source = other.gameObject; ButtonInteractable bti = source.GetComponent <ButtonInteractable>(); if (bti) { for (int i = 0; i < myListener.Length; i++) { ButtonListener thisListerner = myListener[i]; thisListerner.OnButtonTrigger(gameObject); thisListerner.OnButtonTriggerExit(gameObject); } } }
private void CastLaser() { if (GameController.m_GameFinished) { return; } if (!l_RayActive) { return; } Vector3 l_EndRaycastPosition = Vector3.forward * m_MaxDistance; RaycastHit l_RaycastHit; if (Physics.Raycast(new Ray(m_LineRenderer.transform.position, m_LineRenderer.transform.forward), out l_RaycastHit, m_MaxDistance, m_CollisionLayerMask.value)) { l_EndRaycastPosition = Vector3.forward * l_RaycastHit.distance; try { if (l_RaycastHit.collider.gameObject.GetComponent <RefractionCube>() != null) { l_RaycastHit.collider.GetComponent <RefractionCube>().CreateRefraction(); } else if (l_RaycastHit.collider.gameObject.GetComponent <LaserPortal>() != null) { l_RaycastHit.collider.GetComponent <LaserPortal>().Collide(l_RaycastHit.point, this.gameObject.transform.forward); } else if (l_RaycastHit.collider.gameObject.GetComponent <ButtonInteractable>() != null) { m_LastButtonHit = l_RaycastHit.collider.gameObject.GetComponent <ButtonInteractable>(); m_LastButtonHit.Interact(); } else if (l_RaycastHit.collider.gameObject.GetComponent <PlayerController>() != null) { l_RaycastHit.collider.gameObject.GetComponent <IDamageable>().DealDamage(999, l_RaycastHit.collider); } else if (m_LastButtonHit != null) { m_LastButtonHit.ForceStop(); m_LastButtonHit = null; } } catch { } } m_LineRenderer.SetPosition(1, l_EndRaycastPosition); }
private void OnTriggerExit2D(Collider2D other) { GameObject source = other.gameObject; ButtonInteractable bti = source.GetComponent <ButtonInteractable>(); if (bti) { Weight sourceWeight = bti.myWeight; if (sourceWeight >= requiredWight) { standingCount--; if (standingCount == 0) { NotifyTriggersOff(); } } } }
private void OnTriggerEnter2D(Collider2D other) { //Debug.Log(other); GameObject source = other.gameObject; ButtonInteractable bti = source.GetComponent <ButtonInteractable>(); if (bti) { Weight sourceWeight = bti.myWeight; if (sourceWeight >= requiredWight) { standingCount++; if (standingCount == 1) { NotifyTriggersOn(); } } } }
private void OnTriggerEnter2D(Collider2D other) { //Debug.Log(other); GameObject source = other.gameObject; ButtonInteractable bti = source.GetComponent <ButtonInteractable>(); if (bti) { Weight sourceWeight = bti.myWeight; if (sourceWeight >= requiredWight) { for (int i = 0; i < myListener.Length; i++) { ButtonListener thisListerner = myListener[i]; thisListerner.OnButtonTrigger(gameObject); thisListerner.OnButtonTriggerEnter(gameObject); } } } throw new Exception("Old button AI used. Please use new one."); }
public void CreateRefraction(Vector3 l_Position, Vector3 l_Direction) //This is a mess and took me 4+ hours. { if (m_CubeRefracted) { return; } this.m_CreateRefraction = true; this.m_CubeRefracted = true; this.m_LineRenderer.enabled = true; #region Vector3 Declarations Vector3 l_EndRayCastPosition; Vector3 l_CollisionPointOnLocal; Vector3 l_CollisionPointOnWorld; Vector3 l_DirectionOnWorld; #endregion l_CollisionPointOnLocal = m_AttachedPortal.m_MirrorPortal.transform.InverseTransformPoint(l_Position); l_CollisionPointOnLocal = new Vector3(-l_CollisionPointOnLocal.x, l_CollisionPointOnLocal.y, -l_CollisionPointOnLocal.z); m_LineRenderer.SetPosition(0, l_CollisionPointOnLocal); //Setting the starting position! l_EndRayCastPosition = l_CollisionPointOnLocal + l_Direction * m_MaxDistance; //Changing a lot! l_CollisionPointOnWorld = m_AttachedPortal.transform.TransformPoint(l_CollisionPointOnLocal); l_DirectionOnWorld = m_AttachedPortal.m_MirrorPortal.transform.InverseTransformDirection(l_Direction); l_DirectionOnWorld = this.m_AttachedPortal.transform.TransformDirection(l_DirectionOnWorld); l_DirectionOnWorld = new Vector3(-l_DirectionOnWorld.x, l_DirectionOnWorld.y, -l_DirectionOnWorld.z); //Moving from Local to World! For the raycast! //Time for a Raycast! Ray l_WorldRay = new Ray(l_CollisionPointOnWorld + (l_DirectionOnWorld * 0.1f), l_DirectionOnWorld); RaycastHit l_RayCastHit; if (Physics.Raycast(l_WorldRay, out l_RayCastHit, m_MaxDistance, m_CollisionLayerMask)) { l_EndRayCastPosition = this.gameObject.transform.InverseTransformPoint(l_RayCastHit.point); //The hit in raycast is WORLD, we need it in LOCAL for the LineRenderer! try { if (l_RayCastHit.collider.gameObject.GetComponent <RefractionCube>() != null) { l_RayCastHit.collider.gameObject.GetComponent <RefractionCube>().CreateRefraction(); } if (l_RayCastHit.collider.gameObject.GetComponent <ButtonInteractable>() != null) { m_LastButtonHit = l_RayCastHit.collider.gameObject.GetComponent <ButtonInteractable>(); m_LastButtonHit.Interact(); } else if (m_LastButtonHit != null) { m_LastButtonHit.ForceStop(); m_LastButtonHit = null; } else if (l_RayCastHit.collider.gameObject.GetComponent <IDamageable>() != null) { l_RayCastHit.collider.gameObject.GetComponent <IDamageable>().DealDamage(999, l_RayCastHit.collider); } } catch { //Fail! But it has to! } } //End raycast! m_LineRenderer.SetPosition(1, l_EndRayCastPosition); }