Exemple #1
0
        private IEnumerator AddActor(Actor actor, CutsceneSide side)
        {
            Transform holderToUse = GetSideParent(side);

            if (holderToUse.GetComponentInChildren <Actor>() != null)
            {
                throw new UnityException("There is aleady an actor in this spot:" + holderToUse.name);
            }

            Vector2 endPos = new Vector2(holderToUse.transform.position.x, 0);

            Vector2 startPos = new Vector2(
                ((side == CutsceneSide.Left || side == CutsceneSide.FarLeft) ? -1 : 1) * (dimensions.rect.width / 2 + 300),
                actor.transform.position.y);

            // Debug.Log(startPos);

            if (side == CutsceneSide.Left || side == CutsceneSide.FarLeft)
            {
                actor.transform.localScale = new Vector3(-1, 1, 1);
            }


            actor.transform.SetParent(background.transform);
            actor.transform.position = startPos;

            yield return(Util.Lerp(1, t => {
                actor.transform.localPosition = Util.SmoothStep(startPos, endPos, t);
            }));

            actor.transform.SetParent(holderToUse);
            actors.Add(actor);

            yield break;
        }
 public StageBuilder AddActor(CutsceneSide side, Actor newcomer, string name)
 {
     newcomer.name      = name;
     this.newcomer      = newcomer;
     this.newcomer.side = side;
     return(this);
 }
Exemple #3
0
        public IEnumerator transitionOut(CutsceneSide side)
        {
            Image  img;
            string animationName;
            bool   isLeft = side == CutsceneSide.Left;

            if (isLeft)
            {
                img           = leftImage;
                animationName = "CutsceneLeftCharacterOut";
            }
            else
            {
                img           = rightImage;
                animationName = "CutsceneRightCharacterOut";
            }

            Animation anim = img.GetComponent <Animation>();

            anim.Play(animationName);
            yield return(WaitForAnimation(anim));

            if (isLeft)
            {
                leftCharacter = null;
            }
            else
            {
                rightCharacter = null;
            }
        }
Exemple #4
0
        private IEnumerator Invoke(StageBuilder stageBuilder)
        {
            if (stageBuilder.newcomer != null)
            {
                if (FindActor(stageBuilder.newcomer.name) != null)
                {
                    throw new UnityException(
                              "There already exists an actor in the scene with name: "
                              + stageBuilder.newcomer.name);
                }

                yield return(AddActor(stageBuilder.newcomer, stageBuilder.newcomer.side));
            }

            if (stageBuilder.message != null)
            {
                CutsceneSide side = CutsceneSide.None;

                if (!string.IsNullOrEmpty(stageBuilder.speaker))
                {
                    side = FindActor(stageBuilder.speaker).side;

                    foreach (Actor actor in actors)
                    {
                        if (actor.side != side)
                        {
                            actor.IsDark = true;
                        }
                    }
                }

                textbox.AddText(side, stageBuilder.speaker, stageBuilder.message);
                yield return(new WaitForSeconds(5));

                foreach (Actor actor in actors)
                {
                    actor.IsDark = false;
                }
            }

            if (!string.IsNullOrEmpty(stageBuilder.leaverName))
            {
                Actor foundActor = FindActor(stageBuilder.leaverName);

                if (foundActor == null)
                {
                    throw new UnityException(
                              "There exists no actor in the scene with name: "
                              + stageBuilder.leaverName
                              );
                }
                yield return(RemoveActor(foundActor));
            }

            yield break;
        }
Exemple #5
0
        public StageBuilder AddActor(CutsceneSide side, string actorName, string name)
        {
            Actor newcomer = Resources.Load <Actor>("Actors/" + actorName);

            newcomer = GameObject.Instantiate(newcomer);

            newcomer.name      = name;
            this.newcomer      = newcomer;
            this.newcomer.side = side;
            return(this);
        }
