Exemplo n.º 1
0
        //
        // Draw region between selected viases
        //

        public void DrawRegionBetweenSelectedViases()
        {
            //
            // Grab selected viases (minimum 3)
            //

            List <Entity> selected = GetSelectedVias();

            if (selected.Count < 3)
            {
                return;
            }

            //
            // Fill path
            //

            List <PointF> path = new List <PointF>();

            foreach (Entity entity in selected)
            {
                PointF point = new PointF();

                point.X = entity.LambdaX;
                point.Y = entity.LambdaY;

                path.Add(point);
            }

            //
            // Add new region entity
            //

            Entity item = new Entity();

            item.Type           = EntityType.Region;
            item.Label          = "";
            item.LabelAlignment = TextAlignment.GlobalSettings;
            item.Priority       = RegionPriority;
            item.Selected       = false;
            item.PathPoints     = path;
            item.LambdaX        = path[0].X;
            item.LambdaY        = path[0].Y;
            item.ColorOverride  = RegionOverrideColor;
            item.FontOverride   = null;
            item.SetParentControl(this);
            item.parent = insertionNode;

            while (DrawInProgress)
            {
                ;
            }

            insertionNode.Children.Add(item);
            SortEntities();
            Invalidate();

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
            OnEntityAdd?.Invoke(this, item, EventArgs.Empty);
        }
Exemplo n.º 2
0
        public Entity AddVias(EntityType Type, int ScreenX, int ScreenY, Color debugColor, bool update = true)
        {
            Entity item = new Entity();

            PointF point = ScreenToLambda(ScreenX, ScreenY);

            //
            // Get rid of clutching viases
            //

            List <Entity> _entities = GetEntities();

            if (debugColor == Color.Black)
            {
                foreach (Entity entity in _entities)
                {
                    if (entity.IsVias())
                    {
                        float dist = (float)Math.Sqrt(Math.Pow(entity.LambdaX - point.X, 2) +
                                                      Math.Pow(entity.LambdaY - point.Y, 2));

                        if (dist <= 1.5F)
                        {
                            return(null);
                        }
                    }
                }
            }

            item.Label         = "";
            item.LambdaX       = point.X;
            item.LambdaY       = point.Y;
            item.LambdaWidth   = 1;
            item.LambdaHeight  = 1;
            item.Type          = Type;
            item.ColorOverride = debugColor == Color.Black ? ViasOverrideColor : debugColor;
            item.Priority      = ViasPriority;
            item.FontOverride  = null;
            item.WidthOverride = 0;
            item.SetParentControl(this);
            item.parent = insertionNode;

            while (DrawInProgress)
            {
                ;
            }

            insertionNode.Children.Add(item);

            if (update)
            {
                SortEntities();
                Invalidate();
            }

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
            OnEntityAdd?.Invoke(this, item, EventArgs.Empty);

            return(item);
        }
