Esempio n. 1
0
    private void NextOp()
    {
        if (cutsceneOps[opIndex].killWhenDone)
        {
            cutsceneOps[opIndex].Stop();
        }
        opIndex++;
        CutsceneOp op = cutsceneOps[opIndex];

        op.Run(myTag + opIndex.ToString());
    }
Esempio n. 2
0
    private bool CheckIfCurrentOpDone()
    {
        CutsceneOp op     = cutsceneOps[opIndex];
        bool       result = false;

        if (!op.isFX || op.isDone)
        {
            result = true;                        // never _not_ done if it's not an FX op
        }
        return(result);
    }
Esempio n. 3
0
    private CutsceneOp GetOp(string[] lineSplit)
    {
        CutsceneOp        op;
        Action <object[]> EVTCall = null;                    // immediately-executable things
        Func <object[], IEnumerator <float> > FXCall = null; // coroutines

        object[] args;
        switch (lineSplit[0])
        {
        case "EVT_PlayMFX":
            EVTCall = cutsceneEVT_PlayMFX;
            args    = new object[] { Resources.Load <AudioClip>(mfxPath + lineSplit[1]) };
            break;

        case "EVT_PlaySFX":
            EVTCall = cutsceneEVT_PlaySFX;
            args    = new object[] { Resources.Load <AudioClip>(sfxPath + lineSplit[1]) };
            break;

        case "EVT_SetBGM":
            EVTCall = cutsceneEVT_SetBGM;
            args    = new object[] { Resources.Load <AudioClip>(musicPath + lineSplit[1]) };
            break;

        case "EVT_SetBackground":
            EVTCall = cutsceneEVT_SetBackground;
            args    = new object[] { Resources.Load <Sprite>(gfxPath + lineSplit[1]) };
            break;

        case "EVT_SetForeground":
            EVTCall = cutsceneEVT_SetForeground;
            args    = new object[] { Resources.Load <Sprite>(gfxPath + lineSplit[1]) };
            break;

        case "EVT_RefreshTextboxWith":
            EVTCall = cutsceneEVT_RefreshTextboxWith;
            args    = new object[] { strings[int.Parse(lineSplit[1])] };
            break;

        case "EVT_End":
        case "End":
        case "end":
            EVTCall = cutsceneEVT_End;
            args    = new object[0];
            break;

        case "EVT_LoadLevel":
            EVTCall = cutsceneEVT_LoadLevel;
            args    = new object[] { TermToSceneID(lineSplit[1]) };
            break;

        case "EVT_MakeSlave":
            EVTCall = cutsceneEVT_MakeSlave;
            args    = new object[] { lineSplit[1], float.Parse(lineSplit[2]), Resources.Load <Sprite>(gfxPath + lineSplit[3]), new Vector3(float.Parse(lineSplit[4]), float.Parse(lineSplit[5]), float.Parse(lineSplit[6])) };
            break;

        case "EVT_RetireSlave":
            EVTCall = cutsceneEVT_RetireSlave;
            args    = new object[] { lineSplit[1] };
            break;

        case "EVT_MoveSlave":
            EVTCall = cutsceneEVT_MoveSlave;
            args    = new object[] { lineSplit[1], new Vector3(float.Parse(lineSplit[2]), float.Parse(lineSplit[3]), float.Parse(lineSplit[4])), new Vector3(float.Parse(lineSplit[5]), float.Parse(lineSplit[6]), float.Parse(lineSplit[7])), float.Parse(lineSplit[8]) };
            break;

        case "EVT_ScaleSlave":
            EVTCall = cutsceneEVT_ScaleSlave;
            args    = new object[] { lineSplit[1], new Vector3(float.Parse(lineSplit[2]), float.Parse(lineSplit[3]), float.Parse(lineSplit[4])), float.Parse(lineSplit[5]) };
            break;

        case "EVT_ChangeSlaveGraphic":
            EVTCall = cutsceneEVT_ChangeSlaveGraphic;
            args    = new object[] { lineSplit[1], Resources.Load <Sprite>(gfxPath + lineSplit[3]) };
            break;

        case "EVT_ResetSlavePos":
            EVTCall = cutsceneEVT_ResetSlavePos;
            args    = new object[] { lineSplit[1] };
            break;

        case "EVT_SetSlavePos":
            EVTCall = cutsceneEVT_SetSlavePos;
            args    = new object[] { lineSplit[1], new Vector3(float.Parse(lineSplit[2]), float.Parse(lineSplit[3]), float.Parse(lineSplit[4])) };
            break;

        case "FX_Wait":
            FXCall = cutsceneFX_Wait;
            args   = new object[] { float.Parse(lineSplit[1]) };
            break;

        case "FX_ScrollBackground":
            FXCall = cutsceneFX_ScrollBackground;
            args   = new object[] { TermToDirection(lineSplit[1]), float.Parse(lineSplit[2]), float.Parse(lineSplit[3]) };
            break;

        case "FX_ScrollForeground":
            FXCall = cutsceneFX_ScrollForeground;
            args   = new object[] { TermToDirection(lineSplit[1]), float.Parse(lineSplit[2]), float.Parse(lineSplit[3]) };
            break;

        case "FX_FadeOutBackground":
            FXCall = cutsceneFX_FadeOutBackground;
            args   = new object[] { float.Parse(lineSplit[1]) };
            break;

        case "FX_FadeOutForeground":
            FXCall = cutsceneFX_FadeOutForeground;
            args   = new object[] { float.Parse(lineSplit[1]) };
            break;

        case "FX_WaitForClick":
            FXCall = cutsceneFX_WaitForClick;
            args   = new object[0];
            break;

        default:
            throw new Exception("Bad op: " + lineSplit[0]);
        }
        if (EVTCall != null)
        {
            op = new CutsceneOp(EVTCall, args);
        }
        else if (FXCall != null)
        {
            op = new CutsceneOp(FXCall, args);
        }
        else
        {
            throw new Exception("Tried to parse invalid cutscene op: " + lineSplit[0]);
        }
        return(op);
    }
