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));
     }
 }
Example #3
0
 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;
     }
 }
Example #4
0
    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);
            }
        }
    }
Example #5
0
    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);
    }
Example #6
0
    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();
                }
            }
        }
    }
Example #7
0
    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();
                }
            }
        }
    }
Example #8
0
    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.");
    }
Example #9
0
    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);
    }