Download

(39) Rama's Extra Blueprint Nodes for You as a Plugin, No C++ Required!

OOO Distance Nodes!

Is there a limit to the distance in which the precision of this is effected? For example, I have a real scale galaxy (converted to unit scale “Example: 1 mile = 0.001 unreal units”). Would the precision be effected in a scenario like this?

Thanks again for another awesome contribution!

You’re welcome Jeremy!

The only limit I think you’ll have is the fact that the value being returned from the engine is a single precision float, here’s a reference on what sort of accuracy you can expect:

"
If you want an accuracy of +/-0.0005 (about 2^-11), the maximum size that the number can be is 2^13 (8192). Any larger than this and the distance between floating point numbers is greater than 0.0005.
"


UE4 is using the PhysX engine under the hood to do the distance calculation:



```


PxGeometryQuery::pointDistance


```



So I do think your only limit is the accuracy of a single precision float.

Summary:

If you have two surface points to check the distance between that are more than 8192 units apart, your accuracy is limited to 0.00005 and gets smaller as the distance between the points gets bigger.

If your planets or the bodies you want to measure collision for are more than 10,000,000 unreal world units apart, you can expect the accuracy to be dropping in terms of precision down to 0.001 (1 mile you are saying).

If you need measurements more accurate than 1 mile, you’ll need to measure bodies that are more like 5,000,000 or 1,000,000 unreal in-game units apart.

How far apart are the planets or the bodies you want to measure in your UE4 Galaxy?

:slight_smile:

Rama

Hi again Rama, I very much enjoy your plugin now that it is working in the NVIDIA branch, I was wondering if it would be possible to extend the vertex snap to include snapping blueprint actors in the level as well? As I understand, the vertex snap is for static meshes only right? Would it be hard to make the vertex snap work in the blueprint editor, since positioning components in the blueprint editor is a pain. Thanks again for the plugin.

“Would it be hard to make the vertex snap work in the blueprint editor, since positioning components in the blueprint editor is a pain.”

Yes that would be quite a challenge since the code for blueprint editor viewport is on the Editor side.

I implemented my Vertex Snap editor by creating my own editor mode for the level viewport, a functionality and method that Epic encouraged and has provided a code path for.

Modifying the existing code of the blueprint editor viewport to receive new keyboard and mouse inputs would probably be hard to do without a custom engine build, which then prevents me from offering the vertex snap feature as a plugin.

It’s quite doable of course, question is whether it can be done without requiring a custom engine build :slight_smile:

If I get time and find anyway to modify the blueprint editor viewport code in a plugin fashion I’ll let you know!

I am glad you are enjoying my Victory plugin!

:slight_smile:

Rama

PS:

My Latest Node Release ~ Get Distance Between Two Collision Surfaces!

Animated Vertex Positions With Movement Velocity Correction

Dear Community,

I’ve finally cracked the code of drawing accurate animated vertex positions for character meshes!

My node features a “velocity correction” system which causes the animated vertex positions to line up with your moving, animating character!

Now you can get the positions of the vertices of your character’ mesh, as these vertices animate!

You can run this node in tick of your character, or in my case I use the level BP because my Victory BP Library nodes can be used anywhere!


**My C++ Code For You**

Here's the C++ magic that I used to get the character's animated vertex positions to line up even while moving, jumping, and falling!

Please note this node can also be used with non-pawns / non-characters, any SkeletalMeshComponent will work!



```


bool UVictoryBPFunctionLibrary::AnimatedVertex__GetAnimatedVertexLocations(
	USkeletalMeshComponent* Mesh, 
	TArray<FVector>& Locations,
	bool PerformPawnVelocityCorrection
){
	if(!Mesh || !Mesh->SkeletalMesh)  
	{
		return false;
	}

	//~~~~~~~~~~~~~
	Locations.Empty(); 
	//~~~~~~~~~~~~~
	 
	Mesh->ComputeSkinnedPositions(Locations);
	
	FTransform ToWorld = Mesh->GetComponentTransform();
	FVector WorldLocation = ToWorld.GetLocation();
	
	**//Pawn Velocity Correction**
	UPawnMovementComponent* MovementComp = nullptr;
	if(PerformPawnVelocityCorrection)
	{
		APawn* Pawn = Cast<APawn>(Mesh->GetOwner());
		MovementComp = (Pawn) ? Pawn->GetMovementComponent() : NULL;
	}
	bool DoVelocityCorrection = PerformPawnVelocityCorrection && MovementComp;
	**//Pawn Velocity Correction**
	 
	for(FVector& Each : Locations)
	{
		Each = WorldLocation + ToWorld.TransformVector(Each);
		if(DoVelocityCorrection)
		{
			**Each += MovementComp->Velocity * FApp::GetDeltaTime();**
		} 
	} 
	
	return true;
}


```


**Latest plugin download on the UE4 Wiki: (7.99 mb) **


