====== UseParentSpace for Spawners using Relative Position and Scale ======
This is a follow-on from [[en:tutorials:objects:useparentspace|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.
{{page>snippets:init_new_project&nofooter&noeditbutton}}
===== Objects and Spawners =====
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:
* Main Object
* Spawner connected
* Object to Spawn
It is the Object to Spawn, that will use the ''UseParentSpace'' property.
But before we get there, let's set up a spawner in the usual way using world coordinates.
===== Making it rain =====
Start by making a rain cloud that spawns raindrops. Here's a cloud for you to use:
{{ tutorials:spawners:cloud.png?nolink |}}
Define a ''Cloud'' object in config:
[Cloud]
Spawner = RainSpawner
Pivot = center
Graphic = @
Texture = cloud.png
Position = (0.0, -200.0, -0.1)
Then change the ''Object'' to ''Cloud'' in the create line in the code:
orxObject_CreateFromConfig("Cloud");
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 ''RainSpawner'' spawn ''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.
For the ''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.
{{ tutorials:spawners:raining.png?nolink |}}
===== Relative Spawner Positioning =====
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:
{{ tutorials:spawners:raining.png?nolink |}}
==== Further information ====
- Ordered List Item[[en:tutorials:objects:useparentspace|UseParentSpace for Relative Object Positioning and Scaling]]
- [[en:orx:config:settings_structure:orxobject|Object Configuration]]