예제 #1
0
    //=========================================================================
    private int FindPassOptIndex(int ipass, EchoPFXRenderGroup ierg, ECHOPFXOPTION iopt)
    {
        if (ipass == 0)
        {
            for (int loop = 0; loop < ierg.possibleOpts1.Count; loop++)
            {
                if (ierg.possibleOpts1[loop].type == iopt)
                {
                    return(loop);
                }
            }
        }
        else
        {
            for (int loop = 0; loop < ierg.possibleOpts2.Count; loop++)
            {
                if (ierg.possibleOpts2[loop].type == iopt)
                {
                    return(loop);
                }
            }
        }

        return(-1);
    }
예제 #2
0
 //=========================================================================
 public void RemoveOptionOfType(ECHOPFXOPTION iopt, int ipass)
 {
     for (int loop = 0; loop < epeList.Count; loop++)
     {
         epeList[loop].RemoveOptionOfType(iopt, ipass);
     }
 }
예제 #3
0
    //=========================================================================
    public static int HasCustomOptions(ECHOPFXOPTION ipo)
    {
        int rc = 0;

        switch (ipo)
        {
        case ECHOPFXOPTION.OVERLAY_NORMAL:
        case ECHOPFXOPTION.OVERLAY_SCREEN:
        case ECHOPFXOPTION.OVERLAY_ADD:
        case ECHOPFXOPTION.OVERLAY_SUBTRACT:
        case ECHOPFXOPTION.OVERLAY_MULTIPLY:
        case ECHOPFXOPTION.OVERLAY_OVERLAY:
            rc = 1;
            break;

        case ECHOPFXOPTION.CUSTOM_FRAG_1:
        case ECHOPFXOPTION.CUSTOM_FRAG_2:
        case ECHOPFXOPTION.CUSTOM_FRAG_3:
        case ECHOPFXOPTION.CUSTOM_FRAG_4:
            rc = 2;
            break;

        case ECHOPFXOPTION.SCANLINES:
            rc = 3;
            break;
        }

        return(rc);
    }
예제 #4
0
 //=========================================================================
 public PossibleOpts(ECHOPFXOPTION iopt, int iorder)
 {
     scanlines   = ECHOPFXSCANLINES.HORIZONTAL;
     order       = iorder;
     type        = iopt;
     useUniqueTC = false;
 }
예제 #5
0
    //=========================================================================
    private bool IsOptUsed(List <EchoPFXOption> iepolist, ECHOPFXOPTION iopt)
    {
        for (int loop = 0; loop < iepolist.Count; loop++)
        {
            if (iepolist[loop].optType == iopt)
            {
                return(true);
            }
        }

        return(false);
    }
예제 #6
0
    //=========================================================================
    public bool OptionTimingSet(ECHOPFXOPTION ipo, int ipass, float istartDelay, float iattackTime, float isustainTime, float ireleaseTime)
    {
        EchoPFXOption epo;
        bool          rc = false;

        epo = _passDict[ipass][ipo];
        if (epo != null)
        {
            epo.DefaultTimingSet(istartDelay, iattackTime, isustainTime, ireleaseTime);
            rc = true;
        }

        return(rc);
    }
예제 #7
0
    //=========================================================================
    public void RemoveOptionOfType(ECHOPFXOPTION iopt, int ipass)
    {
        int loop;

        passOpt[0] = passOpt1;
        passOpt[1] = passOpt2;

        for (loop = passOpt[ipass].Count - 1; loop >= 0; loop--)
        {
            if (passOpt[ipass][loop].optType == iopt)
            {
                passOpt[ipass].Remove(passOpt[ipass][loop]);
            }
        }
    }
