This is a follow-on from UseParentSpace for Relative Object Positioning and Scaling.
In the same way that child Objects can use the
UseParentSpace property to operate within a Parent's relative position and scale… spawners can benefit from the same functionality.
To help you work through this tutorial, first create a new blank project using the init script.
In general when specifying what object to spawn, the object is given co-ordinates in world space like:
Position = (35, 100, 0.0)
With relative positioning, the object that is spawned will be positioned relative to the Parent Object's Size (The Parent Object is one that has a spawner attached).
That can be confusing. Let's view it as a tree:
It is the Object to Spawn, that will use the
But before we get there, let's set up a spawner in the usual way using world coordinates.
Start by making a rain cloud that spawns raindrops. Here's a cloud for you to use:
Cloud object in config:
[Cloud] Spawner = RainSpawner Pivot = center Graphic = @ Texture = cloud.png Position = (0.0, -200.0, -0.1)
Then change the
Cloud in the create line in the code:
This will create a cloud object a little up from the centre of the screen. We haven't provided a spawner yet so it doesn't do anything. So define both the spawner and object to spawn with:
[RainSpawner] Object = RainDrop TotalObject = 0 ActiveObject = 1000 WaveSize = 5 WaveDelay = 0.016 ~ 0.03 ObjectSpeed = (0, 800) Rotation = 22.5 UseRelativeSpeed = true [RainDrop] Graphic = @ Texture = pixel Size = (1,20) ~ (1,40) Alpha = 0.3 ~ 0.8 Color = (255,255,255) Pivot = top AutoScroll = both DepthScale = true LifeTime = 1.0 Smoothing = true Position = (-50.0, 00.0, 0.0) ~ (90.0, 00.0, 0.5)
In the spawner config above, we're making
RainDrop objects, lots of them, in a fast down direction, but rotating the spawner by 22 degrees (plus using relative speed) to get a nice down-left direction for the rain.
RainDrop objects themselves, we vary their alpha transparency, stretched size and their starting position on screen between X = -50.0 to 90.0.
There is no image for the raindrops, we're just using a stretched pixel. That will do nicely.
The last step is to convert the positioning to be relative to the Cloud's size. This means changing the
Position property of the
RainDrop and setting
UseParentSpace to position:
[RainDrop] Graphic = @ Texture = pixel Scale = (1,20) ~ (1,40) Alpha = 0.3 ~ 0.8 Color = (255,255,255) Pivot = top AutoScroll = both DepthScale = true LifeTime = 1.0 Smoothing = true Rotation = 22.5 Position = (-0.3, 0.0, 0.0) ~ (0.45, 0.0, 0.5) UseParentSpace = position
Because the pivot of the
Cloud is centred, the coordinate range is (-0.5, -0.5) to (0.5, 0.5). I've adjusted the X positions to between -0.3 and 0.45 to bring the positions in a little to work nicer with the cloud itself.
The result should be the same: