protected virtual void GoToSection(int sectionIndex, ChangeType changeType)
        {
            var nextSectionKey = NonImageContent.Sections[sectionIndex].Key;
            var nextSection    = UserEncounter.GetSection(nextSectionKey);
            var selectedArgs   = new UserSectionSelectedEventArgs(nextSection, changeType);

            UserSectionSelector.Select(this, selectedArgs);
        }
        public void StartMenuScene(UserEncounter userEncounter, ILoadingScreen loadingScreen, MenuArea menuArea)
        {
            ImageHolder.BeginHoldingData();
            var categories    = GetMenuEncountersInfo(userEncounter);
            var menuSceneInfo = new LoadingMenuSceneInfo(userEncounter.User, loadingScreen, menuArea, categories);

            MenuSceneStarter.StartScene(menuSceneInfo);
        }
 public void ConfirmStartingMenuScene(UserEncounter userEncounter, ILoadingScreen loadingScreen, MenuArea menuArea)
 {
     UserEncounter = userEncounter;
     LoadingScreen = loadingScreen;
     MenuArea      = menuArea;
     ConfirmationPopup.ShowConfirmation(ExitSceneWithEncounter, ExitConfirmationTitle,
                                        ExitConfirmationDescription, "EXIT", "CANCEL");
 }
示例#4
0
        protected virtual void Initialize(object sender, WriterSceneInfoSelectedEventArgs e)
        {
            var sceneInfo       = e.SceneInfo;
            var encounterStatus = new EncounterStatus(new EncounterBasicStatus(), new EncounterContentStatus());
            var encounter       = new UserEncounter(sceneInfo.User, sceneInfo.Encounter, encounterStatus);
            var encounterResult = new WaitableTask <UserEncounter>(encounter);
            var loadingInfo     = new LoadingReaderSceneInfo(sceneInfo.User, sceneInfo.LoadingScreen, encounterResult);

            LoadingReaderSceneInfoSelector.Select(this, new LoadingReaderSceneInfoSelectedEventArgs(loadingInfo));
        }
        protected virtual WaitableTask <IMenuEncountersInfo> GetMenuEncountersInfo(
            UserEncounter userEncounter)
        {
            var task       = new WaitableTask <IMenuEncountersInfo>();
            var categories = MenuInfoReader.GetMenuEncountersInfo(userEncounter.User);

            categories.AddOnCompletedListener((result) =>
                                              CompleteMenuEncountersInfoTask(task, result, userEncounter));
            return(task);
        }
        protected virtual void SetEncounterStart(UserEncounter encounter)
        {
            var startPoint = GetStartPoint(encounter);

            if (startPoint == null)
            {
                return;
            }

            encounter.Data.Content.NonImageContent.SetCurrentSection(startPoint.Section.Data);
            startPoint.Section.Data.SetCurrentTab(startPoint.Tab.Data);
        }
示例#7
0
        public WaitableTask WriteStatus(UserEncounter encounter)
        {
            var task       = new WaitableTask();
            var serverTask = ServerStatusWriter.WriteStatus(encounter);
            var localTask  = LocalStatusWriter.WriteStatus(encounter);

            serverTask.AddOnCompletedListener(ProcessTaskResults);
            localTask.AddOnCompletedListener(ProcessTaskResults);

            return(task);

            void ProcessTaskResults(TaskResult taskResult) => ProcessResults(task, serverTask, localTask);
        }
示例#8
0
        public UserTab(UserEncounter encounter, Tab data, TabStatus status)
        {
            Encounter = encounter;
            Data      = data;
            Status    = status;

            foreach (var panel in data.Panels)
            {
                var userPanel = new UserPanel(encounter, panel.Value, status.GetPanelStatus(panel.Key));
                userPanel.StatusChanged += UpdateIsRead;
                Panels.Add(panel.Key, userPanel);
            }
        }
示例#9
0
        public UserSection(UserEncounter encounter, Section data, SectionStatus status)
        {
            Encounter = encounter;
            Data      = data;
            Status    = status;

            foreach (var tab in data.Tabs)
            {
                var userTab = new UserTab(encounter, tab.Value, status.GetTabStatus(tab.Key));
                userTab.StatusChanged += UpdateIsRead;
                Tabs.Add(tab.Key, userTab);
            }
        }
示例#10
0
        public UserDialoguePin(UserEncounter encounter, DialoguePin dialogue, DialogueStatus status)
        {
            Encounter = encounter;
            Data      = dialogue;
            Status    = status;

            foreach (var panel in Data.Conversation)
            {
                var userPanel = new UserPanel(encounter, panel.Value, status.GetPanelStatus(panel.Key));
                userPanel.StatusChanged += UpdateIsRead;
                Panels.Add(panel.Key, userPanel);
            }
        }
