blob: 8b6380ad9644e0447958b54cab7a90bb9003886c (
plain)
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
;;;; examples/06-sprite.lisp
(defpackage #:ww.examples/6
(:use #:cl)
(:export #:start))
(in-package #:ww.examples/6)
(defclass sprite-example (ww::application) ())
(defclass dude (ww::sprite)
((walkingp :accessor walkingp :initform nil)))
(defun set-key-if-not (sprite key )
(unless (eql key (ww::frameset-key sprite))
(setf (ww::runningp (ww::current-frameset sprite)) nil)
(setf (ww::frameset-key sprite) key))
(unless (ww::runningp (ww::current-frameset sprite))
(setf (ww::runningp (ww::current-frameset sprite)) t)))
(define-symbol-macro +walking-speed+ 10)
(ww::defhandler move-by-face
(ww::on-perframe (sprite)
(when (walkingp sprite)
(case (ww::frameset-key sprite)
(:left
(decf (ww::x sprite) +walking-speed+))
(:right
(incf (ww::x sprite) +walking-speed+))
(:back
(incf (ww::y sprite) +walking-speed+))
(:front
(decf (ww::y sprite) +walking-speed+))))))
(ww::defhandler move-dude
(ww::on-keydown (target scancode)
(setf (walkingp target) t)
(case scancode
(:scancode-left
(set-key-if-not target :left))
(:scancode-right
(set-key-if-not target :right))
(:scancode-up
(set-key-if-not target :back))
(:scancode-down
(set-key-if-not target :front)))))
(ww::defhandler stand
(ww::on-keyup (target)
(setf (walkingp target) nil)
(let ((current
(ww::current-frameset target)))
(setf (ww::runningp current) nil
(ww::frameset-index current) 0))))
(defmethod ww::boot ((app sprite-example))
(let* ((front
(ww::make-frameset
'("dude/Front_Stand.png"
"dude/Front_Left.png"
"dude/Front_Stand.png"
"dude/Front_Right.png")
:fps 3))
(back
(ww::make-frameset
'("dude/Back_Stand.png"
"dude/Back_Left.png"
"dude/Back_Stand.png"
"dude/Back_Right.png")
:fps 3))
(left
(ww::make-frameset
'("dude/Left_Stand.png"
"dude/Left_Left.png"
"dude/Left_Stand.png"
"dude/Left_Right.png")
:fps 3))
(right
(ww::make-frameset
'("dude/Right_Stand.png"
"dude/Right_Left.png"
"dude/Right_Stand.png"
"dude/Right_Right.png")
:fps 3))
(dude
(make-instance
'dude
:framesets (list :front front
:back back
:left left
:right right)
:frameset-key :front)))
(setf (ww::runningp (ww::current-frameset dude)) nil)
(ww::add-handler dude #'move-by-face )
(ww::add-handler dude #'move-dude)
(ww::add-handler dude #'stand)
(ww::refocus-on dude)
(ww::add-unit app dude)))
(defun start ()
(ww::start (make-instance
'sprite-example
:fps 30
:width 800
:height 600
:title "Wheelwork Example: An Animated Sprite"
:asset-root (merge-pathnames
"examples/"
(asdf:system-source-directory :wheelwork)))))
|