luv

Workshop wiki

world-fields.lisp

luvcraft/world-fields.lisp

system luvcraft/world · 12 definitions · on GitHub

Inspectable definitions for distributed voxel facts.

A field definition is aggregate metadata, not a wrapper around site values. Existing chunks, light products, atlases, and snapshots retain their own specialized arrays and bind one definition object when they are materialized, making live redefinition visible without changing a lane.

in-package#:luvcraft.world.fields
defclassvoxel-field-definition
name:initarg:name:readervoxel-field-definition-name
site-kind:initarg:site-kind:readervoxel-field-definition-site-kind
missing-value-semantics:initarg:missing-value-semantics:readervoxel-field-definition-missing-value-semantics
legal-value-type:initarg:legal-value-type:readervoxel-field-definition-legal-value-type
representation-policy:initarg:representation-policy:readervoxel-field-definition-representation-policy
revision:initform
gensym"FIELD-DEFINITION-"
:readervoxel-field-definition-revision
:documentation

One distributed fact's identity and per-site meaning. #FKAV5Y

The inherited represented-value declaration describes a reading after its storage encoding has been resolved. REPRESENTATION-POLICY separately names the aggregate encoding, such as a palette-index column or a u8 level array.

defgenericfield-definition-for
name
:documentation

Return the live voxel field definition named by name.

defmethodfield-definition-for
name
declare
ignorename
nil
defgenericmaterialized-field-definition
materializationfield-name
:documentation

Return the definition object retained by materialization for field-name.

defmethodmaterialized-field-definition
materializationfield-name
declare
ignorematerializationfield-name
nil
defgenericmaterialized-field-representation
materializationfield-name
:documentation

Return materialization's retained representation for field-name.

defmethodmaterialized-field-representation
materializationfield-name
declare
ignorematerializationfield-name
nil
defgenericfield-representation-domain
:documentation

Return the finite site domain bound to representation.

defunmaterialized-field-current-p
materializationfield-name

Whether materialization still carries field-name's live definition object.

let
materialized
materialized-field-definitionmaterializationfield-name
andmaterialized
eqmaterialized
defunmake-voxel-field-definition
namesite-kindvalue-typequantitymissing-value-semanticslegal-value-typerepresentation-policysource-form
unless
and
keywordpname
symbolpsite-kind
representation-policy
error"Invalid voxel field definition ~S."source-form
make-instance'voxel-field-definition:namename:site-kindsite-kind:representation-typevalue-type:quantity-specification:missing-value-semanticsmissing-value-semantics:legal-value-typelegal-value-type:representation-policyrepresentation-policy:source-formsource-form
defmacrodefine-voxel-field
name&keysite-kindvalue-typequantitymissing-valuelegal-valuesrepresentation

Define one inspectable voxel field through an EQL-specialized method.

unless
and
keywordpname
site-kindvalue-typelegal-valuesrepresentation
error"DEFINE-VOXEL-FIELD needs identity, site, value, and storage metadata."
let
query-name
gensym"FIELD-NAME"
source-form`
define-voxel-field,name:site-kind,site-kind:value-type,value-type,@
whenquantity`
:quantity,quantity
:missing-value
,missing-value:legal-values,legal-values:representation,representation
`
progn
defmethodfield-definition-for
,query-name
eql,name
declare
ignore,query-name
load-time-value
make-voxel-field-definition,name',site-kind',value-type',quantity',missing-value',legal-values',representation',source-form
,name
define-voxel-field:block-content:site-kind:voxel-cell:value-typet:missing-value:unavailable:legal-valuest:representation:palette-u16