예제 #8
0
        //============================================================
        private static EchoPFXOption LoadOption(XmlNode inode)
        {
            ECHOPFXOPTION opt = ( ECHOPFXOPTION )NodeParseEnum(inode, "optType", typeof(ECHOPFXOPTION), (int)ECHOPFXOPTION.GREYSCALE);
            EchoPFXOption epo = new EchoPFXOption(opt);

            epo.passOrder     = NodeParseInt(inode, "passOrder");
            epo.startDelay    = NodeParseFloat(inode, "startDelay");
            epo.attackTime    = NodeParseFloat(inode, "attackTime");
            epo.sustainTime   = NodeParseFloat(inode, "sustainTime");
            epo.releaseTime   = NodeParseFloat(inode, "releaseTime");
            epo.fadeMin       = NodeParseFloat(inode, "fadeMin");
            epo.fadeMax       = NodeParseFloat(inode, "fadeMax");
            epo.fadeCur       = NodeParseFloat(inode, "fadeCur");
            epo.rgba          = (Color)NodeParseVector4(inode, "rgba");
            epo.rgbaMultiply  = NodeParseFloat(inode, "rgbaMultiply");
            epo.distAmountH   = NodeParseFloat(inode, "distAmountH");
            epo.distSpeedH    = NodeParseFloat(inode, "distSpeedH");
            epo.distStrengthH = NodeParseFloat(inode, "distStrengthH");

            epo.distAmountV   = NodeParseFloat(inode, "distAmountV");
            epo.distSpeedV    = NodeParseFloat(inode, "distSpeedV");
            epo.distStrengthV = NodeParseFloat(inode, "distStrengthV");

            epo.linesAmountDivideH = NodeParseBool(inode, "linesAmountDivideH");
            epo.linesAmountH       = NodeParseInt(inode, "linesAmountH");
            epo.linesScrollH       = NodeParseFloat(inode, "LinesScrollH");

            epo.linesAmountDivideV = NodeParseBool(inode, "linesAmountDivideV");
            epo.linesAmountV       = NodeParseInt(inode, "linesAmountV");
            epo.linesScrollV       = NodeParseFloat(inode, "LinesScrollV");

            epo.shockDistance    = NodeParseFloat(inode, "shockDistance");
            epo.shockSize        = NodeParseFloat(inode, "shockSize");
            epo.shockCenterX     = NodeParseFloat(inode, "shockCenterX");
            epo.shockCenterY     = NodeParseFloat(inode, "shockCenterY");
            epo.tex              = NodeParseTex2D(inode, "tex");
            epo.texBlend         = ( ECHOPFXBLEND )NodeParseEnum(inode, "texBlend", typeof(ECHOPFXBLEND), (int)ECHOPFXBLEND.NORMAL);
            epo.customArgs       = NodeParseVector4(inode, "customArgs");
            epo.overlayST        = NodeParseVector4(inode, "overlayST");
            epo.overlayST_Scroll = NodeParseVector4(inode, "overlayST_Scroll");

            return(epo);
        }
예제 #9
0
    //=========================================================================
    public static string ParseCustomCode(ECHOPFXOPTION ipo, string icode)
    {
        int num = (int)ipo - (int)ECHOPFXOPTION.CUSTOM_FRAG_1 + 1;

        if (icode == null || icode == "")
        {
            return("//NOCODE");
        }

        icode = icode.Replace("_RGB", "_ioRGB");
        icode = icode.Replace("_Texture", "_echoCustomF" + num.ToString() + "Tex");
        icode = icode.Replace("_Texture_ST", "_echoCustomF" + num.ToString() + "Tex_ST");
        icode = icode.Replace("_Fade", "_echoCustomF" + num.ToString() + "Fade");
        icode = icode.Replace("_Args", "_echoCustomF" + num.ToString() + "Args");
        icode = icode.Replace("_Color", "_echoCustomF" + num.ToString() + "Color");
        icode = icode.Replace("_TC", "ECHODEF_CUSTOM" + num.ToString() + "_TC");

        return(icode);
    }
예제 #10
0
 //=========================================================================
 public EchoPFXOption OptionGet(ECHOPFXOPTION ipo, int ipass)
 {
     return(_passDict[ipass][ipo]);
 }
예제 #11
0
 //=========================================================================
 public PossibleOpts(ECHOPFXOPTION iopt)
 {
     scanlines = ECHOPFXSCANLINES.HORIZONTAL;
     order     = 99 + (int)iopt;
     type      = iopt;
 }