**Victory Plugin on Media Fire**

If your browser is not updating the Wiki download page to the most recent version, you can use my alternative Media Fire download link!

Please note clicking this link will not start a download instantly, it will just take you to the Media Fire file description.

https://www.mediafire.com/?g6uf9kt5ueb2upj

Enjoy!

:)

Rama

Nice!

Hi!

First of all, thank you for these wonderful additions!

I’m having a problem with the save 2d capture as image nodes. This is my setup in a construction script:

&stc=1&d=1438026872

When I activate it, UE4 (4.8) crashes 90% of the time. Capture every frame is turned off. It worked only one time so far and I didn’t make any changes.

Edit: Crashes with only one of those nodes as well, in case someone might suggest trying that.

That is probably causing the problem.
Try moving it to an event after begin play and separate the calls.

Thanks for the suggestion, Kris. I tried that but it still crashes. Ah well, it’s not so important. It isn’t part of the gameplay, it’s just for me to make some icons.

Dear Rama, say the true please, did you came to us from future? To save our lives?

You doing unbelievable stuff!

Thank you!

Two questions, 1 - Is this plugin compatible with mac? and 2 - When will it be compatible with 4.8?

It works with 4.8 on PC I know. Can’t speak to the mac side.

Also, Rama: Just wanted to thank you again for all the work you put into this! You gotta set up a Patreon or something so we can keep you fed :smiley:

Hee hee! Seems as though you figured me out!

Though more than one of us came from the Future!

If you are reading this, then you likely came from the Future too!!

Rama

Aww thanks Hyperloop!

I’m gonna think about that!

In the meantime, anyone can send me a donation via my lighting fitness website!


**Victory BP Library Donations Page**

If my plugin has benefitted you and you'd like to send me a donation, you can do so via the link below:

**Victory BP Library Donations**
http://lightningfitness.org/donate/

:)

Rama

Hey Rama,
is there a way to use relative paths instead of an absolute path at the “Load String Array From File” function?
I can’t get it to work.

Thank you!

Edit: I should read the other posts :smiley: thanks.

Edit2: Could you make more Array Load and Save file functions? Like, for floats?

I will add that to my list :slight_smile:

Have fun today!

:slight_smile:

Rama

Project File Paths For Saving and Loading in BP

0f36d3a4f869f97b5c23aa7135946654a25f7c74.jpeg

Victory Absolute Paths!
Live as of March 3rd 2015 build

Get the File Path to your project .exe, your project root directory, and more!

These paths are dynamically updated even if you move the entire project to a new location on your computer!

All these nodes are fully compatible with packaged builds and return absolute paths!

These nodes also work in Development/Editor builds!


**More Power For You in BP**

Now you can easily create your own folders/files, relative to the project root directory or your project's .exe!

Please note that in editor builds, the .exe returns your UE4Editor.exe location, but in packaged games it returns your game's .exe

