Skip to content

Instantly share code, notes, and snippets.

@lockie
Created October 19, 2023 09:02
Show Gist options
  • Save lockie/7f097c8ba90be4178005d21459d44890 to your computer and use it in GitHub Desktop.
Save lockie/7f097c8ba90be4178005d21459d44890 to your computer and use it in GitHub Desktop.
(PROGN
(EVAL-WHEN (:COMPILE-TOPLEVEL :LOAD-TOPLEVEL :EXECUTE)
(PROGN
(DECLAIM
(NOTINLINE %POSITION-SOA-X %POSITION-SOA-Y (SETF %POSITION-SOA-X)
(SETF %POSITION-SOA-Y)))
(DECLAIM
(FTYPE (FUNCTION (POSITION-SOA46 ALEXANDRIA:ARRAY-LENGTH))
%ADJUST-POSITION-SOA))
(DEFSTRUCT
(POSITION-SOA46 (:CONC-NAME %POSITION-SOA-)
(:CONSTRUCTOR %MAKE-POSITION-SOA) (:COPIER NIL) (:PREDICATE NIL)
(:INCLUDE CL-FAST-ECS::COMPONENT-SOA))
"Determines the location of the object, in pixels."
(X
(MAKE-ARRAY 0 :INITIAL-ELEMENT
(LET* ((X 0.0) (Y 0.0))
(DECLARE (IGNORABLE X Y))
X)
:ELEMENT-TYPE 'SINGLE-FLOAT)
:TYPE (SIMPLE-ARRAY SINGLE-FLOAT (*)))
(Y
(MAKE-ARRAY 0 :INITIAL-ELEMENT
(LET* ((X 0.0) (Y 0.0))
(DECLARE (IGNORABLE X Y))
Y)
:ELEMENT-TYPE 'SINGLE-FLOAT)
:TYPE (SIMPLE-ARRAY SINGLE-FLOAT (*))))
(LET* ((X 0.0) (Y 0.0))
(DEFUN %ADJUST-POSITION-SOA (CL-FAST-ECS::SOA CL-FAST-ECS::NEW-SIZE)
(DECLARE (OPTIMIZE (SAFETY 0)))
(SETF (%POSITION-SOA-X CL-FAST-ECS::SOA)
(CL-FAST-ECS::ADJUST-ARRAY* (%POSITION-SOA-X CL-FAST-ECS::SOA)
CL-FAST-ECS::NEW-SIZE :ELEMENT-TYPE
'SINGLE-FLOAT :INITIAL-ELEMENT X))
(SETF (%POSITION-SOA-Y CL-FAST-ECS::SOA)
(CL-FAST-ECS::ADJUST-ARRAY* (%POSITION-SOA-Y CL-FAST-ECS::SOA)
CL-FAST-ECS::NEW-SIZE :ELEMENT-TYPE
'SINGLE-FLOAT :INITIAL-ELEMENT Y))
(SETF (CL-FAST-ECS::COMPONENT-SOA-ALLOCATED CL-FAST-ECS::SOA)
CL-FAST-ECS::NEW-SIZE)))
NIL)
(UNLESS (BOUNDP '+POSITION-COMPONENT-INDEX+)
(DECLAIM (TYPE ALEXANDRIA:ARRAY-INDEX +POSITION-COMPONENT-INDEX+))
(DEFCONSTANT +POSITION-COMPONENT-INDEX+
CL-FAST-ECS::*COMPONENT-REGISTRY-LENGTH*)
(INCF CL-FAST-ECS::*COMPONENT-REGISTRY-LENGTH*))
(SETF (GETF CL-FAST-ECS::*COMPONENT-REGISTRY* :POSITION)
#'%MAKE-POSITION-SOA))
(CL-FAST-ECS::RUN-HOOK
(IF (BOUNDP '+POSITION-COMPONENT-INDEX+)
CL-FAST-ECS:*COMPONENT-REDEFINED-HOOK*
CL-FAST-ECS:*COMPONENT-DEFINED-HOOK*)
+POSITION-COMPONENT-INDEX+ #'%MAKE-POSITION-SOA)
(DECLAIM (FTYPE (FUNCTION (CL-FAST-ECS:ENTITY) SINGLE-FLOAT) POSITION-X)
(FTYPE (FUNCTION (SINGLE-FLOAT CL-FAST-ECS:ENTITY) SINGLE-FLOAT)
(SETF POSITION-X)))
(DEFUN POSITION-X (CL-FAST-ECS:ENTITY)
"X coordinate"
(LET* ((CL-FAST-ECS::COMPONENT-STORAGES
(CL-FAST-ECS::STORAGE-COMPONENT-STORAGES CL-FAST-ECS:*STORAGE*))
(CL-FAST-ECS::SOA
(SVREF CL-FAST-ECS::COMPONENT-STORAGES +POSITION-COMPONENT-INDEX+)))
(AREF (THE (SIMPLE-ARRAY SINGLE-FLOAT) (%POSITION-SOA-X CL-FAST-ECS::SOA))
CL-FAST-ECS:ENTITY)))
(DEFUN (SETF POSITION-X) (CL-FAST-ECS::VALUE CL-FAST-ECS:ENTITY)
"X coordinate"
(LET* ((CL-FAST-ECS::COMPONENT-STORAGES
(CL-FAST-ECS::STORAGE-COMPONENT-STORAGES CL-FAST-ECS:*STORAGE*))
(CL-FAST-ECS::SOA
(SVREF CL-FAST-ECS::COMPONENT-STORAGES +POSITION-COMPONENT-INDEX+))
(CL-FAST-ECS::DATA
(THE (SIMPLE-ARRAY SINGLE-FLOAT)
(%POSITION-SOA-X CL-FAST-ECS::SOA))))
NIL
NIL
(SETF (AREF CL-FAST-ECS::DATA CL-FAST-ECS:ENTITY) CL-FAST-ECS::VALUE)))
(DECLAIM (FTYPE (FUNCTION (CL-FAST-ECS:ENTITY) SINGLE-FLOAT) POSITION-Y)
(FTYPE (FUNCTION (SINGLE-FLOAT CL-FAST-ECS:ENTITY) SINGLE-FLOAT)
(SETF POSITION-Y)))
(DEFUN POSITION-Y (CL-FAST-ECS:ENTITY)
"Y coordinate"
(LET* ((CL-FAST-ECS::COMPONENT-STORAGES
(CL-FAST-ECS::STORAGE-COMPONENT-STORAGES CL-FAST-ECS:*STORAGE*))
(CL-FAST-ECS::SOA
(SVREF CL-FAST-ECS::COMPONENT-STORAGES +POSITION-COMPONENT-INDEX+)))
(AREF (THE (SIMPLE-ARRAY SINGLE-FLOAT) (%POSITION-SOA-Y CL-FAST-ECS::SOA))
CL-FAST-ECS:ENTITY)))
(DEFUN (SETF POSITION-Y) (CL-FAST-ECS::VALUE CL-FAST-ECS:ENTITY)
"Y coordinate"
(LET* ((CL-FAST-ECS::COMPONENT-STORAGES
(CL-FAST-ECS::STORAGE-COMPONENT-STORAGES CL-FAST-ECS:*STORAGE*))
(CL-FAST-ECS::SOA
(SVREF CL-FAST-ECS::COMPONENT-STORAGES +POSITION-COMPONENT-INDEX+))
(CL-FAST-ECS::DATA
(THE (SIMPLE-ARRAY SINGLE-FLOAT)
(%POSITION-SOA-Y CL-FAST-ECS::SOA))))
NIL
NIL
(SETF (AREF CL-FAST-ECS::DATA CL-FAST-ECS:ENTITY) CL-FAST-ECS::VALUE)))
(DECLAIM
(FTYPE
(FUNCTION (CL-FAST-ECS:ENTITY &KEY (:X SINGLE-FLOAT) (:Y SINGLE-FLOAT)))
MAKE-POSITION))
(DEFUN MAKE-POSITION (CL-FAST-ECS:ENTITY &KEY (X 0.0) (Y 0.0))
"Add component with given values to an entity."
(CL-FAST-ECS::MAYBE-CHECK-ENTITY CL-FAST-ECS:ENTITY)
(LET* ((CL-FAST-ECS::COMPONENT-STORAGES
(CL-FAST-ECS::STORAGE-COMPONENT-STORAGES CL-FAST-ECS:*STORAGE*))
(CL-FAST-ECS::SOA
(SVREF CL-FAST-ECS::COMPONENT-STORAGES +POSITION-COMPONENT-INDEX+)))
(IF (ZEROP
(SBIT (CL-FAST-ECS::COMPONENT-SOA-EXISTS CL-FAST-ECS::SOA)
CL-FAST-ECS:ENTITY))
(BLOCK CL-FAST-ECS::NEW
(WHEN
(>= CL-FAST-ECS:ENTITY
(CL-FAST-ECS::COMPONENT-SOA-ALLOCATED CL-FAST-ECS::SOA))
(LET ((CL-FAST-ECS::NEW-SIZE
(CL-FAST-ECS::NEW-CAPACITY (1+ CL-FAST-ECS:ENTITY))))
(%ADJUST-POSITION-SOA CL-FAST-ECS::SOA CL-FAST-ECS::NEW-SIZE)
(CL-FAST-ECS::RUN-HOOK
CL-FAST-ECS:*COMPONENT-STORAGE-GROWN-HOOK*
+POSITION-COMPONENT-INDEX+ CL-FAST-ECS::NEW-SIZE)))
(INCF (CL-FAST-ECS::COMPONENT-SOA-COUNT CL-FAST-ECS::SOA))
NIL
(WHEN
(< CL-FAST-ECS:ENTITY
(CL-FAST-ECS::COMPONENT-SOA-MIN-ENTITY CL-FAST-ECS::SOA))
(SETF (CL-FAST-ECS::COMPONENT-SOA-MIN-ENTITY CL-FAST-ECS::SOA)
CL-FAST-ECS:ENTITY))
(WHEN
(> CL-FAST-ECS:ENTITY
(CL-FAST-ECS::COMPONENT-SOA-MAX-ENTITY CL-FAST-ECS::SOA))
(SETF (CL-FAST-ECS::COMPONENT-SOA-MAX-ENTITY CL-FAST-ECS::SOA)
CL-FAST-ECS:ENTITY))
(SETF (SBIT (CL-FAST-ECS::COMPONENT-SOA-EXISTS CL-FAST-ECS::SOA)
CL-FAST-ECS:ENTITY)
1
(SBIT
(CL-FAST-ECS::STORAGE-COMPONENT-CREATED-BITS
CL-FAST-ECS:*STORAGE*)
+POSITION-COMPONENT-INDEX+)
1))
(BLOCK CL-FAST-ECS::EXISTS
(WARN "component ~a already exists on entity ~a" 'POSITION
CL-FAST-ECS:ENTITY)))
(SETF (AREF
(THE (SIMPLE-ARRAY SINGLE-FLOAT)
(%POSITION-SOA-X CL-FAST-ECS::SOA))
CL-FAST-ECS:ENTITY)
X
(AREF
(THE (SIMPLE-ARRAY SINGLE-FLOAT)
(%POSITION-SOA-Y CL-FAST-ECS::SOA))
CL-FAST-ECS:ENTITY)
Y))
NIL)
(DEFMETHOD CL-FAST-ECS:MAKE-COMPONENT
((CL-FAST-ECS::INDEX (EQL +POSITION-COMPONENT-INDEX+))
CL-FAST-ECS:ENTITY
&REST CL-FAST-ECS::ARGS
&KEY (X 0.0) (Y 0.0))
(DECLARE (IGNORABLE X Y))
(APPLY #'MAKE-POSITION CL-FAST-ECS:ENTITY CL-FAST-ECS::ARGS))
(DECLAIM (FTYPE (FUNCTION (CL-FAST-ECS:ENTITY) BOOLEAN) HAS-POSITION-P))
(DEFUN HAS-POSITION-P (CL-FAST-ECS:ENTITY)
(CL-FAST-ECS::MAYBE-CHECK-ENTITY CL-FAST-ECS:ENTITY)
(LET* ((CL-FAST-ECS::COMPONENT-STORAGES
(CL-FAST-ECS::STORAGE-COMPONENT-STORAGES CL-FAST-ECS:*STORAGE*))
(CL-FAST-ECS::SOA
(SVREF CL-FAST-ECS::COMPONENT-STORAGES +POSITION-COMPONENT-INDEX+)))
(NOT
(ZEROP
(SBIT (CL-FAST-ECS::COMPONENT-SOA-EXISTS CL-FAST-ECS::SOA)
CL-FAST-ECS:ENTITY)))))
(DECLAIM (FTYPE (FUNCTION (CL-FAST-ECS:ENTITY)) DELETE-POSITION))
(LET* ((X 0.0) (Y 0.0))
(DECLARE (IGNORABLE X Y))
(DEFUN DELETE-POSITION (CL-FAST-ECS:ENTITY)
(CL-FAST-ECS::MAYBE-CHECK-ENTITY CL-FAST-ECS:ENTITY)
(LET* ((CL-FAST-ECS::COMPONENT-STORAGES
(CL-FAST-ECS::STORAGE-COMPONENT-STORAGES CL-FAST-ECS:*STORAGE*))
(CL-FAST-ECS::SOA
(SVREF CL-FAST-ECS::COMPONENT-STORAGES
+POSITION-COMPONENT-INDEX+)))
NIL
NIL
(DECF (CL-FAST-ECS::COMPONENT-SOA-COUNT CL-FAST-ECS::SOA))
(SETF (SBIT (CL-FAST-ECS::COMPONENT-SOA-EXISTS CL-FAST-ECS::SOA)
CL-FAST-ECS:ENTITY)
0
(SBIT
(CL-FAST-ECS::STORAGE-COMPONENT-REMOVED-BITS
CL-FAST-ECS:*STORAGE*)
+POSITION-COMPONENT-INDEX+)
1
(AREF
(THE (SIMPLE-ARRAY SINGLE-FLOAT)
(%POSITION-SOA-X CL-FAST-ECS::SOA))
CL-FAST-ECS:ENTITY)
X
(AREF
(THE (SIMPLE-ARRAY SINGLE-FLOAT)
(%POSITION-SOA-Y CL-FAST-ECS::SOA))
CL-FAST-ECS:ENTITY)
Y))
NIL))
(DEFMETHOD CL-FAST-ECS:DELETE-COMPONENT
((CL-FAST-ECS::INDEX (EQL +POSITION-COMPONENT-INDEX+))
CL-FAST-ECS:ENTITY)
(FUNCALL #'DELETE-POSITION CL-FAST-ECS:ENTITY))
(DEFMACRO %WITH-POSITION-SLOTS
(CL-FAST-ECS::BINDINGS CL-FAST-ECS::READONLY
CL-FAST-ECS::COMPONENT-STORAGES CL-FAST-ECS:ENTITY
&BODY CL-FAST-ECS::BODY)
(ALEXANDRIA:WITH-GENSYMS (CL-FAST-ECS::SOA)
(LET* ((CL-FAST-ECS::SOA-SLOT-BINDINGS
(MAPCAR
#'(LAMBDA (CL-FAST-ECS::N CL-FAST-ECS::S TYPE)
`(,CL-FAST-ECS::N
(THE (SIMPLE-ARRAY ,TYPE)
(,(ALEXANDRIA:SYMBOLICATE :% 'POSITION :-SOA-
CL-FAST-ECS::S)
,CL-FAST-ECS::SOA))))
'(#:X327 #:Y328) '(X Y) '(SINGLE-FLOAT SINGLE-FLOAT)))
(CL-FAST-ECS::ACCESSOR-NAMES
(MAPCAR
#'(LAMBDA (CL-FAST-ECS::S)
(GENTEMP (FORMAT NIL "%~a" CL-FAST-ECS::S)))
'(X Y)))
(CL-FAST-ECS::SETTER-NAMES
(MAPCAR #'(LAMBDA (CL-FAST-ECS::N) `(SETF ,CL-FAST-ECS::N))
CL-FAST-ECS::ACCESSOR-NAMES))
(CL-FAST-ECS::ACCESSOR-BINDINGS
(MAPCAN
#'(LAMBDA
(CL-FAST-ECS::N CL-FAST-ECS::S CL-FAST-ECS::SLOT TYPE
CL-FAST-ECS::I CL-FAST-ECS::U)
`((,CL-FAST-ECS::N (CL-FAST-ECS:ENTITY)
(AREF ,CL-FAST-ECS::S CL-FAST-ECS:ENTITY))
,@(WHEN (NOT CL-FAST-ECS::READONLY)
`(((SETF ,CL-FAST-ECS::N)
(CL-FAST-ECS::V CL-FAST-ECS:ENTITY)
(DECLARE
(IGNORABLE CL-FAST-ECS::V CL-FAST-ECS:ENTITY)
(TYPE ,TYPE CL-FAST-ECS::V))
,(IF CL-FAST-ECS::READONLY
`(ERROR "~a slot ~a is readonly" ','POSITION
',CL-FAST-ECS::SLOT)
`(PROGN
,(CL-FAST-ECS::%UPDATE-INDEX 'POSITION
CL-FAST-ECS::SLOT
CL-FAST-ECS::SOA
CL-FAST-ECS::S
'CL-FAST-ECS::V
CL-FAST-ECS::I
CL-FAST-ECS::U)
,(CL-FAST-ECS::%UPDATE-COMPOSITE-INDEX
'POSITION CL-FAST-ECS::SLOT
CL-FAST-ECS::SOA 'CL-FAST-ECS::V '(X Y)
'(SINGLE-FLOAT SINGLE-FLOAT) 'NIL 'NIL NIL)
(SETF (AREF ,CL-FAST-ECS::S
CL-FAST-ECS:ENTITY)
CL-FAST-ECS::V))))))))
CL-FAST-ECS::ACCESSOR-NAMES '(#:X327 #:Y328) '(X Y)
'(SINGLE-FLOAT SINGLE-FLOAT) '(NIL NIL) '(NIL NIL)))
(CL-FAST-ECS::BINDING-NAMES
(OR CL-FAST-ECS::BINDINGS
(MAPCAR
#'(LAMBDA (CL-FAST-ECS::N)
(ALEXANDRIA:SYMBOLICATE 'POSITION :- CL-FAST-ECS::N))
'(X Y))))
(CL-FAST-ECS::SLOT-BINDINGS
(MAPCAR
#'(LAMBDA (CL-FAST-ECS::N CL-FAST-ECS::A)
`(,CL-FAST-ECS::N (,CL-FAST-ECS::A ,CL-FAST-ECS:ENTITY)))
CL-FAST-ECS::BINDING-NAMES CL-FAST-ECS::ACCESSOR-NAMES)))
`(LET* ((,CL-FAST-ECS::SOA
(SVREF ,CL-FAST-ECS::COMPONENT-STORAGES
,'+POSITION-COMPONENT-INDEX+))
,@CL-FAST-ECS::SOA-SLOT-BINDINGS)
(DECLARE (IGNORABLE ,CL-FAST-ECS::SOA ,@(QUOTE (#:X327 #:Y328)))
(SB-EXT:MUFFLE-CONDITIONS SB-EXT:CODE-DELETION-NOTE))
(FLET (,@CL-FAST-ECS::ACCESSOR-BINDINGS)
(DECLARE
(INLINE ,@CL-FAST-ECS::ACCESSOR-NAMES
,@(UNLESS CL-FAST-ECS::READONLY CL-FAST-ECS::SETTER-NAMES))
(SB-EXT:UNMUFFLE-CONDITIONS SB-EXT:CODE-DELETION-NOTE))
(SYMBOL-MACROLET (,@CL-FAST-ECS::SLOT-BINDINGS)
,@(IF CL-FAST-ECS::READONLY
`((HANDLER-CASE (PROGN ,@CL-FAST-ECS::BODY)
(UNDEFINED-FUNCTION (CL-FAST-ECS::U)
(LET ((CL-FAST-ECS::F
(CELL-ERROR-NAME CL-FAST-ECS::U)))
(IF (AND
(EQ (FIRST CL-FAST-ECS::F) 'SETF)
(FIND (SECOND CL-FAST-ECS::F)
',CL-FAST-ECS::BINDING-NAMES
:TEST #'EQ))
(ERROR "~a slot ~a is readonly"
','POSITION
(SECOND CL-FAST-ECS::F))
(ERROR CL-FAST-ECS::U))))))
CL-FAST-ECS::BODY)))))))
(DEFMACRO WITH-POSITION
(CL-FAST-ECS::BINDINGS CL-FAST-ECS:ENTITY &BODY CL-FAST-ECS::BODY)
"A convenience macro to access entity's component data.
Prefer DEFSYSTEM to access the component data though."
(ALEXANDRIA:WITH-GENSYMS (CL-FAST-ECS::ENTITY-VAR)
(LET ((CL-FAST-ECS::INTERNAL-MACRO '%WITH-POSITION-SLOTS)
(CL-FAST-ECS::SLOT-NAMES '(X Y)))
`(PROGN
(LET ((,CL-FAST-ECS::ENTITY-VAR ,CL-FAST-ECS:ENTITY))
(DECLARE (IGNORABLE ,CL-FAST-ECS::ENTITY-VAR))
(CL-FAST-ECS::MAYBE-CHECK-ENTITY ,CL-FAST-ECS::ENTITY-VAR)
(,CL-FAST-ECS::INTERNAL-MACRO
,(OR CL-FAST-ECS::BINDINGS CL-FAST-ECS::SLOT-NAMES) NIL
(CL-FAST-ECS::STORAGE-COMPONENT-STORAGES CL-FAST-ECS:*STORAGE*)
,CL-FAST-ECS::ENTITY-VAR ,@CL-FAST-ECS::BODY))))))
(DEFUN ASSIGN-POSITION
(CL-FAST-ECS:ENTITY
&REST CL-FAST-ECS::ARGS
&KEY (X 0.0 X-SUPPLIED-P) (Y 0.0 Y-SUPPLIED-P))
"Creates or updates the component."
(CL-FAST-ECS::MAYBE-CHECK-ENTITY CL-FAST-ECS:ENTITY)
(LET* ((CL-FAST-ECS::COMPONENT-STORAGES
(CL-FAST-ECS::STORAGE-COMPONENT-STORAGES CL-FAST-ECS:*STORAGE*))
(CL-FAST-ECS::SOA
(SVREF CL-FAST-ECS::COMPONENT-STORAGES +POSITION-COMPONENT-INDEX+)))
(DECLARE (IGNORABLE CL-FAST-ECS::SOA))
(IF (ZEROP
(SBIT (CL-FAST-ECS::COMPONENT-SOA-EXISTS CL-FAST-ECS::SOA)
CL-FAST-ECS:ENTITY))
(APPLY #'MAKE-POSITION CL-FAST-ECS:ENTITY CL-FAST-ECS::ARGS)
(%WITH-POSITION-SLOTS (#:X329 #:Y330)
NIL
CL-FAST-ECS::COMPONENT-STORAGES
CL-FAST-ECS:ENTITY
(WHEN X-SUPPLIED-P (SETF #:X329 X))
(WHEN Y-SUPPLIED-P (SETF #:Y330 Y))
NIL))))
(DEFUN REPLACE-POSITION (CL-FAST-ECS::DST-ENTITY CL-FAST-ECS::SRC-ENTITY)
(DECLARE (IGNORABLE CL-FAST-ECS::SRC-ENTITY))
(CL-FAST-ECS::MAYBE-CHECK-ENTITY CL-FAST-ECS::DEST-ENTITY)
(CL-FAST-ECS::MAYBE-CHECK-ENTITY CL-FAST-ECS::SRC-ENTITY)
(%WITH-POSITION-SLOTS (X Y)
T
(CL-FAST-ECS::STORAGE-COMPONENT-STORAGES CL-FAST-ECS:*STORAGE*)
CL-FAST-ECS::SRC-ENTITY
(ASSIGN-POSITION CL-FAST-ECS::DST-ENTITY :X X :Y Y))
CL-FAST-ECS::DST-ENTITY)
(DEFMETHOD CL-FAST-ECS:PRINT-COMPONENT
((CL-FAST-ECS::INDEX (EQL +POSITION-COMPONENT-INDEX+))
CL-FAST-ECS:ENTITY
&OPTIONAL (STREAM *STANDARD-OUTPUT*))
(CL-FAST-ECS::MAYBE-CHECK-ENTITY CL-FAST-ECS:ENTITY)
(LET* ((CL-FAST-ECS::COMPONENT-STORAGES
(CL-FAST-ECS::STORAGE-COMPONENT-STORAGES CL-FAST-ECS:*STORAGE*))
(CL-FAST-ECS::SOA
(SVREF CL-FAST-ECS::COMPONENT-STORAGES +POSITION-COMPONENT-INDEX+)))
(DECLARE (IGNORABLE CL-FAST-ECS::SOA))
(PRIN1
(LIST :POSITION :X
(AREF
(THE (SIMPLE-ARRAY SINGLE-FLOAT)
(%POSITION-SOA-X CL-FAST-ECS::SOA))
CL-FAST-ECS:ENTITY)
:Y
(AREF
(THE (SIMPLE-ARRAY SINGLE-FLOAT)
(%POSITION-SOA-Y CL-FAST-ECS::SOA))
CL-FAST-ECS:ENTITY))
STREAM)))
NIL
'POSITION)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment