DoN's 3D-Pathfinding / Flying-AI system (with full source!)

It’s the name of your project :slight_smile: Change it from 3D_navmesh to Navmesh_3D and try.

According to an Epic dev from this thread, project names that begin with a number (as opposed to an alphabet) cause the Unreal Build Tool to throw compiler errors exactly like the ones seen in your output log.

O man! :smiley: I had no idea about that. I had project folder name started with digit, a I changed only that and it worked! :slight_smile:

For there first time I managed to package shipping build with plugin :slight_smile:

So basicly after I changed project folder name, there was no problems.

Thank you for your help and patience :slight_smile:

Great to hear! Is this for a new project?

BTW, best of luck with releasing your Toby the Brave game! Looks like a lot of fun.

Heheheh thank you! :smiley: Toby will have significant change in terms of art, character and overall quality in near future. Believing in feedback from playtesters, it will be a change for better. It will take me some time to finish it.

About flying AI - I was trying make something like that a while ago in blueprints only, but I failed and left it for a while. Lately I found your solution accidently while I was looking for some advanced AI’s made in UE 4. I’m making shooter kit in sci-fi style for marketplace - Side Scroller Shooter Kit - Cover system, Human AI, QTE System & much more! - Marketplace - Epic Developer Community Forums and I want make some flying AI’s but I belevie I can’t use plugins in marketplace item, and it would be a bit of overkill for this type of “small project”.

I’m always curious about different solution for gameplay mechanics made in UE 4, that’s why your project is interesting to me. I don’t think so I will use it in Toby, but I want to play around with this, learn something, and maybe use it in future projects.
And also I was always having trouble with packaging game with plugin, I thought it is impossible for current UE version, and there you go, you helped me out :slight_smile:

Hi @

How are You?

[FONT=Arial Black]
Amazing Pathfinding. You are a genius.
Cool flying cybernetic objects. It is from Cinematic VR Demo?

But one though about waypoints. Only is accepted two waypoint!!!
I Can only add location for initial position and a destination.
Could I add anothers waypoint, various, like in UTGame? It’s possible?

Regards
[FONT=Arial Black]๑

lol, I’m flattered :slight_smile:

Re: waypoints, although the sample project shows only “origin to destination” type of movement you can build a system with multiple waypoints (“Goal Cue” actors in the sample) but you’ll have to manage the behavior tree (or API calls if you’re not using behavior trees) on your own. Eg: you can make the goal actor variable an array and sequentially pick them in your behavior tree each time one goal is exhausted. Check out the “Goal Flip” boolean I’m using for the pawns which does something similar (loops between origin and destination continuously).

Now if you’re talking about supporting this feature directly at the plugin/API level then (maybe someone wants to pre-calculate a solution with fixed points in advance instead of calling the API each time) then we’ll have to add a new function that accepts an array of “desired path points” instead of a single destination vector for the nav solver to use. But there’s no real performance loss in just treating each waypoint as a new destination and calling the API (or FlyTo node) yourself, so for now I think people who need it can just manage it themselves in their behavior-tree/blueprints. If I find the time (no promises!) I’ll try to add a multi-waypoint example to the sample project.

On this note, I’m not sure the fancy bots will stay in the sample project forever (they’re from the Infiltrator demo to answer your first question!). I’ve reached out to find out whether I’m allowed to use them with this free sample project but regardless of what answer I get, everyone downloading the project should note that all the stuff inside the “EpicContent” folder is obviously governed by Epic’s EULA for their sample content.

Hi @

Is good to see you flattered @. You deserve. His work is a great contribution!

I like the examples you have used. With it is possible to perceive the potential for your plugin.

I’d love to see more waypoints. 。 ◕‿◕。 Please!
I have subscribed your thread. I’ll follow it.

I’m learning about behavior tree only now, I am currently involved in a project, and little time left me to analyze technical aspects involved in building an AI in depth, because I’m character modeler and rigger.
I’m going to learn C++ only after finish this my recent project.
So I will understand more clearly about the terms used. But I understand arrays and blueprints at a basic level, of course.

Thanks for your attention
Best regards. Good Work!

Amazing stuff!

I´ve been working a lot lately so I didn’t have much time to play more with this solution but I cropped a 10 minutes dirty test adding an array support to pawn blueprint. I shall put the code later but as you may see it´s working flawlessly well, almost …
I´ll let the video: watch?v=8c4INjuVz2w

PS: Sorry for the bad MOVAVI capture.

Cheers


Begin Object Class=K2Node_FunctionEntry Name="K2Node_FunctionEntry_302"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9596"
   End Object
   Begin Object Name="EdGraphPin_9596"
      PinName="then"
      Direction=EGPD_Output
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_Knot_57.EdGraphPin_9205'
   End Object
   SignatureClass=BlueprintGeneratedClass'/Game/DonNavigationSamples/BehaviorTree/DemoPawnInterface.DemoPawnInterface_C'
   SignatureName="Get Goal Actor"
   Pins(0)=EdGraphPin'EdGraphPin_9596'
   NodePosX=-1248
   NodePosY=-336
   NodeGuid=9F945DFE4CC16EDDEEE6DBA014C120E2
End Object
Begin Object Class=K2Node_FunctionResult Name="K2Node_FunctionResult_3"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9599"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9600"
   End Object
   Begin Object Name="EdGraphPin_9599"
      PinName="execute"
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_Knot_42.EdGraphPin_9218'
      LinkedTo(1)=EdGraphPin'K2Node_VariableSet_336.EdGraphPin_9137'
      LinkedTo(2)=EdGraphPin'K2Node_VariableSet_334.EdGraphPin_9032'
   End Object
   Begin Object Name="EdGraphPin_9600"
      PinName="Goal"
      PinToolTip="Goal
Goal Cue Reference"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_Select_1.EdGraphPin_9232'
   End Object
   SignatureClass=BlueprintGeneratedClass'/Game/DonNavigationSamples/BehaviorTree/DemoPawnInterface.DemoPawnInterface_C'
   SignatureName="Get Goal Actor"
   Pins(0)=EdGraphPin'EdGraphPin_9599'
   Pins(1)=EdGraphPin'EdGraphPin_9600'
   NodePosX=912
   NodePosY=-240
   NodeGuid=865565A84F6484C0C1E58982120E92B3
End Object
Begin Object Class=K2Node_VariableGet Name="K2Node_VariableGet_554"
   Begin Object Class=EdGraphPin Name="EdGraphPin_8811"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8812"
   End Object
   Begin Object Name="EdGraphPin_8811"
      PinName="Goal"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
   End Object
   Begin Object Name="EdGraphPin_8812"
      PinName="self"
      PinFriendlyName="Target"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Pawns/BP_NavigatorPawn.BP_NavigatorPawn_C')
      bHidden=True
   End Object
   VariableReference=(MemberName="Goal",bSelfContext=True)
   Pins(0)=EdGraphPin'EdGraphPin_8811'
   Pins(1)=EdGraphPin'EdGraphPin_8812'
   NodePosX=-560
   NodePosY=-128
   NodeComment="From Here"
   bCommentBubbleVisible=True
   NodeGuid=A846FA3E485E229D65B012B6E0A28C6C
End Object
Begin Object Class=K2Node_VariableGet Name="K2Node_VariableGet_2332"
   Begin Object Class=EdGraphPin Name="EdGraphPin_8817"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8818"
   End Object
   Begin Object Name="EdGraphPin_8817"
      PinName="IsGoalFlipped"
      Direction=EGPD_Output
      PinType=(PinCategory="bool")
      AutogeneratedDefaultValue="false"
      LinkedTo(0)=EdGraphPin'K2Node_Select_1.EdGraphPin_9231'
   End Object
   Begin Object Name="EdGraphPin_8818"
      PinName="self"
      PinFriendlyName="Target"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Pawns/BP_NavigatorPawn.BP_NavigatorPawn_C')
      bHidden=True
   End Object
   VariableReference=(MemberName="IsGoalFlipped",bSelfContext=True)
   Pins(0)=EdGraphPin'EdGraphPin_8817'
   Pins(1)=EdGraphPin'EdGraphPin_8818'
   NodePosX=352
   NodePosY=-128
   NodeGuid=BC2DE695441FE782CA59B0BCCCCA30C0
End Object
Begin Object Class=K2Node_VariableGet Name="K2Node_VariableGet_2339"
   Begin Object Class=EdGraphPin Name="EdGraphPin_8823"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8824"
   End Object
   Begin Object Name="EdGraphPin_8823"
      PinName="GoalFlip"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
   End Object
   Begin Object Name="EdGraphPin_8824"
      PinName="self"
      PinFriendlyName="Target"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Pawns/BP_NavigatorPawn.BP_NavigatorPawn_C')
      bHidden=True
   End Object
   VariableReference=(MemberName="GoalFlip",bSelfContext=True)
   Pins(0)=EdGraphPin'EdGraphPin_8823'
   Pins(1)=EdGraphPin'EdGraphPin_8824'
   NodePosX=-560
   NodePosY=-48
   NodeComment="From Here"
   bCommentBubbleVisible=True
   NodeGuid=E45E9C2B4A717FD58B5B14BF5F7EAE38
End Object
Begin Object Class=K2Node_Select Name="K2Node_Select_1"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9229"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9230"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9231"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9232"
   End Object
   Begin Object Name="EdGraphPin_9229"
      PinName="Option 0"
      PinFriendlyName="False"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_VariableSet_1474.EdGraphPin_8911'
   End Object
   Begin Object Name="EdGraphPin_9230"
      PinName="Option 1"
      PinFriendlyName="True"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_Knot_43.EdGraphPin_9176'
   End Object
   Begin Object Name="EdGraphPin_9231"
      PinName="Index"
      PinType=(PinCategory="bool")
      DefaultValue="false"
      LinkedTo(0)=EdGraphPin'K2Node_VariableGet_2332.EdGraphPin_8817'
   End Object
   Begin Object Name="EdGraphPin_9232"
      PinName="ReturnValue"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_FunctionResult_3.EdGraphPin_9600'
   End Object
   IndexPinType=(PinCategory="bool",PinSubCategory=)
   Pins(0)=EdGraphPin'EdGraphPin_9229'
   Pins(1)=EdGraphPin'EdGraphPin_9230'
   Pins(2)=EdGraphPin'EdGraphPin_9231'
   Pins(3)=EdGraphPin'EdGraphPin_9232'
   NodePosX=560
   NodePosY=-208
   NodeGuid=8E2C86F6471A1A72310714B558589A0E
End Object
Begin Object Class=K2Node_VariableGet Name="K2Node_VariableGet_1935"
   Begin Object Class=EdGraphPin Name="EdGraphPin_8844"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8845"
   End Object
   Begin Object Name="EdGraphPin_8844"
      PinName="GoalArray"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C',bIsArray=True)
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_421.EdGraphPin_9630'
      LinkedTo(1)=EdGraphPin'K2Node_Knot_48.EdGraphPin_9193'
      LinkedTo(2)=EdGraphPin'K2Node_Knot_56.EdGraphPin_9211'
      LinkedTo(3)=EdGraphPin'K2Node_Knot_58.EdGraphPin_9199'
      LinkedTo(4)=EdGraphPin'K2Node_CallArrayFunction_25.EdGraphPin_9699'
      LinkedTo(5)=EdGraphPin'K2Node_CallArrayFunction_26.EdGraphPin_9735'
   End Object
   Begin Object Name="EdGraphPin_8845"
      PinName="self"
      PinFriendlyName="Target"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Pawns/BP_NavigatorPawn.BP_NavigatorPawn_C')
      bHidden=True
   End Object
   VariableReference=(MemberName="GoalArray",bSelfContext=True)
   Pins(0)=EdGraphPin'EdGraphPin_8844'
   Pins(1)=EdGraphPin'EdGraphPin_8845'
   NodePosX=-1312
   NodePosY=96
   NodeComment="Is not from here"
   bCommentBubbleVisible=True
   NodeGuid=F37B503F4CF2DE792B6EE6910203B258
End Object
Begin Object Class=K2Node_CallArrayFunction Name="K2Node_CallArrayFunction_422"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9605"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9606"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9607"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9608"
   End Object
   Begin Object Name="EdGraphPin_9605"
      PinName="self"
      PinFriendlyName="Target"
      PinToolTip="Target
Kismet Array Library Reference"
      PinType=(PinCategory="object",PinSubCategoryObject=Class'/Script/Engine.KismetArrayLibrary')
      DefaultObject=Default__KismetArrayLibrary
      bHidden=True
   End Object
   Begin Object Name="EdGraphPin_9606"
      PinName="TargetArray"
      PinToolTip="Target Array
Array of Goal Cue References

The array to get an item from *"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C',bIsArray=True,bIsReference=True,bIsConst=True)
      LinkedTo(0)=EdGraphPin'K2Node_Knot_48.EdGraphPin_9194'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9607"
      PinName="Index"
      PinToolTip="Index
Integer

The index in the array to get an item from *"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_3264.EdGraphPin_9620'
   End Object
   Begin Object Name="EdGraphPin_9608"
      PinName="Item"
      PinToolTip="Item
Goal Cue Reference"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_VariableSet_1474.EdGraphPin_8910'
   End Object
   bIsPureFunc=True
   FunctionReference=(MemberParent=Class'/Script/Engine.KismetArrayLibrary',MemberName="Array_Get")
   Pins(0)=EdGraphPin'EdGraphPin_9605'
   Pins(1)=EdGraphPin'EdGraphPin_9606'
   Pins(2)=EdGraphPin'EdGraphPin_9607'
   Pins(3)=EdGraphPin'EdGraphPin_9608'
   NodePosX=-528
   NodePosY=48
   NodeComment="Is not from here"
   bCommentBubbleVisible=True
   NodeGuid=98B01E8D4B383CE7278F92ADBA8F343E
End Object
Begin Object Class=K2Node_CallFunction Name="K2Node_CallFunction_3264"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9617"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9618"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9619"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9620"
   End Object
   Begin Object Name="EdGraphPin_9617"
      PinName="self"
      PinFriendlyName="Target"
      PinToolTip="Target
Kismet Math Library Reference"
      PinType=(PinCategory="object",PinSubCategoryObject=Class'/Script/Engine.KismetMathLibrary')
      DefaultObject=Default__KismetMathLibrary
      bHidden=True
   End Object
   Begin Object Name="EdGraphPin_9618"
      PinName="Min"
      PinToolTip="Min
Integer"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
   End Object
   Begin Object Name="EdGraphPin_9619"
      PinName="Max"
      PinToolTip="Max
Integer"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_23.EdGraphPin_9643'
   End Object
   Begin Object Name="EdGraphPin_9620"
      PinName="ReturnValue"
      PinToolTip="Return Value
Integer"
      Direction=EGPD_Output
      PinType=(PinCategory="int")
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_4717.EdGraphPin_9651'
      LinkedTo(1)=EdGraphPin'K2Node_CallFunction_3367.EdGraphPin_9663'
      LinkedTo(2)=EdGraphPin'K2Node_CallArrayFunction_422.EdGraphPin_9607'
   End Object
   bIsPureFunc=True
   FunctionReference=(MemberParent=Class'/Script/Engine.KismetMathLibrary',MemberName="RandomIntegerInRange")
   Pins(0)=EdGraphPin'EdGraphPin_9617'
   Pins(1)=EdGraphPin'EdGraphPin_9618'
   Pins(2)=EdGraphPin'EdGraphPin_9619'
   Pins(3)=EdGraphPin'EdGraphPin_9620'
   NodePosX=-816
   NodePosY=192
   NodeComment="Is not from here"
   bCommentBubbleVisible=True
   NodeGuid=EAC8A9CE4039995DDB2AC4B5D8D407A9
