Exemplo n.º 1
0
    /// <summary>
    /// Induláskor azonnal lefut
    /// </summary>
    void Start()
    {
        int AfterBackslash = Path.LastIndexOf('\\') + 1;                                        // Fájlnév kezdetének helye a fájl elérési útvonalában

        SaveAsID      = Path.Substring(AfterBackslash, Path.LastIndexOf('.') - AfterBackslash); // Fájlnév, azaz mentési azonosító
        Image         = Objects.LoadObject(Path);                                               // Kép betöltése a megadott helyről
        OriginalImage = Objects.CopyObject(Image);                                              // Eredeti állapot eltárolása
        SaveBG        = new Texture2D(1, 1);                                                    // Új 1x1-es textúra a mentés másként menü hátterének
        SaveBG.SetPixel(0, 0, new Color(0, 0, 0, .8f));                                         // Enyhén átlátszó fekete szín beállítása
        SaveBG.Apply();                                                                         // Színezés alkalmazása
    }
Exemplo n.º 2
0
    /// <summary>
    /// GUI-kezelő függvény
    /// </summary>
    void OnGUI()
    {
        //////////////////////////
        // Pixelenkénti szerkesztő
        //////////////////////////
        // Ugyanazok vannak itt kiszámolva, mint a Graphics.Draw-n belül, hogy a keretet köré lehessen rajzolni
        int MaxWidth = Screen.width - 300, MaxHeight = Screen.height - 100, WScale = MaxWidth / Image.X, HScale = MaxHeight / Image.Y, Scale = Math.Min(WScale, HScale),
            Left = 300 + (MaxWidth - Image.X * Scale) / 2, Top = (MaxHeight - Image.Y * Scale) / 2, Width = Image.X * Scale, Height = Image.Y * Scale;

        Graphics.Draw(ref Image, new Rect(300, 0, MaxWidth, MaxHeight), !SaveAs && !Hardcode); // Szerkesztő megjelenítése
        GUI.DrawTexture(new Rect(Left, Top, Width, 1), Graphics.Foreground);                   // Felső keret
        GUI.DrawTexture(new Rect(Left, Top, 1, Height), Graphics.Foreground);                  // Bal keret
        GUI.DrawTexture(new Rect(Left + Width - 1, Top, 1, Height), Graphics.Foreground);      // Jobb keret
        GUI.DrawTexture(new Rect(Left, Top + Height - 1, Width, 1), Graphics.Foreground);      // Alsó keret
        //////////////
        // Információk
        //////////////
        Top       = Screen.height - 100;                                                            // Alsó behúzás
        GUI.color = Graphics.ForegroundColor;                                                       // Előtérszín alkalmazása a GUI-ra
        StringBuilder Info = new StringBuilder();                                                   // Információ szövegének tárolója

        Info.Append(SaveAsID).Append(" (").Append(Image.X).Append('x').Append(Image.Y).Append(')'); // Információ összeírása
        GUI.Label(new Rect(305, Top + 5, 200, 20), Info.ToString());                                // Információ megjelenítése
        //////////////
        // Átméretezés
        //////////////
        int OldX = Image.X, OldY = Image.Y;                                               // Régi méretek

        GUI.Label(new Rect(305, Top + 25, 55, 20), "Width:");                             // Szélesség címke
        Image.X = (int)Graphics.Slider(new Rect(360, Top + 29, 200, 20), Image.X, 1, 84); // Szélesség csúszka
        GUI.Label(new Rect(305, Top + 45, 55, 20), "Height:");                            // Magasság címke
        Image.Y = (int)Graphics.Slider(new Rect(360, Top + 49, 200, 20), Image.Y, 1, 48); // Magasság csúszka
        if (Image.X != OldX)                                                              // Ha változott a szélesség
        {
            int    OldPixel  = 0;                                                         // Adott pixel régi helye
            int    Pixel     = 0;                                                         // Adott pixel jelenlegi helye
            int    WidthDiff = OldX - Image.X;                                            // Szélességkülönbség
            byte[] OldImage  = new byte[84 * 48];                                         // Régi pixeltérkép helye
            Array.Copy(Image.Image, OldImage, 84 * 48);                                   // Másolat létrehozása
            for (int Row = 0; Row < Image.Y; ++Row)                                       // A jelnlegi méret sorain...
            {
                for (int Column = 0; Column < Image.X; ++Column)                          // ...majd oszlopain (tehát a pixelek sorrendjében) haladva...
                {
                    Image.Image[Pixel++] = Column >= OldX ? (byte)0 : OldImage[OldPixel]; // ...az odaillő pixel beillesztése, ami a régi szélességen túl biztos nem volt aktív
                    ++OldPixel;                                                           // A régi pixeltömb következő elemére ugrás
                }
                OldPixel += WidthDiff;                                                    // A régi pixeltömbben is a következő sor elejére kerüljön a vizsgálat
            }
            int LastPixel = Image.X * Image.Y, OldLastPixel = OldX * Image.Y;             // Új, illetve régi utolsó pixel
            for (Pixel = LastPixel - 1; ++Pixel < OldLastPixel; Image.Image[Pixel] = 0)
            {
                ;                                                                         // Az előző sor pontjai közti részt ürítse ki, ha esetleg újra nőne a szélesség
            }
        }
        if (Image.Y != OldY)                                                  // Ha változott a magasság
        {
            int LastPixel = Image.X * Image.Y, OldLastPixel = Image.X * OldY; // Új, illetve régi utolsó pixel
            for (int Pixel = LastPixel - 1; ++Pixel < OldLastPixel; Image.Image[Pixel] = 0)
            {
                ;                                                                             // Az előző sor pontjai közti részt ürítse ki, ha esetleg újra nőne a magasság
            }
        }
        /////////
        // Opciók
        /////////
        int WidthJump = (Screen.width - 300) / 2 - 100;                      // Ugrás mérete az alsó oszlopokkal

        Left = 300 + WidthJump;                                              // Behúzás középre
        if (GUI.Button(new Rect(Left, Top + 10, 200, 25), "Clear"))          // Ürítés gomb
        {
            Array.Clear(Image.Image, 0, Image.X * Image.Y);                  // Tömb nullázása
        }
        if (GUI.Button(new Rect(Left, Top + 40, 200, 25), "Revert"))         // Visszaállítás gomb
        {
            Image = Objects.CopyObject(OriginalImage);                       // Eredeti objektum visszaállítása
        }
        if (GUI.Button(new Rect(Left, Top + 70, 200, 25), "Crop"))           // Levágás gomb
        {
            int  CropTop = 48, CropLeft = 84, CropRight = 0, CropBottom = 0; // Levágási határok
            int  Pixels = Image.X * Image.Y;                                 // Pixelek száma
            bool Work   = false;                                             // Legyen-e vágás
            for (int Pixel = 0; Pixel < Pixels; ++Pixel)                     // Minden pixelt ellenőrizzen
            {
                if (Image.Image[Pixel] == 1)                                 // Ha egy pixel aktív
                {
                    int Row = Pixel / Image.X, Column = Pixel % Image.X;     // Sor és oszlop meghatározása
                    if (CropTop > Row)                                       // Ha feljebb van, mint eddig bármi...
                    {
                        CropTop = Row;                                       // ...terjessze ki addig a levágást
                    }
                    if (CropLeft > Column)                                   // Ha balrább van, mint eddig bármi...
                    {
                        CropLeft = Column;                                   // ...terjessze ki addig a levágást
                    }
                    if (CropRight < Column)                                  // Ha jobbrább van, mint eddig bármi...
                    {
                        CropRight = Column;                                  // ...terjessze ki addig a levágást
                    }
                    if (CropBottom < Row)                                    // Ha lejjebb van, mint eddig bármi...
                    {
                        CropBottom = Row;                                    // ...terjessze ki addig a levágást
                    }
                    Work = true;                                             // Legyen vágás
                }
            }
            if (Work)                                                                                    // Ha van aktív pixel
            {
                byte[] NewMap = new byte[84 * 48];                                                       // Új pixeltérkép
                int    NewWidth = CropRight - CropLeft + 1, NewHeight = CropBottom - CropTop + 1;        // Új szélesség és magasság
                int    NewPixel = 0;                                                                     // Adott pixel új helye
                for (int Row = 0; Row < NewHeight; ++Row)                                                // Előbb soronként...
                {
                    for (int Column = 0; Column < NewWidth; ++Column)                                    // ...majd oszloponként bejárás (ez a bájtsorrend)
                    {
                        NewMap[NewPixel++] = Image.Image[(CropTop + Row) * Image.X + CropLeft + Column]; // Pixelek új helyükre mozgatása
                    }
                }
                Image.X     = NewWidth;  // Szélesség frissítése
                Image.Y     = NewHeight; // Magasság frissítése
                Image.Image = NewMap;    // Pixeltérkép frissítése
            }
        }
        /////////
        // Mentés
        /////////
        Left += WidthJump - 5;                                                        // Behúzás a jobb szélre
        if (GUI.Button(new Rect(Left, Top + 10, 200, 25), "Save"))                    // Mentés gomb
        {
            Save(Path);                                                               // Eredetileg megnyitott objektum felülírása
        }
        if (GUI.Button(new Rect(Left, Top + 40, 200, 25), "Save as"))                 // Mentés másként gomb
        {
            SaveAs = true;                                                            // Mentés másként felület megjelenítése
        }
        if (GUI.Button(new Rect(Left, Top + 70, 200, 25), "Hardcode"))                // Hardcode gomb
        {
            int           Size = Image.X * Image.Y;                                   // Képméret
            StringBuilder Out  = new StringBuilder("[").Append(Size).Append("] = {"); // Kimenet, tömbformátumban
            for (int Pixel = 0; Pixel < Size; ++Pixel)                                // Minden pixelt...
            {
                Out.Append(Image.Image[Pixel] == 0 ? '0' : '1').Append(',');          // ...adjon hozzá, vesszővel elválasztva
            }
            HardcodeOut = Out.Remove(Out.Length - 1, 1).Append('}').ToString();       // Utolsó vessző levágása, tömb lezárása
            Hardcode    = true;                                                       // Hardcode felület megjelenítése
        }
        GUI.color = Color.white;                                                      // GUI színének visszaállítása
        ////////////
        // Felületek
        ////////////
        if (SaveAs)           // Ha meg van nyitva a mentés másként felület...
        {
            SaveAsDialog();   // ...jelenítse meg
        }
        if (Hardcode)         // Ha meg van nyitva a hardcode felület...
        {
            HardcodeDialog(); // ...jelenítse meg
        }
    }