예제 #12
0
    //=========================================================================
    public void EffectPassMake(int ipassid)
    {
        List <EchoPFXOption>[] passOpt      = new List <EchoPFXOption> [2];
        List <PossibleOpts>[]  possibleOpts = new List <PossibleOpts> [2];
        ECHOPFXOPTION[]        optLookup;
        EchoPFXOption          epo;
        int loop;

        string[]      popupNames;
        int           count;
        int           index;
        EchoPFXEffect epe;

        if (_erg == null)
        {
            return;
        }

        epe = _erg.epeList[_epeIndex];

        passOpt[0] = epe.passOpt1;
        passOpt[1] = epe.passOpt2;

        possibleOpts[0] = _erg.possibleOpts1;
        possibleOpts[1] = _erg.possibleOpts2;

        count = 0;
        for (loop = 0; loop < possibleOpts[ipassid].Count; loop++)
        {
            if (IsOptUsed(passOpt[ipassid], possibleOpts[ipassid][loop].type) == false)
            {
                count++;
            }
        }

        popupNames    = new string[count + 1];
        popupNames[0] = "Add Effect Option";
        optLookup     = new ECHOPFXOPTION[count + 1];

        count = 1;
        for (loop = 0; loop < possibleOpts[ipassid].Count; loop++)
        {
            if (IsOptUsed(passOpt[ipassid], possibleOpts[ipassid][loop].type) == false)
            {
                popupNames[count] = optNames[(int)possibleOpts[ipassid][loop].type];
                optLookup[count]  = possibleOpts[ipassid][loop].type;
                count++;
            }
        }

        if (count > 1)
        {
            GUILayout.BeginHorizontal();
            index = EditorGUILayout.Popup(0, popupNames);
            if (index > 0)
            {
                passOpt[ipassid].Add(new EchoPFXOption(optLookup[index]));
                _erg.ValidateOptions();
            }
            GUILayout.EndHorizontal();
        }

        epe.passOpt[0] = epe.passOpt1;
        epe.passOpt[1] = epe.passOpt2;

        for (loop = 0; loop < epe.passOpt[ipassid].Count; loop++)
        {
            epo = epe.passOpt[ipassid][loop];

            if (epo == null)
            {
                continue;
            }

            switch (epo.optType)
            {
            case ECHOPFXOPTION.GREYSCALE:
                PostFxOptionGUI(passOpt[ipassid], loop, "Greyscale:");
                break;

            case ECHOPFXOPTION.INVERSE:
                PostFxOptionGUI(passOpt[ipassid], loop, "Inverse:");
                break;

            case ECHOPFXOPTION.COLOR:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Color:"))
                {
                    PostFxColorGUI(epo);
                }
                break;

            case ECHOPFXOPTION.ADD:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Add:"))
                {
                    PostFxColorGUI(epo);
                }
                break;

            case ECHOPFXOPTION.MULTIPLY:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Multiply:"))
                {
                    PostFxColorGUI(epo);
                }
                break;

            case ECHOPFXOPTION.NOISE:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Noise:"))
                {
                    PostFxTextureGUI(epo);
                }
                break;

            case ECHOPFXOPTION.DISTORTION:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Distortion:"))
                {
                    PostFxDistortionGUI(epo);
                }
                break;

            case ECHOPFXOPTION.SHOCKWAVE:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Shockwave:"))
                {
                    PostFxShockwaveGUI(epo);
                }
                break;

            case ECHOPFXOPTION.SCANLINES:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Scanlines:"))
                {
                    PossibleOpts po;
                    for (int i = 0; i < possibleOpts[ipassid].Count; i++)
                    {
                        po = possibleOpts[ipassid][i];
                        if (po.type == epo.optType)
                        {
                            PostFxScanLinesGUI(epo, po);
                            break;
                        }
                    }
                }
                break;

            case ECHOPFXOPTION.LUMRAMP:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Lum Ramp:"))
                {
                    PostFxTextureGUI(epo);
                }
                break;

            case ECHOPFXOPTION.COLOR_CORRECT:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Color Correct:"))
                {
                    PostFxTextureGUI(epo);
                }
                break;

            case ECHOPFXOPTION.OVERLAY_NORMAL:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Texture:"))
                {
                    PostFxOverlayGUI(epo, ipassid);
                }
                break;

            case ECHOPFXOPTION.OVERLAY_SCREEN:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Texture Screen:"))
                {
                    PostFxOverlayGUI(epo, ipassid);
                }
                break;

            case ECHOPFXOPTION.OVERLAY_ADD:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Texture Add:"))
                {
                    PostFxOverlayGUI(epo, ipassid);
                }
                break;

            case ECHOPFXOPTION.OVERLAY_SUBTRACT:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Texture Subtract:"))
                {
                    PostFxOverlayGUI(epo, ipassid);
                }
                break;

            case ECHOPFXOPTION.OVERLAY_MULTIPLY:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Texture Multiply:"))
                {
                    PostFxOverlayGUI(epo, ipassid);
                }
                break;

            case ECHOPFXOPTION.OVERLAY_OVERLAY:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Texture Overlay:"))
                {
                    PostFxOverlayGUI(epo, ipassid);
                }
                break;

            case ECHOPFXOPTION.CUSTOM_FRAG_1:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Custom Frag 1:"))
                {
                    PostFxCustomGUI(epo, ipassid);
                }
                break;

            case ECHOPFXOPTION.CUSTOM_FRAG_2:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Custom Frag 2:"))
                {
                    PostFxCustomGUI(epo, ipassid);
                }
                break;

            case ECHOPFXOPTION.CUSTOM_FRAG_3:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Custom Frag 3:"))
                {
                    PostFxCustomGUI(epo, ipassid);
                }
                break;

            case ECHOPFXOPTION.CUSTOM_FRAG_4:
                if (PostFxOptionGUI(passOpt[ipassid], loop, "Custom Frag 4:"))
                {
                    PostFxCustomGUI(epo, ipassid);
                }
                break;
            }
        }
    }
예제 #13
0
 //=========================================================================
 public bool OptionTimingSet(ECHOPFXOPTION ipo, int ipass, float istartDelay, float iattackTime, float isustainTime, float ireleaseTime)
 {
     return(epe.OptionTimingSet(ipo, ipass, istartDelay, iattackTime, isustainTime, ireleaseTime));
 }
예제 #14
0
 //=========================================================================
 public EchoPFXOption(ECHOPFXOPTION iopt)
 {
     optType = iopt;
     ResetDefaults();
 }