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