コード例 #1
0
        private List <UnrealCommandDetails> ProcessCommands(ICollection <SchemaFileRaw> schemaFiles)
        {
            var commandDetailsList = new List <UnrealCommandDetails>();

            foreach (var schemaFile in schemaFiles)
            {
                var packageDetails = unrealPackageDetails[schemaFile.canonicalName];
                if (packageDetails.IsAutoGenerated)
                {
                    continue;
                }

                foreach (var componentDefinition in schemaFile.componentDefinitions)
                {
                    var capitalisedComponentName = resolvedComponentToCapitalisedNames[componentDefinition];
                    foreach (var commandDefinition in componentDefinition.commandDefinitions)
                    {
                        var capitalisedCommandName = resolvedCommandToCapitalisedNames[commandDefinition];
                        var qualifiedComponentName = Formatting.QualifiedNameToCppQualifiedName(componentDefinition.qualifiedName);

                        var requestTypeReference  = GenerateUnrealTypeReference(commandDefinition.requestType);
                        var responseTypeReference = GenerateUnrealTypeReference(commandDefinition.responseType);

                        var newCommand = new UnrealCommandDetails(commandDefinition, capitalisedCommandName, qualifiedComponentName, capitalisedComponentName, requestTypeReference, responseTypeReference, packageDetails);

                        if (!commandDetailsList.Exists(x => IsConflicting(x, newCommand)))
                        {
                            commandDetailsList.Add(newCommand);
                        }
                    }
                }
            }

            return(commandDetailsList);
        }
コード例 #2
0
        public static void unrealcommanddetails_has_the_correct_underlying_capitalised_name_upon_creation()
        {
            var capitalisedName           = "CapitalisedName";
            var qualifiedName             = "improbable.codegen.Test";
            var capitalisedOwnerComponent = "OwnerComponent";
            var commandDefinition         = GenerateCommandDefinition("Test",
                                                                      new TypeReferenceRaw
            {
                sourceReference = new SourceReferenceRaw {
                    line = "1", column = "1"
                },
                builtInType = "double"
            },
                                                                      new TypeReferenceRaw
            {
                sourceReference = new SourceReferenceRaw {
                    line = "1", column = "1"
                },
                builtInType = "double"
            });
            var packageDetails = GeneratePackageDetails();

            var requestTypeReference  = new UnrealBuiltInTypeReference(commandDefinition.requestType);
            var responseTypeReference = new UnrealBuiltInTypeReference(commandDefinition.responseType);

            var commandDetails = new UnrealCommandDetails(commandDefinition, capitalisedName, qualifiedName, capitalisedOwnerComponent, requestTypeReference, responseTypeReference, packageDetails);

            Assert.That(commandDetails.UnderlyingCapitalisedName == Formatting.SnakeCaseToCapitalisedCamelCase(commandDefinition.name), "the field UnderlyingCapitalisedName did not have the expected value upon creation");
        }
