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); } }
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(); }