End Object
Begin Object Class=K2Node_VariableSet Name="K2Node_VariableSet_1408"
   Begin Object Class=EdGraphPin Name="EdGraphPin_8881"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8882"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8883"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8884"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8885"
   End Object
   Begin Object Name="EdGraphPin_8881"
      PinName="execute"
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_Knot_41.EdGraphPin_9224'
   End Object
   Begin Object Name="EdGraphPin_8882"
      PinName="then"
      Direction=EGPD_Output
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_Knot_42.EdGraphPin_9217'
   End Object
   Begin Object Name="EdGraphPin_8883"
      PinName="GoalFlip"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_Knot_44.EdGraphPin_9170'
   End Object
   Begin Object Name="EdGraphPin_8884"
      PinName="Output_Get"
      PinToolTip="Retrieves the value of the variable, can use instead of a separate Get node"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_Knot_43.EdGraphPin_9175'
   End Object
   Begin Object Name="EdGraphPin_8885"
      PinName="self"
      PinFriendlyName="Target"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Pawns/BP_NavigatorPawn.BP_NavigatorPawn_C')
      bHidden=True
   End Object
   VariableReference=(MemberName="GoalFlip",bSelfContext=True)
   Pins(0)=EdGraphPin'EdGraphPin_8881'
   Pins(1)=EdGraphPin'EdGraphPin_8882'
   Pins(2)=EdGraphPin'EdGraphPin_8883'
   Pins(3)=EdGraphPin'EdGraphPin_8884'
   Pins(4)=EdGraphPin'EdGraphPin_8885'
   NodePosX=240
   NodePosY=-336
   NodeComment="Is not from here"
   bCommentBubbleVisible=True
   NodeGuid=6B0FC8B947663CE502B8FEA75B46E1FD
End Object
Begin Object Class=K2Node_CallArrayFunction Name="K2Node_CallArrayFunction_421"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9629"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9630"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9631"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9632"
   End Object
   Begin Object Name="EdGraphPin_9629"
      PinName="self"
      PinFriendlyName="Target"
      PinToolTip="Target
Kismet Array Library Reference"
      PinType=(PinCategory="object",PinSubCategoryObject=Class'/Script/Engine.KismetArrayLibrary')
      DefaultObject=Default__KismetArrayLibrary
      bHidden=True
   End Object
   Begin Object Name="EdGraphPin_9630"
      PinName="TargetArray"
      PinToolTip="Target Array
Array of Goal Cue References

The array to get an item from *"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C',bIsArray=True,bIsReference=True,bIsConst=True)
      LinkedTo(0)=EdGraphPin'K2Node_VariableGet_1935.EdGraphPin_8844'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9631"
      PinName="Index"
      PinToolTip="Index
Integer

The index in the array to get an item from *"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_4717.EdGraphPin_9653'
   End Object
   Begin Object Name="EdGraphPin_9632"
      PinName="Item"
      PinToolTip="Item
Goal Cue Reference"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_Knot_55.EdGraphPin_9247'
   End Object
   bIsPureFunc=True
   FunctionReference=(MemberParent=Class'/Script/Engine.KismetArrayLibrary',MemberName="Array_Get")
   Pins(0)=EdGraphPin'EdGraphPin_9629'
   Pins(1)=EdGraphPin'EdGraphPin_9630'
   Pins(2)=EdGraphPin'EdGraphPin_9631'
   Pins(3)=EdGraphPin'EdGraphPin_9632'
   NodePosX=-336
   NodePosY=96
   NodeComment="Is not from here"
   bCommentBubbleVisible=True
   NodeGuid=0A5BC3514042DEEBF6FFCF863CD38869
End Object
Begin Object Class=K2Node_VariableSet Name="K2Node_VariableSet_1474"
   Begin Object Class=EdGraphPin Name="EdGraphPin_8908"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8909"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8910"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8911"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8912"
   End Object
   Begin Object Name="EdGraphPin_8908"
      PinName="execute"
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_24.EdGraphPin_9675'
   End Object
   Begin Object Name="EdGraphPin_8909"
      PinName="then"
      Direction=EGPD_Output
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_IfThenElse_102.EdGraphPin_8944'
   End Object
   Begin Object Name="EdGraphPin_8910"
      PinName="Goal"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_422.EdGraphPin_9608'
   End Object
   Begin Object Name="EdGraphPin_8911"
      PinName="Output_Get"
      PinToolTip="Retrieves the value of the variable, can use instead of a separate Get node"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_Select_1.EdGraphPin_9229'
   End Object
   Begin Object Name="EdGraphPin_8912"
      PinName="self"
      PinFriendlyName="Target"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Pawns/BP_NavigatorPawn.BP_NavigatorPawn_C')
      bHidden=True
   End Object
   VariableReference=(MemberName="Goal",bSelfContext=True)
   Pins(0)=EdGraphPin'EdGraphPin_8908'
   Pins(1)=EdGraphPin'EdGraphPin_8909'
   Pins(2)=EdGraphPin'EdGraphPin_8910'
   Pins(3)=EdGraphPin'EdGraphPin_8911'
   Pins(4)=EdGraphPin'EdGraphPin_8912'
   NodePosX=-336
   NodePosY=-224
   NodeComment="Is not from here"
   bCommentBubbleVisible=True
   NodeGuid=15B06526425C434948CC3592E6917F3A
End Object
Begin Object Class=K2Node_CallArrayFunction Name="K2Node_CallArrayFunction_23"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9641"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9642"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9643"
   End Object
   Begin Object Name="EdGraphPin_9641"
      PinName="self"
      PinFriendlyName="Target"
      PinToolTip="Target
Kismet Array Library Reference"
      PinType=(PinCategory="object",PinSubCategoryObject=Class'/Script/Engine.KismetArrayLibrary')
      DefaultObject=Default__KismetArrayLibrary
      bHidden=True
   End Object
   Begin Object Name="EdGraphPin_9642"
      PinName="TargetArray"
      PinToolTip="Target Array
Array of Goal Cue References

The array to perform the operation on *"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C',bIsArray=True,bIsReference=True,bIsConst=True)
      LinkedTo(0)=EdGraphPin'K2Node_Knot_58.EdGraphPin_9200'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9643"
      PinName="ReturnValue"
      PinToolTip="Return Value
Integer

The last valid index of the array"
      Direction=EGPD_Output
      PinType=(PinCategory="int")
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_3264.EdGraphPin_9619'
      LinkedTo(1)=EdGraphPin'K2Node_CallFunction_4717.EdGraphPin_9652'
      LinkedTo(2)=EdGraphPin'K2Node_Knot_61.EdGraphPin_9187'
   End Object
   bIsPureFunc=True
   FunctionReference=(MemberParent=Class'/Script/Engine.KismetArrayLibrary',MemberName="Array_LastIndex")
   Pins(0)=EdGraphPin'EdGraphPin_9641'
   Pins(1)=EdGraphPin'EdGraphPin_9642'
   Pins(2)=EdGraphPin'EdGraphPin_9643'
   NodePosX=-1056
   NodePosY=320
   NodeGuid=F53F162B44510A9A0C9AB1A768C5A135
End Object
Begin Object Class=K2Node_CallFunction Name="K2Node_CallFunction_4717"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9650"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9651"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9652"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9653"
   End Object
   Begin Object Name="EdGraphPin_9650"
      PinName="self"
      PinFriendlyName="Target"
      PinToolTip="Target
Kismet Math Library Reference"
      PinType=(PinCategory="object",PinSubCategoryObject=Class'/Script/Engine.KismetMathLibrary')
      DefaultObject=Default__KismetMathLibrary
      bHidden=True
   End Object
   Begin Object Name="EdGraphPin_9651"
      PinName="Min"
      PinToolTip="Min
Integer"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_3264.EdGraphPin_9620'
   End Object
   Begin Object Name="EdGraphPin_9652"
      PinName="Max"
      PinToolTip="Max
Integer"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_23.EdGraphPin_9643'
   End Object
   Begin Object Name="EdGraphPin_9653"
      PinName="ReturnValue"
      PinToolTip="Return Value
