This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
libecho:classes:persistence [2022/05/20 18:06] – lee | libecho:classes:persistence [2023/08/06 19:36] (current) – removed lee | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== LibEcho.Persistence ====== | ||
- | |||
- | Most web browsers only allow for 10 megs (though some are as low as 5) of on-disk storage per origin. This not only has to contain the current game state, but also all previous game states in the game history. This is a particular problem with very large and/or complicated Twine games. | ||
- | |||
- | In an attempt to minimize this issue, LibEcho uses a defaults and delta Persistence system. " | ||
- | |||
- | All persistent objects must ultimately derive from the PersistentObject class. | ||
- | |||
- | Each PersistentObject has a readonly " | ||
- | |||
- | A PersistentObject may be the " | ||
- | |||
- | You won't generally need to worry too much about this id hierarchy, though. LibEcho takes care of most of it for you. The vast majority of the time, you'll only need to know the ids of toplevel objects that you have explicitly created: " | ||
- | |||
- | ===== How It Works ===== | ||
- | |||
- | The implementation of PersistentObject isn't very straightforward to read. Here's a high level overview of how it works. | ||
- | |||
- | There are three layers of data associated with a PersistentObject. | ||
- | |||
- | The lowest layer is called the " | ||
- | |||
- | Unless you are actually extending LibEcho itself, you will probably never really need to deal with the object layer in your story. | ||
- | |||
- | The middle layer is called the " | ||
- | |||
- | Finally, the top layer is called the " | ||
- | |||
- | In this way, only the changes from the default data are stored in Sugarcube' | ||
- | |||
- | These three layers are implemented by returning a Proxy object from the PersistentObject constructor. | ||
- | |||
- | This handler also replaces all references to PersistentObjects stored within Sugarcube' | ||
- | |||
- | Please look at the [[Tutorial]] for more details. | ||
- | |||
- | ===== LibEcho.Persistence.PersistentObject ===== | ||
- | |||
- | Inherits from: Nothing | ||
- | |||
- | The PersistentObject is the class from which all of the more complex persistent data types are derived. People, Apparel, Transformable attributes, Inventories of various sorts, and many other classes of objects, are all are ultimately derived from PersistentObject. | ||
- | |||
- | // | ||
- | |||
- | //**You should never instantiate a PersistentObject directly! | ||
- | |||
- | If you try to instantiate a PersistentObject directly, rather than wrapping it in a call to fetch(), the Proxy object will get confused about what to do with properties that are set in subclass constructors, | ||
- | |||
- | ==== Static Functions ==== | ||
- | |||
- | === PersistentObject.define( id, objectClass=PersistentObject, | ||
- | Defines the default data for a PersistentObject (or subclass thereof) within your game. PersistentObject.define() must only be called at initialization time, from story javascript or initialization passages. | ||
- | |||
- | * id: the Persistence ID of the object being defined. | ||
- | * objectClass: | ||
- | * defaults: a mapping of property names to data for the object' | ||
- | * allowRedefine: | ||
- | |||
- | * Returns: An instantiated instance of the object that was defined. | ||
- | * Throws: Error if the object is being redefined (and allowRedefine=false) or if the previously defined object does not have a valid class associated with it. | ||
- | |||
- | All PersistentObjects (and subclasses) must be defined using this method before they can be used within the game. See the [[Tutorial]] for a better explanation of all of this. | ||
- | |||
- | Example:< | ||
- | LibEcho.PersistentObject.define( " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | });</ | ||
- | |||
- | === PersistentObject.fetch( id, forceClass=undefined ) === | ||
- | Given a persistence ID, returns the appropriate instantiated object (a PersistentObject or subclass). | ||
- | |||
- | * id: the Persistence ID of the object being fetched. | ||
- | * forceClass: If set, overrides the class associated with the object ID and uses the given class instead. | ||
- | |||
- | * Returns: An instantiated instance of the object defined with the given id. | ||
- | * Throws: Error if the object does not have a valid class associated with it. | ||
- | |||
- | ==== Properties ==== | ||
- | |||
- | === .id === | ||
- | This object' | ||
- | |||
- | * Type: String | ||
- | * Automatic | ||
- | * ReadOnly | ||
- | |||
- | === .parent === | ||
- | This object' | ||
- | |||
- | * Type: PersistentObject or undefined | ||
- | * Automatic | ||
- | * ReadOnly | ||
- | |||
- | === .name === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .nameIsProper === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .nameIrregularArticle === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .genericName === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .genericNameIsProper === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .genericNameIrregularArticle === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .aName === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .AName === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .aGenericName === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .AGenericName === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .theName === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .TheName === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .theGenericName === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .TheGenericName === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .image === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .thumbnail === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .equals( o ) === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .toString() === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .clone() === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .toJSON() === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||
- | === .someProperty === | ||
- | FIXME | ||
- | |||
- | * Type: type | ||
- | * Optional Required | ||
- | |||