public void AddTarget(EzLockOnTarget newTarget) { if (!m_nearbyTargets.Contains(newTarget)) { m_nearbyTargets.Add(newTarget); } }
public override void ExitState() { if (m_currentTarget != null) { m_currentTarget.SetIconActive(false); m_currentTarget = null; } }
private void SetInitialTarget() { // Find the closest Target // for now set to the initial one in the list m_currentTarget = m_nearbyTargets[0]; m_currentTarget.SetIconActive(); }
public void MoveToNextTarget(Vector3 direction) { // if one target early out if (m_nearbyTargets.Count <= 1) { return; } // if two targets, toggle between them if (m_nearbyTargets.Count == 2) { m_currentTarget.SetIconActive(false); m_currentTarget = m_currentTarget == m_nearbyTargets[0] ? m_nearbyTargets[1] : m_nearbyTargets[0]; m_currentTarget.SetIconActive(true); return; } // if more than two targets: // Find the target nearest to the direction we want to move EzLockOnTarget nearestTarget = m_currentTarget; EzLockOnTarget nextTarget = null; Vector3 relativeDirection = direction; float currentNearestDistance = float.MaxValue; float sqDstance = float.MaxValue; for (int i = 0; i < m_nearbyTargets.Count; ++i) { nextTarget = m_nearbyTargets[i]; if (nextTarget == m_currentTarget) { continue; } relativeDirection = nextTarget.transform.position - m_cameraTransform.position; if (Vector3.Dot(relativeDirection, direction) > 0) { //sqDstance = relativeDirection.sqrMagnitude; sqDstance = (m_currentTarget.transform.position - nextTarget.transform.position).sqrMagnitude; if (sqDstance < currentNearestDistance) { nearestTarget = nextTarget; currentNearestDistance = sqDstance; } } } m_currentTarget.SetIconActive(false); m_currentTarget = nearestTarget; m_currentTarget.SetIconActive(true); }
private void CycleTargets() { // if one target early out if (m_nearbyTargets.Count <= 1) { return; } // if two targets, toggle between them if (m_nearbyTargets.Count == 2) { m_currentTarget = m_currentTarget == m_nearbyTargets[0] ? m_nearbyTargets[1] : m_nearbyTargets[0]; return; } m_currentTarget.SetIconActive(false); m_currentTarget = m_nearbyTargets[CycleIndex(m_nearbyTargets.IndexOf(m_currentTarget), m_nearbyTargets.Count)]; m_currentTarget.SetIconActive(true); }
public void RemoveTarget(EzLockOnTarget targetToRemove) { if (m_nearbyTargets.Contains(targetToRemove)) { m_nearbyTargets.Remove(targetToRemove); if (m_currentTarget == targetToRemove) { m_currentTarget.SetIconActive(false); m_currentTarget = null; if (m_nearbyTargets.Count > 0) { m_currentTarget = m_nearbyTargets[0]; m_currentTarget.SetIconActive(true); } else { m_isActive = false; m_controlledCamera.SetState(m_controlledCamera.DefaultState); } } } }