Esempio n. 4
0
    private CutsceneOp[] ParseCutsceneScript(TextAsset _script)
    {
        List <CutsceneOp> ops = new List <CutsceneOp>();

        string[]   scriptLines     = _script.text.Split(new string[] { "\r\n", "\n" }, System.StringSplitOptions.None);
        bool       nextLineIsEndFX = false;
        CutsceneOp op = default(CutsceneOp);

        for (int i = 0; i < scriptLines.Length; i++)
        {
            string[] terms = scriptLines[i].Split(' ');
            if (terms[0] == "skip" || terms[0] == "Skip")
            {
                continue;
            }
            else if (!nextLineIsEndFX)
            {
                op = GetOp(terms);
                if (op.isFX)
                {
                    nextLineIsEndFX = true;
                }
                ops.Add(op);
            }
            else if (i > 0)
            {
                if (terms[0] != "endFX" && terms[0] != "EndFX")
                {
                    throw new Exception("Cutscene " + _script.name + " contains an FX statement with no following endFX statement!");
                }
                else
                {
                    float f;
                    bool  b;
                    if (terms[1] == "waitSeconds")
                    {
                        f = float.Parse(terms[2]);
                        b = f >= 0;
                        if (f < 0)
                        {
                            f = Mathf.Abs(f);
                        }
                    }
                    else if (terms[1] == "waitUntilDone")
                    {
                        f = float.MinValue;
                        b = bool.Parse(terms[2]);
                    }
                    else
                    {
                        throw new Exception("Malformed endFX statement on line " + i.ToString() + " of cutscene " + _script.name);
                    }
                    op.ConfigEndTime(f, b);
                    nextLineIsEndFX = false;
                }
            }
            else
            {
                throw new Exception("The cutscene parser is seriously f****d, and it's looking for endFX on line 0.");
            }
        }
        return(ops.ToArray());
    }