public void CheckNextMove(BaseToolBehavior thisTool, DramaAction thisAction) { thisAction.FinishCurrentAction(); if (thisAction.actionFinish) { NextFrame(); return; } thisTool.OrderMovement(thisAction.actorsPosition[thisAction.actorPositionIdx], () => CheckNextMove(thisTool, thisAction)); }
public void EnactAction(DramaAction thisAction) { if (thisAction.delayBeforeStart > 0.0f) { float time = new float(); time = thisAction.delayBeforeStart; thisAction.delayBeforeStart = 0; StartCoroutine(DelayThisAction(thisAction, time)); } else { // Check if Actor Exist if (thisAction.actionType == DramaActionType.MakeActorMove) { if (thisAction.thisActor.actorType != DramaActorType.SFX && thisAction.thisActor.actorType != DramaActorType.Tools) { //Debug.Log("Making Actor Move!"); GameObject actionActor = thisAction.thisActor.currentActor; if (actionActor.GetComponent <BaseCharacter>() == null) { return; } BaseCharacter thisChar = actionActor.GetComponent <BaseCharacter>(); if (thisAction.stayOnLastState) { thisChar.isActing = true; } else { thisChar.isActing = false; } if (thisChar == null) { // Debug.LogError("BaseCharacter Not Found, Check Unit"); return; } if (ScenePointPathfinder.GetInstance == null) { // Debug.LogError("Need ScenePoint PathFinder"); return; } if (thisAction.actorPositionIdx == 0) { ScenePointBehavior tmp = ScenePointPathfinder.GetInstance.ObtainNearestScenePoint(thisAction.actorsPosition[0]); thisChar.SpawnInThisPosition(tmp); CheckNextMove(thisChar, thisAction); thisChar.OrderToFace((FacingDirection)thisAction.facingDirection[thisAction.actorPositionIdx]); } else { ScenePointBehavior tmp = ScenePointPathfinder.GetInstance.ObtainNearestScenePoint(thisAction.actorsPosition[1]); thisChar.OrderMovement(tmp, () => CheckNextMove(thisChar, thisAction)); thisChar.OrderToFace((FacingDirection)thisAction.facingDirection[thisAction.actorPositionIdx]); } } else if (thisAction.thisActor.actorType == DramaActorType.Tools) { BaseToolBehavior tmp = thisAction.thisActor.currentActor.GetComponent <BaseToolBehavior>(); if (tmp == null) { return; } if (thisAction.actorPositionIdx == 0) { tmp.OrderMovement(thisAction.actorsPosition[0], () => CheckNextMove(tmp, thisAction)); } } } else if (thisAction.actionType == DramaActionType.BanishActor) { GameObject actionActor = thisAction.thisActor.currentActor; if (actionActor.GetComponent <BaseCharacter>() == null) { return; } BaseCharacter thisChar = actionActor.GetComponent <BaseCharacter>(); thisChar.OrderToBanish(); CheckNextMove(thisAction); } else if (thisAction.actionType == DramaActionType.ShowActor) { GameObject actionActor = thisAction.thisActor.currentActor; if (actionActor.GetComponent <BaseCharacter>() == null) { return; } BaseCharacter thisChar = actionActor.GetComponent <BaseCharacter>(); thisChar.OrderToReveal(); CheckNextMove(thisAction); } else if (thisAction.actionType == DramaActionType.ShowConversation) { if (DialogueManager.GetInstance == null) { return; } ConversationInformationData thisConversation = DialogueManager.GetInstance.dialogueStorage.ObtainConversationByTitle(thisAction.conversationTitle); thisConversation.conversingActors = new List <BaseCharacter>(); DialogueManager.GetInstance.StartConversation(thisConversation, () => CheckNextMove(thisAction)); } else if (thisAction.actionType == DramaActionType.ShowTabCover) { if (TransitionManager.GetInstance == null) { return; } TransitionManager.GetInstance.ShowTabCover(); } else if (thisAction.actionType == DramaActionType.HideTabCover) { if (TransitionManager.GetInstance == null) { return; } TransitionManager.GetInstance.HideTabCover(); } else if (thisAction.actionType == DramaActionType.FadeToDark) { darkFader.FadeToDark(() => CheckNextMove(thisAction)); } else if (thisAction.actionType == DramaActionType.FadeToClear) { darkFader.FadeToClear(() => CheckNextMove(thisAction)); } else if (thisAction.actionType == DramaActionType.LoadThisScene) { if (TransitionManager.GetInstance == null) { return; } DialogueManager.GetInstance.afterConversationCallBack.Clear(); TransitionManager.GetInstance.LoadScene(thisAction.loadThisScene, ClearDrama); } } }