示例#1
0
 public void CheckNextMove(BaseToolBehavior thisTool, DramaAction thisAction)
 {
     thisAction.FinishCurrentAction();
     if (thisAction.actionFinish)
     {
         NextFrame();
         return;
     }
     thisTool.OrderMovement(thisAction.actorsPosition[thisAction.actorPositionIdx], () => CheckNextMove(thisTool, thisAction));
 }
示例#2
0
        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);
                }
            }
        }