public virtual void Init () {
		m_Steering = new AiSteering();
		m_Character = this.gameObject;
		m_Agent = gameObject.GetComponent<AiAgent>();
		if (m_Agent == null)
			Debug.LogError("No AiAgent component found");
	}
	// Update is called once per frame
	public override void Update () {
		//m_Character = m_Agent.gameObject;
		m_TargetRadius = Mathf.Clamp(m_TargetRadius, 0.1f, Mathf.Infinity);
		m_SlowRadius = Mathf.Clamp(m_SlowRadius, 0.1f, Mathf.Infinity);
		m_TimeToTarget = Mathf.Clamp(m_TimeToTarget, 0.0f, Mathf.Infinity);
		m_MaxSpeed = m_Agent.m_MaxSpeed;
		if (m_Agent != null && m_Character != null && m_Target != null) {
			AiSteering steering = new AiSteering();
			Vector3 direction = m_Target.transform.position - m_Character.transform.position;
			float distance = direction.sqrMagnitude;
			// Changed this validation in order to fulfill goal
			if (distance >= m_TargetRadius * m_TargetRadius) {
				float targetSpeed = 0.0f;
				if (distance >= m_SlowRadius * m_SlowRadius) {
					targetSpeed = m_MaxSpeed;
				}
				else {
					targetSpeed = m_MaxSpeed * distance / (m_SlowRadius * m_SlowRadius);
				}
				Vector3 targetVelocity = direction.normalized * targetSpeed;
				steering.Linear = targetVelocity - m_Agent.Velocity;
				steering.Linear = steering.Linear / m_TimeToTarget;
				if (steering.Linear.sqrMagnitude > m_MaxAccel * m_MaxAccel)
					steering.Linear = steering.Linear.normalized * m_MaxAccel;

			}
			m_Agent.SetSteering(steering);
			if (m_DrawLines) {
				DrawCircle(m_Target.transform.position, m_TargetRadiusColor, m_TargetRadius);
				DrawCircle(m_Target.transform.position, m_SlowRadiusColor, m_SlowRadius);
			}
		}
	}
	/// <summary>
	/// Starts this instance. Initialization.
	/// </summary>
	void Start () {
		//Debug.Log("Start AiAgent");
		m_Velocity = Vector3.zero;
		m_Orientation = 0.0f;
		m_Rotation = 0.0f;
		m_Steering = new AiSteering();
		gameObject.transform.Rotate(Vector3.up, m_Orientation, Space.Self);
	}
Example #4
0
 /// <summary>
 /// Starts this instance. Initialization.
 /// </summary>
 void Start()
 {
     //Debug.Log("Start AiAgent");
     m_Velocity    = Vector3.zero;
     m_Orientation = 0.0f;
     m_Rotation    = 0.0f;
     m_Steering    = new AiSteering();
     gameObject.transform.Rotate(Vector3.up, m_Orientation, Space.Self);
 }
 public virtual void Init()
 {
     m_Steering  = new AiSteering();
     m_Character = this.gameObject;
     m_Agent     = gameObject.GetComponent <AiAgent>();
     if (m_Agent == null)
     {
         Debug.LogError("No AiAgent component found");
     }
 }
	/// <summary>
	/// Update this instance.
	/// </summary>
	public virtual void Update () {
		//Debug.Log("Update AiAgent");
		m_Steering = new AiSteering();
		Vector3 translation = m_Velocity * Time.deltaTime;
		m_Orientation += m_Rotation * Time.deltaTime;
		m_Orientation = m_Orientation < 0.0f ? 360.0f + m_Orientation : m_Orientation;
		m_Orientation = m_Orientation > 360.0f ? m_Orientation - 360.0f : m_Orientation;
		transform.rotation = new Quaternion();
		transform.Rotate(Vector3.up, m_Orientation, Space.Self);
		transform.Translate(translation, Space.World);
	}
	public override AiSteering GetSteering () {
		m_Steering = new AiSteering();
		if (m_Agent != null) {
			m_Steering.Linear = m_Agent.m_MaxSpeed * GetOriAsVec(m_Agent.Orientation);
			m_Steering.Angular = m_MaxRotation * Random.Range(-1.0f, 1.0f);
			m_Agent.Orientation = GetNewOrientation(m_Agent.Orientation, m_Steering.Linear);
			if (m_DrawLines) {
				Debug.DrawRay(transform.position, GetOriAsVec(m_Agent.Orientation) * 1.5f, m_ColorVelocity);
			}
		}
		return m_Steering;
	}
	public override AiSteering GetSteering ()
	{
		if (m_Agent != null && m_Target != null) {
			AiSteering steering = new AiSteering();
			steering.Linear = m_Character.transform.position - m_Target.transform.position;
			steering.Linear = steering.Linear.normalized * m_MaxAccel;
			m_Agent.SetSteering(steering);
			if (m_DrawLines) {
				Debug.DrawRay(m_Character.transform.position, m_Agent.Velocity, m_LineColor);
			}
		}
		return base.GetSteering ();
	}
Example #9
0
    /// <summary>
    /// Update this instance.
    /// </summary>
    public virtual void Update()
    {
        //Debug.Log("Update AiAgent");
        m_Steering = new AiSteering();
        Vector3 translation = m_Velocity * Time.deltaTime;

        m_Orientation     += m_Rotation * Time.deltaTime;
        m_Orientation      = m_Orientation < 0.0f ? 360.0f + m_Orientation : m_Orientation;
        m_Orientation      = m_Orientation > 360.0f ? m_Orientation - 360.0f : m_Orientation;
        transform.rotation = new Quaternion();
        transform.Rotate(Vector3.up, m_Orientation, Space.Self);
        transform.Translate(translation, Space.World);
    }
Example #10
0
 /// <summary>
 /// Updates the steering.
 /// </summary>
 /// <param name="steering">Steering.</param>
 /// <param name="isAdditive">If set to <c>true</c> is additive.</param>
 public void SetSteering(AiSteering steering, float weight = 1.0f)
 {
     //Debug.Log("SetSteering AiAgent");
     if (!m_Blend && !m_Blended)
     {
         m_Steering = steering;
         m_Blended  = true;
     }
     else
     {
         m_Steering.Linear  += (weight * steering.Linear);
         m_Steering.Angular += (weight * steering.Angular);
     }
 }
 public override AiSteering GetSteering()
 {
     if (m_Agent != null && m_Target != null)
     {
         AiSteering steering = new AiSteering();
         steering.Linear = m_Character.transform.position - m_Target.transform.position;
         steering.Linear = steering.Linear.normalized * m_MaxAccel;
         m_Agent.SetSteering(steering);
         if (m_DrawLines)
         {
             Debug.DrawRay(m_Character.transform.position, m_Agent.Velocity, m_LineColor);
         }
     }
     return(base.GetSteering());
 }
 public override AiSteering GetSteering()
 {
     m_Steering = new AiSteering();
     if (m_Agent != null)
     {
         m_Steering.Linear   = m_Agent.m_MaxSpeed * GetOriAsVec(m_Agent.Orientation);
         m_Steering.Angular  = m_MaxRotation * Random.Range(-1.0f, 1.0f);
         m_Agent.Orientation = GetNewOrientation(m_Agent.Orientation, m_Steering.Linear);
         if (m_DrawLines)
         {
             Debug.DrawRay(transform.position, GetOriAsVec(m_Agent.Orientation) * 1.5f, m_ColorVelocity);
         }
     }
     return(m_Steering);
 }
	public override AiSteering GetSteering () {
		m_Steering = new AiSteering();
		if (m_Agent != null) {
			Vector3 position = gameObject.transform.position;
			Vector3 rayVector = m_Agent.Velocity.normalized * m_LookAhead;
			rayVector += position;
			Vector3 direction = rayVector - position;
			RaycastHit hit;
			if (m_DrawLines) {
				Debug.DrawRay(gameObject.transform.position, direction, Color.red);
			}
			if (Physics.Raycast(position, direction, out hit, m_LookAhead)) {
				position = hit.point + hit.normal * m_AvoidDistance;
				m_Target.transform.position = position;
				m_Steering = base.GetSteering();
			}
		}
		return m_Steering;
	}
	public override AiSteering GetSteering ()
	{
		m_Steering = new AiSteering();
		if (m_Agent != null && m_Targets.Length > 0) {
			for (int i = 0; i < m_Targets.Length; i++) {
				if (m_Targets[i] == this.gameObject) {
					continue;
				}
				Vector3 direction = gameObject.transform.position - m_Targets[i].transform.position;
				float distance = direction.sqrMagnitude;
				float strenght = 0.0f;
				if (distance < (m_Threshold * m_Threshold)) {
					strenght = Mathf.Min(m_DecayCoefficient / distance, m_MaxAccel);
					m_Steering.Linear += strenght * direction.normalized;
				}
			}
		}
		return m_Steering;
	}
	/// <summary>
	/// Update this instance.
	/// </summary>
	public override void Update () {
		m_Steering = new AiSteering();
		// Movement
		m_Velocity.x = Input.GetAxis("Horizontal");
		m_Velocity.z = Input.GetAxis("Vertical");
		m_Velocity = Quaternion.AngleAxis(45, Vector3.up) * m_Velocity;
		m_Velocity *= m_MaxSpeed;
		// Crosshair
		if (m_Crosshair != null) {
			m_Crosshair.transform.position = GetScreenToWorldPos(Input.mousePosition);
			gameObject.transform.LookAt(m_Crosshair.transform.position);
		}
		else {
			gameObject.transform.LookAt(m_Velocity + transform.position);
		}

		Vector3 translation = m_Velocity * Time.deltaTime;
		transform.Translate(translation, Space.World);
		m_Orientation = transform.rotation.eulerAngles.y;
	}
 // Update is called once per frame
 public override void Update()
 {
     //m_Character = m_Agent.gameObject;
     m_TargetRadius = Mathf.Clamp(m_TargetRadius, 0.1f, Mathf.Infinity);
     m_SlowRadius   = Mathf.Clamp(m_SlowRadius, 0.1f, Mathf.Infinity);
     m_TimeToTarget = Mathf.Clamp(m_TimeToTarget, 0.0f, Mathf.Infinity);
     m_MaxSpeed     = m_Agent.m_MaxSpeed;
     if (m_Agent != null && m_Character != null && m_Target != null)
     {
         AiSteering steering  = new AiSteering();
         Vector3    direction = m_Target.transform.position - m_Character.transform.position;
         float      distance  = direction.sqrMagnitude;
         // Changed this validation in order to fulfill goal
         if (distance >= m_TargetRadius * m_TargetRadius)
         {
             float targetSpeed = 0.0f;
             if (distance >= m_SlowRadius * m_SlowRadius)
             {
                 targetSpeed = m_MaxSpeed;
             }
             else
             {
                 targetSpeed = m_MaxSpeed * distance / (m_SlowRadius * m_SlowRadius);
             }
             Vector3 targetVelocity = direction.normalized * targetSpeed;
             steering.Linear = targetVelocity - m_Agent.Velocity;
             steering.Linear = steering.Linear / m_TimeToTarget;
             if (steering.Linear.sqrMagnitude > m_MaxAccel * m_MaxAccel)
             {
                 steering.Linear = steering.Linear.normalized * m_MaxAccel;
             }
         }
         m_Agent.SetSteering(steering);
         if (m_DrawLines)
         {
             DrawCircle(m_Target.transform.position, m_TargetRadiusColor, m_TargetRadius);
             DrawCircle(m_Target.transform.position, m_SlowRadiusColor, m_SlowRadius);
         }
     }
 }