Integer"
      Direction=EGPD_Output
      PinType=(PinCategory="int")
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_3367.EdGraphPin_9664'
      LinkedTo(1)=EdGraphPin'K2Node_CallArrayFunction_421.EdGraphPin_9631'
      LinkedTo(2)=EdGraphPin'K2Node_CallFunction_4019.EdGraphPin_9687'
      LinkedTo(3)=EdGraphPin'K2Node_CallFunction_4020.EdGraphPin_9711'
      LinkedTo(4)=EdGraphPin'K2Node_CommutativeAssociativeBinaryOperator_76.EdGraphPin_9723'
   End Object
   bIsPureFunc=True
   FunctionReference=(MemberParent=Class'/Script/Engine.KismetMathLibrary',MemberName="RandomIntegerInRange")
   Pins(0)=EdGraphPin'EdGraphPin_9650'
   Pins(1)=EdGraphPin'EdGraphPin_9651'
   Pins(2)=EdGraphPin'EdGraphPin_9652'
   Pins(3)=EdGraphPin'EdGraphPin_9653'
   NodePosX=-528
   NodePosY=288
   NodeComment="Is not from here"
   bCommentBubbleVisible=True
   NodeGuid=8EDAC00E4296CB1F50863AB14D482562
End Object
Begin Object Class=K2Node_IfThenElse Name="K2Node_IfThenElse_102"
   Begin Object Class=EdGraphPin Name="EdGraphPin_8944"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8945"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8946"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_8947"
   End Object
   Begin Object Name="EdGraphPin_8944"
      PinName="execute"
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_VariableSet_1474.EdGraphPin_8909'
   End Object
   Begin Object Name="EdGraphPin_8945"
      PinName="Condition"
      PinType=(PinCategory="bool")
      DefaultValue="false"
      AutogeneratedDefaultValue="true"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_3367.EdGraphPin_9665'
   End Object
   Begin Object Name="EdGraphPin_8946"
      PinName="then"
      PinFriendlyName="true"
      Direction=EGPD_Output
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_Knot_41.EdGraphPin_9223'
   End Object
   Begin Object Name="EdGraphPin_8947"
      PinName="else"
      PinFriendlyName="false"
      Direction=EGPD_Output
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_IfThenElse_138.EdGraphPin_9076'
   End Object
   Pins(0)=EdGraphPin'EdGraphPin_8944'
   Pins(1)=EdGraphPin'EdGraphPin_8945'
   Pins(2)=EdGraphPin'EdGraphPin_8946'
   Pins(3)=EdGraphPin'EdGraphPin_8947'
   NodePosX=-144
   NodePosY=-240
   ErrorType=4
   ErrorMsg="Info The execution path doesn\'t end with a return node.  False "
   NodeGuid=6DE0267142D333C51B313EBC36B4FA3A
End Object
Begin Object Class=K2Node_CallFunction Name="K2Node_CallFunction_3367"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9662"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9663"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9664"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9665"
   End Object
   Begin Object Name="EdGraphPin_9662"
      PinName="self"
      PinFriendlyName="Target"
      PinToolTip="Target
Kismet Math Library Reference"
      PinType=(PinCategory="object",PinSubCategoryObject=Class'/Script/Engine.KismetMathLibrary')
      DefaultObject=Default__KismetMathLibrary
      bHidden=True
   End Object
   Begin Object Name="EdGraphPin_9663"
      PinName="A"
      PinToolTip="A
Integer"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_3264.EdGraphPin_9620'
   End Object
   Begin Object Name="EdGraphPin_9664"
      PinName="B"
      PinToolTip="B
Integer"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_4717.EdGraphPin_9653'
   End Object
   Begin Object Name="EdGraphPin_9665"
      PinName="ReturnValue"
      PinToolTip="Return Value
Boolean"
      Direction=EGPD_Output
      PinType=(PinCategory="bool")
      AutogeneratedDefaultValue="false"
      LinkedTo(0)=EdGraphPin'K2Node_IfThenElse_102.EdGraphPin_8945'
   End Object
   bIsPureFunc=True
   FunctionReference=(MemberParent=Class'/Script/Engine.KismetMathLibrary',MemberName="NotEqual_IntInt")
   Pins(0)=EdGraphPin'EdGraphPin_9662'
   Pins(1)=EdGraphPin'EdGraphPin_9663'
   Pins(2)=EdGraphPin'EdGraphPin_9664'
   Pins(3)=EdGraphPin'EdGraphPin_9665'
   NodePosX=-112
   NodePosY=208
   NodeGuid=60002819486E438DACCCB88F97C306FF
End Object
Begin Object Class=K2Node_CallArrayFunction Name="K2Node_CallArrayFunction_24"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9674"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9675"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9676"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9677"
   End Object
   Begin Object Name="EdGraphPin_9674"
      PinName="execute"
      PinToolTip="
Exec"
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_Knot_57.EdGraphPin_9206'
   End Object
   Begin Object Name="EdGraphPin_9675"
      PinName="then"
      PinToolTip="
Exec"
      Direction=EGPD_Output
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_VariableSet_1474.EdGraphPin_8908'
   End Object
   Begin Object Name="EdGraphPin_9676"
      PinName="self"
      PinFriendlyName="Target"
      PinToolTip="Target
Kismet Array Library Reference"
      PinType=(PinCategory="object",PinSubCategoryObject=Class'/Script/Engine.KismetArrayLibrary')
      DefaultObject=Default__KismetArrayLibrary
      bHidden=True
   End Object
   Begin Object Name="EdGraphPin_9677"
      PinName="TargetArray"
      PinToolTip="Target Array
Array of Goal Cue References

The array to shuffle"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C',bIsArray=True,bIsReference=True,bIsConst=True)
      LinkedTo(0)=EdGraphPin'K2Node_Knot_56.EdGraphPin_9212'
      bDefaultValueIsIgnored=True
   End Object
   FunctionReference=(MemberParent=Class'/Script/Engine.KismetArrayLibrary',MemberName="Array_Shuffle")
   Pins(0)=EdGraphPin'EdGraphPin_9674'
   Pins(1)=EdGraphPin'EdGraphPin_9675'
   Pins(2)=EdGraphPin'EdGraphPin_9676'
   Pins(3)=EdGraphPin'EdGraphPin_9677'
   NodePosX=-816
   NodePosY=-224
   NodeGuid=B0455ACC442F5124785CECAB57579980
End Object
Begin Object Class=K2Node_Knot Name="K2Node_Knot_41"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9223"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9224"
   End Object
   Begin Object Name="EdGraphPin_9223"
      PinName="InputPin"
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_IfThenElse_102.EdGraphPin_8946'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9224"
      PinName="OutputPin"
      Direction=EGPD_Output
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_VariableSet_1408.EdGraphPin_8881'
   End Object
   Pins(0)=EdGraphPin'EdGraphPin_9223'
   Pins(1)=EdGraphPin'EdGraphPin_9224'
   NodePosX=64
   NodePosY=-320
   NodeGuid=45E18D79441155BFAA639DB9C7F40B66
End Object
Begin Object Class=K2Node_Knot Name="K2Node_Knot_42"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9217"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9218"
   End Object
   Begin Object Name="EdGraphPin_9217"
      PinName="InputPin"
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_VariableSet_1408.EdGraphPin_8882'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9218"
      PinName="OutputPin"
      Direction=EGPD_Output
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_FunctionResult_3.EdGraphPin_9599'
   End Object
   Pins(0)=EdGraphPin'EdGraphPin_9217'
   Pins(1)=EdGraphPin'EdGraphPin_9218'
   NodePosX=848
   NodePosY=-320
   NodeGuid=12D9E0714903A8D23CAA349D76827559
End Object
Begin Object Class=K2Node_Knot Name="K2Node_Knot_43"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9175"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9176"
   End Object
   Begin Object Name="EdGraphPin_9175"
      PinName="InputPin"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_VariableSet_1408.EdGraphPin_8884'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9176"
      PinName="OutputPin"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_Select_1.EdGraphPin_9230'
   End Object
   Pins(0)=EdGraphPin'EdGraphPin_9175'
   Pins(1)=EdGraphPin'EdGraphPin_9176'
   NodePosX=480
   NodePosY=-288
   NodeGuid=FDBC48CA43846B5FB33D25B6EEC20DA0
End Object
Begin Object Class=K2Node_Knot Name="K2Node_Knot_44"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9169"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9170"
   End Object
   Begin Object Name="EdGraphPin_9169"
      PinName="InputPin"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_Knot_55.EdGraphPin_9248'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9170"
      PinName="OutputPin"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_VariableSet_1408.EdGraphPin_8883'
   End Object
   Pins(0)=EdGraphPin'EdGraphPin_9169'
   Pins(1)=EdGraphPin'EdGraphPin_9170'
   NodePosX=144
   NodePosY=-288
   NodeGuid=4FBA6E764D569E71D54CC9B1AA8650FC
