Exemple #1
0
        public void Finish()
        {
            for (int i = 0; i < 8; ++i)
            {
                for (int j = 0; j < data[i].Count; ++j)
                {
                    if (data[i].Exists(x => x.pos.X == (data[i][j].pos.X - 1) && x.pos.Y == (data[i][j].pos.Y)))
                    {
                        data[i][j] = new ComponentPixel(data[i][j].pos, data[i][j].type, (byte)(data[i][j].IsEdge | (1 << 0)));
                    }
                    if (data[i].Exists(x => x.pos.X == (data[i][j].pos.X) && x.pos.Y == (data[i][j].pos.Y - 1)))
                    {
                        data[i][j] = new ComponentPixel(data[i][j].pos, data[i][j].type, (byte)(data[i][j].IsEdge | (1 << 1)));
                    }
                    if (data[i].Exists(x => x.pos.X == (data[i][j].pos.X + 1) && x.pos.Y == (data[i][j].pos.Y)))
                    {
                        data[i][j] = new ComponentPixel(data[i][j].pos, data[i][j].type, (byte)(data[i][j].IsEdge | (1 << 2)));
                    }
                    if (data[i].Exists(x => x.pos.X == (data[i][j].pos.X) && x.pos.Y == (data[i][j].pos.Y + 1)))
                    {
                        data[i][j] = new ComponentPixel(data[i][j].pos, data[i][j].type, (byte)(data[i][j].IsEdge | (1 << 3)));
                    }
                }
            }
            ClickAction = AllClickActions[ClickAction_Type];

            pindescpos = new Vector2[8, pindesc.Length];
            for (int i = 0; i < pindesc.Length; ++i)
            {
                int     count = 0;
                Vector2 pos   = Vector2.Zero;
                for (int j = 0; j < data[0].Count; ++j)
                {
                    if (data[0][j].type - (i + Sim_Component.PINOFFSET + 1) == 0)
                    {
                        pos += data[0][j].pos.ToVector2();
                        count++;
                    }
                }
                if (count == 0)
                {
                    int breaki = 1;
                }
                pos /= count;
                pindescpos[0, i] = pos;
                pindescpos[1, i] = new Vector2(-pos.Y, pos.X);
                pindescpos[2, i] = new Vector2(-pos.X, -pos.Y);
                pindescpos[3, i] = new Vector2(pos.Y, -pos.X);
                pindescpos[4, i] = new Vector2(pos.X, -pos.Y);
                pindescpos[5, i] = new Vector2(pos.Y, pos.X);
                pindescpos[6, i] = new Vector2(-pos.X, pos.Y);
                pindescpos[7, i] = new Vector2(-pos.Y, -pos.X);
            }
        }
