Beispiel #1
0
        public IScenarioNode Build(IEnumerator <parser.token.ITokenable> tokens, IScenarioNode now, ScenarioData scenarioData)
        {
            if ((tokens.Current.GetType() != parser.token.TokenType.LeftArrow) || !tokens.MoveNext())
            {
                throw new SyntaxErrorException();
            }

            if ((tokens.Current.GetType() != parser.token.TokenType.Word))
            {
                throw new SyntaxErrorException();
            }

            if ((tokens.Current.GetToken() != Command.WaitNext || !tokens.MoveNext()))
            {
                throw new SyntaxErrorException();
            }

            if ((tokens.Current.GetType() != parser.token.TokenType.Slash) || !tokens.MoveNext())
            {
                throw new SyntaxErrorException();
            }

            if ((tokens.Current.GetType() != parser.token.TokenType.RightArrow) || !tokens.MoveNext())
            {
                throw new SyntaxErrorException();
            }

            return(new ScenarioElement(
                       new executor.WaitNext()
                       ));
        }
Beispiel #2
0
        public IScenarioNode Build(IEnumerator <parser.token.ITokenable> tokens, IScenarioNode now, ScenarioData scenarioData)
        {
            var result = new ScenarioElement();

            //  attribute解析
            while (tokens.Current.GetType() != parser.token.TokenType.RightArrow)
            {
                var attribute = new Attribute();
                result.AddAttribute(attribute.Build(tokens, result, scenarioData));
            }

            tokens.MoveNext();

            //  子要素 img命令が0回以上続く
            var image = new Image();

            for (; image.IsSyntax(tokens);)
            {
                var tag = new Tag();
                result.AddChild(tag.Build(tokens, now, scenarioData));
            }


            return(result);
        }
Beispiel #3
0
        public IScenarioNode Build(IEnumerator <parser.token.ITokenable> tokens, IScenarioNode now, ScenarioData scenarioData)
        {
            //  とりあえず最初にくるのはタグのみ対応
            var tag = new Tag();

            return(tag.Build(tokens, now, scenarioData));
        }
Beispiel #4
0
        public void Play(ScenarioPlayer player, IScenarioNode parent)
        {
            if (isFirst)
            {
                isFirst = false;
                player.StartNewText(Say.ToTextType(parent.GetAttribute("class").Value), parent.GetAttribute("name").Value);
            }

            while (true)
            {
                if (nextPlayTime > player.Now)
                {
                    return;
                }

                nowLength++;

                if (text.Length < nowLength)
                {
                    isPlayed = true;
                    return;
                }

                player.AddText(text.Substring(nowLength - 1, 1));

                nextPlayTime = player.Now + delay;
            }
        }
Beispiel #5
0
        public void Play(ScenarioPlayer player, IScenarioNode parent)
        {
            if (startPlayTime < 0.0f)
            {
                player.StartNewText(Say.ToTextType(parent.GetAttribute("class").Value), parent.GetAttribute("name").Value);

                startPlayTime = player.Now;

                player.AddText(text);
            }

            float deltaTime = player.Now - startPlayTime;

            if (delay <= 0.0f)
            {
                player.SetOpacity(1.0f);
            }
            else
            {
                player.SetOpacity((deltaTime) / delay);
            }

            if (deltaTime >= delay)
            {
                //  再生完了
                isPlayed = true;
                return;
            }
        }
