private void RemoveAssignment(Assignment assignment, Action <VoxelData> dieCallback) { if (assignment.HasUnit) { IMatchPlayerView playerView = m_players[m_playerIndex]; IMatchUnitAssetView unitOrAsset = playerView.GetUnitOrAsset(assignment.UnitId); if (unitOrAsset != null) { unitOrAsset.Assignment = null; } } assignment.HasUnit = false; assignment.UnitId = 0; if (assignment.HasTarget) { IMatchPlayerView targetPlayerView = m_players[assignment.TargetPlayerIndex]; IMatchUnitAssetView targetUnitOrAsset = targetPlayerView.GetUnitOrAsset(assignment.TargetId); if (targetUnitOrAsset != null && targetUnitOrAsset.TargetForAssignments != null) { targetUnitOrAsset.TargetForAssignments.Remove(assignment); if (targetUnitOrAsset.TargetForAssignments.Count == 0) { targetUnitOrAsset.TargetForAssignments = null; //destroy preview here if (VoxelData.IsPreview(targetUnitOrAsset.Data.Type)) { targetUnitOrAsset.DataController.SetHealth(0); if (dieCallback != null) { dieCallback(targetUnitOrAsset.Data); } } } } assignment.HasTarget = false; assignment.TargetId = 0; assignment.TargetPlayerIndex = -1; } AssignmentGroup group; if (m_groupIdToAssignments.TryGetValue(assignment.GroupId, out group)) { group.Assignments.Remove(assignment); if (group.Assignments.Count == 0) { m_groupIdToAssignments.Remove(assignment.GroupId); } } }
public void RemoveTargetFromAssignments(IMatchUnitAssetView unitOrAsset, Action <VoxelData> dieCallback) { List <Assignment> targetForAssignments = unitOrAsset.TargetForAssignments; if (targetForAssignments == null) { return; } unitOrAsset.TargetForAssignments = null; //destroy preview here if (VoxelData.IsPreview(unitOrAsset.Data.Type)) { unitOrAsset.DataController.SetHealth(0); if (dieCallback != null) { dieCallback(unitOrAsset.Data); } } for (int i = 0; i < targetForAssignments.Count; ++i) { Assignment assignment = targetForAssignments[i]; assignment.HasTarget = false; assignment.TargetId = 0; assignment.TargetPlayerIndex = -1; if (!assignment.HasUnit) { AssignmentGroup group; if (m_groupIdToAssignments.TryGetValue(assignment.GroupId, out group)) { group.Assignments.Remove(assignment); if (group.Assignments.Count == 0) { m_groupIdToAssignments.Remove(assignment.GroupId); } } } } }