MrWolf
MrWolf
SMSatisfactory Modding
Created by MrWolf on 12/3/2024 in #help-developing-mods
Shapez Code Ideas
No description
2 replies
SMSatisfactory Modding
Created by MrWolf on 11/30/2024 in #help-developing-mods
What do y'all think about this Conveyor Item Mesh Material
No description
25 replies
SMSatisfactory Modding
Created by MrWolf on 11/29/2024 in #help-developing-mods
Anyone know when ItemDesc Blueprints are loaded?
I am trying to dynamically create items using a set of base mesh's. In theory, I could create a new mesh, a new mesh descriptor... append a bunch of mesh descriptors to the new mesh descriptor. Then build the new mesh with the new descriptor. Subsequently I could in theory assign this to the conveyor mesh object of an itemdesc. I think I can do this to an instance of an itemdesc, so every item could in theory share that itemdesc. But I am floating the idea that for every unique item I should also have a unique ItemDesc. I think I can make them, but idk if I can register them.
25 replies
SMSatisfactory Modding
Created by MrWolf on 11/23/2024 in #help-developing-mods
C++ Pass by reference
I am very familiar with C and Firmware development. I've dabbled in C++ but for higher level programming at a professional level I use Python and GoLang the most. Could someone take a second to explain how pass by reference works in this specific case?
c++
bool GetStackFromIndex( const int32 idx, FInventoryStack& out_stack ) const;
c++
bool GetStackFromIndex( const int32 idx, FInventoryStack& out_stack ) const;
In theory... this should imply that if I make a FInventoryStack and pass it into this function, that my FInventoryStack will be operated on. That is to say, instead of using the instance of UFGInventoryComponent's memory, I have created a new block of memory that will be written to.
So either the stack gets copied over to my memory, or only modifications made to out_stack during the function call are written to my memory. I would think that would be exactly what we do not want. I would expect to have a function that returns me a pointer to the stack, so that we can call operations on that stack. Am I just not understanding how C++ works? Or maybe this is a weird case because I see an example later in the header file that I think might be what I'm after, but they are protected
c++
FInventoryStack& GetStackFromIndex( int32 idx );
c++
FInventoryStack& GetStackFromIndex( int32 idx );
and
c++
const FInventoryStack& GetStackFromIndex( int32 idx ) const;
c++
const FInventoryStack& GetStackFromIndex( int32 idx ) const;
My basic understanding is that when a reference is returned, unlike return by value which calls the copy-constructor, instead we pass back a reference to the memory. Depending on how CSS returned that variable there might be some issues tho. I really need to not copy memory all over the place. Hoping someone has some information.
11 replies
SMSatisfactory Modding
Created by MrWolf on 11/22/2024 in #help-developing-mods
Difference between UFGRecipe* and TSubclassOf< class UFGRecipe > as implemented by BuildableManufact
Anyone know why the BuildableManufacturer class holds both
/** Cached Recipe CDO to reduce calls.*/
UPROPERTY()
const UFGRecipe* mCachedRecipe;
/** Cached Recipe CDO to reduce calls.*/
UPROPERTY()
const UFGRecipe* mCachedRecipe;
and
/** The recipe we're currently running. */
UPROPERTY( SaveGame, Replicated, ReplicatedUsing = OnRep_CurrentRecipe, Meta = (NoAutoJson = true) )
TSubclassOf< class UFGRecipe > mCurrentRecipe;
/** The recipe we're currently running. */
UPROPERTY( SaveGame, Replicated, ReplicatedUsing = OnRep_CurrentRecipe, Meta = (NoAutoJson = true) )
TSubclassOf< class UFGRecipe > mCurrentRecipe;
My understanding is that the first, "UFGRecipe*" would allow any pointer to any UFGRecipe object, but "TSubclassOf< class UFGRecipe >", also allows pointers of children of UFGRecipe to be assigned to it. Functionally, I believe they are very similar... perhaps the advantage of TSubclassOf as implemented here is simply to avoid casting? Maybe the reason both exist, is because classes that inherit UFGRecipe can be held in mCurrentRecipe, and instead of casting those as UFGRecipe where UFGRecipe is required, we cached the cast? Idk... I am way out on a limb on this
19 replies
SMSatisfactory Modding
Created by MrWolf on 11/21/2024 in #help-developing-mods
Performance Impact Question
Just a quick question what the best method for picking items off belts is, when completing custom recipes. I'd guess using the native manufacture implementation would be the best. Looking at an ancient copy of refined power they do something like this
c++
void ARPMPHeaterBuilding::CollectItems(float dt)
{
if (InputFuelConveyor)
{
for (auto AllowedItem : mAllowedFuelItems)
{
if (CanStoreItemInInventory(GetMPInventory(), mInputInvIndex, AllowedItem, 1))
{
FInventoryItem outItem;
float offset = 0.0f;
bool pulledItem = InputFuelConveyor->Factory_GrabOutput(outItem, offset, AllowedItem);
if (pulledItem)
{
StoreItemInInventory(GetMPInventory(), mInputInvIndex, AllowedItem, 1);
}
}
}
}

if (InputFuelPipe)
{
for (auto AllowedItem : mAllowedFuelItems)
{
if (CanStoreItemInInventory(GetMPInventory(), mInputInvIndex, AllowedItem, 100))
{
FInventoryStack outStack;
bool pulledItem = InputFuelPipe->Factory_PullPipeInput(dt, outStack, AllowedItem, 100);
if (pulledItem)
{
StoreItemInInventory(GetMPInventory(), mInputInvIndex, AllowedItem, 100);
}
}
}
}
}
c++
void ARPMPHeaterBuilding::CollectItems(float dt)
{
if (InputFuelConveyor)
{
for (auto AllowedItem : mAllowedFuelItems)
{
if (CanStoreItemInInventory(GetMPInventory(), mInputInvIndex, AllowedItem, 1))
{
FInventoryItem outItem;
float offset = 0.0f;
bool pulledItem = InputFuelConveyor->Factory_GrabOutput(outItem, offset, AllowedItem);
if (pulledItem)
{
StoreItemInInventory(GetMPInventory(), mInputInvIndex, AllowedItem, 1);
}
}
}
}

if (InputFuelPipe)
{
for (auto AllowedItem : mAllowedFuelItems)
{
if (CanStoreItemInInventory(GetMPInventory(), mInputInvIndex, AllowedItem, 100))
{
FInventoryStack outStack;
bool pulledItem = InputFuelPipe->Factory_PullPipeInput(dt, outStack, AllowedItem, 100);
if (pulledItem)
{
StoreItemInInventory(GetMPInventory(), mInputInvIndex, AllowedItem, 100);
}
}
}
}
}
Which I think can be optimized a bit... but if every single building is running O(n) loops... I figure this will get pretty slow pretty fast. I could improve on this by not looping if we already have an item in the building, so we don't need to check if the item on the belt is in our allow list, and instead just need to validate if it is what is loaded. Similarly this function can be skipped entirely if our inventory is full. Simple stuff like that... I'm sure a more recent version of refined power has much more sophisticated code...
50 replies
SMSatisfactory Modding
Created by MrWolf on 11/19/2024 in #help-developing-mods
Referencing blueprint widget elements that aren't variables
Hello, Im trying to add a version of the BPW_Production display widget to my widget. Long story short... Im at the bottom of the stack trying to figure out how to access input items. I noticed that if I make an instance of BPW_Producion_Display_Module_InputOutput, I cannot access mcontent. However if I make a new blueprint that inherits UserWidget, and copy over everything from BPW_Produciton_DisplayModule_InputOutput, I can access that canvas no problem. The only difference between the two would be that BPW's inherits BPW Production Display Module, and then UserWidget. Why might I be able to access mcontent one way but not the other?
7 replies
SMSatisfactory Modding
Created by MrWolf on 11/14/2024 in #help-developing-mods
Widget recipe selection.
I've been digging through the widget nodes. I havent been able to figure out a good method to generate a list of recipes used by a building type. The manufacturing widget does this with a stubbed function. Is there a way to call down into that function perhaps? The best I've come up with so far is to grab a list of recipes from each category, and then cycle through the recipes and filter by which are buildable by class of type self.
It might be better to write that up as a subsystem or cache it somehow... But I figure there has got to be a better method... Or perhaps not, and that may be why most widget mods don't carry recipe selection.
21 replies
SMSatisfactory Modding
Created by MrWolf on 11/10/2024 in #help-developing-mods
Animation Help
No description
4 replies