Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
        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);
            }
        }