Defold Learn logo


Factory API documentation

Functions for controlling factory components which are used to dynamically spawn game objects into the runtime.

Version: alpha

ENUMS
factory.STATUS Factory status values
FUNCTIONS
factory.create() make a factory create a new game object
factory.get_status() Get factory status
factory.load() Load resources of a factory prototype.
factory.set_prototype() changes the prototype for the factory
factory.unload() Unload resources previously loaded using factory.load

Enums

factory.STATUS

factory.STATUS: integer

Factory status values

VALUES

factory.STATUS_LOADED The factory resources are loaded.
factory.STATUS_LOADING The factory resources are loading.
factory.STATUS_UNLOADED The factory resources are unloaded.

Functions

factory.create()

factory.create(url:string|hash|url, [position:vector3], [rotation:quaternion], [properties:table<string|hash, any>], [scale:number|vector3])→id:hash

The URL identifies which factory should create the game object. If the game object is created inside of the frame (e.g. from an update callback), the game object will be created instantly, but none of its component will be updated in the same frame. Properties defined in scripts in the created game object can be overridden through the properties-parameter below. See go.property for more information on script properties. Calling factory.create on a factory that is marked as dynamic without having loaded resources using factory.load will synchronously load and create resources which may affect application performance.

PARAMETERS

url string
hash
url
the factory that should create a game object.
[position] vector3
the position of the new game object, the position of the game object calling factory.create() is used by default, or if the value is nil.
[rotation] quaternion
the rotation of the new game object, the rotation of the game object calling factory.create() is used by default, or if the value is nil.
[properties] table<string|hash, any>
the properties defined in a script attached to the new game object.
[scale] number
vector3
the scale of the new game object (must be greater than 0), the scale of the game object containing the factory is used by default, or if the value is nil

RETURNS

id hash
the global id of the spawned game object

EXAMPLES

How to create a new game object:
function init(self)
    -- create a new game object and provide property values
    self.my_created_object = factory.create("#factory", nil, nil, {my_value = 1})
    -- communicate with the object
    msg.post(self.my_created_object, "hello")
end
And then let the new game object have a script attached:
go.property("my_value", 0)

function init(self)
    -- do something with self.my_value which is now one
end

factory.get_status()

factory.get_status([url:string|hash|url])→status:factory.STATUS

This returns status of the factory. Calling this function when the factory is not marked as dynamic loading always returns factory.STATUS_LOADED.

PARAMETERS

[url] string
hash
url
the factory component to get status from

RETURNS

status factory.STATUS
status of the factory component

factory.load()

factory.load([url:string|hash|url], [complete_function:fun(self:script_instance, url:url, result:boolean)])

Resources are referenced by the factory component until the existing (parent) collection is destroyed or factory.unload is called. Calling this function when the factory is not marked as dynamic loading does nothing.

PARAMETERS

[url] string
hash
url
the factory component to load
[complete_function] function( self:script_instance, url:url, result:boolean)
function to call when resources are loaded.
self:script_instance
The current script instance.
url:url
url of the factory component
result:boolean
True if resources were loaded successfully

EXAMPLES

How to load resources of a factory prototype.
factory.load("#factory", function(self, url, result) end)

factory.set_prototype()

factory.set_prototype([url:string|hash|url], [prototype:string|nil])

Changes the prototype for the factory.

PARAMETERS

[url] string
hash
url
the factory component
[prototype] string
nil
the path to the new prototype, or nil

EXAMPLES

How to unload the previous prototypes resources, and then spawn a new game object
factory.unload("#factory") -- unload the previous resources
factory.set_prototype("#factory", "/main/levels/enemyA.goc")
local id = factory.create("#factory", go.get_world_position(), vmath.quat())

factory.unload()

factory.unload([url:string|hash|url])

This decreases the reference count for each resource loaded with factory.load. If reference is zero, the resource is destroyed. Calling this function when the factory is not marked as dynamic loading does nothing.

PARAMETERS

[url] string
hash
url
the factory component to unload

EXAMPLES

How to unload resources of a factory prototype loaded with factory.load
factory.unload("#factory")