Download

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

I though they’d already fixed that. I package my blueprint project just fine using this plugin.
Though I’m using only the function for reading available screen resolutions.

Was looking for a way to lock mouse to the center of the screen… And landed here again! Rama for president!!

Hee hee!

Great to hear from you Bruno!

:slight_smile:

Rama

Hey Rama, I realized today that with the Spawn Actor into specified level node, Add Instance into specified level node would also be needed. I am not anywhere near ready to try it out, but others might find it useful sooner if you made it. :slight_smile:

Can you explain a bit more what you need and also any applicable C++ code / some kind of starting point?

Congrats on all your awesome Map Generator progress!

Rama

50+ Extra BP Nodes For You!

No c++ required!

No compile required!

Download and plug in!

Latest plugin download is here:

:slight_smile:

Rama

Thanks! :slight_smile:

Basically you created the Spawn Actor Into Level node that lets you specify which level an actor gets spawned into. The same functionality is also needed for the “Add StaticMesh” and “Add Instance” nodes.

I use “Add StaticMesh” to add a mesh to the world, then I use it’s return value to set an InstancedStaticMeshComponent variable which I then later feed into “Add Instance”.

I had a conversation with one of the Epic Devs about this topic and they said that spawning actors into sublevels is not a recommended workflow, and it is really only ever used in the code base for a small number of things.

I think you need to take a step back and look at why you feel you need to do this, and let me know as well! Cause Epic is basically saying this is not the way you’re supposed to do things :slight_smile:

The main reason being that an actor spawned into a sublevel directly will get taken out of existence instantly if the sublevel is streamed out.

But again I was told that the pull request for this would not be accepted because it is not a workflow that is even used by Epic for more than a few rare cases.

Rama

Do they have an alternative for procedural content generation with streaming, or is streaming just not available?

What kind of workflow do they recommend for that? How would they do a Minecraft?

So I just read the email from Marc.

I will be honest, I do not know what the optimal method for this spawning would be. I will try and explain the problem.

Requirements:

  1. Instances, actors, volumes, etc, etc need to be procedurally spawned during run time.
  2. Everything spawning needs to be associated with a streaming level that is already in the level.

Problems:

  1. Spawn and Add instance actions put these objects into the persistent level.
  2. There is no method(that I have found) of associating these objects with the streamed levels using blueprint.

Lets say I have a map, and it is spawned into the persistent level. For world wrap simulating a globe, I want to stream in copies of this map(and everything on it) as I move east or west so there is a seamless transition between one side of the globe and another.

Hi Rama,

Thanks for the updated plugin and the new nodes. I am now able to propagate a fire on a mesh based on where I click.

So when I click on a mesh (provided there are enough vertices on the mesh), it gets all the vertex locations. Using your closest vertex node, I create a source point for a flame emitter and spread it from there. I just got this to work early this week. Now comes my next challenge. My thesis is on “Material Based Fire Propagation & Degradation”. An object on fire degrades. And the degradation happens from the source point (i.e in this situation where I click) and spreads out. To do this, I first tried vertex painting in the level editor. Depending on the vertex colors, different textures are exposed. And this is done using the vertex color node in material editor. Problem is this is not dynamic. Neither material editor nor blueprint editor has a node that allows passing of vertex color information dynamically. If this was possible, I would be able to assign a color to each vertex based of your existing vertex information nodes. This would communicate with the material editor and dynamically change the textures. Can you please help create a node to do this?

Thanks!!!

CatchPhyre

You’d need a entirely different class for this, instead of static mesh, you’d need to use a Dynamic Mesh, which involves a lot of C++ coding :slight_smile:

I’ll think about it but your request is quite complicated.

Your better off using a dynamic material instance and regulating which parts of the material change to being on fire.

Look up ue4 burn effect / ue3 burn effect to see what people have done in the past.

Doing this at vertex level just in Blueprints is going to be an uphill battle I surmise.

the key part about a “static” mesh is that it is static, I can’t modify its vertex information at runtime, you need a dynamic mesh for that, which is not yet an official UE4 class.

Check out the C++ Dynamic Mesh thread for more info!

Rama

**New UMG Node

Get All Widgets of Class

Ideal for UMG Level Transitions**

I needed this node for Solus and so I am now sharing it with you!

The issue was that I could not save a reference to my new widget because it is loaded and then a level change occurs which resets all my HUD variables.

So I needed to access the widget after it was created dynamically, not relying on stored references within the HUD class.

I also did not want to have to store a reference to it in my Game Instance class cause then that leads to garbage collection issues.