End Object
Begin Object Class=K2Node_Knot Name="K2Node_Knot_48"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9193"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9194"
   End Object
   Begin Object Name="EdGraphPin_9193"
      PinName="InputPin"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C',bIsArray=True)
      LinkedTo(0)=EdGraphPin'K2Node_VariableGet_1935.EdGraphPin_8844'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9194"
      PinName="OutputPin"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C',bIsArray=True)
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_422.EdGraphPin_9606'
   End Object
   Pins(0)=EdGraphPin'EdGraphPin_9193'
   Pins(1)=EdGraphPin'EdGraphPin_9194'
   NodePosX=-928
   NodePosY=48
   NodeGuid=1988729D437D3CC7B813E69EEDCEF911
End Object
Begin Object Class=K2Node_Knot Name="K2Node_Knot_55"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9247"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9248"
   End Object
   Begin Object Name="EdGraphPin_9247"
      PinName="InputPin"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_421.EdGraphPin_9632'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9248"
      PinName="OutputPin"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_Knot_44.EdGraphPin_9169'
   End Object
   Pins(0)=EdGraphPin'EdGraphPin_9247'
   Pins(1)=EdGraphPin'EdGraphPin_9248'
   NodePosY=112
   NodeGuid=75066AC64D7C8D5302675ABC22D9A6C8
End Object
Begin Object Class=K2Node_Knot Name="K2Node_Knot_56"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9211"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9212"
   End Object
   Begin Object Name="EdGraphPin_9211"
      PinName="InputPin"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C',bIsArray=True)
      LinkedTo(0)=EdGraphPin'K2Node_VariableGet_1935.EdGraphPin_8844'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9212"
      PinName="OutputPin"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C',bIsArray=True)
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_24.EdGraphPin_9677'
   End Object
   Pins(0)=EdGraphPin'EdGraphPin_9211'
   Pins(1)=EdGraphPin'EdGraphPin_9212'
   NodePosX=-1104
   NodePosY=-192
   NodeGuid=8C76EDF840687AA6729C3AB599EA5298
End Object
Begin Object Class=K2Node_Knot Name="K2Node_Knot_57"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9205"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9206"
   End Object
   Begin Object Name="EdGraphPin_9205"
      PinName="InputPin"
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_FunctionEntry_302.EdGraphPin_9596'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9206"
      PinName="OutputPin"
      Direction=EGPD_Output
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_24.EdGraphPin_9674'
   End Object
   Pins(0)=EdGraphPin'EdGraphPin_9205'
   Pins(1)=EdGraphPin'EdGraphPin_9206'
   NodePosX=-960
   NodePosY=-304
   NodeGuid=AE0ED4BB457279F31373D5AF0A234028
End Object
Begin Object Class=K2Node_Knot Name="K2Node_Knot_58"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9199"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9200"
   End Object
   Begin Object Name="EdGraphPin_9199"
      PinName="InputPin"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C',bIsArray=True)
      LinkedTo(0)=EdGraphPin'K2Node_VariableGet_1935.EdGraphPin_8844'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9200"
      PinName="OutputPin"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C',bIsArray=True)
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_23.EdGraphPin_9642'
   End Object
   Pins(0)=EdGraphPin'EdGraphPin_9199'
   Pins(1)=EdGraphPin'EdGraphPin_9200'
   NodePosX=-1120
   NodePosY=352
   NodeGuid=F14DBC114C8E98E3FCC9B49D3B87ACEC
End Object
Begin Object Class=K2Node_IfThenElse Name="K2Node_IfThenElse_138"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9076"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9077"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9078"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9079"
   End Object
   Begin Object Name="EdGraphPin_9076"
      PinName="execute"
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_IfThenElse_102.EdGraphPin_8947'
   End Object
   Begin Object Name="EdGraphPin_9077"
      PinName="Condition"
      PinType=(PinCategory="bool")
      DefaultValue="false"
      AutogeneratedDefaultValue="true"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_4019.EdGraphPin_9689'
   End Object
   Begin Object Name="EdGraphPin_9078"
      PinName="then"
      PinFriendlyName="true"
      Direction=EGPD_Output
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_VariableSet_336.EdGraphPin_9136'
   End Object
   Begin Object Name="EdGraphPin_9079"
      PinName="else"
      PinFriendlyName="false"
      Direction=EGPD_Output
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_VariableSet_334.EdGraphPin_9031'
   End Object
   Pins(0)=EdGraphPin'EdGraphPin_9076'
   Pins(1)=EdGraphPin'EdGraphPin_9077'
   Pins(2)=EdGraphPin'EdGraphPin_9078'
   Pins(3)=EdGraphPin'EdGraphPin_9079'
   NodePosX=240
   NodePosY=144
   NodeGuid=AE24F3D94A6684B44D046A82F04CF12E
End Object
Begin Object Class=K2Node_CallFunction Name="K2Node_CallFunction_4019"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9686"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9687"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9688"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9689"
   End Object
   Begin Object Name="EdGraphPin_9686"
      PinName="self"
      PinFriendlyName="Target"
      PinToolTip="Target
Kismet Math Library Reference"
      PinType=(PinCategory="object",PinSubCategoryObject=Class'/Script/Engine.KismetMathLibrary')
      DefaultObject=Default__KismetMathLibrary
      bHidden=True
   End Object
   Begin Object Name="EdGraphPin_9687"
      PinName="A"
      PinToolTip="A
Integer"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_4717.EdGraphPin_9653'
   End Object
   Begin Object Name="EdGraphPin_9688"
      PinName="B"
      PinToolTip="B
Integer"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_Knot_62.EdGraphPin_9182'
   End Object
   Begin Object Name="EdGraphPin_9689"
      PinName="ReturnValue"
      PinToolTip="Return Value
Boolean"
      Direction=EGPD_Output
      PinType=(PinCategory="bool")
      AutogeneratedDefaultValue="false"
      LinkedTo(0)=EdGraphPin'K2Node_IfThenElse_138.EdGraphPin_9077'
   End Object
   bIsPureFunc=True
   FunctionReference=(MemberParent=Class'/Script/Engine.KismetMathLibrary',MemberName="EqualEqual_IntInt")
   Pins(0)=EdGraphPin'EdGraphPin_9686'
   Pins(1)=EdGraphPin'EdGraphPin_9687'
   Pins(2)=EdGraphPin'EdGraphPin_9688'
   Pins(3)=EdGraphPin'EdGraphPin_9689'
   NodePosX=32
   NodePosY=304
   NodeGuid=B4CB0FDC49511677E514D58719507F06
End Object
Begin Object Class=K2Node_Knot Name="K2Node_Knot_61"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9187"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9188"
   End Object
   Begin Object Name="EdGraphPin_9187"
      PinName="InputPin"
      PinType=(PinCategory="int")
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_23.EdGraphPin_9643'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9188"
      PinName="OutputPin"
      Direction=EGPD_Output
      PinType=(PinCategory="int")
      LinkedTo(0)=EdGraphPin'K2Node_Knot_62.EdGraphPin_9181'
   End Object
   Pins(0)=EdGraphPin'EdGraphPin_9187'
   Pins(1)=EdGraphPin'EdGraphPin_9188'
   NodePosX=-752
   NodePosY=560
   NodeGuid=C2309D424CE4ED73628E48B577784749
End Object
Begin Object Class=K2Node_Knot Name="K2Node_Knot_62"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9181"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9182"
   End Object
   Begin Object Name="EdGraphPin_9181"
      PinName="InputPin"
      PinType=(PinCategory="int")
      LinkedTo(0)=EdGraphPin'K2Node_Knot_61.EdGraphPin_9188'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9182"
      PinName="OutputPin"
      Direction=EGPD_Output
      PinType=(PinCategory="int")
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_4019.EdGraphPin_9688'
   End Object
   Pins(0)=EdGraphPin'EdGraphPin_9181'
   Pins(1)=EdGraphPin'EdGraphPin_9182'
   NodePosX=-64
   NodePosY=560
   NodeGuid=A23285CB4A9217FFB4279CB8B42F8B5C
