예제 #1
0
    private void HandleStepExecuted(Step step)
    {
        //Debug.Log(step.command+" "+step.target+" "+step.content);
        if (canvas.isActiveAndEnabled)
        {
            Character   character = step.target as Character;
            int         index     = visibleCharacters.IndexOf(character);
            CanvasPanel panel     = null;
            if (index != -1)
            {
                panel = _panels[index];
            }
            if (panel != null)
            {
                Color color;
                int   integer;
                float floatValue;
                switch (step.command)
                {
                case "speak":
                case "narrate":
                case "sing":
                case "think":
                case "setbackgroundimage":
                    if (step.command == "setbackgroundimage")
                    {
                        if (step.content == "none")
                        {
                            panel.ClearImage();
                        }
                        break;
                    }
                    string extension = GetFilenameExtension(step.content);
                    switch (extension)
                    {
                    case "gif":
                    case "png":
                    case "jpg":
                        panel.SetImage(step.content);
                        break;

                    case "mp3":
                    case "ogg":
                    case "wav":
                    case "m4a":
                        break;

                    case "mp4":
                    case "mov":
                        panel.SetVideo(step.content);
                        break;

                    default:
                        panel.SetText(step.content);
                        break;
                    }
                    break;

                case "setgrid":
                    SetGrid(ParseVector2FromString(step.content));
                    break;

                case "setlayout":
                    SetPanelLayout(panel, ParseRectFromString(step.content));
                    break;

                case "setstagecolor":
                    if (ColorUtility.TryParseHtmlString(step.content, out color))
                    {
                        SetStageBackgroundColor(color);
                    }
                    break;

                case "setbackcolor":
                    if (ColorUtility.TryParseHtmlString(step.content, out color))
                    {
                        panel.SetBackgroundColor(color);
                    }
                    break;

                case "setforecolor":
                    if (ColorUtility.TryParseHtmlString(step.content, out color))
                    {
                        panel.SetTextColor(color);
                    }
                    break;

                case "setfont":
                    panel.SetTextFont(step.content);
                    break;

                case "setposition":
                case "moveto":
                    panel.SetPosition(ParsePositionFromStringForPanel(step.content, panel));
                    break;

                case "setsize":
                case "changesize":
                    SetPanelSize(panel, ParseVector2FromString(step.content));
                    break;

                case "setmargin":
                    panel.SetMargins(ParseBordersFromString(step.content));
                    break;

                case "settextalign":
                    panel.SetTextAlign(ParseTextAnchorFromString(step.content));
                    break;

                case "setcaptionmargin":
                case "setpadding":
                    panel.SetTextMargins(ParseBordersFromString(step.content));
                    break;

                case "setcaptionbackgroundcolor":
                case "setcaptionbackcolor":
                    if (ColorUtility.TryParseHtmlString(step.content, out color))
                    {
                        panel.SetTextBackgroundColor(color);
                    }
                    break;

                case "setcaptionpadding":
                    panel.SetTextPadding(ParseBordersFromString(step.content));
                    break;

                case "setfontsize":
                    if (int.TryParse(step.content, out integer))
                    {
                        panel.SetTextSize(integer);
                    }
                    break;

                case "setlineheight":
                    if (float.TryParse(step.content, out floatValue))
                    {
                        panel.SetTextLineSpacing(floatValue);
                    }
                    break;

                case "setletterspacing":
                    if (float.TryParse(step.content, out floatValue))
                    {
                        panel.SetTextCharacterSpacing(floatValue);
                    }
                    break;

                case "settexttransform":
                    panel.SetTextTransform(ParseTextTransformFromString(step.content));
                    break;

                case "setcamera":
                    panel.SetCamera(step.content);
                    break;

                case "pause":
                    panel.Pause();
                    break;

                case "play":
                    panel.Play();
                    break;

                case "setloop":
                    panel.SetLoop(step.content == "true" ? true : false);
                    break;

                case "setlayouttransition":
                    if (float.TryParse(step.content, out floatValue))
                    {
                        panel.SetLayoutTransition(floatValue);
                    }
                    break;

                case "setimagetransition":
                    if (float.TryParse(step.content, out floatValue))
                    {
                        panel.SetImageTransition(floatValue);
                    }
                    break;

                case "setbackgroundsize":
                    if (step.content == "cover")
                    {
                        panel.SetBackgroundSize(BackgroundSize.Cover);
                    }
                    else if (step.content == "contain")
                    {
                        panel.SetBackgroundSize(BackgroundSize.Contain);
                    }
                    break;
                }
            }
        }
    }