コード例 #3
0
ファイル: JobRunnerTest.cs プロジェクト: m10ev/UnrealGDK
        public static void run_executes_the_expected_file_operations_when_running_an_unrealcommandjob()
        {
            var mockFileSystem = GenerateMockFileSystem();

            mockFileSystem.GetFileInfoMock = (path) =>
            {
                var file = new MockFileWrapper(path, Path.GetDirectoryName(path), new DateTime(1, 1, 1));
                file.ExistsMock = () => { return(false); };
                return(file);
            };
            mockFileSystem.GetFilesInDirectoryMock = (path, searchpattern, recursive) => { return(new List <IFile>()); };

            var unrealPackageDetails  = new UnrealPackageDetails("improbable.codegen.TestComponent", TestSchemaPath, "improbable.codegen");
            var responseTypeReference = new UnrealBuiltInTypeReference(GenerateTypeReferenceRaw());
            var requestTypeReference  = new UnrealBuiltInTypeReference(GenerateTypeReferenceRaw());
            var unrealCommandDetails  = new UnrealCommandDetails(GenerateCommandDefinition(), "TestCommand", "improbable.codegen.TestComponent", "TestComponent", requestTypeReference, responseTypeReference, unrealPackageDetails);
            var commandJob            = new UnrealCommandJob(unrealCommandDetails, Path.Combine("OutputDir", "test"), mockFileSystem);

            var jobRunner = new JobRunner(mockFileSystem);

            jobRunner.Run(new List <ICodegenJob>()
            {
                commandJob
            }, new List <string>()
            {
                OutputDirectory
            });

            Assert.That(mockFileSystem.DirectoryExistsCallCount == 2);
            Assert.That(mockFileSystem.WriteToFileCallCount == 2);
            Assert.That(mockFileSystem.WrittenFiles.Count == 2);
            Assert.That(mockFileSystem.WrittenFiles.Contains(Path.Combine(OutputDirectory, "TestCommandCommandResponder.h")));
            Assert.That(mockFileSystem.WrittenFiles.Contains(Path.Combine(OutputDirectory, "TestCommandCommandResponder.cpp")));
        }
コード例 #4
0
        public static void unrealcommanddetails_has_the_correct_unreal_command_delegate_name_upon_creation()
        {
            var capitalisedName      = "CapitalisedName";
            var qualifiedOwnerName   = "improbable.codegen.Test";
            var captialisedOwnerName = "improbable.codegen.OwnerComponent";
            var commandDefinition    = GenerateCommandDefinition("Test",
                                                                 new TypeReferenceRaw
            {
                sourceReference = new SourceReferenceRaw {
                    line = "1", column = "1"
                },
                builtInType = null,
                userType    = "DamageResponse"
            },
                                                                 new TypeReferenceRaw
            {
                sourceReference = new SourceReferenceRaw {
                    line = "1", column = "1"
                },
                builtInType = null,
                userType    = "DamageRequest"
            });
            var packageDetails = GeneratePackageDetails();

            var fieldDefinitionFloat = ModelTypeFactory.GenerateFieldDefinition("test", "1", new TypeReferenceRaw
            {
                sourceReference = new SourceReferenceRaw {
                    line = "1", column = "1"
                },
                builtInType = "float"
            });

            var fieldDefinitionInt32 = ModelTypeFactory.GenerateFieldDefinition("test", "1", new TypeReferenceRaw
            {
                sourceReference = new SourceReferenceRaw {
                    line = "1", column = "1"
                },
                builtInType = "int32"
            });

            var userTypeDefinition = ModelTypeFactory.GenerateTypeDefinition("TestType", "improbable.codegen.TestType", null, null, new FieldDefinitionRaw[]
            {
                fieldDefinitionFloat,
                fieldDefinitionInt32
            });

            var unrealFieldDetails = new List <UnrealFieldDetails>();

            unrealFieldDetails.Add(new UnrealFieldDetails(fieldDefinitionFloat, new UnrealBuiltInTypeReference(fieldDefinitionFloat.singularType)));
            unrealFieldDetails.Add(new UnrealFieldDetails(fieldDefinitionInt32, new UnrealBuiltInTypeReference(fieldDefinitionInt32.singularType)));

            var unrealTypeDetails     = new UnrealTypeDetails(userTypeDefinition, "TestType", unrealFieldDetails, null);
            var requestTypeReference  = new UnrealUserTypeReference(unrealTypeDetails);
            var responseTypeReference = new UnrealUserTypeReference(unrealTypeDetails);

            var commandDetails = new UnrealCommandDetails(commandDefinition, capitalisedName, qualifiedOwnerName, captialisedOwnerName, requestTypeReference, responseTypeReference, packageDetails);

            Assert.That(commandDetails.UnrealCommandDelegateName == string.Format("F{0}Command", capitalisedName), "the field UnrealCommandDelegateName did not have the expected value upon creation");
        }