Exemple #6
0
 public CutsceneScriptLine(
     CutsceneAction action,
     CutsceneBackground background  = CutsceneBackground.None,
     CutsceneSide side              = CutsceneSide.Left,
     CutsceneCharacter character    = null,
     CharacterExpression expression = CharacterExpression.Default,
     string dialogue = "")
 {
     this.action     = action;
     this.background = background;
     this.side       = side;
     this.character  = character;
     this.expression = expression;
     this.dialogue   = dialogue;
 }
Exemple #7
0
        public void AddText(CutsceneSide nameSide, string speaker, string message)
        {
            ResetDictionary();
            foreach (Tween tween in currentEffects)
            {
                tween.Kill(true);
            }
            currentEffects.Clear();

            if (nameSide == CutsceneSide.FarLeft || nameSide == CutsceneSide.Left)
            {
                leftName.SetText(speaker);
                rightName.SetText(string.Empty);
            }
            else if (nameSide == CutsceneSide.FarRight || nameSide == CutsceneSide.Right)
            {
                rightName.SetText(speaker);
                leftName.SetText(string.Empty);
            }

            char[] chars = message.ToCharArray();

            // parse out tagged strings
            foreach (TextEffect te in TextEffect.All)
            {
                MatchCollection matches = Util.GetTaggedSubstrings(te.symbol, message);

                // Replace tags with zero width space to maintain index accuracy bc lazy
                foreach (Match match in matches)
                {
                    for (int i = match.Index - OPEN_TAG_LENGTH; i < match.Index; i++)
                    {
                        chars[i] = ZERO_WIDTH_SPACE;
                    }
                    for (int i = match.Index + match.Length; i < match.Index + match.Length + CLOSE_TAG_LENGTH; i++)
                    {
                        chars[i] = ZERO_WIDTH_SPACE;
                    }
                }
                effectSubstrings[te] = matches;
            }

            text.SetText(new string(chars));

            StartCoroutine(AnimateText());
        }
Exemple #8
0
        public StageBuilder AddActor(CutsceneSide side, string actorName, string name)
        {
            Actor newcomer = Resources.Load <Actor>("Actors/" + actorName);

            if (newcomer == null)
            {
                throw new UnityException(
                          "There exists no actor in Resources/Actors with name: "
                          + actorName
                          );
            }
            newcomer = GameObject.Instantiate(newcomer);

            newcomer.name      = name;
            this.newcomer      = newcomer;
            this.newcomer.side = side;
            return(this);
        }
Exemple #9
0
 public void focusSide(CutsceneSide side)
 {
     if (side == CutsceneSide.Left)
     {
         restoreColor(leftImage);
         if (rightImage != null)
         {
             greyOut(rightImage);
         }
     }
     else if (side == CutsceneSide.Right)
     {
         restoreColor(rightImage);
         if (leftImage != null)
         {
             greyOut(leftImage);
         }
     }
 }
Exemple #10
0
        private IEnumerator RemoveActor(Actor actor)
        {
            CutsceneSide side = actor.side;


            Vector2 endPos = new Vector2(
                ((side == CutsceneSide.Left || side == CutsceneSide.FarLeft) ? -1 : 1) * (dimensions.rect.width / 2 + 300),
                actor.transform.position.y
                );

            Vector2 startPos = new Vector2(actor.transform.position.x, left.position.y);

            actor.transform.SetParent(background.transform);

            yield return(Util.Lerp(1, t => {
                actor.transform.position = Vector2.Lerp(startPos, endPos, t * t);
            }));

            Destroy(actor.gameObject);
            actors.Remove(actor);
        }
Exemple #11
0
        public IEnumerator transitionIn(CutsceneCharacter character, CutsceneSide side)
        {
            Image  img;
            string animationName;

            if (side == CutsceneSide.Left)
            {
                img           = leftImage;
                animationName = "CutsceneLeftCharacterIn";
            }
            else
            {
                img           = rightImage;
                animationName = "CutsceneRightCharacterIn";
            }

            img.sprite = character.currentExpression;
            Animation anim = img.GetComponent <Animation>();

            anim.Play(animationName);
            yield return(WaitForAnimation(anim));
        }
