Announcement

Collapse
No announcement yet.

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

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Originally posted by Rama View Post
    Can you explain / show a pic of exactly which settings you would like exposed to runtime BP modification?

    Of course

    Click image for larger version

Name:	soundMix.jpg
Views:	1
Size:	61.0 KB
ID:	1081040

    Comment


      Originally posted by John Alcatraz View Post
      Thanks a lot TK-Master for the console output node and thanks Rama for including it

      Could you also make this node being able to save the image not only to a PNG but also to a Texture2D which can be used in the game?
      I will add that to my list

      Originally posted by The_Shane View Post
      [ATTACH=CONFIG]45757[/ATTACH] Woo, I know there's a C++ plugin for Voronoi that uses Fortune's Algorithm, but Calcs Closest Point to Source Point + SavePixels(if I want an image) made it soo easy to build a component for Voronoi diagrams!
      That's awesome The_Shane! Thanks for sharing!



      Rama

      Originally posted by LuxFlux View Post
      Hello Rama,

      I am interested in better understanding how the "Visibility Get Rendered Actors" node works. I am attempting to use it to get all the actors seen by my camera, but it only outputs emitter actors, whereas I am most interested in static mesh actors. Am I misunderstanding the intended usage of this node? If this question should be asked in a different place, please let me know. Thanks!
      Added to my list of things to investigate/explain further at my next opportunity

      Originally posted by RoadStar View Post
      Hi, Rama!

      First of all, you're my star! You doing really priceless job!

      Can I ask you only one thing? Could tell me please, why I am getting this error? Are you compiling from different source?

      Thank you in advance!
      Hee hee!

      Are you sure you are compiling for 4.8? Because I believe RESULT_PARAM is new in 4.8.

      Checkout KismetArrayLibrary.cpp in 4.7 vs 4.8 and try both ways and let me know!

      Make sure you delete your intermediate and sln and suo and sdf and switch engine version to 4.8 from your .uproject.

      It should then work

      Originally posted by KWS View Post
      Thank you so much for this Plugin!
      You're welcome!

      Welcome to the forums KWS!



      Rama

      Originally posted by bzxo View Post
      Of course

      [ATTACH=CONFIG]46142[/ATTACH]
      I will investigate exposing the EQ settings soon as I can

      Originally posted by KingDragonX View Post
      Hi Rama,
      your blueprint library is fantastic.
      But i have a build error when packaging project for shipping for win64.
      Code:
       LINK : fatal error LNK1181: cannot open input file 'D:\Epic Games\4.8\Engine\Plugins\Editor\VictoryPlugin\Binaries\Win64\UE4-VictoryBPLibrary-Win64-Shipping.lib'
      can you help me please?
      Thanks in advance
      KDX
      It looks like you put my plugin at the Engine level? Engine\Plugins?

      Please ensure that you include my plugin only at the project level, and let me know if that goes better!

      ~~~

      Summary

      Lovely to hear from you all!



      Rama
      Last edited by Rama; 07-03-2015, 03:06 PM.
      100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

      UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

      Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

      Comment


        Originally posted by Rama View Post
        Hee hee!

        Are you sure you are compiling for 4.8? Because I believe RESULT_PARAM is new in 4.8.

        Checkout KismetArrayLibrary.cpp in 4.7 vs 4.8 and try both ways and let me know!

        Make sure you delete your intermediate and sln and suo and sdf and switch engine version to 4.8 from your .uproject.

        It should then work

        Rama
        Thank you, dear Rama!

        For advise and for your plugin!

        It's been my bad, not switched engine version for .uproject! I definitely shall sleep more

        You're the best!

        Comment


          Hi Rama,
          My first static function "TryToExecuteConsoleCommand" , maybe it can help someone

          Click image for larger version

