blob: 2d737e55d7e3c177b41e1a9a109fb663c42ef064 (
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
|
;;;; examples/06-sprite.lisp
(defpackage #:ww.examples/6
(:use #:cl)
(:export #:start))
(in-package #:ww.examples/6)
(defclass sprite-example (ww::application) ())
(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-dude
(ww::on-keydown (target scancode)
(case scancode
(:scancode-left
(set-key-if-not target :left)
(decf (ww::x target) +walking-speed+))
(:scancode-right
(set-key-if-not target :right)
(incf (ww::x target) +walking-speed+))
(:scancode-up
(set-key-if-not target :back)
(incf (ww::y target) +walking-speed+))
(:scancode-down
(set-key-if-not target :front)
(decf (ww::y target) +walking-speed+)))))
(ww::defhandler stand
(ww::on-keyup (target)
(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
'ww::sprite
:framesets (list :front front
:back back
:left left
:right right)
:frameset-key :front)))
(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)))))
|