コード例 #1
0
        public static IEnumerable <SyntaxNode> BuildMethod(this RoslynTranslator roslynTranslator, KeyDownEventModel stack, IPortModel portModel)
        {
            BlockSyntax block = SyntaxFactory.Block();

            roslynTranslator.BuildStack(stack, ref block);

            string methodName;

            switch (stack.mode)
            {
            case KeyDownEventModel.EventMode.Pressed:
                methodName = nameof(Input.GetKeyDown);
                break;

            case KeyDownEventModel.EventMode.Released:
                methodName = nameof(Input.GetKeyUp);
                break;

            default:
                methodName = nameof(Input.GetKey);
                break;
            }

            var conditionExpression = (ExpressionSyntax)roslynTranslator.BuildPort(stack.KeyPort).Single();

            IfStatementSyntax keydownCheck = (SyntaxFactory.IfStatement(
                                                  SyntaxFactory.InvocationExpression(
                                                      SyntaxFactory.MemberAccessExpression(
                                                          SyntaxKind.SimpleMemberAccessExpression,
                                                          SyntaxFactory.IdentifierName(nameof(Input)),
                                                          SyntaxFactory.IdentifierName(methodName)))
                                                  .WithArgumentList(
                                                      SyntaxFactory.ArgumentList(
                                                          SyntaxFactory.SingletonSeparatedList(
                                                              SyntaxFactory.Argument(
                                                                  conditionExpression)))),
                                                  block)
                                              .NormalizeWhitespace());

            roslynTranslator.AddEventRegistration(keydownCheck);
            yield break;
        }