Beispiel #6
0
        public IScenarioNode Build(IEnumerator <parser.token.ITokenable> tokens, IScenarioNode now, ScenarioData scenarioData)
        {
            var result = new ScenarioElement(
                new executor.Say()
                );

            //  attribute解析
            while (tokens.Current.GetType() != parser.token.TokenType.RightArrow)
            {
                var attribute = new Attribute();
                result.AddAttribute(attribute.Build(tokens, result, scenarioData));
            }

            tokens.MoveNext();


            //  子要素
            //  0回以上NewLine or WaitNext or テキストが続く
            while (true)
            {
                var textBuilder = new Text();
                if (textBuilder.IsSyntax(tokens))
                {
                    result.AddChild(textBuilder.Build(tokens, result, scenarioData));
                    continue;
                }

                var newLineBuilder = new NewLine();
                if (newLineBuilder.IsSyntax(tokens))
                {
                    result.AddChild(newLineBuilder.Build(tokens, result, scenarioData));
                    continue;
                }

                var waitNextBuilder = new WaitNext();
                if (waitNextBuilder.IsSyntax(tokens))
                {
                    result.AddChild(waitNextBuilder.Build(tokens, result, scenarioData));
                    continue;
                }

                var comment = new Comment();
                if (comment.IsSyntax(tokens))
                {
                    var tag = new Tag();
                    result.AddChild(tag.Build(tokens, result, scenarioData));

                    continue;
                }

                break;
            }
            return(result);
        }
Beispiel #7
0
        public bool IsPlayed(IScenarioNode parent)
        {
            if (isWaitNext())
            {
                //  次へ進むのを待っている
                return(false);
            }

            return(parent.GetChildren().All(
                       child => child.GetExecutor() == null || child.GetExecutor().IsPlayed(child)
                       ));
        }
Beispiel #8
0
        public IScenarioNode Build(IEnumerator <parser.token.ITokenable> tokens, IScenarioNode now, ScenarioData scenarioData)
        {
            var result = new ScenarioElement();

            //  attribute解析
            while (tokens.Current.GetType() != parser.token.TokenType.Slash)
            {
                var attribute = new Attribute();
                result.AddAttribute(attribute.Build(tokens, result, scenarioData));
            }

            return(result);
        }
Beispiel #9
0
        public IScenarioNode Build(IEnumerator <parser.token.ITokenable> tokens, IScenarioNode now, ScenarioData scenarioData)
        {
            var result = new ScenarioElement();

            //  コメント解析
            while (tokens.Current.GetType() != parser.token.TokenType.Word || tokens.Current.GetToken() != "--" || tokens.Current.Next.GetType() != parser.token.TokenType.RightArrow)
            {
                tokens.MoveNext();
            }

            tokens.MoveNext();

            return(result);
        }
Beispiel #10
0
        private void playFirstBefore(ScenarioPlayer player, IScenarioNode parent)
        {
            player.ClearText();

            if (parent.GetAttribute("isWaitClick").Value == "false")
            {
                isWaitClick = false;
            }

            //  TODO文字列長計算したりとか
            now = parent.GetChildren().First();

            SingleTouchController.OnTouch += onTouch;
        }
Beispiel #11
0
        public IScenarioNode Build(IEnumerator <ITokenable> tokens, IScenarioNode now, ScenarioData scenarioData)
        {
            String text = tokens.Current.GetToken();

            tokens.MoveNext();

            while (IsSyntax(tokens))
            {
                text += System.Environment.NewLine;
                text += tokens.Current.GetToken();
                tokens.MoveNext();
            }
            return(new ScenarioElement(
                       new executor.Text(text, now.GetAttribute("effect").Value, float.Parse(now.GetAttribute("delay").Value))
                       ));
        }
Beispiel #12
0
        public void Play(ScenarioPlayer player, IScenarioNode parent)
        {
            //  再生完了している(親から呼ばれないはずなので必要ないきもする
            if (IsPlayed(parent))
            {
                return;
            }

            if (now == null)
            {
                playFirstBefore(player, parent);
            }

            if (now.GetExecutor() == null || now.GetExecutor().IsPlayed(now))
            {
                //  再生完了
                nowIndex++;
                try
                {
                    now = parent.GetChild(nowIndex);
                }
                catch (System.ArgumentOutOfRangeException)
                {
                    //  多分終わり
                    if (isWaitClick)
                    {
                        nowState = State.WaitNext;
                    }
                    else
                    {
                        nowState = State.Next;
                    }
                    return;
                }
            }

            if (now.GetExecutor() == null)
            {
                return;
            }

            now.GetExecutor().Play(player, parent);
        }
Beispiel #13
0
        public IScenarioNode Build(IEnumerator <parser.token.ITokenable> tokens, IScenarioNode now, ScenarioData scenarioData)
        {
            var result = new ScenarioElement();

            while (tokens.Current.GetType() != parser.token.TokenType.Slash)
            {
                var attribute = new Attribute();
                result.AddAttribute(attribute.Build(tokens, result, scenarioData));
            }


            //  とりあえずtype = charactersのみ対応しとこ
            //  href要素を探す
            if (result.GetAttribute("type").Value != "characters")
            {
                throw new NotSupportedException();
            }
            var href = result.GetAttribute("href");

            var linkData = loadLinkData(href.Value);

            //  んーどこでやるか悩むけどここでキャラ構築やっちゃうか
            for (var character = linkData.ScenarioRoot.Next; character != null;)
            {
                var scenarioCharacter = new ScenarioCharacter(character.GetAttribute("id").Value, character.GetAttribute("name").Value);

                //foreach (var image in character.GetChildren())
                {
                    //scenarioCharacter.AddImage(image.GetAttribute("type").Value, image.GetAttribute("src").Value);
                }

                scenarioData.Characters.Add(scenarioCharacter);
                character = character.Next;
            }

            return(result);
        }
Beispiel #14
0
 public bool IsPlayed(IScenarioNode parent)
 {
     return(isPlayed);
 }
Beispiel #15
0
        public void Play(ScenarioPlayer player, IScenarioNode parent)
        {
            player.AddText(System.Environment.NewLine);

            isPlayed = true;
        }
Beispiel #16
0
 public void Play(ScenarioPlayer player, IScenarioNode parent)
 {
     throw new NotImplementedException();
 }
Beispiel #17
0
        public scenario.ScenarioAttribute Build(IEnumerator <parser.token.ITokenable> tokens, IScenarioNode now, ScenarioData scenarioData)
        {
            String name = tokens.Current.GetToken();

            tokens.MoveNext();
            if ((tokens.Current.GetType() != parser.token.TokenType.Equal) || (!tokens.MoveNext()))
            {
                throw new SyntaxErrorException("NotMatch:" + name);
            }

            if ((tokens.Current.GetType() != parser.token.TokenType.DoubleQuotation) || (!tokens.MoveNext()))
            {
                throw new SyntaxErrorException("NeedDoubleQuotation:" + tokens.Current.ToString());
            }


            String value = tokens.Current.GetToken();

            tokens.MoveNext();

            //  ""の中に空白があるかもしれないので"がくるまでループする
            while (tokens.Current.GetType() != parser.token.TokenType.DoubleQuotation)
            {
                value += " " + tokens.Current.GetToken();
                tokens.MoveNext();
            }

            tokens.MoveNext();

            return(new ScenarioAttribute(name, value));
        }