Name:	test9.PNG
Views:	2
Size:	27.4 KB
ID:	1081157
          .h

          Code:
          public:
          		UFUNCTION(BlueprintCallable, Category = "Static Exposed Functions")
          		static bool TryToExecuteConsoleCommand(APlayerController* PC, const FString &Command, bool DebugMessage);
          .cpp

          Code:
          bool UMyObject::TryToExecuteConsoleCommand(APlayerController* PC, const FString &Command,bool DebugMessage)
          {
          	if (PC != NULL)
          	{
          		FString CommandStr = PC->ConsoleCommand(Command, false);
          		bool Test = !CommandStr.Contains("Command not recognized");
          		if (DebugMessage)
          		{
          			GEngine->AddOnScreenDebugMessage(0, 15, Test ? FColor::Green : FColor::Red, Test ? "Command Found" : "Command Not Found");
          		}
          		return Test;
          	}
          	else
          	{
          		if (DebugMessage)
          		{
          			GEngine->AddOnScreenDebugMessage(0, 1.f,  FColor::Red, "Player Controller is not valid");
          		}
          	}
          
          	return false;
          }
          Last edited by Mhousse1247; 07-04-2015, 06:27 PM.
          Website [ LINK ]
          Twitter [ LINK ]
          Support ! [ LINK ]

          Comment


            Originally posted by Rama View Post
            I will investigate exposing the EQ settings soon as I can
            You're the best! <3

            Comment


              Originally posted by RoadStar View Post
              Thank you, dear Rama!

              For advise and for your plugin!

              It's been my bad, not switched engine version for .uproject! I definitely shall sleep more

              You're the best!
              Woohoo! I am glad my solution worked out for you, yay!

              Definitely gotta get enough sleep!

              Hours spent sleeping = less hours spent debugging stuff created while half-awake!

              Originally posted by bzxo View Post
              You're the best! <3
              Hee hee!

              * blushes *



              Rama
              Last edited by Rama; 07-08-2015, 03:46 PM.
              100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

              UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

              Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

              Comment


                Heya Rama. Been a bit since I was able to touch base (work has been keeping me rather occupied), but I was wondering if you'd had a chance to give any more thought to adding the ability to take a Texture2D reference and extract a pixel array from it? I think that would be an extremely useful extension of your existing LoadTexture2DFromFile function. Keep up the awesome work! Cheers,

                J^2

                Comment


                  Hey Rama,

                  I just wanted to say big THANK YOU for your vertex access blueprint nodes. They have been instrumental towards the success of my thesis defense.

                  Using your vertex nodes, I created a variation to Far Cry 3's fire propagation system. My thesis is called Material Based Fire Propagation & Degradation that spreads fire based on underlying material surface. The system developed to prove the thesis is an intelligent tool that spreads fire without requiring manual scripting like spline paths etc. All the user has to do is click on an object and fire will start from there and spread based on the material properties (plastic, wood, paper etc). This tool now helps designers build pyro levels quick without having to manually plot spawning points for fire.

                  If there is some way to share my google drive with you, I can provide access to my thesis system (exe) and my presentation slides. That way you can see how your nodes have actually turned out.

                  Cheers,
                  CatchPhyre
                  Last edited by CatchPhyre; 07-08-2015, 07:47 PM.

                  Comment


                    Hi, has anyone tried to use the Victory plugin with the nVidia branches, I can't make my game compile, when I include the Victory plugin. (It compiles fine, when I delete the Victory folder from Plugins in my project.)
                    Last edited by Number47; 07-09-2015, 02:56 PM. Reason: Clarification

                    Comment


                      Hiya Rama. So I'm just now getting around os using your read texture from file pixels function in earnest and I'm finding that it seems to be slowing my function down significantly. If I bypass the Get Pixel node in my function, performance triples or quadruples. Is this a known issue or is that just the nature of the beast? Is there anything I can do to optimize it? If you need details or want the project I'm working with I would be happy to send it your way. Thanks again for all the awesome work and tools you've provided. Cheers!

                      J^2

                      Edit: I was able to track this down to the resolution of the heightmap I was using. If I use a 512x512 image, it takes one or two seconds. If I use a 2K image, it takes 30 seconds. Which makes sense as a 512x512 image is 262,144 pixels but a 2K image is 4,194,304 pixels, i.e. a non-linear increase. That being said, is there anything that can be done to optimize the performance of this function? If not, no worries. But if so, that would be awesome since it is such a useful tool. Thank you again so much for both making it and then giving it away for free! Cheers again!
                      Last edited by J. J. Franzen; 07-10-2015, 05:25 PM.

                      Comment


                        Has anyone tried using Rama's .ini writing nodes to modify values in engine-generated ini files (like key mappings and visual settings)? Or does it only work with custom .ini variables?

                        Comment


                          Originally posted by J. J. Franzen View Post
                          I was wondering if you'd had a chance to give any more thought to adding the ability to take a Texture2D reference and extract a pixel array from it? I think that would be an extremely useful extension of your existing LoadTexture2DFromFile function. Keep up the awesome work! Cheers,

                          J^2
                          Yes its a great node idea J^2 ! I look forward to working on it at my next opportunity!

                          Nice to hear from you!

                          Originally posted by J. J. Franzen View Post
                          Edit: I was able to track this down to the resolution of the heightmap I was using. If I use a 512x512 image, it takes one or two seconds. If I use a 2K image, it takes 30 seconds. Which makes sense as a 512x512 image is 262,144 pixels but a 2K image is 4,194,304 pixels, i.e. a non-linear increase. That being said, is there anything that can be done to optimize the performance of this function? If not, no worries. But if so, that would be awesome since it is such a useful tool. Thank you again so much for both making it and then giving it away for free! Cheers again!
                          To make it any faster I'd need multi-threading powers within the BP node, the issue is just how big the array becomes (4 million+) and the fact that I dont have an easy way to break up the work within a static function context where the user expects the output as soon as the node is executed

                          Rama

                          Originally posted by Number47 View Post
                          Hi, has anyone tried to use the Victory plugin with the nVidia branches, I can't make my game compile, when I include the Victory plugin. (It compiles fine, when I delete the Victory folder from Plugins in my project.)
                          I need to see the compile errors / output log errors that you're getting in order to help further, I am including PhysX libraries in the plugin.



                          Originally posted by RhythmScript View Post
                          Has anyone tried using Rama's .ini writing nodes to modify values in engine-generated ini files (like key mappings and visual settings)? Or does it only work with custom .ini variables?
                          My ini file nodes specifically work with Game.ini (comes from DefaultGame.ini), so you cant modify vars in DefaultEngine / Saved/Config/[OS]/Engine.ini

                          I chose Game.ini simply because Engine.ini is full of lots of stuff and the intent of this node was to provide a space to make new vars of your own that are game specific.

                          To modify config vars you can type them into the console (or use ExecuteConsoleCommand), example:

                          Code:
                          r.PostProcessAAQuality 4


                          Rama
                          Last edited by Rama; 07-11-2015, 01:11 PM.
                          100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

                          UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

                          Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

                          Comment


                            Rename / Move Most Recent Screen Shot

                            Click image for larger version

