Objects are frequently created at the start of major scenes, often at the location specified by a world editor.
Sometimes you need to create objects at a certain position and angle in relation to another; such as producing dust under skidding tyres, an event indicator ahead of the camera or a construction at a user specified coordinate.
Use of rotate and position object commands can get tedious and time consuming for larger projects with 100s of entities.
The purpose of the following code is to perform a creation, instancing or clone job on an object at a location without repeating redundant statements in wordy instructions; doing more with less code, and in somecases without having to be specific.
The names of the functions are self explanitory. You may use as many of the functions as you feel you need, they do not reference each other.
Modification is a recommendation to best suite your needs.
Keep me posted with your attempts to use it.
Rem Create, clone or instance objects at or above another object or at a location or at a camera
Rem Chris Tate - BinaryModular.Com - v1.0
rem Make Object Above Object
//==========================================================================
Function MakeCubeAboveObject( id, iObjectBelow, fSize# )
Make Object Cube id, fSize# : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ) + ( fSize# * 0.5 ), Object Position Z( iObjectBelow )
EndFunction
//==========================================================================
Function MakeSphereAboveObject( id, iObjectBelow, fSize#, iRows, iColumns )
Make Object Sphere id, iRows, fSize#, iColumns : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ) + ( fSize# * 0.5 ), Object Position Z( iObjectBelow )
EndFunction
//==========================================================================
Function MakeCylinderAboveObject( id, iObjectBelow, fSize# )
Make Object Cylinder id, fSize# : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ) + ( fSize# * 0.5 ), Object Position Z( iObjectBelow )
EndFunction
//==========================================================================
Function MakeConeAboveObject( id, iObjectBelow, fSize# )
Make Object Cone id, fSize# : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ) + ( fSize# * 0.5 ), Object Position Z( iObjectBelow )
EndFunction
//==========================================================================
Function MakeBoxAboveObject( id, iObjectBelow, fWidth#, fHeight#, fDepth# )
Make Object Box id, fWidth#, fHeight#, fDepth# : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ) + ( fHeight# * 0.5 ), Object Position Z( iObjectBelow )
EndFunction
//==========================================================================
Function MakePlaneAboveObject( id, fWidth#, fHeight#, iObjectBelow )
Make Object Plane id, fWidth#, fHeight# : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ) + ( fHeight# * 0.5 ), Object Position Z( iObjectBelow )
EndFunction
//==========================================================================
Function MakeFloorAboveObject( id, fWidth#, fHeight#, fFloorOffsetHeight#, iObjectBelow )
Make Object Plane id, fWidth#, fHeight# : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ) + fFloorOffsetHeight#, Object Position Z( iObjectBelow )
XRotate Object id, 270 : Fix Object Pivot id
EndFunction
//==========================================================================
Function MakeObjectAboveObject( id, iMesh, iTexture, iObjectBelow )
Make Object id, iMesh, iTexture : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ) + ( Object Size Y( id ) * 0.5 ), Object Position Z( iObjectBelow )
EndFunction
rem Make Object At Object
//==========================================================================
Function MakeCubeAtObject( id, iObjectBelow, fSize# )
Make Object Cube id, fSize# : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ), Object Position Z( iObjectBelow )
EndFunction
//==========================================================================
Function MakeSphereAtObject( id, iObjectBelow, fSize#, iRows, iColumns )
Make Object Sphere id, iRows, fSize#, iColumns : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ), Object Position Z( iObjectBelow )
EndFunction
//==========================================================================
Function MakeCylinderAtObject( id, iObjectBelow, fSize# )
Make Object Cylinder id, fSize# : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ), Object Position Z( iObjectBelow )
EndFunction
//==========================================================================
Function MakeConeAtObject( id, iObjectBelow, fSize# )
Make Object Cone id, fSize# : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ), Object Position Z( iObjectBelow )
EndFunction
//==========================================================================
Function MakeBoxAtObject( id, iObjectBelow, fWidth#, fHeight#, fDepth# )
Make Object Box id, fWidth#, fHeight#, fDepth# : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ), Object Position Z( iObjectBelow )
EndFunction
//==========================================================================
Function MakePlaneAtObject( id, fWidth#, fHeight#, iObjectBelow )
Make Object Plane id, fWidth#, fHeight# : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ) , Object Position Z( iObjectBelow )
EndFunction
//==========================================================================
Function MakeFloorAtObject( id, fWidth#, fHeight#, iObjectBelow )
Make Object Plane id, fWidth#, fHeight# : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ) , Object Position Z( iObjectBelow )
XRotate Object id, 270 : Fix Object Pivot id
EndFunction
//==========================================================================
Function MakeObjectAtObject( id, iMesh, iTexture, iObjectBelow )
Make Object id, iMesh, iTexture : Position Object id, Object Position X( iObjectBelow ), Object Position Y( iObjectBelow ) , Object Position Z( iObjectBelow )
EndFunction
//==========================================================================
Rem Clone or instance objects at or above another object or at a location or at a camera
Rem Chris Tate - BinaryModular.Com - v0.8
//==========================================================================
Function CloneObjectAtObject( iObject, iNewObject, iSourceObject, bShareData as Boolean )
Clone Object iNewObject, iSourceObject, bShareData : Position Object iNewObject, Object Position X( iObject ), Object Position Y( iObject ), Object Position Z( iObject )
EndFunction iNewObject
//==========================================================================
Function CloneObjectAboveObject( iObject, iNewObject, iSourceObject, bShareData as Boolean )
Clone Object iNewObject, iSourceObject, bShareData : Position Object iNewObject, Object Position X( iObject ), Object Position Y( iObject ) + Object Size Y( iNewObject ), Object Position Z( iObject )
EndFunction iNewObject
//==========================================================================
Function CloneObjectAt( x#, y#, z#, iNewObject, iSourceObject, bShareData as Boolean )
Clone Object iNewObject, iSourceObject, bShareData : Position Object iNewObject, x#, y#, z#
EndFunction iNewObject
//==========================================================================
Function CloneObjectNear( x#, y#, z#, xRandomality, yRandomality, zRandomality, iNewObject, iSourceObject, bShareData as Boolean )
Clone Object iNewObject, iSourceObject, bShareData
Position Object iNewObject, x# + ( Rnd(xRandomality) - (xRandomality * 0.5) ), y# + ( Rnd(yRandomality) - (yRandomality * 0.5) ), z# + ( Rnd(zRandomality) - (zRandomality * 0.5) )
EndFunction iNewObject
//==========================================================================
Function CloneAndRotateObjectNear( x#, y#, z#, xRandomality, yRandomality, zRandomality, iMinXAngle, iMaxXAngle, iMinYAngle, iMaxYAngle, iMinZAngle, iMaxZAngle, iNewObject, iSourceObject, bShareData as Boolean )
Clone Object iNewObject, iSourceObject, bShareData
Position Object iNewObject, x# + ( Rnd(xRandomality) - (xRandomality * 0.5) ), y# + ( Rnd(yRandomality) - (yRandomality * 0.5) ), z# + ( Rnd(zRandomality) - (zRandomality * 0.5) )
Rotate Object iNewObject, iMinXAngle + Rnd( iMaxXAngle - iMinXAngle ), iMinYAngle + Rnd( iMaxYAngle - iMinYAngle ), iMinZAngle + Rnd( iMaxZAngle - iMinZAngle )
EndFunction iNewObject
//==========================================================================
Function CloneObjectAbove( x#, y#, z#, iNewObject, iSourceObject, bShareData as Boolean )
Clone Object iNewObject, iSourceObject, bShareData : Position Object iNewObject, x#, y# + Object Size Y( iNewObject ), z#
EndFunction iNewObject
//==========================================================================
Function CloneObjectAheadOfObject( iObject, iNewObject, iSourceObject, bShareData as Boolean, fDistance# )
Clone Object iNewObject, iSourceObject, bShareData : Position Object iNewObject, Object Position X( iObject ), Object Position Y( iObject ), Object Position Z( iObject )
Set Object To Object Orientation iNewObject, iObject : Move Object iNewObject, fDistance#
EndFunction iNewObject
//==========================================================================
Function CloneObjectAheadOfCamera( iCamera, iNewObject, iSourceObject, bShareData as Boolean, fDistance# )
Clone Object iNewObject, iSourceObject, bShareData : Position Object iNewObject, Camera Position X( iCamera ), Camera Position Y( iCamera ), Camera Position Z( iCamera )
Rotate Object iNewObject, Camera Angle X( iCamera ), Camera Angle Y( iCamera ), Camera Angle Z( iCamera ) : Move Object iNewObject, fDistance#
EndFunction iNewObject
//==========================================================================
Function CloneObjectFrom(x#, y#, z#, fAngleX#, fAngleY#, fAngleZ#, iNewObject, iSourceObject, bShareData as Boolean, fDistance# )
Clone Object iNewObject, iSourceObject, bShareData : Position Object iNewObject, x#, y#, z#
Rotate Object iNewObject, fAngleX#, fAngleY#, fAngleZ# : Move Object iNewObject, fDistance#
EndFunction iNewObject
//==========================================================================
Function InstanceObjectAtObject( iObject, iNewObject, iSourceObject )
Instance Object iNewObject, iSourceObject : Position Object iNewObject, Object Position X( iObject ), Object Position Y( iObject ), Object Position Z( iObject )
EndFunction iNewObject
//==========================================================================
Function InstanceObjectAboveObject( iObject, iNewObject, iSourceObject )
Instance Object iNewObject, iSourceObject : Position Object iNewObject, Object Position X( iObject ), Object Position Y( iObject ) + Object Size Y( iNewObject ), Object Position Z( iObject )
EndFunction iNewObject
//==========================================================================
Function InstanceObjectAt( x#, y#, z#, iNewObject, iSourceObject )
Instance Object iNewObject, iSourceObject : Position Object iNewObject, x#, y#, z#
EndFunction iNewObject
//==========================================================================
Function InstanceObjectNear( x#, y#, z#, xRandomality, yRandomality, zRandomality, iNewObject, iSourceObject, bShareData as Boolean )
Instance Object iNewObject, iSourceObject
Position Object iNewObject, x# + ( Rnd(xRandomality) - (xRandomality * 0.5) ), y# + ( Rnd(yRandomality) - (yRandomality * 0.5) ), z# + ( Rnd(zRandomality) - (zRandomality * 0.5) )
EndFunction iNewObject
//==========================================================================
Function InstanceAndRotateObjectNear( x#, y#, z#, xRandomality, yRandomality, zRandomality, iMinXAngle, iMaxXAngle, iMinYAngle, iMaxYAngle, iMinZAngle, iMaxZAngle, iNewObject, iSourceObject, bShareData as Boolean )
Instance Object iNewObject, iSourceObject
Position Object iNewObject, x# + ( Rnd(xRandomality) - (xRandomality * 0.5) ), y# + ( Rnd(yRandomality) - (yRandomality * 0.5) ), z# + ( Rnd(zRandomality) - (zRandomality * 0.5) )
Rotate Object iNewObject, iMinXAngle + Rnd( iMaxXAngle - iMinXAngle ), iMinYAngle + Rnd( iMaxYAngle - iMinYAngle ), iMinZAngle + Rnd( iMaxZAngle - iMinZAngle )
EndFunction iNewObject
//==========================================================================
Function InstanceObjectAbove( x#, y#, z#, iNewObject, iSourceObject )
Instance Object iNewObject, iSourceObject : Position Object iNewObject, x#, y# + Object Size Y( iNewObject ), z#
EndFunction iNewObject
//==========================================================================
Function InstanceObjectAheadOfObject( iObject, iNewObject, iSourceObject, fDistance# )
Instance Object iNewObject, iSourceObject : Position Object iNewObject, Object Position X( iObject ), Object Position Y( iObject ), Object Position Z( iObject )
Set Object To Object Orientation iNewObject, iObject : Move Object iNewObject, fDistance#
EndFunction iNewObject
//==========================================================================
Function InstanceObjectAheadOfCamera( iCamera, iNewObject, iSourceObject, fDistance# )
Instance Object iNewObject, iSourceObject : Position Object iNewObject, Camera Position X( iCamera ), Camera Position Y( iCamera ), Camera Position Z( iCamera )
Rotate Object iNewObject, Camera Angle X( iCamera ), Camera Angle Y( iCamera ), Camera Angle Z( iCamera ) : Move Object iNewObject, fDistance#
EndFunction iNewObject
//==========================================================================
Function InstanceObjectFrom(x#, y#, z#, fAngleX#, fAngleY#, fAngleZ#, iNewObject, iSourceObject, fDistance# )
Instance Object iNewObject, iSourceObject : Position Object iNewObject, x#, y#, z#
Rotate Object iNewObject, fAngleX#, fAngleY#, fAngleZ# : Move Object iNewObject, fDistance#
EndFunction iNewObject
Basic creation demo
Rem Create primitive objects directly above another object based on its origin at half its height
Rem Chris Tate - BinaryModular.Com - v1.0
AutoCam Off
Make Object Cube 1, 3 : Move Object Down 1, 2
MakeSphereAboveObject( 2, 1, 4, 32, 16 ) : Make Mesh From Object 2, 2
MakeConeAboveObject( 3, 2, 5 )
MakeObjectAboveObject( 4, 2, 0, 3 )
MakeCylinderAboveObject( 5, 4, 4 )
Make Matrix 1, 100,100,20,20 : Position Matrix 1, -50, 0, -50
Move Camera -8 : Move Camera Up 4
Do
Control Camera Using ArrowKeys 0, 1, 1
Loop
Basic instance and clone demo
Rem Clone or instance objects at or above another object or at a location or at a camera
Rem Chris Tate - BinaryModular.Com - v1.0
Sync On : Sync Rate 60 : Sync
Make Object Sphere 1, 1
Turn Camera Right 25
Move Camera - 5
CloneObjectAheadOfCamera( 0, 2, 1, 0, 5 )
Color Object 2, Rgb( 0, 255, 0 )
AutoCam Off
CloneObjectAboveObject( 2, 3, 1, 0 )
Make Object Cube 4, 1 : Move Object Up 4, 1 : Color Object 4, Rgb( 0, 128, 255 )
InstanceObjectFrom( 2, 0, 2, 0, 90, 0, 5, 4, 2 )
CloneObjectAheadOfObject( 5, 6, 1, 0, 1 )
Color Object 6, Rgb( 255, 0, 0 )
Do
Control Camera Using ArrowKeys 0, 1, 1
Sync
Loop
More snippets