// Handle the showing of how to show the sentences to player. void HandleDialogueText(DialogueData.Dialogue currDialogue) { int currSentenceCount = currDialogue.sentenceList.Count; if (mCurrSentenceIndex < currSentenceCount) { DialogueData.Dialogue.Sentence currSentence = currDialogue.sentenceList[mCurrSentenceIndex]; if (mIsShowingSentence) { // Skip the type-writer style writing and show full sentence. StopCoroutine(coroutine); mDialogueText.text = currSentence.text; SetToNextSentence(); } else if (!mIsShowingSentence) { if (mActiveCharacterSpriteState == ActiveCharacterSpriteState.NONE) { if (currDialogue.isLeft) { mActiveCharacterSpriteState = ActiveCharacterSpriteState.LEFT; } else { mActiveCharacterSpriteState = ActiveCharacterSpriteState.RIGHT; } } string charName = currDialogue.character.name.ToString(); UpdateCharacterSprite(currSentence); ShowNextDialogue(currSentence, charName); } } }
// Set left and right character's sprite and state. void CharSpriteState() { if (currDialogueData > dialogueDataList.Count - 1) { return; } DialogueData.Dialogue firstDiag = dialogueDataList[currDialogueData].dialogueList [0]; Sprite firstSprite = firstDiag.sentenceList [0].sprite; DialogueData.Dialogue secondDiag = null; Sprite secondSprite = null; for (int i = 1; i < dialogueDataList[currDialogueData].dialogueList.Count; i++) { DialogueData.Dialogue currDiag = dialogueDataList[currDialogueData].dialogueList [i]; if (currDiag.character.name != CharacterData.Info.Character.NONE && firstDiag.character.name != currDiag.character.name) { secondDiag = currDiag; break; } } if (secondDiag != null) { secondSprite = secondDiag.sentenceList [0].sprite; } if (firstDiag.isLeft) { mActiveCharacterSpriteState = ActiveCharacterSpriteState.LEFT; characterSpriteList[0].characterSpriteRend.sprite = firstSprite; if (secondSprite != null) { characterSpriteList[1].characterSpriteRend.sprite = secondSprite; } if (!dialogueDataList[currDialogueData].isBothAppear) { characterSpriteList[1].spriteState = CharacterSprite.SpriteState.INVISIBLE_IN_SCREEN; } } else { mActiveCharacterSpriteState = ActiveCharacterSpriteState.RIGHT; characterSpriteList[1].characterSpriteRend.sprite = firstSprite; if (secondSprite != null) { characterSpriteList[0].characterSpriteRend.sprite = secondSprite; } if (!dialogueDataList[currDialogueData].isBothAppear) { characterSpriteList[0].spriteState = CharacterSprite.SpriteState.INVISIBLE_IN_SCREEN; } } SetActiveCharacterSpriteShade(); }
// Swap character's shade. void SwapActiveCharacterSpriteShade() { if (mActiveCharacterSpriteState == ActiveCharacterSpriteState.LEFT) // Change right character to active. { mActiveCharacterSpriteState = ActiveCharacterSpriteState.RIGHT; leftCharacter.color = new Color(0.5f, 0.5f, 0.5f, 1.0f); rightCharacter.color = Color.white; } else // Change left character to active. { mActiveCharacterSpriteState = ActiveCharacterSpriteState.LEFT; leftCharacter.color = Color.white; rightCharacter.color = new Color(0.5f, 0.5f, 0.5f, 1.0f); } }
IEnumerator WaitTimeBasedOnCurrentDialogue() { mCurrentState = CurrentState.DIALOGUE_PAUSE; DialogueData.Dialogue currDialogue = dialogueDataList[currDialogueData].dialogueList[mCurrDialogueIndex]; DialogueSlide.sSingleton.DisappearAll(false); yield return(new WaitForSeconds(currDialogue.time.reOpenTime)); mCurrDialogueIndex++; mIsUpdatedPosScale = false; currDialogue = dialogueDataList[currDialogueData].dialogueList[mCurrDialogueIndex]; if (mActiveCharacterSpriteState == ActiveCharacterSpriteState.NONE) { if (currDialogue.isLeft) { mActiveCharacterSpriteState = ActiveCharacterSpriteState.LEFT; } else { mActiveCharacterSpriteState = ActiveCharacterSpriteState.RIGHT; } } DialogueData.Dialogue.Sentence currSentence = currDialogue.sentenceList[0]; string charName = currDialogue.character.name.ToString(); UpdateCharacterSprite(currSentence); ShowNextDialogue(currSentence, charName); if (dialogueDataList[currDialogueData].isBothAppear) { DialogueSlide.sSingleton.AppearAll(); mCurrentState = CurrentState.DIALOGUE_SHOW; } }
// This happens when both of the characters on screen are not talking. void DarkenBothCharacterSpriteShade() { mActiveCharacterSpriteState = ActiveCharacterSpriteState.NONE; leftCharacter.color = new Color(0.5f, 0.5f, 0.5f, 1.0f); rightCharacter.color = new Color(0.5f, 0.5f, 0.5f, 1.0f); }
void SetToNextDialogue() { DialogueData.Dialogue currDialogue = dialogueDataList[currDialogueData].dialogueList[mCurrDialogueIndex]; int dialogueCount = dialogueDataList[currDialogueData].dialogueList.Count; mIsShowingSentence = false; if (mCurrDialogueIndex + 1 < dialogueCount) { CharacterData.Info.Character currChar = currDialogue.character.name; CharacterData.Info.Character nextChar = dialogueDataList[currDialogueData].dialogueList[mCurrDialogueIndex + 1].character.name; bool isNextCharNone = IsNextCharacterNone(currDialogue); if (currChar != CharacterData.Info.Character.NONE && isNextCharNone) { mSavedActiveCharacter = currDialogue.character.name; } else if (currChar != CharacterData.Info.Character.NONE && nextChar != mSavedActiveCharacter) { mIsSwapActive = !isNextCharNone && !IsNextCharacterTheSame(currDialogue); } if (currDialogue.time.reOpenTime != 0) { mCurrentState = CurrentState.DIALOGUE_RE_OPEN; } else { // ------------------------------HANDLE MOVE-OUT TIME------------------------------ if (currDialogue.time.moveOutTime > 0) { HandleMoveOutTime(currDialogue); } else { mCurrentState = CurrentState.DIALOGUE_SHOW; } // --------------------------------END MOVE-OUT TIME------------------------------- mCurrDialogueIndex++; mIsUpdatedPosScale = false; // Set back the active character's state. if (mActiveCharacterSpriteState == ActiveCharacterSpriteState.NONE) { DialogueData.Dialogue nextDialogue = dialogueDataList[currDialogueData].dialogueList[mCurrDialogueIndex]; if (nextDialogue.isLeft) { mActiveCharacterSpriteState = ActiveCharacterSpriteState.LEFT; } else { mActiveCharacterSpriteState = ActiveCharacterSpriteState.RIGHT; } } } } else if (mCurrDialogueIndex + 1 >= dialogueCount) { mCurrentState = CurrentState.DIALOGUE_ENDED; currDialogueData++; // mIsFirstStart = true; // GameManager.sSingleton.state = GameManager.State.NONE; // Debug.Log("Ended"); } }
// Handle the moving in of character potraits and dialogue sentences. void HandleDialogueShow() { DialogueData.Dialogue currDialogue = dialogueDataList[currDialogueData].dialogueList[mCurrDialogueIndex]; // Update current character state. if (currDialogue.isLeft) { mActiveCharacterSpriteState = ActiveCharacterSpriteState.LEFT; } else { mActiveCharacterSpriteState = ActiveCharacterSpriteState.RIGHT; } if (mCurrDialogueIndex != 0 && !mIsUpdatedPosScale) { UpdateCharPositionAndScale(currDialogue.isLeft); } mIsSwapActive = false; // ------------------------------HANDLE MOVE-IN TIME------------------------------ if (currDialogue.time.moveInTime > 0 && ((mActiveCharacterSpriteState == ActiveCharacterSpriteState.LEFT && characterSpriteList[0].spriteState != CharacterSprite.SpriteState.IN_SCREEN) || (mActiveCharacterSpriteState == ActiveCharacterSpriteState.RIGHT && characterSpriteList[1].spriteState != CharacterSprite.SpriteState.IN_SCREEN))) { if (currDialogue.appearMeth == DialogueData.Dialogue.AppearMethod.FADE) { // TODO : defaultLeft and defaultRight to follow characterData postList. // if (mActiveCharacterSpriteState == ActiveCharacterSpriteState.LEFT) leftCharacter.transform.position = defaultLeftSprPos; // else if (mActiveCharacterSpriteState == ActiveCharacterSpriteState.RIGHT) rightCharacter.transform.position = defaultRightSprPos; AppearCharOnScreen(currDialogue); } else if (currDialogue.appearMeth == DialogueData.Dialogue.AppearMethod.SLIDE) { PutSpriteOutScreen(currDialogue); UpdateCharacterSprite(currDialogue.sentenceList[0]); HandleMoveInTime(currDialogue); } } else { // Fade in character if it's invisible in screen. (Alpha 0 to 1). if ((mActiveCharacterSpriteState == ActiveCharacterSpriteState.LEFT && characterSpriteList[0].spriteState == CharacterSprite.SpriteState.INVISIBLE_IN_SCREEN) || (mActiveCharacterSpriteState == ActiveCharacterSpriteState.RIGHT && characterSpriteList[1].spriteState == CharacterSprite.SpriteState.INVISIBLE_IN_SCREEN)) { AppearCharOnScreen(currDialogue); if (mActiveCharacterSpriteState == ActiveCharacterSpriteState.LEFT) { characterSpriteList[0].spriteState = CharacterSprite.SpriteState.IN_SCREEN; } else { characterSpriteList[1].spriteState = CharacterSprite.SpriteState.IN_SCREEN; } } else { HandleDialogueText(currDialogue); } } }