Bugfix.
[uxul-world.git] / draw.lisp
1 ;;; Copyright 2009 Christoph Senjak
2
3 ;; various draw-methods
4
5 (in-package :uxul-world)
6
7 (defun draw-background (x-trans y-trans)
8   (let ((ani3 (car (images (make-animation 0 |background_test_layer_3|))))
9         (ani2 (car (images (make-animation 0 |background_test_layer_2|)))))
10
11     (loop for i from -1 to 16
12          do (loop for j from -1 to 12
13                  do (progn
14                       (sdl:draw-surface-at-* ani2
15                                              (+ (* i 64) (round
16                                                           (mod (/ x-trans 4) 64)))
17                                              (+ (* j 64) (round
18                                                           (mod (/ y-trans 4) 64)))))))
19     (loop for i from -1 to 16
20          do (loop for j from -1 to 12
21                  do 
22                  (sdl:draw-surface-at-* ani3
23                                              (+ (* 64 i) (round
24                                                           (mod (/ x-trans 2) 64)))
25                                              (+ (* 64 j) (round
26                                                           (mod (/ y-trans 2) 64))))))))
27
28 (defmethod draw ((obj room))
29   (let ((*current-translation-x*
30          #|(cond
31            ((< (- (x (graphic-centralizer obj)) 400) 0) 0)
32            ((> (+ (x (graphic-centralizer obj)) 400) (width obj))
33             (- 800 (width obj)))
34            (T
35             (- 400 (x (graphic-centralizer obj)))))|#
36          (- 400 (x (graphic-centralizer obj)))
37           )
38         (*current-translation-y*
39          #|(cond
40            ((< (- (y (graphic-centralizer obj)) 300) 0) 0)
41            ((> (+ (y (graphic-centralizer obj)) 300) (height obj))
42             (- 600 (height obj)))
43            (T
44             (- 300 (y (graphic-centralizer obj)))))|#
45          (- 300 (y (graphic-centralizer obj)))
46           ))
47     (draw-background *current-translation-x* *current-translation-y*)
48     (dolist (image (get-objects obj 'uxul-world::game-object))
49       (if (and (redraw image)
50                (visible image)
51                (rectangle-in-screen image)) (draw image)))))
52
53
54 ;; FIXME
55
56 (defvar *player-bar-color* -255)
57
58 (defmethod draw ((obj player))
59   #+nil(if (rectangle-in-screen obj)
60            (old-draw-rectangle obj :r 255 :g 255 :b 255))
61
62   ;;; FIXME ************
63   (sdl:draw-box-*
64    10 10 (floor (* (power obj) (/ (- +screen-width+ 20) 10))) 10
65    :color (sdl:color :r (abs *player-bar-color*) :g (abs *player-bar-color*) :b (abs *player-bar-color*)))
66   (incf *player-bar-color* 5)
67   (if (= *player-bar-color* 255) (setf *player-bar-color* -255))
68
69   (call-next-method))
70
71 (defmethod draw ((obj stone))
72   (call-next-method)
73   #+nil(if (rectangle-in-screen obj)
74       (old-draw-rectangle obj :r 255 :g 255 :b 255)))
75
76 (defmethod draw ((obj simple-enemy))
77   (call-next-method)
78   #+nil(if (rectangle-in-screen obj)
79       (old-draw-rectangle obj :r 255 :g 255 :b 255)))