diff options
Diffstat (limited to 'catbird/overlay.scm')
-rw-r--r-- | catbird/overlay.scm | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/catbird/overlay.scm b/catbird/overlay.scm index 5c3cf17..420b146 100644 --- a/catbird/overlay.scm +++ b/catbird/overlay.scm @@ -43,6 +43,32 @@ (define (make-overlay) (make <overlay> #:name 'overlay)) +(define-method (open-repl (overlay <overlay>)) + (unless (is-a? (major-mode overlay) <repl-mode>) + (push-major-mode overlay (make <repl-mode>))) + (open-repl (major-mode overlay))) + +(define-method (freeze-all-regions (overlay <overlay>)) + (for-each (lambda (region) + ;; Freeze everything except the overlay. + (unless (eq? (scene region) overlay) + (freeze region))) + (all-regions))) + +(define (unfreeze-all-regions) + (for-each unfreeze (all-regions))) + +(define-method (handle-error (overlay <overlay>) exception stack) + (freeze-all-regions overlay) + (open-repl overlay) + (let ((repl (& overlay repl))) + (enter-debugger repl exception stack))) + +(define-method (on-enter (overlay <overlay>)) + (set! (error-handler (current-kernel)) + (lambda (exception stack) + (handle-error overlay exception stack)))) + (define-method (notify (scene <overlay>) message) (run-script scene (let* ((padding 8.0) @@ -71,6 +97,10 @@ (sleep 5.0) (detach notification)))) +(define-meta-command ((resume r) system repl) + "- Resume game." + (unfreeze-all-regions)) + (define-class <fps-display> (<node-2d>)) (define-method (on-boot (fps-display <fps-display>)) |