-
-
Save lockie/7f097c8ba90be4178005d21459d44890 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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