Example #17
0
 public override AiSteering GetSteering()
 {
     m_Steering = new AiSteering();
     if (m_Agent != null)
     {
         Vector3 position  = gameObject.transform.position;
         Vector3 rayVector = m_Agent.Velocity.normalized * m_LookAhead;
         rayVector += position;
         Vector3    direction = rayVector - position;
         RaycastHit hit;
         if (m_DrawLines)
         {
             Debug.DrawRay(gameObject.transform.position, direction, Color.red);
         }
         if (Physics.Raycast(position, direction, out hit, m_LookAhead))
         {
             position = hit.point + hit.normal * m_AvoidDistance;
             m_Target.transform.position = position;
             m_Steering = base.GetSteering();
         }
     }
     return(m_Steering);
 }
 public override AiSteering GetSteering()
 {
     m_Steering = new AiSteering();
     if (m_Agent != null && m_Targets.Length > 0)
     {
         for (int i = 0; i < m_Targets.Length; i++)
         {
             if (m_Targets[i] == this.gameObject)
             {
                 continue;
             }
             Vector3 direction = gameObject.transform.position - m_Targets[i].transform.position;
             float   distance  = direction.sqrMagnitude;
             float   strenght  = 0.0f;
             if (distance < (m_Threshold * m_Threshold))
             {
                 strenght           = Mathf.Min(m_DecayCoefficient / distance, m_MaxAccel);
                 m_Steering.Linear += strenght * direction.normalized;
             }
         }
     }
     return(m_Steering);
 }
    /// <summary>
    /// Update this instance.
    /// </summary>
    public override void Update()
    {
        m_Steering = new AiSteering();
        // Movement
        m_Velocity.x = Input.GetAxis("Horizontal");
        m_Velocity.z = Input.GetAxis("Vertical");
        m_Velocity   = Quaternion.AngleAxis(45, Vector3.up) * m_Velocity;
        m_Velocity  *= m_MaxSpeed;
        // Crosshair
        if (m_Crosshair != null)
        {
            m_Crosshair.transform.position = GetScreenToWorldPos(Input.mousePosition);
            gameObject.transform.LookAt(m_Crosshair.transform.position);
        }
        else
        {
            gameObject.transform.LookAt(m_Velocity + transform.position);
        }

        Vector3 translation = m_Velocity * Time.deltaTime;

        transform.Translate(translation, Space.World);
        m_Orientation = transform.rotation.eulerAngles.y;
    }
	/// <summary>
	/// Updates the steering.
	/// </summary>
	/// <param name="steering">Steering.</param>
	/// <param name="isAdditive">If set to <c>true</c> is additive.</param>
	public void SetSteering (AiSteering steering, float weight = 1.0f) {
		//Debug.Log("SetSteering AiAgent");
		if (!m_Blend && !m_Blended) {
			m_Steering = steering;
			m_Blended = true;
		}
		else {
			m_Steering.Linear += (weight * steering.Linear);
			m_Steering.Angular += (weight * steering.Angular);
		}
	}