public bool AddComponent(CompData comp) { Components.Add(comp); if (IsInUsedLibraries) { if (Sim_Component.Components_Data.Exists(x => x.name == comp.name)) { return(false); } Sim_Component.Components_Data.Add(comp); } return(true); }
public void LoadFromPath() { try { byte[] intbuffer = new byte[4]; SaveFile = Path.GetFullPath(SaveFile); FileStream stream = new FileStream(SaveFile, FileMode.Open); StreamReader streamreader = new StreamReader(stream); string libraryname = stream.ReadNullTerminated(); name = null; Components.Clear(); if ((LibraryWindow_LoadedLibraries.Exists(x => x.name == libraryname) && !IsInUsedLibraries) || (AllUsedLibraries.Exists(x => x.name == libraryname) && IsInUsedLibraries)) { STATE = LOAD_FAILED; throw new Exception("Library already loaded"); } name = libraryname; stream.Read(intbuffer, 0, 4); int compcount = BitConverter.ToInt32(intbuffer, 0); for (int j = 0; j < compcount; ++j) { string name = stream.ReadNullTerminated(); string category = stream.ReadNullTerminated(); stream.Read(intbuffer, 0, 1); bool IsOverlay = BitConverter.ToBoolean(intbuffer, 0); stream.Read(intbuffer, 0, 1); bool IsClickable = BitConverter.ToBoolean(intbuffer, 0); //stream.Read(intbuffer, 0, 1); //bool IsUpdateAfterSim = BitConverter.ToBoolean(intbuffer, 0); CompData newcomp = new CompData(name, category, IsOverlay, IsClickable); stream.Read(intbuffer, 0, 4); int Pixel_Num = BitConverter.ToInt32(intbuffer, 0); for (int k = 0; k < Pixel_Num; ++k) { Point pos = Point.Zero; stream.Read(intbuffer, 0, 4); pos.X = BitConverter.ToInt32(intbuffer, 0); stream.Read(intbuffer, 0, 4); pos.Y = BitConverter.ToInt32(intbuffer, 0); stream.Read(intbuffer, 0, 1); byte type = intbuffer[0]; newcomp.addData(new ComponentPixel(pos, type)); } stream.Read(intbuffer, 0, 4); int pindesclength = BitConverter.ToInt32(intbuffer, 0); string[] pindesc = new string[pindesclength]; for (int i = 0; i < pindesclength; ++i) { string curdesc = stream.ReadNullTerminated(); pindesc[i] = curdesc; } stream.Read(intbuffer, 0, 4); int OverlayLine_SegmentNum = BitConverter.ToInt32(intbuffer, 0); newcomp.InitializeLineOverlays(OverlayLine_SegmentNum); for (int i = 0; i < OverlayLine_SegmentNum; ++i) { stream.Read(intbuffer, 0, 4); int OverlayLine_Num = BitConverter.ToInt32(intbuffer, 0); for (int k = 0; k < OverlayLine_Num; ++k) { Point pos = Point.Zero; stream.Read(intbuffer, 0, 4); pos.X = BitConverter.ToInt32(intbuffer, 0); stream.Read(intbuffer, 0, 4); pos.Y = BitConverter.ToInt32(intbuffer, 0); Point pos2 = Point.Zero; stream.Read(intbuffer, 0, 4); pos2.X = BitConverter.ToInt32(intbuffer, 0); stream.Read(intbuffer, 0, 4); pos2.Y = BitConverter.ToInt32(intbuffer, 0); stream.Read(intbuffer, 0, 4); float layers = BitConverter.ToSingle(intbuffer, 0); newcomp.addOverlayLine(new Line(pos, pos2), layers, i); } } newcomp.OverlayText = stream.ReadNullTerminated(); for (int i = 0; i < 8; ++i) { stream.Read(intbuffer, 0, 4); newcomp.OverlayTextPos[i].X = BitConverter.ToSingle(intbuffer, 0); stream.Read(intbuffer, 0, 4); newcomp.OverlayTextPos[i].Y = BitConverter.ToSingle(intbuffer, 0); stream.Read(intbuffer, 0, 4); newcomp.OverlayTextSize[i] = BitConverter.ToSingle(intbuffer, 0); } stream.Read(intbuffer, 0, 4); newcomp.internalstate_length = BitConverter.ToInt32(intbuffer, 0); stream.Read(intbuffer, 0, 4); newcomp.valuebox_length = BitConverter.ToInt32(intbuffer, 0); for (int i = 0; i < newcomp.valuebox_length; ++i) { newcomp.parameters.Add(stream.ReadNullTerminated()); } stream.Read(intbuffer, 0, 4); newcomp.OverlaySeg_length = BitConverter.ToInt32(intbuffer, 0); stream.Read(intbuffer, 0, 4); newcomp.ClickAction_Type = BitConverter.ToInt32(intbuffer, 0); //if (IsUpdateAfterSim) //{ // int breaki = 1; // string trash = stream.ReadNullTerminated(); //} // newcomp.Code_AfterSim = stream.ReadNullTerminated(); newcomp.Code_Sim = stream.ReadNullTerminated(); //if (IsUpdateAfterSim) //{ // int breaki = 1; // string trash = stream.ReadNullTerminated(); //} //if (IsUpdateAfterSim) // newcomp.Code_AfterSim_FuncName = stream.ReadNullTerminated(); newcomp.Code_Sim_FuncName = stream.ReadNullTerminated(); newcomp.pindesc = pindesc; newcomp.Finish(); bool State = AddComponent(newcomp); if (!State) { STATE = LOAD_FAILED; throw new Exception("Library contains components that have the same name as already loaded components!"); } } stream.Close(); stream.Dispose(); STATE = LOADED; } catch (Exception exp) { STATE = LOAD_FAILED; Console.WriteLine("Loading Library failed: {0}", exp); System.Windows.Forms.MessageBox.Show("Loading Library failed: " + exp.Message, null, MessageBoxButtons.OK, MessageBoxIcon.Error); } }