Beispiel #18
0
        public IScenarioNode Build(IEnumerator <parser.token.ITokenable> tokens, IScenarioNode now, ScenarioData scenarioData)
        {
            IScenarioNode result = null;

            //  タグの定義< word /> or <word> ... </word>
            if ((tokens.Current.GetType() != parser.token.TokenType.LeftArrow) || !tokens.MoveNext())
            {
                //  シンタックスエラー
                throw new SyntaxErrorException();
            }

            if ((tokens.Current.GetType() != parser.token.TokenType.Word))
            {
                //  シンタックスエラー
                throw new SyntaxErrorException();
            }

            var startWord = tokens.Current.GetToken();

            if (!tokens.MoveNext())
            {
                //  シンタックスエラー
                throw new SyntaxErrorException();
            }

            //  中身
            var builder = Command.Create(startWord);

            result = builder.Build(tokens, now, scenarioData);

            //  ここまでは共通でここから先は異なるはず
            if (!builder.HasEndTag())
            {
                //  一つ目のパターンのはず

                //  Endタグ
                if ((tokens.Current.GetType() != parser.token.TokenType.RightArrow))
                {
                    //  シンタックスエラー
                    throw new SyntaxErrorException("NotRightArrow:" + tokens.Current.ToString());
                }
                tokens.MoveNext();
            }
            else
            {
                //  二つ目のパターンのはず
                //  Endタグ
                if ((tokens.Current.GetType() != parser.token.TokenType.LeftArrow) || !tokens.MoveNext())
                {
                    //  シンタックスエラー
                    throw new SyntaxErrorException("NotLeftArrow:" + tokens.Current.ToString() + startWord + tokens.Current.Next.ToString());
                }
                if ((tokens.Current.GetType() != parser.token.TokenType.Slash) || !tokens.MoveNext())
                {
                    //  シンタックスエラー
                    throw new SyntaxErrorException("NotSlash:" + startWord + tokens.Current.Next.ToString());
                }
                //  開始タグと一致しなければエラー
                if ((tokens.Current.GetType() != parser.token.TokenType.Word) || (startWord != tokens.Current.GetToken()) || !tokens.MoveNext())
                {
                    throw new SyntaxErrorException("NotMatchWord:" + tokens.Current.ToString());
                }

                if ((tokens.Current.GetType() != parser.token.TokenType.RightArrow))
                {
                    //  シンタックスエラー
                    throw new SyntaxErrorException("NotRightArrow:" + tokens.Current.ToString());
                }

                tokens.MoveNext();
            }

            return(result);
        }
Beispiel #19
0
 public Center(IScenarioNode node)
 {
     effectable = Creator.create(node.GetAttribute("effect").Value, node.GetAttribute("character").Value);
 }
Beispiel #20
0
		private void UpdateImageIndicesForNode(IScenarioNode scenarioNode, TreeBox.Node node)
		{
			if (scenarioNode.Id == scenarioNode.Scenario.CommonRootNode.Id)
			{
				node.ImageAppearance.ImageIndex = (int) NodeImageIndex.RootCommonNormal;
				return;
			}
			if (scenarioNode.Id == scenarioNode.Scenario.ParticularRootNode.Id)
			{
				node.ImageAppearance.ImageIndex = (int) NodeImageIndex.RootParticularNormal;
				return;
			}
			if (scenarioNode.TopicType == LogicalTopicType.Glossary)
			{
				node.ImageAppearance.ImageIndex = (int) NodeImageIndex.NodeGlossaryNormal;
				return;
			}

			if (scenarioNode.ContainsTemplate)
			{
				node.ImageAppearance.ImageIndex = (int) (scenarioNode.IsAppendix ? NodeImageIndex.NodeLandscapeNormal : NodeImageIndex.NodePortraitNormal);
			}
			else
			{
				node.ImageAppearance.ImageIndex = (int) NodeImageIndex.NodeEmptyNormal;
			}

			node.ImageAppearance.SouthEast = scenarioNode.SourceDatumDeclarationCount > 0;
			node.ImageAppearance.NorthEast = scenarioNode.FormulaDeclarationCount > 0;

//			if (scenarioNode.ContainsTemplate && scenarioNode.SourceDatumDeclarationCount > 0)
//			{
//				node.ImageAppearance. .ImageIndex = (int) (scenarioNode.IsAppendix ? NodeImageIndex.NodeLandscapeSourceDataNormal : NodeImageIndex.NodePortraitSourceDataNormal);
//				return;
//			}
//			if (scenarioNode.ContainsTemplate)
//			{
//				node.ImageAppearance.ImageIndex = (int) (scenarioNode.IsAppendix ? NodeImageIndex.NodeLandscapeNormal : NodeImageIndex.NodePortraitNormal);
//				return;
//			}
//			if (scenarioNode.SourceDatumDeclarationCount > 0)
//			{
//				node.ImageAppearance.ImageIndex = (int) NodeImageIndex.NodeSourceDataNormal;
//				return;
//			}
//			node.ImageAppearance.ImageIndex = (int) NodeImageIndex.NodeEmptyNormal;
		}