Exemple #2
0
 public void addData(ComponentPixel dat)
 {
     //if (dat.type > Sim_Component.PINOFFSET && dat.type - Sim_Component.PINOFFSET > pin_num)
     //    pin_num = dat.type - Sim_Component.PINOFFSET;
     data[(0) % 8].Add(dat);
     data[(1) % 8].Add(new ComponentPixel(new Point(-dat.pos.Y, dat.pos.X), dat.type));
     data[(2) % 8].Add(new ComponentPixel(new Point(-dat.pos.X, -dat.pos.Y), dat.type));
     data[(3) % 8].Add(new ComponentPixel(new Point(dat.pos.Y, -dat.pos.X), dat.type));
     data[(4) % 8].Add(new ComponentPixel(new Point(dat.pos.X, -dat.pos.Y), dat.type));
     data[(5) % 8].Add(new ComponentPixel(new Point(dat.pos.Y, dat.pos.X), dat.type));
     data[(6) % 8].Add(new ComponentPixel(new Point(-dat.pos.X, dat.pos.Y), dat.type));
     data[(7) % 8].Add(new ComponentPixel(new Point(-dat.pos.Y, -dat.pos.X), dat.type));
     for (int i = 0; i < 8; ++i)
     {
         CalculateBounds(i);
     }
     RecalculatePinNum();
 }
        public override void UpdateSpecific()
        {
            if (new Rectangle(pos.pos, size).Contains(App.mo_states.New.Position) && !DenyInteraction && !(UI_Handler.IsInScrollable && !UI_Handler.IsInScrollable_Bounds.Contains(App.mo_states.New.Position)))
            {
                #region Position and Zoom

                if (App.kb_states.New.IsKeyDown(Keys.W))
                {
                    worldpos.Y += 10;
                }
                if (App.kb_states.New.IsKeyDown(Keys.S))
                {
                    worldpos.Y -= 10;
                }
                if (App.kb_states.New.IsKeyDown(Keys.A))
                {
                    worldpos.X += 10;
                }
                if (App.kb_states.New.IsKeyDown(Keys.D))
                {
                    worldpos.X -= 10;
                }

                worldpos.X = (int)(worldpos.X);
                worldpos.Y = (int)(worldpos.Y);

                if (App.mo_states.New.ScrollWheelValue != App.mo_states.Old.ScrollWheelValue)
                {
                    if (App.mo_states.New.ScrollWheelValue < App.mo_states.Old.ScrollWheelValue && zoom > minmaxzoom.X) // Zooming Out
                    {
                        zoom -= 1;
                        Vector2 diff = worldpos - (App.mo_states.New.Position.ToVector2() - pos.pos.ToVector2());
                        worldpos = (App.mo_states.New.Position.ToVector2() - pos.pos.ToVector2()) + diff / 2;
                        UpdatePinTextPos();
                    }
                    else if (App.mo_states.New.ScrollWheelValue > App.mo_states.Old.ScrollWheelValue && zoom < minmaxzoom.Y) // Zooming In
                    {
                        zoom += 1;
                        Vector2 diff = worldpos - (App.mo_states.New.Position.ToVector2() - pos.pos.ToVector2());
                        worldpos += diff;
                        UpdatePinTextPos();
                    }
                }
                int mouse_worldpos_X, mouse_worldpos_Y;
                Screen2worldcoo_int(App.mo_states.New.Position.ToVector2() - absolutpos.ToVector2(), out mouse_worldpos_X, out mouse_worldpos_Y);
                if (mouse_worldpos_X >= 0 && mouse_worldpos_X < GridSize && mouse_worldpos_Y >= 0 && mouse_worldpos_Y < GridSize && currot == 0 && !UI_EditComp_Window.IsInOverlayMode)
                {
                    if (App.mo_states.New.LeftButton == ButtonState.Pressed)
                    {
                        // Place Pixel
                        if (pixel.Exists(x => x.pos.X == mouse_worldpos_X - Origin.X && x.pos.Y == mouse_worldpos_Y - Origin.Y))
                        {
                            int            index   = pixel.FindIndex(x => x.pos.X == mouse_worldpos_X - Origin.X && x.pos.Y == mouse_worldpos_Y - Origin.Y);
                            ComponentPixel curtype = pixel[index];
                            if (MathHelper.Clamp(curtype.type, 0, (Sim_Component.PINOFFSET + 1)) != curplacetype)
                            {
                                int type = curplacetype;
                                if (curtype.type == 4)
                                {
                                    int index2 = ledsegmentpixel_pos.FindIndex(x => x.X == (mouse_worldpos_X) && x.Y == (mouse_worldpos_Y));
                                    ledsegmentpixel_pos.RemoveAt(index2);
                                    ledsegmentpixel.RemoveAt(index2);
                                }
                                pixel[index] = new ComponentPixel(new Point(mouse_worldpos_X - Origin.X, mouse_worldpos_Y - Origin.Y), (byte)type);
                                if (type == 4)
                                {
                                    ledsegmentpixel.Add(0);
                                    ledsegmentpixel_pos.Add(new Point(mouse_worldpos_X, mouse_worldpos_Y));
                                }
                                if (type == 5)
                                {
                                    ApplyPixel(true);
                                }
                                else
                                {
                                    ApplyPixel();
                                }
                            }
                        }
                        else
                        {
                            int type = curplacetype;
                            pixel.Add(new ComponentPixel(new Point(mouse_worldpos_X - Origin.X, mouse_worldpos_Y - Origin.Y), (byte)type));
                            if (type == 4)
                            {
                                ledsegmentpixel.Add(0);
                                ledsegmentpixel_pos.Add(new Point(mouse_worldpos_X, mouse_worldpos_Y));
                            }
                            if (type == 5)
                            {
                                ApplyPixel(true);
                            }
                            else
                            {
                                ApplyPixel();
                            }
                        }
                        if (curplacetype == 5)
                        {
                            for (int i = 0; i < 10; ++i)
                            {
                                if (App.kb_states.IsKeyToggleDown(Keys.D0 + i))
                                {
                                    int            index = pixel.FindIndex(x => x.pos.X == mouse_worldpos_X - Origin.X && x.pos.Y == mouse_worldpos_Y - Origin.Y);
                                    ComponentPixel cur   = pixel[index];
                                    if (cur.type > Sim_Component.PINOFFSET)
                                    {
                                        int val = cur.type - (Sim_Component.PINOFFSET + 1);
                                        if (val == 0 && i != 0)
                                        {
                                            pixel[index] = new ComponentPixel(cur.pos, (byte)MathHelper.Clamp(i + Sim_Component.PINOFFSET + 1, 0, 240));
                                        }
                                        else if (val != 0)
                                        {
                                            pixel[index] = new ComponentPixel(cur.pos, (byte)MathHelper.Clamp(val * 10 + i + Sim_Component.PINOFFSET + 1, 0, 240));
                                        }
                                        ApplyPixel(true);
                                    }
                                }
                            }
                            if (App.kb_states.IsKeyToggleDown(Keys.Back))
                            {
                                int index = pixel.FindIndex(x => x.pos.X == mouse_worldpos_X - Origin.X && x.pos.Y == mouse_worldpos_Y - Origin.Y);
                                if (pixel[index].type > Sim_Component.PINOFFSET)
                                {
                                    pixel[index] = new ComponentPixel(pixel[index].pos, (byte)((pixel[index].type - (Sim_Component.PINOFFSET + 1)) / 10 + (Sim_Component.PINOFFSET + 1)));
                                    ApplyPixel(true);
                                }
                            }
                            else if (App.kb_states.IsKeyToggleDown(Keys.Escape))
                            {
                                int index = pixel.FindIndex(x => x.pos.X == mouse_worldpos_X - Origin.X && x.pos.Y == mouse_worldpos_Y - Origin.Y);
                                if (pixel[index].type > Sim_Component.PINOFFSET)
                                {
                                    pixel[index] = new ComponentPixel(pixel[index].pos, (byte)(Sim_Component.PINOFFSET + 1));
                                    ApplyPixel(true);
                                }
                            }
                        }
                        if (curplacetype == 4)
                        {
                            for (int i = 0; i < 10; ++i)
                            {
                                if (App.kb_states.IsKeyToggleDown(Keys.D0 + i))
                                {
                                    int            index = pixel.FindIndex(x => x.pos.X == mouse_worldpos_X - Origin.X && x.pos.Y == mouse_worldpos_Y - Origin.Y);
                                    ComponentPixel cur   = pixel[index];
                                    if (cur.type == 4)
                                    {
                                        int val    = ledsegment_IDs[mouse_worldpos_X, mouse_worldpos_Y];// cur.type - (Sim_Component.PINOFFSET + 1);
                                        int index2 = ledsegmentpixel_pos.FindIndex(x => x.X == mouse_worldpos_X && x.Y == mouse_worldpos_Y);
                                        ledsegmentpixel[index2] = (byte)MathHelper.Clamp(val * 10 + i, 0, 240);
                                        //ledsegment_IDs[mouse_worldpos_X, mouse_worldpos_Y] = (byte)(val * 10 + i);
                                        //if (val == 0 && i != 0)
                                        //    pixel[index] = new ComponentPixel(cur.pos, (byte)i);
                                        //else if (val != 0)
                                        //    pixel[index] = new ComponentPixel(cur.pos, (byte)(val * 10 + i));
                                        ApplyPixel();
                                    }
                                }
                            }
                            if (App.kb_states.IsKeyToggleDown(Keys.Back))
                            {
                                int index = pixel.FindIndex(x => x.pos.X == mouse_worldpos_X - Origin.X && x.pos.Y == mouse_worldpos_Y - Origin.Y);
                                if (pixel[index].type == 4)
                                {
                                    int index2 = ledsegmentpixel_pos.FindIndex(x => x.X == mouse_worldpos_X && x.Y == mouse_worldpos_Y);
                                    ledsegmentpixel[index2] /= 10;
                                    ApplyPixel();
                                }
                            }
                            else if (App.kb_states.IsKeyToggleDown(Keys.Escape))
                            {
                                int index = pixel.FindIndex(x => x.pos.X == mouse_worldpos_X - Origin.X && x.pos.Y == mouse_worldpos_Y - Origin.Y);
                                if (pixel[index].type == 4)
                                {
                                    int index2 = ledsegmentpixel_pos.FindIndex(x => x.X == mouse_worldpos_X && x.Y == mouse_worldpos_Y);
                                    ledsegmentpixel[index2] = 0;
                                    ApplyPixel();
                                }
                            }
                        }
                    }
                    if (App.mo_states.New.RightButton == ButtonState.Pressed)
                    {
                        int index   = pixel.FindIndex(x => x.pos.X == (mouse_worldpos_X - Origin.X) && x.pos.Y == (mouse_worldpos_Y - Origin.Y));
                        int curtype = -1;
                        if (index >= 0)
                        {
                            curtype = pixel[index].type;
                        }
                        if (index >= 0)
                        {
                            pixel.RemoveAt(index);
                        }
                        index = ledsegmentpixel_pos.FindIndex(x => x.X == (mouse_worldpos_X) && x.Y == (mouse_worldpos_Y));
                        if (index >= 0)
                        {
                            ledsegmentpixel_pos.RemoveAt(index);
                            ledsegmentpixel.RemoveAt(index);
                        }
                        if (curtype >= 5)
                        {
                            ApplyPixel(true);
                        }
                        else
                        {
                            ApplyPixel();
                        }
                    }
                }
                else if (UI_EditComp_Window.IsInOverlayMode)
                {
                    CompData compdata = UI_EditComp_Window.rootcomp;
                    Vector2  size     = CompData.overlayfont.MeasureString(compdata.OverlayText) * compdata.OverlayTextSize[currot] * (float)Math.Pow(2, zoom);
                    Vector2  pos      = absolutpos.ToVector2() + new Vector2((compdata.OverlayTextPos[currot].X + Origin.X + 0.5f) * (float)Math.Pow(2, zoom) + worldpos.X, (compdata.OverlayTextPos[currot].Y + Origin.Y + 0.5f) * (float)Math.Pow(2, zoom) + worldpos.Y) - size / 2;
                    if (App.mo_states.New.LeftButton == ButtonState.Pressed && App.kb_states.New.IsKeyDown(Keys.LeftControl))
                    {
                        compdata.OverlayTextSize[currot] += (((float)(App.mo_states.New.Position.Y - App.mo_states.Old.Position.Y)) / (float)Math.Pow(2, zoom)) * 0.01f;
                    }
                    else if ((new Rectangle(pos.ToPoint(), size.ToPoint())).Contains(App.mo_states.New.Position) && App.mo_states.New.LeftButton == ButtonState.Pressed)
                    {
                        compdata.OverlayTextPos[currot] += (App.mo_states.New.Position - App.mo_states.Old.Position).ToVector2() / (float)Math.Pow(2, zoom);
                    }
                }

                #endregion

                effect.Parameters["mousepos_X"].SetValue(mouse_worldpos_X);
                effect.Parameters["mousepos_Y"].SetValue(mouse_worldpos_Y);
            }
            effect.Parameters["zoom"].SetValue((float)Math.Pow(2, zoom));
            effect.Parameters["coos"].SetValue(worldpos);
            base.UpdateSpecific();
        }