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

**Two New BP Nodes

Get and set Full Screen Mode Using Convenient Enum!**

This node lets you choose between regular full screen, which involves that brief black screen and then the switch to absolute fullscreem,

and windowed full screen, which most people prefer these days!

There’s a slightly mysterious third option in this list because it is still in Epic’s code base, which is Windowed Full Screen High Quality. The only comment in Epic’s code base is that HQ windowed full screen can cause some performance issues while switching, or something like that.

In any case, I am providing you with all 3 options to experiment with as you wish!

After setting the Full Screen type you will still have to use console command -> “setres 1920x1080f” where f means fullscreen, if your window is not full screen already!


**Rama's Joy Graphics Library**

This node is a sneak peak at the Graphics Library I prepared for Solus and would like to post on the marketplace as soon as plugins are being accepted by Epic for the marketplace.

Enjoy!

Rama

PS: This node brought to you by Isaac's request:


[QUOTE=Isaac Nichols;140821]
Hi Rama,

How simple would it be to create a function that lets you get the current screenmode. There are 3 screen modes that I believe exist 0 - 1 and 2. It would be nice to check the screen mode against a function grabbing the correct info, because the current fullscreen command seems to get lost and sometimes cycles through the 3 options. Maybe an enum so you can check against it and toggle to the next mode.

Isaac
[/QUOTE]

Epic, Hire Rama already, (before he is snap by rival company) !

Anyway, I have download & try some of the nodes. Thanks.

However, a question, do the

~ Change Hue

~ Change Saturation

suppose to work in the Material editior. I cannot seems to pull out these nodes.

Awesome thanks. I can’t wait to see your marketplace store.

:slight_smile:

I thought that too but wasn’t really sure.

I’ll use the binary save - didn’t even think of that :stuck_out_tongue: Good idea.

Haha no rival company is getting me!

UE4 for me for always!

These nodes are for Texture2D, not for the material editor :slight_smile:

They are also not very efficient, you’re better off making a material and spawning a Dynamic Material Instance instead :slight_smile:

Two New Nodes As Of 7/28/14

**Set Max Frame Rate

Set Frame Rate To Be Unbound!**

These two nodes can be run at any time during game time!

Can be part of your options menu or for testing how game behaves at low frame rates, or what the max frame rate possible is with only your hardware limits!

:slight_smile:

framerateunbound.jpg

Enjoy!

UMG Tutorial

I just posted my very first UMG tutorial, and the very first wiki about UMG in the Tutorials section!

As Mentioned in Hourence’s Twitch Stream

This is the same node you could see in the Epic twitch stream with Hourences just last week!

I told Hourences I could give him the real system time and he did wonders with it!

Get Current Operating System Time

annnnd

Get Milliseconds/Seconds/Minutes/Hours Passed Since Previous Recorded Time!

These two nodes can be used to

  1. obtain the current local Operating System Time for your computer.

  2. obtain the amount of milliseconds/seconds/minutes/hours that have passed since the time you recorded for the first node! You can stores as many times as you want! They are simply stored as a string!

You can use these two nodes to record down to the sub-millisecond the amount of time passing between game events!

**The milliseconds portion is a float, so you can record far smaller than 1 millisecond!
**

In the attached picture I record the amount of real-world time between two key presses :slight_smile:

Enjoy!

Rama

4 Array Analysis Nodes

**Max of Float Array

Max of Int Array

Min of Float Array

Min of Int Array**

Returns the max/min value as well as the index in the array of that value!

See pic!

Enjoy!

Rama

[FONT=Comic Sans MS]Featured BP Nodes
**
Trace Data**

I’ve designed several BP nodes to make doing traces easier!

Again you can download and use these nodes as a plugin, even in non-C++ project!

Get Trace Data From Skeletal Mesh Socket

:slight_smile:

Rama

Taking Simple BP Node Requests

Anyone have a simple thing they’d like to have added to Blueprints?

Rama

What about more array manipulating nodes?

New Node as of 9/25/14

[COLOR="#0000FF"]Draw Thick Circle With Axis Control[/COLOR]

New node for you!

With this node you can draw circles!

And you can control their thickness, as well as how many points make up the circle!

You can also have axis control!

So you can draw circles horizontally, vertically, at angles, any way you like, with convenient BP node inputs!

See pics!

5822935f35c36159d840019047035a68d7240a45.jpeg

af68277ba636b7e04fc6af9b982616b2340402e4.jpeg

Rama

I don’t think I can use this yet but that draw circle system looks awesome!

Does this work on Mac? If it does it looks like a dream come true.
Also, is there a clear list of all the available nodes included in it with a brief description? I know there’s a lot of that here but it’s kinda hard to scroll through on multiple pages.


**Mac**

Yes! The draw circle will work on Mac!

UE4 has its own platform-agnostic rendering system and my Draw Circle BP node uses this system.

Rama’s BP List

Install my plugin (it’s free) and right click in any blueprint and type into the search filter “Victory”

Make sure you dont have a pin selected/dragged from, just regular right click, context sensitivity shouldn’t matter.

:slight_smile:

I put all my nodes under one category heading so they are easy to find :slight_smile:


**50-60 BP Nodes For You**

