示例#1
0
        public async Task GetStoryOverview_GetsStorySections()
        {
            var storySection = new StorySection {
                Id = 10, Description = "Chapter One", Order = 1, HierarchyLevel = 1
            };
            var storySections = new OrderedHierarchicalTree <StorySection> (new [] { storySection });

            Mock.Arrange(() => storySectionRepository.GetTreeForStory(testStory.Id))
            .Returns(() => Task.FromResult(storySections));

            var result = await target.GetStoryOverview(testStory.Id);

            Assert.Equal(1, result.Sections.Count);
            Assert.Equal(10, result.Sections[0].Id);
        }
示例#2
0
    IEnumerator ManageStorySection(StorySection story)
    {
        //Debug.Log("[Story] Executing Action: " + story.Action + " [" + story.Order + "]");
        switch (story.Emotion)
        {
        case StoryCharacterEmotion.Jump:
            switch (story.Focus)
            {
            case StoryCharacterPosition.Left:
                LeftCharacterRect.DOPunchPosition(new Vector3(0f, 10f, 0f), 0.2f, 0);
                break;

            case StoryCharacterPosition.Right:
                RightCharacterRect.DOPunchPosition(new Vector3(0f, 10f, 0f), 0.2f, 0);
                break;
            }
            break;

        case StoryCharacterEmotion.Sink:
            switch (story.Focus)
            {
            case StoryCharacterPosition.Left:
                LeftCharacterRect.DOPunchPosition(new Vector3(0f, -15f, 0f), 1f, 0);
                break;

            case StoryCharacterPosition.Right:
                RightCharacterRect.DOPunchPosition(new Vector3(0f, -15f, 0f), 1f, 0);
                break;
            }
            break;

        default:
            break;
        }
        switch (story.Action)
        {
        case StoryAction.Talk:
            charactername.text = story.Name;

            // Show the focused target
            switch (story.Focus)
            {
            case StoryCharacterPosition.Left:
                LeftCharacter.DOColor(new Color(1f, 1f, 1f, 1f), 0.3f);
                RightCharacter.DOColor(new Color(0.8f, 0.8f, 0.8f, 1f), 0.3f);
                break;

            case StoryCharacterPosition.Right:
                RightCharacter.DOColor(new Color(1f, 1f, 1f, 1f), 0.3f);
                LeftCharacter.DOColor(new Color(0.8f, 0.8f, 0.8f, 1f), 0.3f);
                break;
            }

            yield return(StartCoroutine(RevealText(story.Text)));

            break;

        case StoryAction.Enter:
            switch (story.Focus)
            {
            case StoryCharacterPosition.Left:
                LeftCharacter.sprite = story.CharacterArt;
                yield return(StartCoroutine(MoveCharacter(LeftCharacterRect, characterPostion, true)));

                break;

            case StoryCharacterPosition.Right:
                RightCharacter.sprite = story.CharacterArt;
                yield return(StartCoroutine(MoveCharacter(RightCharacterRect, -characterPostion, true)));

                break;
            }
            break;

        case StoryAction.Leave:
            switch (story.Focus)
            {
            case StoryCharacterPosition.Left:
                yield return(StartCoroutine(MoveCharacter(LeftCharacterRect, -characterOffset)));

                break;

            case StoryCharacterPosition.Right:
                yield return(StartCoroutine(MoveCharacter(RightCharacterRect, characterOffset)));

                break;
            }
            break;

        case StoryAction.Question:
            Debug.Log(" -- [Question] Story Text: " + story.Text);
            string[] questionAndAnswers = story.Text.Split('\n');
            charactername.text = questionAndAnswers[0];
            textarea.text      = "";

            ChoiceContainer.SetActive(true);

            foreach (GameObject c in Choices)
            {
                c.SetActive(false);
            }

            for (int i = 1; i < questionAndAnswers.Length; i++)
            {
                Choices[i - 1].SetActive(true);
                string responce = questionAndAnswers[i].Split(':')[0];
                string answer   = questionAndAnswers[i].Split(':')[1];
                Debug.Log(" -- [Question] Answer " + i + ": " + responce + " [" + answer + "]");
                Choices[i - 1].GetComponentInChildren <TextMeshProUGUI>().text = responce;
                Choices[i - 1].GetComponent <Button>().onClick.AddListener(delegate { BtnChoice(answer); });
                Choices[i - 1].GetComponent <RectTransform>().DOAnchorPosY(-((i - 1) * 125f), 0.25f);
                yield return(new WaitForSeconds(0.1f));
            }
            waitingOnQuestionAnswer = true;
            yield return(StartCoroutine(HandleQuestionInput()));

            break;

        case StoryAction.Skip:
            yield return(StartCoroutine(RemoveSectionsBefore(int.Parse(story.Text))));

            break;

        case StoryAction.Background:
            yield return(StartCoroutine(ChangeBackground(story.Text)));

            break;

        case StoryAction.TapChange:
            pauseInteraction = true;
            string[] changes = story.Text.Split('-');
            //NewBoss-bossfight_1
            //ExtendTime-1.5

            switch (changes[0])
            {
            case "ExtendTime":
                if (inTap)
                {
                    float multiplier  = float.Parse(changes[1]);
                    float totalZoneHP = (float)PlayerManager.Instance.SelectedBattle.Zone.ZoneHP;
                    PlayerManager.Instance.SelectedBattle.AccumulatedDamage -= totalZoneHP * multiplier;
                }
                break;

            case "NewBoss":
                if (inTap)
                {
                    // Set the new boss here
                    // This needs to be hooked up to the server
                    PlayerManager.Instance.SelectedBattle.Zone.BossFight = DataManager.Instance.bossFightDataList.GetByIdentity(changes[1]);
                }
                break;

            default:
                Debug.Log("No reward issue");
                break;
            }
            pauseInteraction = false;
            break;

        case StoryAction.Reward:
            pauseInteraction = true;
            Debug.Log("Reward the player here");
            //FreeLoot-lt_zone_training_boss_1-40-20
            //ZoneLoot-a0zone_1
            string[]  rewards = story.Text.Split('-');
            LootCrate crate   = null;

            switch (rewards[0])
            {
            case "FreeLoot":
                crate = new LootCrate(rewards[1], float.Parse(rewards[2]), float.Parse(rewards[3]), DataManager.Instance.crateTypeDataList.GetByIdentity(rewards[4]));
                break;

            case "ZoneLoot":
                ZoneData zone = DataManager.Instance.zoneDataList.GetByIdentity(rewards[1]);

                crate = new LootCrate(zone.LootTable.Identity, zone.MinItemLevel, zone.Variance, MathHelper.WeightedRandom(zone.LootTable.crateType).Key);
                break;

            default:
                Debug.Log("No reward issue");
                break;
            }
            openingChest = true;
            Debug.Log("   [crate] " + crate.lootTableIdentity + " | " + crate.LootTableData);
            OpenChest(crate);

            while (openingChest)
            {
                yield return(new WaitForEndOfFrame());
            }
            pauseInteraction = false;
            break;

        case StoryAction.ClearText:
            charactername.text = "";
            textarea.text      = "";
            break;
        }
    }