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); }
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; } }
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; }
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); }
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; }
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()); }
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); }
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); } } }
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); }
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)); }
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)); }
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); }
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; }
public void focusSide(CutsceneCharacter character) { CutsceneSide side = (character == leftCharacter) ? CutsceneSide.Left : CutsceneSide.Right; focusSide(side); }