I can't actually write out the whole list here in this thread though cause there's 50-60+ of them now :) (I've lost count)

Rama

Hello Rama,

I may have something for your consideration.

Firstly, I was using your get Viewport Center & Set Mouse Position BP nodes to force the mouse cursor to center to screen (to be same location as the First person camera crosshair).

The reason I did that was so I can use the

-Enable Click events
-Enable Mouse Over Events

in first person view.

They worked fine, & you can highlight & pick objects like you are in the editor or the poker game using the first person camera view. Since the mouse is set the same location as my crosshaor, it appears that I am interacting with objects with the cross hair, but actually using the mouse (which is of course hidden).

However, I met with a major issue (while will surely be an issue in a release game), is that the mouse stayed locked to the center of viewport, even when you alt-tab to other applications! I can set a bool or condition unlock it on certain conditions (like pressing escape or exit), but I think in the end, its too risky in a released game, & I am scraping this method of using using mouse over event to detecting item & picking up item in lie of sight, which is s shame as its trace very well, no matter if the object is big or small.

I am now exploring the raytrace options of detecting objects in game. However, I thought it would really be useful if you can made a

-Enable Click events
-Enable Cursor Over Events

for the first/third person camera cursor. I think it will really be helpful for many people.

Solution Already Exists

I already have an easy solution for this!

I have a node that lets you perform actions if the UE4 game is not the foreground window of the OS ! This works in packaged games!

So you are setting the mouse cursor to be center of screen, you can use my node to stop doing that if the user tabs out / the ue4 game is not the foreground window any more

I have pictures of this node here:


**Better Solution**

Why are you not just getting the center of the viewport and using the player controller deproject node to get the world space position of center of screen, and then tracing in the direction of the camera?

steps

1. get viewport center of screen
2. get player controller 0 -> get deprojected position (screen to world)
3. get the viewing rotation of the player's camera and trace in that direction
(rotation->As X Vector)

You can use my tracedata nodes to simplify the tracing process.


**then you dont need to set the mouse at all!**


**Victory BP Node ~ Get Center of Viewport**

I already gave you a node in my most recent download (if you dont have it in your version of the Victory BP Library Plugin) to get the viewport center!

So just follow my 3 steps above and you are set, no mouse cursor involved, as long as it is the center of the screen you want



```


bool UVictoryBPFunctionLibrary::**Viewport__GetCenterOfViewport**(const APlayerController * ThePC, float & PosX, float & PosY)
{


```




Rama

I am using the tracing solution now, so all (mostly) is good. The node that let you perform actions if the UE4 game is not the foreground window of the OS will be useful in a package game. Thanks.

@Rama, here’s another node that might be useful with the other texture related nodes.

It uses Zoid’s Dynamic Texture update method, and lets you pass in an array of FColors as the texture data.

I have it set here to do the whole texture at once because supposedly sub-regions don’t work, but I haven’t tested that yet. I’ve tested out the updating in general and it does work, though some of the streaming settings on the UTexture2D need to be set (so it may not work on UTexture2Ds that come out of the TextureFromDisk node, without a minor change there).

If sub-regions do work, it’d be really nice to change this to pass in the region data (source X/Y, dest X/Y, basically).

If you ever figure out how to raycast and get a UV coordinate, this would be the perfect second piece to allow for dynamic decals on skinned meshes (the update happens in the render thread, and is quite fast).

A new, community-hosted Unreal Engine Wiki - Announcements and Releases - Unreal Engine Forums (UpdateTextureRegions is what you want)


	
        /** Updates a UTexture2D* from an FColor array.
	* Update texture from color data.
	* @param ColorData		Array of FColors to update this texture with. Array is assumed to be the same dimensions as texture, otherwise this call will fail.
	* @param Texture		Texture to update.
	*/
	UFUNCTION(BlueprintCallable, Category = "TextureFromDisk")
	static void UpdateTextureFromColorData(TArray<FColor>& ColorData, UTexture2D* Texture);


And the definition:



void UTextureFromDiskFunctionLibrary::UpdateTextureFromColorData(TArray<FColor>& ColorData, UTexture2D* Texture)
{
	// Sanity checks.
	if (!Texture)
		return;

	if (ColorData.Num() <= 0)
		return;

	// Update region.
	FUpdateTextureRegion2D *region = new FUpdateTextureRegion2D(0, 0, 0, 0, Texture->GetSurfaceWidth(), Texture->GetSurfaceHeight());

	// Call the render command.
	UpdateTextureRegions(Texture, 0, 1, region, Texture->GetSurfaceWidth() * 4, 4, (uint8*)ColorData.GetTypedData(), false);
}

Right now the way it’s set up it will leak the FUpdateTexture2D - so you may want to change UpdateTextureRegions to free the FUpdateTextureRegion2D but NOT the SrcData pointer, because that refers to your TArray of FColors, which you don’t want freed.

To fix that, change this in UpdateTextureRegions


	
	if (bFreeData)
	{
		FMemory::Free(RegionData->Regions);
		FMemory::Free(RegionData->SrcData);
	}


to this:



	if (bFreeData)
	{
		FMemory::Free(RegionData->Regions);
	}


If you change this, make sure to change the last parameter for UpdateTextureRegions to be true, so it will actually free the FUpdateTextureRegion2D.