public override void PerformOperation() { if (Order == null) { throw new InvalidOperationException("Order is not defined to add documents."); } foreach (var document in SelectedEntities.Where(document => !Order.Documents.Contains(document))) { Order.Documents.Add(document); } }
private void HandleMouseInput() { if (Input.GetMouseButtonDown(0)) { CancelBuildMode(); isSelecting = true; mouseStartPosition = Input.mousePosition; } if (Input.GetMouseButtonUp(0)) { bool isMultiselecting = Input.GetButton("Multiselect"); if (!isMultiselecting) { DeselectAll(false); } if (isSelecting) { Bounds bounds = GetViewportBounds(mouseStartPosition, Input.mousePosition); if (bounds.size.x > 0.01 && bounds.size.y > 0.01) { //selection box is large enough, select entities inside IEnumerable <Entity> entitiesToConsider; if (OverallStateManager.Instance.IsOfflineTest) { entitiesToConsider = FindObjectsOfType <Entity>(); } else { entitiesToConsider = clientEntityManager.MySquad.Values; } foreach (Entity hitEntity in entitiesToConsider.Where(x => IsWithinBounds(bounds, x.transform.position))) { if (!SelectedEntities.Contains(hitEntity)) { SelectEntity(hitEntity); } else if (isMultiselecting) { DeselectEntity(hitEntity, true); } } uiManager.UpdateSelectedEntities(SelectedEntities); } else { //selection box is too small, do point selection Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity, LayerManager.Instance.clickableMask)) { Entity hitEntity = hit.transform.gameObject.GetComponentInParent <Entity>(); if (hitEntity != null && hitEntity.playerId == clientGameManager.MyPlayer.id) { if (!SelectedEntities.Contains(hitEntity)) { SelectEntity(hitEntity); } else if (isMultiselecting) { DeselectEntity(hitEntity, true); } } } uiManager.UpdateSelectedEntities(SelectedEntities); } } isSelecting = false; } if (Input.GetMouseButtonUp(1)) { if (SelectedEntities.Count > 0) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity, LayerManager.Instance.clickableMask)) { Entity hitEntity = hit.transform.gameObject.GetComponentInParent <Entity>(); if (hitEntity != null && hitEntity.teamId != clientGameManager.MyPlayer.teamId) { IssueAttackCommand(SelectedEntities .Where(x => x.CanAttackTarget(hitEntity)) .Select(x => x.uniqueId).ToList(), hitEntity.uniqueId); } else { IssueMoveCommand(SelectedEntities.Where(x => x.canMove).Select(x => x.uniqueId).ToList(), hit.point); } } } } }