コード例 #1
0
ファイル: Zone.cs プロジェクト: RogueCollab/RogueEssence
        public IEnumerator <YieldInstruction> OnExitSegment(GameProgress.ResultType result, bool rescuing)
        {
            string assetName = "zone_" + ZoneManager.Instance.CurrentZoneID;

            //Do script event
            yield return(CoroutineManager.Instance.StartCoroutine(RunScriptEvent(LuaEngine.EZoneCallbacks.ExitSegment, this, result, rescuing, CurrentMapID.Segment, CurrentMapID.ID)));

            //Notify script engine
            LuaEngine.Instance.OnZoneSegmentEnd(/*assetName, this*/);
        }
コード例 #2
0
ファイル: ScriptGame.cs プロジェクト: Parakoopa/RogueEssence
 public Coroutine _EndDungeonRun(GameProgress.ResultType result, int destzoneid, int structureid, int mapid, int entryid, bool display, bool fanfare)
 {
     return(new Coroutine(DataManager.Instance.Save.EndGame(result, new ZoneLoc(destzoneid, new SegLoc(structureid, mapid), entryid), display, fanfare)));
 }
コード例 #3
0
ファイル: GameManager.cs プロジェクト: Parakoopa/RogueEssence
        public IEnumerator <YieldInstruction> EndSegment(GameProgress.ResultType result)
        {
            if ((result == GameProgress.ResultType.Failed || result == GameProgress.ResultType.Downed || result == GameProgress.ResultType.TimedOut) &&
                DataManager.Instance.CurrentReplay == null)
            {
                SE("Menu/Skip");
                yield return(CoroutineManager.Instance.StartCoroutine(MenuManager.Instance.ProcessMenuCoroutine(new MsgLogMenu())));
            }

            BGM("", true);

            yield return(CoroutineManager.Instance.StartCoroutine(FadeOut(false)));

            yield return(new WaitForFrames(40));

            if (DataManager.Instance.CurrentReplay != null)
            {
                //try to get the game state.  if we can't get any states, then we must have quicksaved here
                if (DataManager.Instance.CurrentReplay.CurrentState < DataManager.Instance.CurrentReplay.States.Count)
                {
                    GameState state = DataManager.Instance.CurrentReplay.ReadState();
                    DataManager.Instance.SetProgress(state.Save);
                    LuaEngine.Instance.LoadSavedData(DataManager.Instance.Save); //notify script engine
                    ZoneManager.LoadFromState(state.Zone);

                    SceneOutcome = MoveToZone(DataManager.Instance.Save.NextDest);
                }
                else
                {
                    //check for a rescue input
                    GameAction rescued = null;
                    if (DataManager.Instance.CurrentReplay.CurrentAction < DataManager.Instance.CurrentReplay.Actions.Count)
                    {
                        GameAction nextAction = DataManager.Instance.CurrentReplay.ReadCommand();
                        if (nextAction.Type == GameAction.ActionType.Rescue)
                        {
                            rescued = nextAction;
                        }
                        else//we shouldn't be hitting this point!  give an error notification!
                        {
                            yield return(CoroutineManager.Instance.StartCoroutine(MenuManager.Instance.SetDialogue(Text.FormatKey("DLG_REPLAY_DESYNC"))));
                        }
                    }

                    if (rescued != null) //run the action
                    {
                        yield return(CoroutineManager.Instance.StartCoroutine(DungeonScene.Instance.ProcessRescue(rescued, null)));
                    }
                    else if (DataManager.Instance.Save.Rescue != null && !DataManager.Instance.Save.Rescue.Rescuing)
                    {
                        //resuming a game that was just rescued
                        DataManager.Instance.ResumePlay(DataManager.Instance.CurrentReplay.RecordDir, DataManager.Instance.CurrentReplay.QuicksavePos);
                        DataManager.Instance.CurrentReplay = null;
                        DataManager.Instance.Loading       = DataManager.LoadMode.None;
                        SOSMail mail = DataManager.Instance.Save.Rescue.SOS;
                        //and then run the action

                        rescued = new GameAction(GameAction.ActionType.Rescue, Dir8.None);
                        rescued.AddArg(mail.OfferedItem.IsMoney ? 1 : 0);
                        rescued.AddArg(mail.OfferedItem.Value);
                        rescued.AddArg(mail.OfferedItem.HiddenValue);

                        rescued.AddArg(mail.RescuedBy.Length);
                        for (int ii = 0; ii < mail.RescuedBy.Length; ii++)
                        {
                            rescued.AddArg(mail.RescuedBy[ii]);
                        }

                        DataManager.Instance.LogPlay(rescued);
                        yield return(CoroutineManager.Instance.StartCoroutine(DungeonScene.Instance.ProcessRescue(rescued, mail)));
                    }
                    else
                    {
                        if (DataManager.Instance.Loading == DataManager.LoadMode.Rescuing)
                        {
                            if (result == GameProgress.ResultType.Rescue)
                            {
                                //mark as verified
                                RescueMenu menu = (RescueMenu)TitleScene.TitleMenuSaveState[TitleScene.TitleMenuSaveState.Count - 1];
                                menu.Verified = true;
                            }
                            //default is failure to verify
                            yield return(CoroutineManager.Instance.StartCoroutine(EndReplay()));
                        }
                        else if (DataManager.Instance.Loading == DataManager.LoadMode.Loading)
                        {
                            //the game accepts loading into a file that has been downed, or passed its section with nothing else
                            DataManager.Instance.ResumePlay(DataManager.Instance.CurrentReplay.RecordDir, DataManager.Instance.CurrentReplay.QuicksavePos);
                            DataManager.Instance.CurrentReplay = null;

                            SetFade(true, false);

                            DataManager.Instance.Loading = DataManager.LoadMode.None;


                            bool rescuing = DataManager.Instance.Save.Rescue != null && DataManager.Instance.Save.Rescue.Rescuing;
                            //if failed, just show the death plaque
                            //if succeeded, run the script that follows.
                            SceneOutcome = ZoneManager.Instance.CurrentZone.OnExitSegment(result, rescuing);
                        }
                        else //we've reached the end of the replay
                        {
                            yield return(CoroutineManager.Instance.StartCoroutine(EndReplay()));
                        }
                    }
                }
            }
            else
            {
                string dateDefeated = String.Format("{0:yyyy-MM-dd}", DateTime.Now);
                bool   rescue       = false;
                if (result == GameProgress.ResultType.Downed && DataManager.Instance.Save.RescuesLeft > 0)
                {
                    yield return(CoroutineManager.Instance.StartCoroutine(MenuManager.Instance.ProcessMenuCoroutine(MenuManager.Instance.CreateQuestion(Text.FormatKey("DLG_RESCUE_ASK"),
                                                                                                                                                        () => { rescue = true; },
                                                                                                                                                        () => { }))));
                }
                //trigger the end-segment script
                if (rescue)
                {
                    DataManager.Instance.SuspendPlay();
                    GameState state    = DataManager.Instance.LoadMainGameState();
                    SOSMail   awaiting = new SOSMail(DataManager.Instance.Save, new ZoneLoc(ZoneManager.Instance.CurrentZoneID, ZoneManager.Instance.CurrentMapID), ZoneManager.Instance.CurrentMap.Name, dateDefeated, Versioning.GetVersion());
                    state.Save.Rescue = new RescueState(awaiting, false);
                    DataManager.Instance.SaveGameState(state);


                    DataManager.SaveRescueMail(DataManager.RESCUE_OUT_PATH + DataManager.SOS_PATH, state.Save.Rescue.SOS, true);

                    yield return(CoroutineManager.Instance.StartCoroutine(MenuManager.Instance.SetDialogue(Text.FormatKey("DLG_RESCUE_INFO_1"))));

                    yield return(new WaitForFrames(1));

                    MenuBase.Transparent = false;
                    SceneOutcome         = RestartToTitle();

                    yield return(CoroutineManager.Instance.StartCoroutine(DungeonScene.Instance.SuspendGame()));
                }
                else
                {
                    bool rescuing = DataManager.Instance.Save.Rescue != null && DataManager.Instance.Save.Rescue.Rescuing;
                    SceneOutcome = ZoneManager.Instance.CurrentZone.OnExitSegment(result, rescuing);
                }
            }
        }