Esempio n. 1
0
        private void onMouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                this.selection.Region = Rectangle.Empty;
                this.selectedRegion   = this.selection.Region;

                foreach (MapEntity entity in EntitiesToSelect)
                {
                    if (!SelectedEntities.Contains <MapEntity>(entity))
                    {
                        if (!ShiftDown)
                        {
                            SelectedEntities.Add(entity);
                        }
                    }
                    if (ShiftDown)
                    {
                        SelectedEntities.Remove(entity);
                    }
                }

                EntitiesToSelect.Clear();
            }
        }
Esempio n. 2
0
        private void EntityChanged(object sender, PropertyChangedEventArgs e)
        {
            IVisualElement entity = (IVisualElement)sender;

            if (e.PropertyName == "IsSelected")
            {
                if (entity.IsSelected && !SelectedEntities.Contains(entity))
                {
                    SelectedEntities.Add(entity);
                }
                else if (!entity.IsSelected && SelectedEntities.Contains(entity))
                {
                    SelectedEntities.Remove(entity);
                }
            }
        }
Esempio n. 3
0
 public void SetSelectedItem(TEntity entity)
 {
     foreach (var item in SelectedEntities.ToList().Where(item => !Equals(item, entity)))
     {
         SelectedEntities.Remove(item);
     }
     if (!SelectedEntities.Contains(entity))
     {
         SelectedEntities.Add(entity);
     }
     _operationScopeContext.SelectItemsAsync <TEntity>(SelectedEntities);
     if (_editEntityOperationMediator != null)
     {
         _editEntityOperationMediator.PerformOperation();
     }
 }
        public void SelectEntry([NotNull] ResourceTableEntry entry)
        {
            if (!ResourceManager.TableEntries.Contains(entry))
            {
                return;
            }

            var entity = entry.Container;

            if (!SelectedEntities.Contains(entity))
            {
                SelectedEntities.Add(entity);
            }

            SelectedTableEntries.Clear();
            SelectedTableEntries.Add(entry);
        }
        private void SelectedEntities_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            // handle items where selection was removed
            foreach (IVisualElement element in MapEntities)
            {
                if (!SelectedEntities.Contains(element))
                {
                    element.IsSelected = false;
                }
            }

            // set selection position
            _selectionLocation = new Point(0, 0);

            foreach (IVisualElement element in SelectedEntities)
            {
                _selectionLocation.X += element.X;
                _selectionLocation.Y += element.Y;
            }
            _selectionLocation.X /= SelectedEntities.Count;
            _selectionLocation.Y /= SelectedEntities.Count;

            OnPropertyChanged("EntitiesSelected");
            OnPropertyChanged("SelectionLocation");

            // set correct gizmo orientation
            if (_selectedEntities.Count == 1 && !GizmoIsRotating)
            {
                GizmoOrientation = _selectedEntities[0].Orientation;
            }
            else if (!GizmoIsRotating)
            {
                GizmoOrientation = 0;
            }

            // update rotation capabilities
            AllowRotation = true;
            foreach (IVisualElement entity in SelectedEntities)
            {
                if (entity is VisualCornerManipulator)
                {
                    AllowRotation = false;
                }
            }
        }
        public void SelectEntry([NotNull] ResourceTableEntry entry)
        {
            if (!ResourceManager.TableEntries.Contains(entry))
            {
                return;
            }

            var entity = entry.Container;

            ClearFiltersRequest?.Invoke(this, EventArgs.Empty);

            if (!SelectedEntities.Contains(entity))
            {
                SelectedEntities.Add(entity);
            }

            SelectedTableEntries.Clear();
            SelectedTableEntries.Add(entry);
        }
Esempio n. 7
0
        public void Tick()
        {
            float deltaTime = m_dtStopwatch.ElapsedMilliseconds / 1000f;

            m_dtStopwatch.Restart();
            m_gizmos.ResetList();

            // Update all of the entities in this world so they can move around, etc.
            foreach (WComponent component in m_componentList)
            {
                component.Tick(deltaTime);
            }

            // Poll for new debug primitives.
            if (Map != null)
            {
                foreach (var room in Map.Rooms)
                {
                    if (!room.Visible)
                    {
                        continue;
                    }

                    foreach (var ent in room.Entities)
                    {
                        if (!Map.LayerIsVisible(ent.Layer))
                        {
                            continue;
                        }

                        if (SelectedEntities.Contains(ent))
                        {
                            ent.OnDrawGizmosSelected();
                        }
                        else
                        {
                            ent.OnDrawGizmos();
                        }
                    }
                }

                if (Map.Stage != null)
                {
                    if (Map.Stage.Visible)
                    {
                        foreach (var ent in Map.Stage.Entities)
                        {
                            if (!Map.LayerIsVisible(ent.Layer))
                            {
                                continue;
                            }

                            if (SelectedEntities.Contains(ent))
                            {
                                ent.OnDrawGizmosSelected();
                            }
                            else
                            {
                                ent.OnDrawGizmos();
                            }
                        }
                    }
                }
            }

            // Badly placed hack to test stuff.
            if (Input.GetMouseButtonDown(0))
            {
                Ray mouseRay   = m_renderSystem.m_editorCamera.ViewportPointToRay(Input.MousePosition);
                var hitResults = RaycastAll(mouseRay);
                Console.WriteLine("Hit {0} Objects.", hitResults.Count);
                for (int i = 0; i < hitResults.Count; i++)
                {
                    Console.WriteLine("\t{0}", hitResults[i]);
                }

                // If they're holding control, toggle the status of whether or not it is selected.
                if (Input.GetKey(System.Windows.Input.Key.LeftCtrl))
                {
                    foreach (var result in hitResults)
                    {
                        if (SelectedEntities.Contains(result))
                        {
                            SelectedEntities.Remove(result);
                        }
                        else
                        {
                            SelectedEntities.Add(result);
                        }
                    }
                }
                else
                {
                    SelectedEntities.Clear();
                    if (hitResults.Count > 0)
                    {
                        SelectedEntities.Add(hitResults[0]);
                    }
                }
            }

            // Finalize the debug primitive list.
            m_gizmos.FinalizePrimitiveBatch();

            // Update the render system this frame and draw everything.
            m_renderSystem.RenderFrame();

            // Update the internal input state so that we can compare against the previous state, ie: for first press, etc.
            m_input.Internal_UpdateInputState();
        }
Esempio n. 8
0
 public bool IsSelected(IUnit unit)
 {
     return(SelectedEntities.Contains(unit));
 }
    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);
                    }
                }
            }
        }
    }