Beispiel #21
0
 public bool IsPlayed(IScenarioNode parent)
 {
     return(effectable.IsPlayed());
 }
Beispiel #22
0
#pragma warning disable 618,612
		private void LoadBranch(IBranch branch, IScenarioNode parent)
		{
			foreach (var b in branch.GetBranches())
			{
				if (b.Name.StartsWith("_")) continue; // service node
				var scenarioNode = ScenarioService.NewNode();
				var oldNode = new OLD.ScenarioNode {Model = b,};

				scenarioNode.Name = oldNode.Name;
				scenarioNode.IsAppendix = oldNode.IsAppendix;
				scenarioNode.TopicTitle = oldNode.Title;
				scenarioNode.SortingWeight = oldNode.SortingWeight;
				scenarioNode.IsRadioOwner = oldNode.ConditionDeclarations.Count() > 0;
				switch (oldNode.NodeType)
				{
					case OLD.ScenarioNodeType.Default:
						scenarioNode.TopicType = LogicalTopicType.Default;
						break;
					case OLD.ScenarioNodeType.Topic:
						scenarioNode.TopicType = LogicalTopicType.Topic1;
						break;
					case OLD.ScenarioNodeType.Subtopic2:
						scenarioNode.TopicType = LogicalTopicType.Topic2;
						break;
					case OLD.ScenarioNodeType.Subtopic3:
						scenarioNode.TopicType = LogicalTopicType.Topic3;
						break;
					case OLD.ScenarioNodeType.Subtopic4:
						scenarioNode.TopicType = LogicalTopicType.Topic4;
						break;
					case OLD.ScenarioNodeType.Subtopic5:
						scenarioNode.TopicType = LogicalTopicType.Topic5;
						break;
					case OLD.ScenarioNodeType.ForExport:
						scenarioNode.TopicType = LogicalTopicType.ForUpload;
						break;
					default:
						scenarioNode.TopicType = LogicalTopicType.Default;
						break;
				}

				if (!ScenarioService.AttachNode(parent, ref scenarioNode)) continue;
				//TODO: strip word tags
				scenarioNode.Template = oldNode.Template;

				foreach (var declaration in oldNode.SourceValueDeclarations)
				{
					var sourceDatumDeclaration = ScenarioService.NewSourceDatumDeclaration();
					sourceDatumDeclaration.Comment = declaration.Comment;
					sourceDatumDeclaration.DataType = declaration.Type;
					sourceDatumDeclaration.MeasurementUnit = declaration.MeasurementUnit;
					sourceDatumDeclaration.Name = declaration.Name;
					sourceDatumDeclaration.RepositoryValuePath = declaration.RepositoryValuePath;
					sourceDatumDeclaration.ValueForTesting = declaration.ValueForTesting;
					if (!ScenarioService.AttachSourceDatumDeclaration(scenarioNode, ref sourceDatumDeclaration)) continue;
				}

				foreach (var declaration in oldNode.FormulaDeclarations)
				{
					var formulaDeclaration = ScenarioService.NewFormulaDeclaration();
					formulaDeclaration.Comment = declaration.Comment;
					formulaDeclaration.DataType = declaration.Type;
					formulaDeclaration.Name = declaration.Name;
					formulaDeclaration.ElfSource = declaration.ElfCode;
					formulaDeclaration.HumanSource = declaration.HumanText;
					if (!ScenarioService.AttachFormulaDeclaration(scenarioNode, ref formulaDeclaration)) continue;
				}

				LoadBranch(b, scenarioNode);
			}
		}
Beispiel #23
0
 public void Play(ScenarioPlayer player, IScenarioNode parent)
 {
     effectable.execute(player, player.AddCenterSide, player.RemoveCenterSide);
 }
Beispiel #24
0
 public IScenarioNode AddChild(IScenarioNode node)
 {
     children.Add(node);
     node.Parent = this;
     return(node);
 }
Beispiel #25
0
 public void Play(ScenarioPlayer player, IScenarioNode parent)
 {
     effectable.Play(player, parent);
 }