コード例 #5
0
        private bool IsConflicting(UnrealCommandDetails existingCommand, UnrealCommandDetails newCommand)
        {
            // We can not have commands with the same name and the same delegate type (request type + response type), even if they are in different components.
            // Ideally we could have commands with the same name and same delegate type (request type + response type) if they are in different components.
            if (existingCommand.CapitalisedName == newCommand.CapitalisedName && existingCommand.UnrealCommandDelegateType == newCommand.UnrealCommandDelegateType)
            {
                return(true);
            }

            return(false);
        }
コード例 #6
0
        public UnrealCommandJob(UnrealCommandDetails commandDetails, string outputDirectory, IFileSystem fileSystem)
            : base(outputDirectory, fileSystem)
        {
            InputFiles = new List <string>()
            {
                commandDetails.UnderlyingPackageDetails.SourceSchema
            };

            var commandResponderHeaderPath = commandDetails.CapitalisedName + commandResponderHeaderSuffix;
            var commandResponderImplPath   = commandDetails.CapitalisedName + commandResponderImplSuffix;

            OutputFiles = new List <string>()
            {
                commandResponderHeaderPath,
                commandResponderImplPath,
            };

            this.commandDetails = commandDetails;
        }
コード例 #7
0
        public static void unrealcommanddetails_has_the_correct_unreal_request_type_details_upon_creation()
        {
            var capitalisedName      = "CapitalisedName";
            var qualifiedOwnerName   = "improbable.codegen.Test";
            var captialisedOwnerName = "improbable.codegen.OwnerComponent";
            var commandDefinition    = GenerateCommandDefinition("Test",
                                                                 new TypeReferenceRaw
            {
                sourceReference = new SourceReferenceRaw {
                    line = "1", column = "1"
                },
                builtInType = "float"
            },
                                                                 new TypeReferenceRaw
            {
                sourceReference = new SourceReferenceRaw {
                    line = "1", column = "1"
                },
                builtInType = "float"
            });
            var packageDetails = GeneratePackageDetails();

            var requestTypeReference  = new UnrealBuiltInTypeReference(commandDefinition.requestType);
            var responseTypeReference = new UnrealBuiltInTypeReference(commandDefinition.responseType);

            var commandDetails = new UnrealCommandDetails(commandDefinition, capitalisedName, qualifiedOwnerName, captialisedOwnerName, requestTypeReference, responseTypeReference, packageDetails);

            Assert.That(commandDetails.UnrealRequestTypeDetails.UnderlyingCapitalisedName == requestTypeReference.UnderlyingCapitalisedName &&
                        commandDetails.UnrealRequestTypeDetails.UnderlyingQualifiedName == requestTypeReference.UnderlyingQualifiedName &&
                        commandDetails.UnrealRequestTypeDetails.UnrealType == requestTypeReference.UnrealType &&
                        commandDetails.UnrealRequestTypeDetails.RequiredIncludes == requestTypeReference.RequiredIncludes,
                        "the field UnrealRequestTypeDetails did not have the expected value upon creation");

            Assert.That(commandDetails.UnrealResponseTypeDetails.UnderlyingCapitalisedName == responseTypeReference.UnderlyingCapitalisedName &&
                        commandDetails.UnrealResponseTypeDetails.UnderlyingQualifiedName == responseTypeReference.UnderlyingQualifiedName &&
                        commandDetails.UnrealResponseTypeDetails.UnrealType == responseTypeReference.UnrealType &&
                        commandDetails.UnrealResponseTypeDetails.RequiredIncludes == responseTypeReference.RequiredIncludes,
                        "the field UnrealResponseTypeDetails did not have the expected value upon creation");
        }
コード例 #8
0
 public UnrealCommandResponderImplementationGenerator(UnrealCommandDetails commandDetails)
 {
     this.commandDetails = commandDetails;
 }
コード例 #9
0
 public UnrealCommandResponderHeaderGenerator(UnrealCommandDetails commandDetails)
 {
     this.commandDetails = commandDetails;
 }