Page 1 of 1

[API Intro] What is a prototype?

Posted: Sat Feb 09, 2019 9:10 pm
by Plawerth
For example:
Factorio API - Latest - LuaEntityPrototype
https://lua-api.factorio.com/latest/Lua ... otype.html

The full description is that this is "The prototype of an entity."

What exactly does this mean? No further detail seems to be available.

What is the purpose of a prototype? What does it do? What would not having it do?

,

My guess is that the game has its hardcoded initial values for how the game objects/entities should work. But rather than always creating new objects from the hardcoded data, it instead is "preloading" these initial hard values into this prototype object, which sits in memory like a template, and is from which all else is created.

Although the hardcoded initial values cannot be changed except via a mod, the running game may apparently be able to modify the template/prototype of an entity, so that all further objects created of that type, will have the customized settings of the prototype.

Or am I totally wrong here?

Re: [API Intro] What is a prototype?

Posted: Mon Feb 11, 2019 9:33 am
by bobingabout
Prototype is actually a term used extensively in the game code... The simplified description would be... "An Entity Prototype is a LUA data table that defines the configurable data of how any specific entity should behave, based on an entity template."

For examples of how significant of a difference a prototype can make, see the difference between the Assembling machine, Centrifuge, Chemical plant and Oil refinery. the Assembling machine and Centrifuge are very different from the Chemical plant and Oil refinery, not only in recipe, but functionality. the Assembling machine 1 for example will have an animation cycle that pauses when not in operation and continues from where it was paused when it continues to craft, and can only handle items. The Assembling machine 2 and 3 can handle fluids, but the pipe connection only appears if the recipe has a fluid. By contrast the Chemical plant has no active animation of this type, but does have working visualisations that are only shown when it is in use, which changes colour based on the recipe. Most of it's recipes are based around fluids. Pipe connections are always shown even when using recipes such as batteries that have no fluid using them. And the Centrifuge glows when working. These differing behaviours are all part of the Assembling machine entity template, but only the appropriate behaviours are programmed by the prototype.

Re: [API Intro] What is a prototype?

Posted: Mon Feb 11, 2019 10:04 am
by DaveMcW
In control.lua, a prototype is a read-only copy of the stuff you defined in data.lua.

Entities in control.lua do not inherit from their prototype, you need to use a prototype object if you want to look up their properities.

Code: Select all

/c game.print(game.player.selected.max_health)  -- Error!
/c game.print(game.player.selected.prototype.max_health)  -- Works
/c game.print(game.entity_prototypes[game.player.selected.name].max_health)  -- Also works