I had to make the node for my own use and I have tested it as working in Solus!

**Now you can retrieve an array of any type of user-made UMG widget that is currently in your game at any time!
**


**Download**

https://wiki.unrealengine.com/File:VictoryPlugin.zip

C++ Code

Here’s what my C++ for this node looks like!



void UVictoryBPFunctionLibrary::GetAllWidgetsOfClass(UObject* WorldContextObject, TSubclassOf<UUserWidget> WidgetClass, TArray<UUserWidget*>& FoundWidgets)
{
	//Prevent possibility of an ever-growing array if user uses this in a loop
	FoundWidgets.Empty();
	//~~~~~~~~~~~~
	 
	if(!WidgetClass) return;
	if(!WorldContextObject) return;
	 
	UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject);
	if(!World) return;
	//~~~~~~~~~~~
	
	for(TObjectIterator<UUserWidget> Itr; Itr; ++Itr)
	{
		if(Itr->GetWorld() != World) continue;
		//~~~~~~~~~~~~~~~~~~~~~
		
		if(Itr->IsA(WidgetClass))
		{
			FoundWidgets.Add(*Itr);
		}
	}
}



**Pic**

(right click -&gt; open in new tab to see it better)
![GetAllWidgetsOfClass.jpg|1280x960](upload://k3rJSJemWVjAQ9p7eXZQVNYeJAl.jpeg)

Enjoy!

Rama

Thanks Rama, I will check up on the past works on burn effects in the meantime!

Good luck CatchPhyre!


New UMG node release, see just above!

![GetAllWidgetsOfClass.jpg|1280x960](upload://k3rJSJemWVjAQ9p7eXZQVNYeJAl.jpeg)

Rama

Rama - you probably want to add a call to GetIsVisible (which is being renamed to IsInViewport in 4.6), to limit returned widgets to only the top level viewport widgets, otherwise you’ll get all the nested ones too.

Great idea Nick, thanks for the info!

I will add a bool option to only retrieve top level widgets.

I actually intended that my node have the power to iterate over internal widgets in case that was something the BP user wanted to do deliberately :slight_smile:

But having an optional top level filter is a great idea!


**UMG, Get All Widgets Of Class

Updated!**


Now you have an optional bool filter to only return widgets that are at the top level, see [Nick Darnell's comment](https://forums.unrealengine.com/showthread.php?3851-(39)-Rama-s-Extra-Blueprint-Nodes-for-You-as-a-Plugin-No-C-Required!&p=172889&viewfull=1#post172889) for more information

My C++ Code For this Node



void UVictoryBPFunctionLibrary::GetAllWidgetsOfClass(UObject* WorldContextObject, TSubclassOf<UUserWidget> WidgetClass, TArray<UUserWidget*>& FoundWidgets,bool TopLevelOnly)
{
	//Prevent possibility of an ever-growing array if user uses this in a loop
	FoundWidgets.Empty();
	//~~~~~~~~~~~~
	 
	if(!WidgetClass) return;
	if(!WorldContextObject) return;
	 
	UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject);
	if(!World) return;
	//~~~~~~~~~~~
	
	for(TObjectIterator<UUserWidget> Itr; Itr; ++Itr)
	{
		if(Itr->GetWorld() != World) continue;
		//~~~~~~~~~~~~~~~~~~~~~
		
		if( ! Itr->IsA(WidgetClass)) continue;
		//~~~~~~~~~~~~~~~~~~~
		 
		//Top Level?
		if(TopLevelOnly)
		{
			//only add top level widgets
			if(Itr->GetIsVisible())			//IsInViewport in 4.6
			{
				FoundWidgets.Add(*Itr);
			}
		}
		else
		{
			//add all internal widgets
			FoundWidgets.Add(*Itr);
		}
	}
}



Pic

![71009bd806383a480cc409a36e116fe857cc7fd1.jpeg|924x531](upload://g7Fg1q0nVexk7Osutyh5CHV6WRj.jpeg)
♥

Rama

Rama , really need that you become a Epic developer and do it in the official release :stuck_out_tongue:
I would be not suprised

Hi Rama,

Does your “Get Static Mesh Vertex Locations” node gather vertex information for skeletal meshes? I noticed my scene doesn’t work with meshes with morph targets. For example, I have a blanket that has a morph target (before & after burning). I am unable to propagate fire on that. Vertex highlights do not appear over that morph target mesh while appearing on other normal static meshes. Is there a work around this?

Thanks,
CatchPhyre

I have to make that node for skeletal mesh vertex access at some point, will let you know when I do :slight_smile:

Rama