End Object
Begin Object Class=K2Node_CallArrayFunction Name="K2Node_CallArrayFunction_25"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9698"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9699"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9700"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9701"
   End Object
   Begin Object Name="EdGraphPin_9698"
      PinName="self"
      PinFriendlyName="Target"
      PinToolTip="Target
Kismet Array Library Reference"
      PinType=(PinCategory="object",PinSubCategoryObject=Class'/Script/Engine.KismetArrayLibrary')
      DefaultObject=Default__KismetArrayLibrary
      bHidden=True
   End Object
   Begin Object Name="EdGraphPin_9699"
      PinName="TargetArray"
      PinToolTip="Target Array
Array of Goal Cue References

The array to get an item from *"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C',bIsArray=True,bIsReference=True,bIsConst=True)
      LinkedTo(0)=EdGraphPin'K2Node_VariableGet_1935.EdGraphPin_8844'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9700"
      PinName="Index"
      PinToolTip="Index
Integer

The index in the array to get an item from *"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_4020.EdGraphPin_9713'
   End Object
   Begin Object Name="EdGraphPin_9701"
      PinName="Item"
      PinToolTip="Item
Goal Cue Reference"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_VariableSet_336.EdGraphPin_9138'
   End Object
   bIsPureFunc=True
   FunctionReference=(MemberParent=Class'/Script/Engine.KismetArrayLibrary',MemberName="Array_Get")
   Pins(0)=EdGraphPin'EdGraphPin_9698'
   Pins(1)=EdGraphPin'EdGraphPin_9699'
   Pins(2)=EdGraphPin'EdGraphPin_9700'
   Pins(3)=EdGraphPin'EdGraphPin_9701'
   NodePosX=400
   NodePosY=256
   NodeGuid=5FC038E74110F1E77231C292E2752CC3
End Object
Begin Object Class=K2Node_VariableSet Name="K2Node_VariableSet_336"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9136"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9137"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9138"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9139"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9140"
   End Object
   Begin Object Name="EdGraphPin_9136"
      PinName="execute"
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_IfThenElse_138.EdGraphPin_9078'
   End Object
   Begin Object Name="EdGraphPin_9137"
      PinName="then"
      Direction=EGPD_Output
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_FunctionResult_3.EdGraphPin_9599'
   End Object
   Begin Object Name="EdGraphPin_9138"
      PinName="GoalFlip"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_25.EdGraphPin_9701'
   End Object
   Begin Object Name="EdGraphPin_9139"
      PinName="Output_Get"
      PinToolTip="Retrieves the value of the variable, can use instead of a separate Get node"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
   End Object
   Begin Object Name="EdGraphPin_9140"
      PinName="self"
      PinFriendlyName="Target"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Pawns/BP_NavigatorPawn.BP_NavigatorPawn_C')
      bHidden=True
   End Object
   VariableReference=(MemberName="GoalFlip",MemberGuid=1DA4EFA24E56EC73DDA09EB822DC7604,bSelfContext=True)
   Pins(0)=EdGraphPin'EdGraphPin_9136'
   Pins(1)=EdGraphPin'EdGraphPin_9137'
   Pins(2)=EdGraphPin'EdGraphPin_9138'
   Pins(3)=EdGraphPin'EdGraphPin_9139'
   Pins(4)=EdGraphPin'EdGraphPin_9140'
   NodePosX=768
   NodePosY=160
   NodeGuid=56107AED42BECA6AB6291FAEFA1AB42D
End Object
Begin Object Class=K2Node_CallFunction Name="K2Node_CallFunction_4020"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9710"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9711"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9712"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9713"
   End Object
   Begin Object Name="EdGraphPin_9710"
      PinName="self"
      PinFriendlyName="Target"
      PinToolTip="Target
Kismet Math Library Reference"
      PinType=(PinCategory="object",PinSubCategoryObject=Class'/Script/Engine.KismetMathLibrary')
      DefaultObject=Default__KismetMathLibrary
      bHidden=True
   End Object
   Begin Object Name="EdGraphPin_9711"
      PinName="A"
      PinToolTip="A
Integer"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_4717.EdGraphPin_9653'
   End Object
   Begin Object Name="EdGraphPin_9712"
      PinName="B"
      PinToolTip="B
Integer"
      PinType=(PinCategory="int")
      DefaultValue="1"
      AutogeneratedDefaultValue="1"
   End Object
   Begin Object Name="EdGraphPin_9713"
      PinName="ReturnValue"
      PinToolTip="Return Value
Integer"
      Direction=EGPD_Output
      PinType=(PinCategory="int")
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_25.EdGraphPin_9700'
   End Object
   bIsPureFunc=True
   FunctionReference=(MemberParent=Class'/Script/Engine.KismetMathLibrary',MemberName="Subtract_IntInt")
   Pins(0)=EdGraphPin'EdGraphPin_9710'
   Pins(1)=EdGraphPin'EdGraphPin_9711'
   Pins(2)=EdGraphPin'EdGraphPin_9712'
   Pins(3)=EdGraphPin'EdGraphPin_9713'
   NodePosX=320
   NodePosY=432
   NodeGuid=0505CD454FB262C0AB6C7E86CF35A834
End Object
Begin Object Class=K2Node_CommutativeAssociativeBinaryOperator Name="K2Node_CommutativeAssociativeBinaryOperator_76"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9722"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9723"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9724"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9725"
   End Object
   Begin Object Name="EdGraphPin_9722"
      PinName="self"
      PinFriendlyName="Target"
      PinToolTip="Target
Kismet Math Library Reference"
      PinType=(PinCategory="object",PinSubCategoryObject=Class'/Script/Engine.KismetMathLibrary')
      DefaultObject=Default__KismetMathLibrary
      bHidden=True
   End Object
   Begin Object Name="EdGraphPin_9723"
      PinName="A"
      PinToolTip="A
Integer"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallFunction_4717.EdGraphPin_9653'
   End Object
   Begin Object Name="EdGraphPin_9724"
      PinName="B"
      PinToolTip="B
Integer"
      PinType=(PinCategory="int")
      DefaultValue="1"
      AutogeneratedDefaultValue="1"
   End Object
   Begin Object Name="EdGraphPin_9725"
      PinName="ReturnValue"
      PinToolTip="Return Value
Integer"
      Direction=EGPD_Output
      PinType=(PinCategory="int")
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_26.EdGraphPin_9736'
   End Object
   bIsPureFunc=True
   FunctionReference=(MemberParent=Class'/Script/Engine.KismetMathLibrary',MemberName="Add_IntInt")
   Pins(0)=EdGraphPin'EdGraphPin_9722'
   Pins(1)=EdGraphPin'EdGraphPin_9723'
   Pins(2)=EdGraphPin'EdGraphPin_9724'
   Pins(3)=EdGraphPin'EdGraphPin_9725'
   NodePosX=320
   NodePosY=560
   NodeGuid=DFAE73F945405AA6332838AD0A416533
End Object
Begin Object Class=K2Node_CallArrayFunction Name="K2Node_CallArrayFunction_26"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9734"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9735"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9736"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9737"
   End Object
   Begin Object Name="EdGraphPin_9734"
      PinName="self"
      PinFriendlyName="Target"
      PinToolTip="Target
Kismet Array Library Reference"
      PinType=(PinCategory="object",PinSubCategoryObject=Class'/Script/Engine.KismetArrayLibrary')
      DefaultObject=Default__KismetArrayLibrary
      bHidden=True
   End Object
   Begin Object Name="EdGraphPin_9735"
      PinName="TargetArray"
      PinToolTip="Target Array
Array of Goal Cue References

The array to get an item from *"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C',bIsArray=True,bIsReference=True,bIsConst=True)
      LinkedTo(0)=EdGraphPin'K2Node_VariableGet_1935.EdGraphPin_8844'
      bDefaultValueIsIgnored=True
   End Object
   Begin Object Name="EdGraphPin_9736"
      PinName="Index"
      PinToolTip="Index
Integer

