From 99238fea55bc0eb559286e735822eed3c969bf60 Mon Sep 17 00:00:00 2001 From: ~keith Date: Wed, 15 Dec 2021 21:00:02 +0000 Subject: [PATCH] (dump-scene) & (dump-actors) (for #3) --- wh-engine/serialization.lisp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/wh-engine/serialization.lisp b/wh-engine/serialization.lisp index 2335be9..6695341 100644 --- a/wh-engine/serialization.lisp +++ b/wh-engine/serialization.lisp @@ -145,7 +145,7 @@ (defun generate-load-forms (obj &key (prune t) (nice-syms nil)) "Generate code that restores the current state of obj." - (declare (type boolean prune)) + (declare (type boolean prune nice-syms)) (let ((table (make-hash-table :test #'eq)) sym init-forms) @@ -164,3 +164,29 @@ ,@init-forms ,sym) )) + +(defun dump-scene (scene &key (destroy-after t) (prune t) (nice-syms nil)) + "Suspend and serialize scene." + (declare (type scene scene)) + (declare (type boolean destroy-after prune nice-syms)) + + [scene (suspend)] + (prog1 (generate-load-forms scene :prune prune :nice-syms nice-syms) + (if destroy-after + [scene (destroy)] + [scene (resume)]))) + +(defun dump-actors (actors &key (destroy-after t) (prune t) (nice-syms nil)) + "Suspend and serialize actors." + (declare (type (proper-list actor) actors)) + (declare (type boolean destroy-after prune nice-syms)) + + (loop for actor in actors + collect + (prog2 + ;; FIXME Children are destroyed with actor, but not serialized with it + [actor (suspend)] + (generate-load-forms actor :prune prune :nice-syms nice-syms) + (if destroy-after + [actor (destroy)] + [actor (resume)]))))