~octaspire/crates2

ref: e8da88fc5f3821b47e1e0a4aa65a48716ac3cf61 crates2/src/level.lisp -rw-r--r-- 1.6 KiB
e8da88fcoctaspire Add 'Key' 10 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
;; Octaspire Crates 2 - Puzzle Game
;; Copyright 2020 octaspire.com
;;
;; Licensed under the Apache License, Version 2.0 (the "License");
;; you may not use this file except in compliance with the License.
;; You may obtain a copy of the License at
;;
;; http://www.apache.org/licenses/LICENSE-2.0
;;
;; Unless required by applicable law or agreed to in writing, software
;; distributed under the License is distributed on an "AS IS" BASIS,
;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;; See the License for the specific language governing permissions and
;; limitations under the License.
(in-package :crates2)

;; Methods

(defmethod update ((self list))
  (let ((level (get-current-level)))
    (when (runningp)
      (attach-created)
      (loop for crate in level
            do (update crate))
      (purge-lamented))))

(defmethod render ((self list))
  (when (runningp)
    (let ((level (get-current-level)))
      (loop for crate in level
            do (render crate)))))

;; Functions

(defun contains-keys-p ()
  (find-if #'(lambda (crate)
               (eq (type-of crate) 'key)) *level*))

(defun purge-lamented ()
  (setf *level* (remove-if #'(lambda (crate)
                               (let ((type (type-of crate)))
                                 (unless (eq type 'player)
                                   (lamentedp crate)))) *level*)))

(defun attach-created ()
  (let ((l (last *level*)))
    (loop for crate in *created*
          do (push crate (cdr l))
          (setf l crate)))
  (setf *created* nil))

(defun request-attaching (crate)
  (setf *created* (cons crate *created*)))