示例#11
0
        public UserQuizPin(UserEncounter encounter, QuizPin quiz, QuizStatus status)
        {
            Encounter = encounter;
            Data      = quiz;
            Status    = status;

            foreach (var panel in Data.Questions)
            {
                var userPanel = new UserPanel(encounter, panel.Value, status.GetPanelStatus(panel.Key));
                userPanel.StatusChanged += UpdateIsRead;
                Panels.Add(panel.Key, userPanel);
            }
        }
        public UserReadMorePin(UserEncounter encounter, ReadMorePin readMore, ReadMoreStatus status)
        {
            Encounter = encounter;
            Data      = readMore;
            Status    = status;

            foreach (var panel in Data.Panels)
            {
                var userPanel = new UserPanel(encounter, panel.Value, status.GetPanelStatus(panel.Key));
                userPanel.StatusChanged += UpdateIsRead;
                Panels.Add(panel.Key, userPanel);
            }
        }
        protected virtual void StartReader()
        {
            SceneInfoSelector.CurrentValue.SceneInfo.Encounter.Content.NonImageContent.SetCurrentSection(SectionSelector.CurrentValue.SelectedSection);
            SectionSelector.CurrentValue.SelectedSection.SetCurrentTab(TabSelector.CurrentValue.SelectedTab);

            SignalBus.Fire <SerializeEncounterSignal>();
            var sceneInfo       = SceneInfoSelector.CurrentValue.SceneInfo;
            var encounterStatus = new EncounterStatus(new EncounterBasicStatus(), new EncounterContentStatus());
            var encounter       = new UserEncounter(sceneInfo.User, sceneInfo.Encounter, encounterStatus);
            var encounterResult = new WaitableTask <UserEncounter>(encounter);
            var loadingInfo     = new LoadingReaderSceneInfo(sceneInfo.User, sceneInfo.LoadingScreen, encounterResult);

            ReaderSceneStarter.StartScene(loadingInfo);
        }
示例#14
0
        public WaitableTask WriteStatus(UserEncounter encounter)
        {
            var metadata = encounter.Data.Metadata;
            var status   = encounter.Status;

            var statusKeyValuePair = new KeyValuePair <int, EncounterBasicStatus>(metadata.RecordNumber, status.BasicStatus);
            var basicStatusString  = BasicStatusSerializer.Serialize(statusKeyValuePair);

            FileManager.SetFileText(encounter.User, FileType.BasicStatus, metadata, basicStatusString);

            var statusString = ContentStatusSerializer.Serialize(status.ContentStatus);

            FileManager.SetFileText(encounter.User, FileType.DetailedStatus, metadata, statusString);

            return(WaitableTask.CompletedTask);
        }
        protected void ProcessResults(User user,
                                      WaitableTask <UserEncounter> result,
                                      WaitableTask <Encounter> encounterData,
                                      WaitableTask <EncounterStatus> detailedStatus)
        {
            if (result.IsCompleted() || !encounterData.IsCompleted() || !detailedStatus.IsCompleted())
            {
                return;
            }

            encounterData.Result.Value.Content.NonImageContent.Sections[0].Value.Tabs.Insert(0, "TOC", new Tab("Table Of Contents", "Table of Contents"));
            var encounter = new UserEncounter(user, encounterData.Result.Value, detailedStatus.Result.Value);

            SetEncounterStart(encounter);

            result.SetResult(encounter);
        }
        protected SectionTabPair GetStartPoint(UserEncounter encounter)
        {
            UserSection lastSection = null;

            foreach (var section in encounter.Sections.Values)
            {
                if (section.IsRead())
                {
                    lastSection = section;
                    continue;
                }

                return(GetStartPoint(lastSection, section));
            }

            return(null);
        }
示例#17
0
        public UserPanel(UserEncounter encounter, Panel data, PanelStatus status)
        {
            Encounter = encounter;
            Data      = data;
            Status    = status;
            if (data.Pins != null && data.Pins.HasPin())
            {
                PinGroup = new UserPinGroup(encounter, data.Pins, status.PinGroupStatus);
                PinGroup.StatusChanged += UpdateIsRead;
            }

            foreach (var panel in data.ChildPanels)
            {
                var userPanel = new UserPanel(encounter, panel.Value, status.GetChildPanelStatus(panel.Key));
                userPanel.StatusChanged += UpdateIsRead;
                ChildPanels.Add(panel.Key, userPanel);
            }
        }
示例#18
0
        public UserPinGroup(UserEncounter encounter, PinGroup pinGroup, PinGroupStatus status)
        {
            Encounter = encounter;
            Data      = pinGroup;
            Status    = status;

            if (pinGroup.ReadMore != null)
            {
                ReadMorePin = new UserReadMorePin(Encounter, Data.ReadMore, Status.ReadMoreStatus);
                ReadMorePin.StatusChanged += UpdateIsRead;
            }
            if (pinGroup.Dialogue != null)
            {
                DialoguePin = new UserDialoguePin(Encounter, Data.Dialogue, Status.DialogueStatus);
                DialoguePin.StatusChanged += UpdateIsRead;
            }
            if (pinGroup.Quiz != null)
            {
                QuizPin = new UserQuizPin(Encounter, Data.Quiz, Status.QuizStatus);
                QuizPin.StatusChanged += UpdateIsRead;
            }
        }
示例#19
0
 public abstract void ShowEncounterInfo(UserEncounter userEncounter);
 public UserEncounterSelectedEventArgs(UserEncounter encounter) => Encounter = encounter;
 protected virtual void OnEncounterSelected(object sender, UserEncounterSelectedEventArgs eventArgs)
 => UserEncounter = eventArgs.Encounter;
        protected virtual void CompleteMenuEncountersInfoTask(WaitableTask <IMenuEncountersInfo> task,
                                                              TaskResult <IMenuEncountersInfo> result, UserEncounter userEncounter)
        {
            if (userEncounter?.Status != null)
            {
                userEncounter.Status.BasicStatus.Completed = userEncounter.Status.ContentStatus.Read;
            }

            if (result.IsError())
            {
                task.SetError(result.Exception);
                return;
            }

            if (result.Value == null)
            {
                task.SetResult(null);
                return;
            }

            foreach (var encounter in result.Value.GetEncounters())
            {
                if (encounter.GetLatestMetadata().RecordNumber != userEncounter.Data.Metadata.RecordNumber)
                {
                    continue;
                }

                if (userEncounter.Status != null)
                {
                    encounter.Status = userEncounter.Status.BasicStatus;
                }
                else
                {
                    encounter.Status = new EncounterBasicStatus();
                }
                break;
            }

            task.SetResult(result.Value);
        }