The index in the array to get an item from *"
      PinType=(PinCategory="int")
      DefaultValue="0"
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_CommutativeAssociativeBinaryOperator_76.EdGraphPin_9725'
   End Object
   Begin Object Name="EdGraphPin_9737"
      PinName="Item"
      PinToolTip="Item
Goal Cue Reference"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      AutogeneratedDefaultValue="0"
      LinkedTo(0)=EdGraphPin'K2Node_VariableSet_334.EdGraphPin_9033'
   End Object
   bIsPureFunc=True
   FunctionReference=(MemberParent=Class'/Script/Engine.KismetArrayLibrary',MemberName="Array_Get")
   Pins(0)=EdGraphPin'EdGraphPin_9734'
   Pins(1)=EdGraphPin'EdGraphPin_9735'
   Pins(2)=EdGraphPin'EdGraphPin_9736'
   Pins(3)=EdGraphPin'EdGraphPin_9737'
   NodePosX=528
   NodePosY=416
   NodeGuid=2FEDD2804B8673D5F4332E988502955F
End Object
Begin Object Class=K2Node_VariableSet Name="K2Node_VariableSet_334"
   Begin Object Class=EdGraphPin Name="EdGraphPin_9031"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9032"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9033"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9034"
   End Object
   Begin Object Class=EdGraphPin Name="EdGraphPin_9035"
   End Object
   Begin Object Name="EdGraphPin_9031"
      PinName="execute"
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_IfThenElse_138.EdGraphPin_9079'
   End Object
   Begin Object Name="EdGraphPin_9032"
      PinName="then"
      Direction=EGPD_Output
      PinType=(PinCategory="exec")
      LinkedTo(0)=EdGraphPin'K2Node_FunctionResult_3.EdGraphPin_9599'
   End Object
   Begin Object Name="EdGraphPin_9033"
      PinName="GoalFlip"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
      LinkedTo(0)=EdGraphPin'K2Node_CallArrayFunction_26.EdGraphPin_9737'
   End Object
   Begin Object Name="EdGraphPin_9034"
      PinName="Output_Get"
      PinToolTip="Retrieves the value of the variable, can use instead of a separate Get node"
      Direction=EGPD_Output
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Cues/GoalCue.GoalCue_C')
   End Object
   Begin Object Name="EdGraphPin_9035"
      PinName="self"
      PinFriendlyName="Target"
      PinType=(PinCategory="object",PinSubCategoryObject=BlueprintGeneratedClass'/Game/DonNavigationSamples/Pawns/BP_NavigatorPawn.BP_NavigatorPawn_C')
      bHidden=True
   End Object
   VariableReference=(MemberName="GoalFlip",MemberGuid=1DA4EFA24E56EC73DDA09EB822DC7604,bSelfContext=True)
   Pins(0)=EdGraphPin'EdGraphPin_9031'
   Pins(1)=EdGraphPin'EdGraphPin_9032'
   Pins(2)=EdGraphPin'EdGraphPin_9033'
   Pins(3)=EdGraphPin'EdGraphPin_9034'
   Pins(4)=EdGraphPin'EdGraphPin_9035'
   NodePosX=784
   NodePosY=320
   NodeGuid=B251826740E8CC46C4E4AF86F79E18CB
End Object


I forgot the code. This is the picture:

,

Thank you for releasing this as a free plugin, and especially for releasing the source code along. I wish would follow your example… :slight_smile:

I’ve been trying to get the plugin to work with 4.11.1 (latest release) but I’m not having much luck. It compiles without errors but when I start a project, it crashes during loading. The log shows this as the only clue


Fatal error: [File:D:\BuildFarm\buildmachine_++UE4+Release-4.11\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp] [Line: 2824]
NewObject with empty name can't be used to create default subobjects (inside of UObject derived class constructor) as it produces inconsistent object names. Use ObjectInitializer.CreateDefaultSuobject<> instead.

It doesn’t tell me much since it’s not even in the plugin code, so I’m not sure if this is a UE4 bug or a plugin one.

Any ideas?

All, I didn’t see the new replies on this thread until now. Somehow the VBulletin thread subscription mail just doesn’t seem to work reliably for me. Sometimes it sends an email when there’s a new post, more often than not it doesn’t!

   @rsfx - Thanks for sharing that. I think that's the multi-waypoint setup that        was looking for too. Btw FPS on the video looks really low, is it the recording software or just the way it is? :P I'm a bit surprised to see the bot bumping into obstacles so often, that is not the intended level of accuracy at all! Did you try playing around with the VoxelSize setting to see if that helps? Not sure if you ran into a bug in the system or a fundamental limitation of the overall setup.

   @ - thanks for bringing that to my attention! I haven't migrated to 4.11 yet so I haven't had a  to test. When I get some time I'll migrate the sample project over to 4.11.1 and see what happens. Expect it to take a week or so though, it's crunch time for my project ATM and if I start looking at this I know I won't stop :P

Plugin news:

I’ve made some critical bugfixes and usability improvements that I haven’t checked in or uploaded yet. One of them is a serious bug in the dynamic collision task scheduler where unrelated tasks were getting mixed up! That fix should improve accuracy of dynamic collisions dramatically although I don’t think that will help with general collision issues like the one @rsfx posted in that video.

I’ll try to bundle up these bugfixes and 4.11 testing together into one update.

Wonderful plugin!

Is Android supported out of the box?

Does it perform well on mobile ?

Would it work along with Dungeon Architect ?

I have no idea honestly :slight_smile: I’m not using any OS specific features so assuming your map is small things might just work.

I’ve no experience with mobile development though so I don’t know what kind of issues to expect.

Try it out and let us know what happens!

Just to provide some more context for the error reported by , project compiles fine, then trows the error mentioned when you try and open it. Heres a snippet from my log that is relevant for the error. UE4 version 4.11.1


[2016.04.15-07.41.09:467]  0]LogWindows:Error: === Critical error: ===
Fatal error: [File:C:\UE4_Engine\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp] [Line: 2824] 
NewObject with empty name can't be used to create default subobjects (inside of UObject derived class constructor) as it produces inconsistent object names. Use ObjectInitializer.CreateDefaultSuobject<> instead.


KERNELBASE.dll
UE4Editor-Core.dll!FOutputDeviceWindowsError::Serialize() [c:\ue4_engine\engine\source\runtime\core\private\windows\windowsplatformoutputdevices.cpp:95]
UE4Editor-Core.dll!FOutputDevice::Logf__VA() [c:\ue4_engine\engine\source\runtime\core\private\misc\outputdevice.cpp:149]
UE4Editor-Core.dll!FDebug::AssertFailed() [c:\ue4_engine\engine\source\runtime\core\private\misc\outputdevice.cpp:430]
UE4Editor-CoreUObject.dll!FObjectInitializer::AssertIfInConstructor() [c:\ue4_engine\engine\source\runtime\coreuobject\private\uobject\uobjectglobals.cpp:2825]
UE4Editor-Engine.dll!NewObject<UBodySetup>() [c:\ue4_engine\engine\source\runtime\coreuobject\public\uobject\uobjectglobals.h:1173]
UE4Editor-Engine.dll!UBoxComponent::UpdateBodySetup() [c:\ue4_engine\engine\source\runtime\engine\private\components\boxcomponent.cpp:40]
UE4Editor-Engine.dll!UBoxComponent::SetBoxExtent() [c:\ue4_engine\engine\source\runtime\engine\private\components\boxcomponent.cpp:24]
UE4Editor-DonAINavigation.dll
UE4Editor-CoreUObject.dll!UClass::CreateDefaultObject() [c:\ue4_engine\engine\source\runtime\coreuobject\private\uobject\class.cpp:2763]
UE4Editor-CoreUObject.dll!UObjectLoadAllCompiledInDefaultProperties() [c:\ue4_engine\engine\source\runtime\coreuobject\private\uobject\uobjectbase.cpp:724]
UE4Editor-CoreUObject.dll!ProcessNewlyLoadedUObjects() [c:\e4_engine\engine\source\runtime\coreuobject\private\uobject\uobjectbase.cpp:818]
UE4Editor-CoreUObject.dll!TBaseStaticDelegateInstance<void __cdecl(void)>::ExecuteIfSafe() [c:\ue4_engine\engine\source\runtime\core\public\delegates\delegateinstancesimpl_variadics.inl:1021]
UE4Editor-Core.dll!TBaseMulticastDelegate<void>::Broadcast() [c:\ue4_engine\engine\source\runtime\core\public\delegates\delegatesignatureimpl_variadics.inl:921]
UE4Editor-Core.dll!FModuleManager::LoadModuleWithFailureReason() [c:\ue4_engine\engine\source\runtime\core\private\modules\modulemanager.cpp:427]
UE4Editor-Projects.dll!FModuleDescriptor::LoadModulesForPhase() [c:\ue4_engine\engine\source\runtime\projects\private\moduledescriptor.cpp:398]
UE4Editor-Projects.dll!FPluginManager::LoadModulesForEnabledPlugins() [c:\ue4_engine\engine\source\runtime\projects\private\pluginmanager.cpp:539]
UE4Editor.exe!FEngineLoop::LoadStartupModules() [c:\ue4_engine\engine\source\runtime\launch\private\launchengineloop.cpp:2080]
UE4Editor.exe!FEngineLoop::PreInit() [c:\ue4_engine\engine\source\runtime\launch\private\launchengineloop.cpp:1544]
UE4Editor.exe!GuardedMain() [c:\perforce\ue4_engine\engine\source\runtime\launch\private\launch.cpp:110]
UE4Editor.exe!GuardedMainWrapper() [c:\ue4_engine\engine\source\runtime\launch\private\windows\launchwindows.cpp:126]
UE4Editor.exe!WinMain() [c:\ue4_engine\engine\source\runtime\launch\private\windows\launchwindows.cpp:200]
UE4Editor.exe!__scrt_common_main_seh() [f:\dd\vctools\crt\vcstartup\src\startup\exe_common.inl:264]
KERNEL32.DLL
ntdll.dll
ntdll.dll

