Ejemplo n.º 1
0
    private void Update()
    {
        //if (!m_trulyOn || !m_LR.enabled) return; // End early if the line isn't even enabled
        if (!m_trulyOn || pointerState == PointerState.Off)
        {
            return;
        }
        Vector3 forwardPosition = FindForwardRaycast();
        Vector3 bottomPosition  = FindBottomRaycast(forwardPosition);

        m_positions = new List <Vector3>();

        if (pointerState == PointerState.On)
        {
            m_LR.positionCount = numPositions + 1;
            if (m_lineType == LineType.BezierCurve)
            {
                m_positions = BezierCurves.DetermineQuadraticCurve(numPositions, transform.position, forwardPosition, bottomPosition);
            }
            else
            {
                m_positions = BezierCurves.DetermineLinearCurve(numPositions, transform.position, forwardPosition);
            }
            m_LR.SetPositions(m_positions.ToArray());
            m_LR.enabled = true;

            if (m_LR.materials.Length == 0)
            {
                return;
            }

            Color m = defaultColor;
            if (m_lineType == LineType.BezierCurve)
            {
                if (m_downwardRaycastTarget != null)
                {
                    m = hitColor;
                }
            }
            else
            {
                if (m_forwardRaycastTarget != null)
                {
                    m = hitColor;
                }
            }
            m_LR.materials[0].SetColor("_Color", m);
        }
        else
        {
            m_LR.enabled = false;
        }
    }
Ejemplo n.º 2
0
    private List <Vector3> GetPoints()
    {
        List <Vector3> points = new List <Vector3>();
        Vector3        destination;

        switch (m_pointerType)
        {
        case (pointerType.Target):
            m_pointerDest = CheckRaycastForward(layerMaskHover);
            destination   = CheckRaycastDownward(m_pointerDest);
            switch (m_laserType)
            {
            case (laserType.Laser):
                points = BezierCurves.DetermineLinearCurve(m_numPoints, m_raycastOrigin.position, m_pointerDest, 0);
                break;

            case (laserType.Parabolic):
                points = BezierCurves.DetermineQuadraticCurve(m_numPoints, m_raycastOrigin.position, m_pointerDest, destination, 0);
                break;
            }
            break;

        case (pointerType.Teleport):
            m_pointerDest = (m_grabber != null && m_grabber.grabbedObject != null) ? CheckRaycastForward(combinedLayerMask) : CheckRaycastForward(layerMaskLocomotion);
            destination   = CheckRaycastDownward(m_pointerDest);
            switch (m_laserType)
            {
            case (laserType.Laser):
                points = BezierCurves.DetermineLinearCurve(m_numPoints, m_raycastOrigin.position, m_pointerDest, 0);
                if (m_LineRenderer.enabled)
                {
                    m_locomotionPosition = m_pointerDest;
                }
                break;

            case (laserType.Parabolic):
                points = BezierCurves.DetermineQuadraticCurve(m_numPoints, m_raycastOrigin.position, m_pointerDest, destination, 0);
                if (m_LineRenderer.enabled)
                {
                    m_locomotionPosition = destination;
                }
                break;
            }
            break;

        case (pointerType.Set_Target):
            destination = (m_raycastTarget != null) ? m_raycastTarget.transform.position : m_raycastOrigin.position;
            points      = BezierCurves.DetermineLinearCurve(m_numPoints, m_raycastOrigin.position, destination, 0);
            break;
        }

        return(points);
    }
Ejemplo n.º 3
0
    /// In this function, we 1) perform the necessary raycasts to get our pointer's target, and 2) generate the necessary points to generate the pointer's line renderers
    private List <Vector3> GetPoints()
    {
        List <Vector3> points = new List <Vector3>();
        Vector3        destination;

        // The end destination of our pointer and the lines the line renderer will render with is dependent on the type of pointer we're using.
        switch (m_pointerType)
        {
        case (pointerType.Target):
            // If we're a targeting/selection pointer, we default to simply raycasting forward, then raycasting downward.
            m_pointerDest = CheckRaycastForward(layerMaskHover);
            destination   = CheckRaycastDownward(m_pointerDest);
            // Based on our laser type, the line renderer will generate points to create either a curve or straight line.
            switch (m_laserType)
            {
            case (laserType.Laser):
                points = BezierCurves.DetermineLinearCurve(m_numPoints, m_raycastOrigin.position, m_pointerDest, 0);
                break;

            case (laserType.Parabolic):
                points = BezierCurves.DetermineQuadraticCurve(m_numPoints, m_raycastOrigin.position, m_pointerDest, destination, 0);
                break;
            }
            break;

        case (pointerType.Teleport):
            // Our pointer will only get a destination based on if we're grabbing anything in the hand. This is because an object being held in the hand can block the pointer, which is inconducive if we want to teleport elsewhere.
            m_pointerDest = (m_grabber != null && m_grabber.grabbedObject != null) ? CheckRaycastForward(combinedLayerMask) : CheckRaycastForward(layerMaskLocomotion);
            destination   = CheckRaycastDownward(m_pointerDest);
            // Based on our laser type, the line renderer will generate points to create either a curve or straight line.
            switch (m_laserType)
            {
            case (laserType.Laser):
                points = BezierCurves.DetermineLinearCurve(m_numPoints, m_raycastOrigin.position, m_pointerDest, 0);
                if (m_LineRenderer.enabled)
                {
                    m_locomotionPosition = m_pointerDest;
                }
                break;

            case (laserType.Parabolic):
                points = BezierCurves.DetermineQuadraticCurve(m_numPoints, m_raycastOrigin.position, m_pointerDest, destination, 0);
                if (m_LineRenderer.enabled)
                {
                    m_locomotionPosition = destination;
                }
                break;
            }
            break;

        case (pointerType.Set_Target):
            // In this case, we have a target pre-selected already. Our pointer destination is merely either that target's position, or nothing (aka the origin point, which will not generate a line)
            destination = (m_raycastTarget != null) ? m_raycastTarget.transform.position : m_raycastOrigin.position;
            // The line renderer's points, in this case, is always going to be a linear line.
            points = BezierCurves.DetermineLinearCurve(m_numPoints, m_raycastOrigin.position, destination, 0);
            break;
        }

        // We return the points we've generated.
        return(points);
    }