Name:	MoveRenameMostRecent.jpg
Views:	3
Size:	331.9 KB
ID:	1081570

                            Dear Community,

                            New node for you!

                            This node will move / rename the most recently taken screenshot!

                            So the intended work flow is

                            1. Exec Console Command -> "HighResShot 2" or "shot showui"

                            2. Possibly put in a short Delay node

                            3. Use my new node! ScreenShots Move Rename Most Recent!

                            ~~~

                            More Power for You in BP

                            Now you can specify an absolute path directory and also file name for the most recent screen shot, and it will be relocated for you!

                            So please note you can only do this after you create the image using UE4's console commands.

                            ~~~

                            Bonus For You

                            You can specify a destination folder that does not exist yet and my node will create it for you!

                            This is great for if you delete your custom screen shots folder and expect my node to work anyway!

                            My node will!



                            ~~~

                            High Res vs Regular Screen Shots

                            You can filter for High Resolution and regular screen shots independently using my node!

                            So if you have High Res selected, ONLY High Resolution screenshots are considered when sorting by file time.

                            Otherwise, if this is unchecked, I will ONLY look for regular screenshots taken with "shot showui"



                            ~~~

                            Keep in Same Directory?

                            To keep the file in the same directory, use my new Paths node that retrieves your project's ScreenShot directory!

                            ~~~

                            Pro Tip

                            If you have a bunch of shots, you can:

                            1. use my node in a for loop with a break and a max count of 1000, (or while loop if you are feeling confident)

                            2. Ensure that you are moving the files OUT of their current directory (otherwise for loop will run to its limit)

                            3. The break condition is when my new node returns false, so just plug the false end of the branch right back into the break condition!

                            This will work because my node is only checking the dates of the files that are within the screenshots directory, so as you keep moving the files out, my node will keep finding the new most recent picture!

                            ~~~

                            My C++ Code For You

                            I had to write a lot of custom File Operations code to fulfill this request, so a lot of the functions you see in this node are not stock UE4 code.

                            Code:
                            bool UVictoryBPFunctionLibrary::ScreenShots_Rename_Move_Most_Recent(
                            	FString& OriginalFileName,
                            	FString NewName, 
                            	FString NewAbsoluteFolderPath, 
                            	bool HighResolution
                            ){ 
                            	OriginalFileName = "None";
                            
                            	//File Name given?
                            	if(NewName.Len() <= 0) return false;
                            	
                            	//Normalize
                            	FPaths::NormalizeDirectoryName(NewAbsoluteFolderPath);
                            	
                            	//Ensure target directory exists, 
                            	//		_or can be created!_ <3 Rama
                            	if(!VCreateDirectory(NewAbsoluteFolderPath)) return false;
                            	
                            	FString ScreenShotsDir = VictoryPaths__ScreenShotsDir();
                            	
                            	//Find all screenshots
                            	TArray<FString> Files;	  //false = not recursive, not expecting subdirectories
                            	bool Success = GetFiles(ScreenShotsDir, Files, false);
                            	
                            	if(!Success)
                            	{
                            		return false;
                            	}
                            	
                            	//Filter
                            	TArray<FString> ToRemove; //16 bytes each, more stable than ptrs though since RemoveSwap is involved
                            	for(FString& Each : Files)
                            	{
                            		if(HighResolution)
                            		{
                            			//remove those that dont have it
                            			if(Each.Left(4) != "High")
                            			{
                            				ToRemove.Add(Each);
                            			}
                            		}
                            		else
                            		{ 
                            			//Remove those that have it!
                            			if(Each.Left(4) == "High")
                            			{
                            				ToRemove.Add(Each);
                            			}
                            		}
                            	}
                            	
                            	//Remove!
                            	for(FString& Each : ToRemove)
                            	{
                            		Files.RemoveSwap(Each); //Fast remove! Does not preserve order
                            	}
                            	
                            	//No files?
                            	if(Files.Num() < 1)
                            	{ 
                            		return false;
                            	}
                            	
                            	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            	// Rama's Sort Files by Time Stamp Feature
                            	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            	//Sort the file names by time stamp
                            	//  This is my custom c++ struct to do this,
                            	//  	combined with my operator< and UE4's
                            	//			TArray::Sort() function!
                            	TArray<FFileStampSort> FileSort;
                            	for(FString& Each : Files)
                            	{
                            		FileSort.Add(FFileStampSort(&Each,GetFileTimeStamp(Each)));
                            		
                            	}
                            
                            	//Sort all the file names by their Time Stamp!
                            	FileSort.Sort();
                            	
                            	//Biggest value = last entry
                            	OriginalFileName = *FileSort.Last().FileName;
                            	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                            
                            	    
                            	//Generate new Full File Path!
                            	FString NewFullFilePath = NewAbsoluteFolderPath + "/" + NewName + ".bmp";
                            	
                            	//Move File!
                            	return RenameFile(NewFullFilePath, ScreenShotsDir + "/" + OriginalFileName);
                            }
                            ~~~

                            How It Works

                            The core feature of my logic and this node is that I used a custom C++ struct in order to sort all of the files by date!

                            I do this in a super-efficient way, using UE4's TArray::Sort function which leverages all of Epic's hard work to create a fast sorting function!

                            I defined the C++ operator< for my custom struct so that UE4 could do the sorting for me!

                            In addition I have developed my own File I/O library since my time in the UE4 Beta program.

                            So I had all the supporting functions I needed!

                            ~~~

                            C++ Code Speed

                            Please note that in my internal file sorting system I do not duplicate the FString data! I refer to it via pointer, and use the FDateTime as the only data I access.

                            So essentially my custom C++ struct is a FDateTime wrapper for a FString ptr so that UE4 can sort the files for me like Lightning!

                            ~~~

                            Latest plugin download on the UE4 Wiki: (7.93 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.

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

                            Enjoy!



                            Rama
                            100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

                            UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

                            Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

                            Comment


                              Originally posted by Rama View Post
                              To modify config vars you can type them into the console (or use ExecuteConsoleCommand), example:

                              Code:
                              r.PostProcessAAQuality 4


                              Rama
                              True but this won't work for writing lines to Input.ini, which is necessary for adjusting key mappings.

                              Comment


                                Originally posted by Rama View Post



                                I need to see the compile errors / output log errors that you're getting in order to help further, I am including PhysX libraries in the plugin.



                                Rama
                                I am at my laptop right now, but the compiler complains that it can't find the Physx include libraries. I will send the log when I get back to my devmachine.

                                Comment

                                Working...
                                X