Ejemplo n.º 1
0
    bool HandleCheckMoveFn(GameObject _who, Vector3 _from, ref Vector3 _to)
    {
        MovementScript body = _who.GetComponent <MovementScript> ();

        //block rvo if is doing work
        if (_who.GetComponent <MovementScript> ().m_isDoingWork)
        {
            return(false);
        }

        _who.GetComponent <MovementScript> ().m_rvoDir  = GlobalScript.GetDirection(_who.transform.position, _to);
        _who.GetComponent <MovementScript> ().m_rvoDisp = GlobalScript.GetDistance(_who.transform.position, _to);
        _who.GetComponent <WNS_AnimationControllerScript>().HandleSpeedChange(GlobalScript.GetDistance(_to, _from));

        //kill small rvo displacements
//hardcoded prototype
        if (GlobalScript.GetDistance(_from, _to) < 0.25f * _who.GetComponent <MovementScript> ().m_maxSpeed)
        {
            _to = _from;
        }

//		if (body.m_waypointIsStrict && GlobalScript.GetAngle(body.m_rvoDir,m_currentWpDirection) > 90)
//			_to = _from;


        return(true);
    }
Ejemplo n.º 2
0
    public void Sync()
    {
        var pos = m_instance.GetAgentPosition(m_id);

        pos.y = transform.position.y;
        m_lastMoveSuccessful = !(m_static || !m_instance.CheckMove(gameObject, m_pos, ref pos) || float.IsNaN(pos.sqrMagnitude));

        if (!m_lastMoveSuccessful)
        {
            m_instance.SetAgentPosition(m_id, transform.position);
        }
        else
        {
            m_goalDirection = GetDirectionFromOnePointToAnother(m_pos, pos);
            m_rvoDirection  = GetDirectionFromOnePointToAnother(m_pos, transform.position);
            m_rvoAngle      = Mathf.Abs(GetAngleBetweenVectors(m_goalDirection, m_rvoDirection));
            //UpdateImpatience_v2(m_rvoAngle);

            if (GlobalScript.GetDistance(m_pos, pos) < 0.01f)
            {
                m_impatience += 0.01f;
            }
            else
            {
                m_impatience -= 0.01f;
            }
            m_impatience = Mathf.Clamp01(m_impatience);
            if (m_impatience > 0)
            {
                pos = transform.position * m_impatience + pos * (1 - m_impatience);
                m_instance.SetAgentPosition(m_id, pos);
            }
//
//			if (m_WNSScript)
//				m_WNSScript.HandlePushBack (ref pos, m_pos);
//
//			if (m_animationScript)
//				m_animationScript.HandleSpeedChange (pos, transform.position, m_pos);

            transform.position = pos;
            m_instance.SetAgentPosition(m_id, pos);
        }
        m_pos = m_instance.GetAgentPosition(m_id);
    }
Ejemplo n.º 3
0
    void Move()
    {
        m_wpDistance         = GlobalScript.GetDistance(transform.position, m_currentWaypoint);
        m_currentWpDirection = GlobalScript.GetDirection(transform.position, m_currentWaypoint);
        UpdateLookAheadPoint();
        Rotate();
        m_prevFrameLocation = transform.position;

        AdjustSpeed();


        if (m_isMoving)
        {
            transform.position += m_direction * m_speed;
        }
        if (m_animationScript && !m_rvoScript)
        {
            m_animationScript.HandleSpeedChange(GlobalScript.GetDistance(transform.position, m_prevFrameLocation));
        }
    }
Ejemplo n.º 4
0
    //Move look ahead point
    void UpdateLookAheadPoint()
    {
        m_rawLookAheadPoint = GlobalScript.PredictPointInDirection(transform.position, m_direction, lookAheadDistance);

        if (!m_waypointIsStrict)
        {
            if (GlobalScript.GetTwoLinesIntersection(transform.position, m_rawLookAheadPoint, m_prevWaypoint, m_currentWaypoint, ref m_intersectionPoint))
            {
                m_overflowAmount = lookAheadDistance - GlobalScript.GetDistance(transform.position, m_intersectionPoint);
                if (m_overflowAmount > 0)
                {
                    if (GlobalScript.GetDistance(m_intersectionPoint, m_currentWaypoint) < m_wpDistance)
                    {
                        m_overflowAmount = Mathf.Min(m_overflowAmount, m_speed * lookAheadDistance / 10);
                        m_lookAheadPoint = m_intersectionPoint + m_crossWpDirection * m_overflowAmount;
                        return;
                    }
                }
            }
            m_lookAheadPoint = transform.position + GlobalScript.GetDirection(transform.position, m_currentWaypoint) * lookAheadDistance;
        }
    }