C# ThingMaker - How do I....

Started by ItchyFlea, June 04, 2014, 01:40:08 AM

Previous topic - Next topic

ItchyFlea

How do I tell ThingMaker to not only make a certain number of a thing, but also how do I tell it where to place said thing?

Basically I'm trying to make something where a colonist places sawdust in a hopper connected to a building, and after a set period of time, 10 units of sawdust is removed from the hopper, and 10 units of compost is placed next to the building.
Everything in my code seems to work (No errors, and the correct number of sawdust is removed from the hoppers at the correct interval, just nothing appears.)

Closest thing I know of that acts similar to what I'm trying to make is the metal smelter in IndustrialRIM.
All my mods are licensed under a Attribution-NonCommercial-ShareAlike 4.0 International
Ask for permission before using in ModPacks

Click here for a list of the mods I've created

Justin C

ThingMaker used to be used to spawn things into the world, but that has changed in Alpha 4. The new way of spawning things is with GenSpawn.
GenSpawn.Spawn(Thing, Location);

Just to be clear, you still have to make the items with ThingMaker first. But then you need to tell the game to actually spawn that item in the world with GenSpawn.

And in case you don't yet know how to find a place for them to spawn, you can use GenSquareFinder to find spawn points for you.
IntVec3 loc = GenSquareFinder.RandomStandableLOSSquareNear(SpawnLocationCenter, Radius);

I think that should be everything you need to know to accomplish that.

ItchyFlea

#2
When it comes to C#, I quite literally know how to read/understand German better than I can read/understand code.
All the code I do make is pretty much taken directly from assembly-csharp.dll with ILSpy.

How do I get it to set the 'SpawnLocationCenter' as where the building is? I tried this.loc but it says: Keyword 'this' not available in current context.

Also, how do I get GenSpawn to make 10 of the item in one go, or will I need to have GenSpawn run 10 times?
All my mods are licensed under a Attribution-NonCommercial-ShareAlike 4.0 International
Ask for permission before using in ModPacks

Click here for a list of the mods I've created

Haplo

If you want to spawn a stack of resources you can do:

IntVec3 pos = this.Position;
GenSpawn.Spawn(thingDef, pos).stackCount = 10;


or in single steps

Thing thing = GenSpawn.Spawn(thingDef, this.Position);
thing.stackCount = 10;


this.Position should work as long as you call it from inside an Building class or Thing class as they always have the property Position.

ItchyFlea

I think this is why I should leave programming up to people who actually know what they're doing, because I'm clearly not one of those people. :)
Thank you for the help.
All my mods are licensed under a Attribution-NonCommercial-ShareAlike 4.0 International
Ask for permission before using in ModPacks

Click here for a list of the mods I've created

Justin C

Quote from: ItchyFlea on June 04, 2014, 07:05:11 AM
I think this is why I should leave programming up to people who actually know what they're doing, because I'm clearly not one of those people. :)
Thank you for the help.
None of us who do know what we're doing started out that way. :P

Just keep at it and you will get the hang of it.