Exemplo n.º 3
0
        //
        // Add region
        //

        public Entity AddRegion(List <Point> points, Color color, bool update = true)
        {
            //
            // Fill path (minimum 3 points)
            //

            if (points.Count < 3)
            {
                Invalidate();
                return(null);
            }

            List <PointF> path = new List <PointF>();

            foreach (Point point in points)
            {
                PointF p = ScreenToLambda(point.X, point.Y);

                path.Add(p);
            }

            //
            // Add new region entity
            //

            Entity item = new Entity();

            item.Type           = EntityType.Region;
            item.Label          = "";
            item.LabelAlignment = TextAlignment.GlobalSettings;
            item.Priority       = RegionPriority;
            item.Selected       = false;
            item.PathPoints     = path;
            item.LambdaX        = path[0].X;
            item.LambdaY        = path[0].Y;
            item.ColorOverride  = color;
            item.FontOverride   = null;
            item.SetParentControl(this);
            item.parent = insertionNode;

            while (DrawInProgress)
            {
                ;
            }

            insertionNode.Children.Add(item);

            if (update)
            {
                SortEntities();
                Invalidate();
            }

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
            OnEntityAdd?.Invoke(this, item, EventArgs.Empty);

            return(item);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Adds a entity to the simulation
        /// </summary>
        /// <param name="entity">The simulation entity</param>
        public void AddEntity(SimulationEntity entity)
        {
            //init components
            entity.Init();

            lock (_lock)
            {
                //Apply proper dimensions
                entity.Dimensions.Mult(World.WorldOptions.WorldScale);

                //Apply proper origin
                entity.Origin.X *= entity.Dimensions.X;
                entity.Origin.Y *= entity.Dimensions.Y;

                if (!_entitiesIndex.ContainsKey(entity.EntityId))
                {
                    //Add to all entities
                    _entitiesIndex.Add(entity.EntityId, entity);

                    OnEntityAdd?.Invoke(entity.EntityId, entity.EntityType == EntityType.Player);
                    GameMode?.EmitEntityAdd(this, entity);

                    //add entity to starting chunk
                    Chunk chunk = World.ChunkFromPixelLocation((int)entity.Position.X, (int)entity.Position.Y);

                    if (chunk == null)
                    {
                        return;
                    }

                    chunk.Entities.Add(entity.EntityId, entity);

                    if (entity.EntityType == EntityType.Player)
                    {
                        if (!_playerEntitiesIndex.ContainsKey(entity.EntityId))
                        {
                            _playerEntitiesIndex.Add(entity.EntityId, entity);
                        }
                    }

                    entity.ChunkKey = World.ChunkFromPixelLocation((int)entity.Position.X,
                                                                   (int)entity.Position.Y).ChunkKey;
                }

                if (_state == SimulationState.ShuttingDown)
                {
                    _state = SimulationState.Running;
                }

                if (_playerEntitiesIndex.Count <= 0 || _state == SimulationState.Running)
                {
                    return;
                }

                Start();
            }
        }
Exemplo n.º 5
0
        /*
         * @brief 實體更新
         * @param id [in] 組件編號
         * @note 限定管理器使用
         */
        public void UpdateEntity(T entity, int id, IComponent oldComponent, IComponent newComponent)
        {
            if (HasEntity(entity) == false)
            {
                return;
            }

            OnEntityRemove?.Invoke(this, entity);
            OnEntityAdd?.Invoke(this, entity);
            OnEntityUpdate?.Invoke(this, entity, id, oldComponent, newComponent);
        }
Exemplo n.º 6
0
        public Entity AddWireOnImage(EntityType Type, int StartX, int StartY, int EndX, int EndY, bool update = true)
        {
            Entity item = new Entity();

            PointF point1 = ImageToLambda(StartX, StartY);
            PointF point2 = ImageToLambda(EndX, EndY);

            float len = (float)Math.Sqrt(Math.Pow(point2.X - point1.X, 2) +
                                         Math.Pow(point2.Y - point1.Y, 2));

            if (len < 1.0F)
            {
                Invalidate();
                return(null);
            }

            item.Label         = "";
            item.LambdaX       = point1.X;
            item.LambdaY       = point1.Y;
            item.LambdaEndX    = point2.X;
            item.LambdaEndY    = point2.Y;
            item.LambdaWidth   = 1;
            item.LambdaHeight  = 1;
            item.Type          = Type;
            item.ColorOverride = WireOverrideColor;
            item.Priority      = WirePriority;
            item.FontOverride  = null;
            item.WidthOverride = 0;
            item.SetParentControl(this);
            item.parent = insertionNode;

            while (DrawInProgress)
            {
                ;
            }

            insertionNode.Children.Add(item);

            if (update)
            {
                SortEntities();
                Invalidate();
            }

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
            OnEntityAdd?.Invoke(this, item, EventArgs.Empty);

            return(item);
        }
Exemplo n.º 7
0
        private Entity AddBeacon(int ScreenX, int ScreenY, bool update = true)
        {
            Entity item = new Entity();

            PointF point = ScreenToLambda(ScreenX, ScreenY);

            item.Label         = GenBeaconName();
            item.LambdaX       = point.X;
            item.LambdaY       = point.Y;
            item.LambdaWidth   = 1;
            item.LambdaHeight  = 1;
            item.Type          = EntityType.Beacon;
            item.ColorOverride = Color.Black;
            item.Priority      = BeaconPriority;
            item.FontOverride  = null;
            item.SetParentControl(this);
            item.parent = insertionNode;

            while (DrawInProgress)
            {
                ;
            }

            insertionNode.Children.Add(item);

            if (update)
            {
                SortEntities();
                Invalidate();
            }

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
            OnEntityAdd?.Invoke(this, item, EventArgs.Empty);

            return(item);
        }
Exemplo n.º 8
0
        public Entity AddCell(EntityType Type, int StartX, int StartY, int EndX, int EndY, bool update = true)
        {
            Entity item = new Entity();

            PointF point1 = ScreenToLambda(StartX, StartY);
            PointF point2 = ScreenToLambda(EndX, EndY);

            PointF originPos = new PointF();
            PointF size      = new PointF();

            size.X = Math.Abs(point2.X - point1.X);
            size.Y = Math.Abs(point2.Y - point1.Y);

            float square = size.X * size.Y;

            if (square < 4.0F)
            {
                Invalidate();
                return(null);
            }

            if (point2.X > point1.X)
            {
                if (point2.Y > point1.Y)
                {
                    originPos.X = point1.X;
                    originPos.Y = point1.Y;
                }
                else
                {
                    originPos.X = point1.X;
                    originPos.Y = point2.Y;
                }
            }
            else
            {
                if (point2.Y > point1.Y)
                {
                    originPos.X = point2.X;
                    originPos.Y = point1.Y;
                }
                else
                {
                    originPos.X = point2.X;
                    originPos.Y = point2.Y;
                }
            }

            item.Label         = "";
            item.LambdaX       = originPos.X;
            item.LambdaY       = originPos.Y;
            item.LambdaEndX    = 1F;
            item.LambdaEndY    = 1F;
            item.LambdaWidth   = size.X;
            item.LambdaHeight  = size.Y;
            item.Type          = Type;
            item.ColorOverride = CellOverrideColor;
            item.Priority      = CellPriority;
            item.FontOverride  = null;
            item.SetParentControl(this);
            item.parent = insertionNode;

            while (DrawInProgress)
            {
                ;
            }

            insertionNode.Children.Add(item);

            if (update)
            {
                SortEntities();
                Invalidate();
            }

            OnEntityCountChanged?.Invoke(this, EventArgs.Empty);
            OnEntityAdd?.Invoke(this, item, EventArgs.Empty);

            return(item);
        }