![ca6e47c3de4ce0fc029accc855a97ab3b66c7f0f.jpeg|1260x774](upload://sSMIRl140vUkZisnTkYGaDdAz4X.jpeg)

Recommendation:

I recommend using the Project Game directory for most of your relative path needs! This works the same in Editor and packaged builds!

You can also get your Saved and Logs folders for your project in both packaged and editor builds!


**Download**

**Latest plugin download on the UE4 Wiki: (7.99 mb) **
https://wiki.unrealengine.com/File:VictoryPlugin.zip

Victory Plugin on Media Fire

If your browser is not updating the Wiki download page to the most recent version, you can use my alternative Media Fire download link!

Please note clicking this link will not start a download instantly, it will just take you to the Media Fire file description.

Enjoy!

:slight_smile:

Rama

Get Your IP Address From In-Game via BP Node

BP Node to Get Your Computer’s IP Address!

Dear Community,

I’ve finally succeeded at implementing a node that many have been trying to implement since the Beta!

This is a BP node that gets the IP address of your computer!

My node relies on http://api.ipify.org, a free and easy way to get your current IP address.

Because this node involves an HTTP request I can’t make it a static library node, so I instead made a VictoryPC class that contains only this functionality.

You can easily re-parent your current player controller blueprint to use my plugin VictoryPC class!

File->Reparent

and if you are not using a PC already, make sure to go to World Settings and use my VictoryPC as your player controller!

As long as my Victory BP Library is an active plugin for you, then this VictoryPC class will show up!


**Celebration!**

Yay!

Now we can all get the IP address of the local computer for use with multiplayer games or webserver activities!

Enjoy!

Rama

Pic

Here’s the setup you should create in your Blueprinted version of my VictoryPC!

2902549c08d489d31bb43f8a7049793370d4801e.jpeg


**C++ Source Code For You**

Here is the C++ source code I wrote just earlier today!



```


/** This node relies on http://api.ipify.org, so if this node ever stops working, check out http://api.ipify.org.  Returns false if the operation could not occur because HTTP module was not loaded or unable to process request. */
	UFUNCTION(BlueprintCallable, Category="Victory PC")
	bool VictoryPC_GetMyIP_SendRequest();
	
	/** Implement this event to receive your IP once the request is processed! This requires that your computer has a live internet connection */
	UFUNCTION(BlueprintImplementableEvent, Category = "Victory PC", meta = (DisplayName = "Victory PC ~ GetMyIP ~ Data Received!"))
	void VictoryPC_GetMyIP_DataReceived(const FString& YourIP);
	
	void HTTPOnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful);


```





```


bool AVictoryPC::VictoryPC_GetMyIP_SendRequest()
{
	FHttpModule* Http = &FHttpModule::Get();
	
	if(!Http)
	{
		return false;
	}
	 
	if(!Http->IsHttpEnabled()) 
	{
		return false;
	} 
	//~~~~~~~~~~~~~~~~~~~
	
	FString TargetHost = "http://api.ipify.org";
	TSharedRef < IHttpRequest > Request = Http->CreateRequest(); 
	Request->SetVerb("GET");
	Request->SetURL(TargetHost);
	Request->SetHeader("User-Agent", "VictoryBPLibrary/1.0");
	Request->SetHeader("Content-Type" ,"text/html");
 
	Request->OnProcessRequestComplete().BindUObject(this, &AVictoryPC::HTTPOnResponseReceived);
	if (!Request->ProcessRequest())
	{
		return false;
	}
	  
	return true;
}
	
void AVictoryPC::HTTPOnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
{
	this->VictoryPC_GetMyIP_DataReceived(Response->GetContentAsString());
}
 


```



**Latest plugin download on the UE4 Wiki: (8 mb) **


**Victory Plugin on Media Fire**

If your browser is not updating the Wiki download page to the most recent version, you can use my alternative Media Fire download link!

Please note clicking this link will not start a download instantly, it will just take you to the Media Fire file description.

https://www.mediafire.com/?g6uf9kt5ueb2upj

Enjoy!

:)

Rama

And what about snapping blueprint actors in the level, since in the current version you can only snap static meshes right?

Hi @Rama,

Thanks for the plugin!

I had to make a fix to get it building under Linux - the diff follows.

Have you considered putting your code on Github so people can send you pull requests for fixes/additions that you can easily decide to accept or not? If you are wlling, I offer to help set it up for you.



diff --git a/GameProject/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary.cpp b/GameProject/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary.cpp
index 014cab1..6fe8e0e 100644
--- a/GameProject/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary.cpp
+++ b/GameProject/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary.cpp
@@ -2711,13 +2711,13 @@ AActor* UVictoryBPFunctionLibrary::Traces__CharacterMeshTrace___ClosestSocket(

        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        //Check All Bones Locations
-       for (int32 Itr = 0; Itr < SocketNames.Num(); Itr++ )
+       for (int32 SItr = 0; SItr < SocketNames.Num(); SItr++ )
        {
                //Is this a Bone not a socket?
-               if(SocketNames[Itr].Type == EComponentSocketType::Bone) continue;
+               if(SocketNames[SItr].Type == EComponentSocketType::Bone) continue;
                //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-               CurLoc = AsCharacter->Mesh->GetSocketLocation(SocketNames[Itr].Name);
+               CurLoc = AsCharacter->Mesh->GetSocketLocation(SocketNames[SItr].Name);

                //Dist
                CurDist = FVector::Dist(OutImpactPoint, CurLoc);
@@ -2725,7 +2725,7 @@ AActor* UVictoryBPFunctionLibrary::Traces__CharacterMeshTrace___ClosestSocket(
                //Min
                if (ClosestDistance < 0 || ClosestDistance >= CurDist)
                {
-                       ClosestVibe = Itr;
+                       ClosestVibe = SItr;
                        ClosestDistance = CurDist;
                }
        }



Now I need to see how to deal with the Dedicated Server build failing because VictoryBPLibrary depends on UElibPNG - the build error:



Building DescentServer...
Using clang version '3.5.0' (string), 3 (major), 5 (minor), 0 (patch)
Linux dedicated server is made to depend on UElibPNG. We want to avoid this, please correct module dependencies.
ERROR: Exception thrown while processing dependent modules of VictoryBPLibrary
Exception thrown while processing dependent modules of ImageWrapper
ERROR: Unable to instantiate instance of 'UElibPNG' object type from compiled assembly 'DescentServerModuleRules'.  Unreal Build Tool creates an instance of your module's 'Rules' object in order to find out about your module's requirements.  The CLR exception details may provide more information:  System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> ERROR: Linux dedicated server is made to depend on UElibPNG. We want to avoid this, please correct module dependencies.


Edit: I had to remove ImageWrapper as a dependency and ifdef out all code using it in the plugin to get DedicatedServer to build.