Exemple #12
0
        public IEnumerator setCharacter(CutsceneCharacter character, CutsceneSide side)
        {
            bool isLeft = (side == CutsceneSide.Left);
            CutsceneCharacter oldCharacter = isLeft ? leftCharacter : rightCharacter;

            if (oldCharacter != null)
            {
                yield return(transitionOut(side));

                yield return(new WaitForSeconds(0.5f));
            }

            if (isLeft)
            {
                leftCharacter = character;
            }
            else
            {
                rightCharacter = character;
            }
            yield return(transitionIn(character, side));
        }
Exemple #13
0
        private Transform GetSideParent(CutsceneSide side)
        {
            Transform parent = null;

            switch (side)
            {
            case CutsceneSide.FarLeft:
                parent = farLeft;
                break;

            case CutsceneSide.Left:
                parent = left;
                break;

            case CutsceneSide.Right:
                parent = right;
                break;

            case CutsceneSide.FarRight:
                parent = farRight;
                break;
            }
            return(parent);
        }
Exemple #14
0
        private IEnumerator Invoke(StageBuilder stageBuilder)
        {
            if (stageBuilder.stopAudio)
            {
                Audio.stopAudio(false);
            }

            if (stageBuilder.pauseBattleTheme)
            {
                Audio.pauseAudio(true);
            }

            if (stageBuilder.newcomer != null)
            {
                if (FindActor(stageBuilder.newcomer.name) != null)
                {
                    throw new UnityException(
                              "There already exists an actor in the scene with name: "
                              + stageBuilder.newcomer.name);
                }

                yield return(AddActor(stageBuilder.newcomer, stageBuilder.newcomer.side));
            }

            if (stageBuilder.expression != null)
            {
                Actor foundActor = FindActor(stageBuilder.speaker);

                if (foundActor == null)
                {
                    throw new UnityException(
                              "There exists no actor in the scene with name: "
                              + stageBuilder.speaker
                              );
                }

                foundActor.image.sprite = stageBuilder.expression;
            }

            if (stageBuilder.sfx != null)
            {
                Audio.playSfx(stageBuilder.sfx);
            }

            if (stageBuilder.background != null)
            {
                Sprite foundSprite = (Resources.Load <Sprite>("Sprites/" + stageBuilder.background));

                if (foundSprite == null)
                {
                    throw new UnityException(
                              "There exists no background " + stageBuilder.background + " in the Resources/Sprites folder, or it has not been imported as a Sprite."
                              );
                }

                yield return(changeBackground(foundSprite));
            }

            if (stageBuilder.message != null)
            {
                CutsceneSide side = CutsceneSide.None;

                if (!string.IsNullOrEmpty(stageBuilder.speaker))
                {
                    Actor foundActor = FindActor(stageBuilder.speaker);

                    if (foundActor == null)
                    {
                        throw new UnityException(
                                  "There exists no actor in the scene with name: "
                                  + stageBuilder.speaker
                                  );
                    }

                    side = foundActor.side;

                    foreach (Actor actor in actors)
                    {
                        if (actor.side != side)
                        {
                            actor.IsDark = true;
                        }
                    }
                }

                textbox.AddText(side, stageBuilder.speaker, stageBuilder.message);

                //I approximate it to take ~0.03 seconds per letter, but we do more so players can actually read
                float playTimeGuess = (float)(stageBuilder.message.Length * 0.06 + 1.5);
                currentDialogLine = this.StartStoppableCoroutine(waitForSeconds(playTimeGuess));
                yield return(currentDialogLine.WaitFor());

                foreach (Actor actor in actors)
                {
                    actor.IsDark = false;
                }
            }

            if (!string.IsNullOrEmpty(stageBuilder.leaverName))
            {
                Actor foundActor = FindActor(stageBuilder.leaverName);

                if (foundActor == null)
                {
                    throw new UnityException(
                              "There exists no actor in the scene with name: "
                              + stageBuilder.leaverName
                              );
                }
                yield return(RemoveActor(foundActor));
            }

            yield break;
        }
Exemple #15
0
        public void focusSide(CutsceneCharacter character)
        {
            CutsceneSide side = (character == leftCharacter) ? CutsceneSide.Left : CutsceneSide.Right;

            focusSide(side);
        }