예제 #1
0
    private IEv2_Zone m_zoneToUpdate; // Zone récemment ajoutée ou retirée (undo)

    #endregion Fields

    #region Methods

    //-----------------------------------------------------
    // Ajoute une zone de gommage / rétablissement
    public void AddZone(IEv2_Zone newZone)
    {
        // Fusionner les plus anciennes zones en une seule si la pile est pleine
        //        while(m_erasedZones.Count > m_maxUndoCount)
        //           MergeZones();

        // Ajouter la zone aux zones enregistrées
        m_zoneToUpdate = newZone;
        m_zones.AddLast(m_zoneToUpdate);
        //        m_backupZones.Add(m_zoneToUpdate.Clone());
        m_undoedZones.Clear();               // Supprimer les zones annulées (plus de redo possible)

        m_needMaskUpdate = true;

        m_mainScene.GetComponent<PleaseWaitUI>().SetDisplayIcon(true);

        //        SetVisible(true);
    }
예제 #2
0
    private LinkedList<IEv2_Zone> m_zonesVec; // zones en vectoriel

    #endregion Fields

    #region Methods

    //----------------------------------------------------
    public void AddZone(IEv2_Zone newZone)
    {
        m_zonesVec.AddLast(newZone);

        // -- Construction de la zone --
        GrassV2zone gZone = newZone.RasterizeRGB(new Rect(0f, 0f, m_mask.width, m_mask.height));
        if(newZone.GetMainColor() == Color.clear)
            gZone.m_textureID = -1;
        else
            gZone.m_textureID = m_grassSkybox.GetComponent<GrassHandler>().GetCurTexID();
        gZone.m_texGen = m_grassSkybox.GetComponent<GrassHandler>().GetSynthTexGen();
        //        Debug.Log(DEBUGTAG+"Zone ADDED : "+gZone.m_textureID+", "+(gZone.m_texGen != null ? gZone.m_texGen.ToString() : "null"));

        m_grassBuffer = m_grassSkybox.GetComponent<GrassHandler>().GetGrassImage(m_maskSizeDiv,
                                                                                    gZone.m_bounds);
        //        m_grassBuffer.Apply(false); // debug : pour voir la texture dans l'inspecteur

        if(newZone.GetMainColor() != Color.clear)
        {
            List<MaskPixRGB> pix = gZone.m_pixels;
            for(int i=0; i<pix.Count; i++)
            {
                int x = pix[i].GetX() - (int)gZone.m_bounds.x;
                int y = pix[i].GetY() - (int)gZone.m_bounds.z;
                pix[i].SetColor(m_grassBuffer.GetPixel(x, y));
            }
        }
        //        Debug.Log (DEBUGTAG+"ADDING Zone : "+pix.Count+" pixels");

        m_updatedZone = gZone;
        m_zones.AddLast(m_updatedZone);
        m_backupZones.Add(new GrassV2zone(gZone));
        m_undoedZones.Clear();                 // Supprimer zones annulées (plus de redo possible)

        m_needMaskUpdate = true;
        m_zoneAdded = true;
        m_mainScene.GetComponent<PleaseWaitUI>().SetDisplayIcon(true);

        SetVisible(true);
    }
예제 #3
0
    //-----------------------------------------------------
    private IEnumerator UpdateMask(IEv2_Zone newZone, bool apply)
    {
        m_updatingCount++;

        Rect bgRect = m_backgroundImg.GetComponent<GUITexture>().pixelInset;
        List<MaskPix> pixels = newZone.Rasterize(bgRect);

        Color pixCol = Color.clear;
        for(int i=0; i<pixels.Count; i++)
        {
            int x = (int)(pixels[i].GetX()/(float)m_maskSizeDiv);
            int y = (int)(pixels[i].GetY()/(float)m_maskSizeDiv);
            pixCol.a = pixels[0].GetA();
        //            m_mask.SetPixel(x, y, pixCol);
            for(int j=0; j<m_maskSizeDiv; j++)
                for(int k=0; k<m_maskSizeDiv; k++)
                    m_mask.SetPixel(x+j, y+k, pixCol);
        } // foreach pixel

        if(apply)
            StartCoroutine(ApplyMask());

        m_zoneToUpdate = null;

        m_updatingCount--;
        yield return null;
    }
예제 #4
0
    //-----------------------------------------------------
    void Start()
    {
        if(m_mainScene == null)     Debug.LogError(DEBUGTAG+"MainScene"      +PC.MISSING_REF);
        if(m_mainCam == null)       Debug.LogError(DEBUGTAG+"MainCam"        +PC.MISSING_REF);
        if(m_backgroundImg == null) Debug.LogError(DEBUGTAG+"Background Img" +PC.MISSING_REF);
        if(m_eraserV2mat == null)   Debug.LogError(DEBUGTAG+"Eraser material"+PC.MISSING_REF);

        m_zones         = new LinkedList<IEv2_Zone>();
        m_undoedZones   = new Stack<IEv2_Zone>();
        //        m_backupZones   = new List<IEv2_Zone>();

        m_mask           = null; // Mask initialisé dans Reset (appelé par d'autres modules OS3D)
        m_needMaskUpdate = false;
        m_updatingCount  = 0;
        m_needMaskApply  = false;
        m_zoneToUpdate   = null;

        //        Reset();                // TODO virer ce reset quand dev fini !! DEV ONLY !!
        //        m_model = Montage.sum;
    }
예제 #5
0
    //-----------------------------------------------------
    public void Redo()
    {
        if(m_undoedZones.Count > 0)
        {
            m_zones.AddLast(m_undoedZones.Pop());
        //            m_backupZones.Add(CloneZone(m_erasedZones.Last.Value));

            m_mainScene.GetComponent<PleaseWaitUI>().SetDisplayIcon(true);
            m_needMaskUpdate = true;
            m_zoneToUpdate = m_zones.Last.Value;
        }
        else
            Debug.Log(DEBUGTAG+"Aucune action à refaire");
    }