| # Game and Map variables |
|
|
| These are lua global variables that are accessed by their name and associated with the current game/map. |
|
|
| **GameVar(*name*, *initial_value*)** |
| : Declare a game variable with the specified initial value. |
|
|
| **MapVar(*name*, *initial_value*)** |
| : Declare a map variable with the specified initial value. |
|
|
| If *initial_value* is a boolean, a number or a string the variable is initialized with that value. |
|
|
| If *initial_value* is a function, it gets called during initialization and it's return value is used to initialize the variable. |
|
|
| If *initial_value* is a table, a copy of the table is used as initial value of the variable. A third optional parameter can be provided which is used as metatable of the copy. |
|
|
| Map and Game variables are similar in their declaration and use. They have several benefits: |
| - simple use - after their declaration you can use their name to read/set them |
| - automatic initialization and deinitialization when the Map or Game changes |
| - reload friendly - they keep their values during a lua reload |
| - automatically included in savegames |
| - savegame compatibility - they keep their initial values when not found in a savegame; when obsolete variables are found in a savegame they are discarded |
|
|
| The only difference between them is their lifetime: |
| - Game variables are initialized when the _Game_ global value changes (on message "NewGame"). |
| - Map variables are initialized when the map changes (on message "NewMap"). |
|
|
| The variables in the respective group are initialized in the order they are declared. |
|
|
| !!! Tip |
| To exclude a game/map variable from the savegame, you can use `PersistableGlobals.<name> = false` |
|
|
| !!! WARNING |
| Game/map variables should not be set to _nil_ as this will effectively remove them and will lead to a warning for new variable creation/use. |
|
|
| # Examples |
|
|
| Here are some examples of Map/Game variables declaration: |
| ~~~~ Lua |
| MapVar("LastNotification", false) -- initial value is false |
| MapVar("TotalNotifications", 0) -- initial value is 0 |
|
|
| -- Debris is initialized with a copy(!) of the provided table |
| MapVar("Debris", {}) |
| -- ActiveNotifications is initialized with a copy(!) of the table with weak_keys_meta as metatable |
| MapVar("ActiveNotifications", {}, weak_keys_meta) |
|
|
| -- Seed is initialized with a different random value for each game |
| GameVar("Seed", function() return AsyncRand() end) |
| -- Difficulty is initialized with the definition of the current game difficulty |
| GameVar("Difficulty", function() return GameDifficulties[Game.game_difficulty] end) |
|
|
| ~~~~ |
|
|
| <script>window.markdeepOptions = {definitionStyle: 'long'};</script> |
|
|
| (insert footer.md.html here) |
| <style class="fallback">body{visibility:hidden;white-space:pre;font-family:monospace}</style><script src="markdeep.min.js" charset="utf-8"></script><script>window.alreadyProcessedMarkdeep||(document.body.style.visibility="visible")</script> |