Roadmap - jmgomez/NimForUE GitHub Wiki

Roadmap

  • Bind Unreal Symbols via C++

  • POC for generating new UFuncs implemenation in Nim

  • Consume Nim in Unreal via auto generated FFI

  • Hot Reloading Windows

  • Hot Reloading MacOS

  • Debugging

  • Test Integration via Unreal Frontend

  • Cover most Unreal Reflected Types

  • Getter/Setters macro for UProps

  • Generate Nim definitions from Unreal Reflection system

  • Being able to produce new UE types from Nim

  • Macro (pragma) for implmenting UFuncs in nim

        proc myFunc(strg: FString) : {. ufunc: params .}
            nimCodeHere
    
  • DSL for defining uFunctions in blocks

  • DSL for defining UStructs

        uStruct FMyNimStruct:
        (BlueprintType)
        uprop(EditAnywhere, BlueprintReadWrite):
            testField : int32
            testField2 : FString
        uprop(EditAnywhere, BlueprintReadOnly):
            param35 : int32    
    
  • DSL for defining UEnums

    uEnum EMyEnumCreatedInNim:
        (BlueprintType)
        ValueOne
        SomethingElse
        AnotherThing
    
  • DSL for defining delegates

        uDelegate FMyDelegate2Params(str:FString, param:TArray[FString])
        uDelegate FMyDelegateNoParams()
    
  • DSL for defining UClasses

        uClass MyClass of UObject = 
            (Blueprintable, BlueprintType)
            uprops(EditAnywhere, BlueprintReadOnly)
                myProp : FString
                myProp2 : int32
            uprops(MoreParams..)
                ...
                More props
            ufuncs(BlueprintCallable):
                proc testStatic() {.static.} = 
                    UE_Log "Test static2"
                    regularNimFunction()
    
                proc tick(deltaTime:float)  = 
                    UE_Warn "Im ticking"
                
                proc beginPlay() = 
                    regularNimFunction()
    
                proc setColorInEditor() {.CallInEditor.} = 
                    self.setColorByStringInMesh("(R=0,G=0,B=1,A=1)")
                    testStatic()
            ufuncs(BlueprintCallable, BlueprintPure):
                proc getSalute() : FString = "Hello World"
                proc addTwoNumbers(a, b : int ) : int = a + b
    
  • Being able to emit most used FProperties

  • Being able to emit any type into UE with hotreload

  • Allow to define constructors on UObjects

  • Non Editor Builds (Manual)

    • Make builds work on Windows
    • Make builds work on MacOS
    • Make builds work ok iOS
    • Make builds work on Android/VR Mobile Devices like Oculus Quest
  • Non editor builds should be statically linked

  • Automatise non editor builds

  • Support reflected interfaces (UInterfaces) in uClasses

  • Inheritance in UStrucs.

  • Virtual Functions support on UObjects. At this point, the C++ integration will be complete and you will be able to do anything that you can do in C++.

  • Support for multiple inheritance in uClasses so C++ interfaces can be implemented.

  • Experimental NimVM integration (No comp time for small changes/Runtime code execution)

  • Improve Debugger

    • Keep the debugger hook after hot reloading
    • Research if it's possible to have a better mapping on the Nim types.
  • Test Nim code that consumes Unreal Code without starting the editor.

  • REPL Scratchpad file with automatic hot reload.

  • Editor Extension for auto completation on the DSL

  • NUE module system