/// <summary>Trims given list of units to return a list that fits the group's formation size</summary> private void TrimUnitsToFitFormationSetting(FormationSetting setting) { int trimCount = Mathf.Max(0, EnlistedUnits.Count - setting.Size); for (int i = 0; i < trimCount; i++) { EnlistedUnits.RemoveAt(EnlistedUnits.Count - 1); } }
/// <summary>Updates the formation positions with formation setting</summary> private void UpdateFormationPositions(FormationSetting setting) { ClearFormationPositions(); formationName = setting.Name; gizmoColor = setting.GizmoColor; gizmoRadius = setting.GizmoRadius; for (int i = 0; i < setting.Size; i++) { FormationPosition position = Instantiate(prefabFormationPosition, transform).GetComponent<FormationPosition>(); position.transform.localPosition = setting.LocalPositions[i]; position.SetGizmo(gizmoColor, gizmoRadius); formationPositions.Add(position); } }
/// <summary>Tries outputting a setting with given name. Returns whether it was succesfull or not</summary> public static bool GetSettingWithName(this List <FormationSetting> settings, string name, out FormationSetting setting) { for (int i = 0; i < settings.Count; i++) { if (settings[i].Name == name) { setting = settings[i]; return(true); } } setting = default; return(false); }
/// <summary>Called when the formation has been updated, it makes sure units move towards the new formation positions</summary> private void OnFormationUpdate(FormationSetting newSetting) { TrimUnitsToFitFormationSetting(newSetting); ReAssignUnits(); MoveUnitsInFormation(); }