Objects and Entities: Improve object property and entity table descriptions

This commit is contained in:
rubenwardy 2020-03-28 19:59:39 +00:00
parent 02658835b4
commit 390eec68ac
3 changed files with 54 additions and 70 deletions

81
.gitignore vendored
View File

@ -1,11 +1,18 @@
*.zip
vendor
# Created by https://www.gitignore.io/api/node,ruby,linux,jekyll
# Created by https://www.gitignore.io/api/ruby,code,linux,jekyll
# Edit at https://www.gitignore.io/?templates=ruby,code,linux,jekyll
### Code ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
### Jekyll ###
_site/
.sass-cache/
.jekyll-cache/
.jekyll-metadata
### Linux ###
@ -23,67 +30,6 @@ _site/
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Typescript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
### Ruby ###
*.gem
*.rbc
@ -96,11 +42,13 @@ typings/
/test/tmp/
/test/version_tmp/
/tmp/
package-lock.json
# Used by dotenv library to load environment variables.
# .env
# Ignore Byebug command history file.
.byebug_history
## Specific to RubyMotion:
.dat*
.repl_history
@ -114,7 +62,6 @@ build-iPhoneSimulator/
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# vendor/Pods/
## Documentation cache and generated files:
@ -137,4 +84,4 @@ build-iPhoneSimulator/
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
.rvmrc
# End of https://www.gitignore.io/api/node,ruby,linux,jekyll
# End of https://www.gitignore.io/api/ruby,code,linux,jekyll

10
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,10 @@
{
"spellright.language": [
"en_GB"
],
"spellright.documentTypes": [
"latex",
"plaintext",
"markdown"
]
}

View File

@ -37,7 +37,7 @@ Another difference is that Players will cause map blocks to be loaded, whereas E
will just be saved and become inactive.
This distinction is muddied by the fact that Entities are controlled using a table
which is referred to as a luaentity, as discussed later.
which is referred to as a Lua entity, as discussed later.
## Position and Velocity
@ -70,6 +70,10 @@ you need to be aware of.
## Object Properties
Object properties are used to tell the client how to render and deal with an
object. It's not possible to define custom properties, because the properties are
for the engine to use, by definition.
Unlike nodes, objects have a dynamic rather than set appearance.
You can change how an object looks, among other things, at any time by updating
its properties.
@ -95,8 +99,31 @@ joined players.
## Entities
An Entity has a type table much like an item does.
This table can contain callback methods, default object properties, and custom elements.
An Entity has a definition table that resembles an item definition table.
This table can contain callback methods, initial object properties, and custom
members.
However, entities differ in one very important way from items. When an entity is
emerged (ie: loaded or created), a new table is created for that entity that
*inherits* from the definition table using metatables.
This new table is commonly referred to as a Lua Entity table.
Metatables are an important Lua feature that you will need
to be aware of, as it is an essential part of the Lua language.
In layman's terms, a metatable allows you to control how the table behaves when
using certain Lua syntax. The most common use of metatables is the ability to use
another table as a prototype, defaulting to the other table's properties and methods when
they do not exist in the current table.
Say you want to access member X on table A. If table A has that member, then
it will be returned as normal. However, if the table doesn't have that member but
it does have a metatable could table B, then table B will be checked to see if it
has that member.
<!--table A is a metatable of table B, then table
B will have all the properties and methods of table A if the derived table doesn't
have any itself.-->
```lua
local MyEntity = {