EDIT:

after fiddling around a bit I’ve found that if I edit theUDoNNavigationVolumeComponent constructor to not have the SetBoxExtent call the error disappears:

as such


UDoNNavigationVolumeComponent::UDoNNavigationVolumeComponent(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
{
	BoxExtent = FVector(50.0f, 50.0f, 50.0f);

	static FName CollisionProfileName(TEXT("DoNNavigationVolume"));
	SetCollisionProfileName(CollisionProfileName);	
}

Now I don’t know what unwanted side effects this might lead to if any, but it seems to be working alright for me

@Liine, thanks a lot for that, you’ve saved me some time there :slight_smile:

There should be no side-effects whatsoever with that change. The class in question is deprecated and not used by the plugin. I left the whole “Legacy” subfolder in there just as an example of the “space filling volumes” solution that I previously used, it’s not used by the current system.

I still need to update the plugin with a whole clutch of bugfixes that I’ve made over the past month or so though.

v1.2 released

Latest plugin and sample project are available both in the OP and in this link:

There’s a ton of tweaks and bugfixes in this (git commit). Changes include, but are not limited to:

  • Major bugfix: Hash comparison in dynamic task scheduler is fixed to account for unrelated meshes using a common cache key. Unrelated tasks were previously getting mixed up because of this bug!
    With this fix, the moving glass panels example in the sample project should now be “near perfect”. The rocket dodging example is still rough around the edges (so there’s still further scope for improving dynamic collision handling)

  • Major usability feature: Automatically teleport pawn to a nearby “good” location for cases where the pawn is starting pathfinding from a spot where initial collisions are indeterminate. Goal vector will also be automatically tweaked if it happens to be in a “bad spot”. This should help new users in getting their initial testing going with fewer hitches. You can disable this behavior under query params by setting “FlexibleOriginGoal” to false. Some of the older rules still apply - if your pathfinding goal or origin is very near the floor then your queries will either fail or time-out.

  • 4.11 should be working fine now (I haven’t tested this myself, so please let me know if it still doesn’t work for you!)

  • Improved logging: Prevent log spam by memorizing known “bad queries”, other general improvements to logging

  • API signature change to “ScheduleDynamicCollisionUpdate” to allow users to disable caching altogether. This change is not backward compatible I’m afraid. C++ users should update existing calls to this function accordingly.

  • Stability v/s Performance compromise in favor of stability: several VolumeAtUnsafe lookups have been replaced with VolumeAtSafe. Plugin users now need to worry less about triggering certain edge conditions which may lead to crashes, at the cost of a small amount of performance.

  • Animation states for your pawn can be easily updated now using new callbacks: Locomotion Start/End/Next/Abort. Implement these as part of the IDonNavigator interface.

  • Navigator interface now exported properly as part of DONAINAVIGATION_API

  • You can now disable cache usage completely for dynamic collisions by passing DisableCacheUsage as true to the scheduler. This is important for some situations where you cannot reliably use the mesh component (or a cache identifier) as a unique key for your mesh and you’d rather not bother with caching at all.

==

Just so you know, I’m not actively working on new features for the plugin. However whenever I find things that my own game needs in the plugin then I try to improve or fix what I can at that time.

Let me know if any links aren’t working! All this bumping of versions, uploading stuff and testing links is more finicky than I could have ever imagined before :slight_smile:

@

Thanks for the update - unfortunately I don’t have good news here…

Module.DonAINavigation.cpp
M:\Unreal Projects\PluginCompiler\Plugins\DonAINavigation\Source\DonAINavigation\Private\BehaviorTree\BTTask_FlyTo.cpp(45): warning C4996: ‘FBlackboardKeySelector::CacheSelectedKey’: CacheSelectedKey is deprecated. Please use ResolveSelectedKey instead. Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile.
c:\unrealengine\4.11\engine\source\runtime\aimodule\classes\behaviortree\BehaviorTreeTypes.h(515): note: see declaration of ‘FBlackboardKeySelector::CacheSelectedKey’
M:\Unreal Projects\PluginCompiler\Plugins\DonAINavigation\Source\DonAINavigation\Private\DonNavigationManager.cpp(1238): error C2248: ‘FCollisionQueryParams::IgnoreComponents’: cannot access private member declared in class ‘FCollisionQueryParams’
c:\unrealengine\4.11\engine\source\runtime\engine\public\CollisionQueryParams.h(53): note: see declaration of ‘FCollisionQueryParams::IgnoreComponents’
C:\UnrealEngine\4.11\Engine\Source\Runtime\Engine\Classes\GameFramework/MovementComponent.h(12): note: see declaration of ‘FCollisionQueryParams’
M:\Unreal Projects\PluginCompiler\Plugins\DonAINavigation\Source\DonAINavigation\Private\DonNavigationManager.cpp(1312): error C2248: ‘FCollisionQueryParams::IgnoreComponents’: cannot access private member declared in class ‘FCollisionQueryParams’
c:\unrealengine\4.11\engine\source\runtime\engine\public\CollisionQueryParams.h(53): note: see declaration of ‘FCollisionQueryParams::IgnoreComponents’
C:\UnrealEngine\4.11\Engine\Source\Runtime\Engine\Classes\GameFramework/MovementComponent.h(12): note: see declaration of ‘FCollisionQueryParams’
-------- End Detailed Actions Stats -----------------------------------------------------------
ERROR: UBT ERROR: Failed to produce item: M:\Unreal Projects\PluginCompiler\Plugins\DonAINavigation\Binaries\Win64\UE4Editor-DonAINavigation.dll

And, per the 4.11 release notes:

FCollisionQueryParams::IgnoreComponents is now private, use AddIgnoredComponent() and GetIgnoredComponents() instead.
This enabled an optimization to make the components list unique only once on-demand in GetIgnoredComponents(), rather each time a component is added.

Alright, that’s what I get for not testing 4.11 directly and assuming “it would work” :frowning:

I need some time to get 4.11 setup. I’m low on download bandwidth, disk space on SSD (and low on time too!), I’ll need to take time away from today’s project work if I’m to focus on this…

Are you able to work around those issues yourself until I get there? (assuming AddIgnoredComponent only needs to be added in a few places).

N00b here, so I’d appreciate a little guidance…I already tried using AddIgnoredComponent but it requires UPrimitiveComponent, and GetIgnoredComponents returns TArray of uint32s - I’m not sure what those uint32s are.

Thanks!