##// END OF EJS Templates
Sounds, save/load UI buttons
naryl -
r12:77651167 default
parent child Browse files
Show More
@@ -9,6 +9,10 b''
9 9 <div id="qsp-stat" class="qsp-frame">&nbsp;</div>
10 10 <div id="qsp-objs" class="qsp-frame">&nbsp;</div>
11 11 </div>
12 <div class="qsp-col qsp-col3">
13 <a href="javascript:SugarQSP.lib.savegame()"><img id="qsp-btn-save"></a>
14 <a href="javascript:SugarQSP.lib.opengame()"><img id="qsp-btn-load"></a>
15 </div>
12 16 </div>
13 17
14 18 <div id="qsp-dropdown">
@@ -29,6 +29,10 b''
29 29 flex: 3 3 30px;
30 30 }
31 31
32 .qsp-col3 {
33 flex: 0 0 40px;
34 }
35
32 36 #qsp-main {
33 37 flex: 6 6 60px;
34 38 }
@@ -58,7 +62,7 b''
58 62 outline: #9E9E9E outset 3px
59 63 }
60 64
61 // Dropdown
65 /* Dropdown */
62 66
63 67 #qsp-dropdown {
64 68 display: none;
@@ -82,3 +86,18 b''
82 86 #qsp-dropdown a:hover {
83 87 background-color: #ddd;
84 88 }
89
90 /* Buttons */
91
92 .qsp-col3 a, .qsp-col3 img {
93 width: 50px;
94 height: 50px;
95 }
96
97 #qsp-btn-save {
98 background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAACSklEQVRoge3ZPWgUQRjG8V/iRRFU/GoEQdSohSgWWqQSooVgK9iJFiKCnYV2BkFQsBRBQQwWVsHKIoWxEOzEwmhhogbRMhhFicTvYm+JCUlmZzabRLN/OPaWeZ+ZeW7feXf2lpqampqamnRaImKP4hA2VjCP27hbpoNGwbib2IPreB+IPYY7M7SvxWYM4QNO4QqWyQxVRgdeYnnB+K5A+wUcbB7z+O14hxPx08toLRDTgfv4mjrIJFrwwMS0HsABXMTxlE6LpNYqfE7pPJIBdOKhLM1uxIiLrpG5YtC4GSLMVGGkLdD+GpfxAuvxaVL7oCzN+jCG7iKDVmHkKS5hSSBuJ3bg6hRt+Zrpa553z8bEuoQrUVXk1exwKLBI1ZpPBnAL+0KBqanVim1Ykaifji+yNfIrVphipB1n8BgjCfqZ2IrTuIZXMcIUIydxFj8TtEW4JysW52JEKWtkVHUm4EdzjChSrkgLlmJXghb6m8ep9MN4K25XjvTF3sCaElrT6McS+0w2Mirb+JWhrH4CC/0+UpjUK7Ia5/86f4IeHMHeEvPJ+4km1chHE43k9KROpCyLPrViym8/vjW/b5Jt3acjL7/RzEX5bRg3sjKg+2fK7/PmZ9aZzdTqxwYzp06IBZFaDeHUCbFgUquy1Anx35TfRWXkd+WzCBOcQxEjQ7JH0PmiHW9CQUWM9Mr+Y+osO6ME8nF7Q4FFn8T2y14VDMt2vsFfqCRbZBvTdbLXFI9CgphHyjbsVu4+EcMInuH7HI1XU1NTU7OI+QMFe2N82rtssgAAAABJRU5ErkJggg==');
99 }
100
101 #qsp-btn-load {
102 background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAABmJLR0QA/wD/AP+gvaeTAAACCklEQVRoge3Yz6sNYRzH8deVexNxSaEoroWFUuomOceSPVnIwsbSxs6Psrgphf9AsrZR7kJWsroUlrZKKZRSl4USGouZk9Npzp1n5pm5x4/nXdNzpvP9Pp/v95nv82OGRCKRSCQS/w8zuIn3yGpe37CEQ6sedQk38BA7G/jO4BQ+YEebQZUxVfH/OxzGVSxX2D4o2mO4jmt4jpNFe6d5mPFkRbvQ0H9h6OqUtR33/xXr0celGn4/sYjXoQ5dJ3ILB7AOW2r4bcIj7GsrkEFpXWyrwwbaf15nXWqv6SqK1abuHDmPjV0EMobhBWIZt8cZVu0j2ZDNHF7gblRozdiO49g1zqDOEzmKJ7gcGVQTzmLDSgZ1Eunh2dD9aewpsXtctH3cwzn5ALysoVWlXZvhleMV5ovfU8J363mciAliRLsRg0Q244vfT3A/zgT2cQHbImIY1S4ldPk9Ii+NH8V9H08DfbfiY6BtiHYpoYmMBr4bbwN9YzfVoEELnew9+blpwBv5u0oI9wPtQrUbkWFaXqOzsZ01IFg7pLQOyp/A58igmhCsHZJInYndNsHa/0wiVWTy9/a5NjprQGvag0Qmwd462iGltdQ8lihqlVVIIn/9/CAvrajDWgTRB8VhMt1/aSljVr4RToc6hJTWioe1jujJD4rfQx2qRvuTyX1JuTIh3UQikUgkEhPnF+1xZ9hHnLjAAAAAAElFTkSuQmCC');
103 }
@@ -36,6 +36,8 b''
36 36 (defm (root api base64-to-state) (data)
37 37 (setf (root state-stash) (decode-u-r-i-component (atob data)))
38 38 (let ((data (*j-s-o-n.parse (root state-stash))))
39 (api-call clear-id :qsp-main)
40 (api-call clear-id :qsp-stat)
39 41 (api-call clear-act)
40 42 (setf (root vars) (ps:@ data vars))
41 43 (setf (root objs) (ps:@ data objs))
@@ -198,3 +200,11 b''
198 200 :do (incf i)
199 201 :do (incf elt.inner-h-t-m-l (api-call make-menu-item-html i item.text item.icon item.loc)))
200 202 (setf elt.style.display "block")))
203
204 ;;; Content
205
206 (defm (root api clean-audio) ()
207 (loop :for k :in (*object.keys (root playing))
208 :for v := (ps:getprop (root playing) k)
209 :do (when (ps:@ v ended)
210 (ps:delete (ps:@ (root playing) k)))))
@@ -128,6 +128,9 b''
128 128
129 129 ;;; 17sound
130 130
131 (ps:defpsmacro isplay (filename)
132 `(funcall (root playing includes) ,filename))
133
131 134 ;;; 18img
132 135
133 136 ;;; 19input
@@ -197,13 +197,13 b''
197 197 (defm (root lib delobj) (name)
198 198 (let ((index (ps:chain (root objs) (index-of name))))
199 199 (when (> index -1)
200 (funcall (root lib killobj) index)))
200 (funcall (root lib killobj) (1+ index))))
201 201 (values))
202 202
203 (defm (root lib killobj) (&optional num)
204 (if num
205 (ps:chain (root objs) (splice (1+ num) 1))
206 (setf (root objs) (list)))
203 (defm (root lib killobj) (&optional (num nil))
204 (if (eq nil num)
205 (setf (root objs) (list))
206 (ps:chain (root objs) (splice (1- num) 1)))
207 207 (api-call update-objs)
208 208 (values))
209 209
@@ -232,13 +232,21 b''
232 232
233 233 ;;; 17sound
234 234
235 (defm (root lib play) ())
236
237 (defm (root lib isplay) ())
235 (defm (root lib play) (filename &optional (volume 100))
236 (let ((audio (ps:new (*audio filename))))
237 (setf (ps:getprop (root playing) filename) audio)
238 (setf (ps:@ audio volume) (* volume 0.01))
239 (ps:chain audio (play))))
238 240
239 (defm (root lib close) ())
241 (defm (root lib close) (filename)
242 (funcall (root playing filename) stop)
243 (ps:delete (root playing filename)))
240 244
241 (defm (root lib closeall) ())
245 (defm (root lib closeall) ()
246 (loop :for k :in (*object.keys (root playing))
247 :for v := (ps:getprop (root playing) k)
248 :do (funcall v stop))
249 (setf (root playing) (ps:create)))
242 250
243 251 ;;; 18img
244 252
@@ -2,11 +2,22 b''
2 2 (in-package sugar-qsp)
3 3
4 4 (setf (root)
5 (ps:create vars (ps:create)
6 objs (list)
7 state-stash (ps:create)
8 acts (ps:create)
9 locs (ps:create)))
5 (ps:create
6 ;;; Game session state
7 ;; Variables
8 vars (ps:create)
9 ;; Inventory (objects)
10 objs (list)
11 ;;; Transient state
12 ;; Savegame data
13 state-stash (ps:create)
14 ;; List of audio files being played
15 playing (ps:create)
16 ;;; Game data
17 ;; ACTions
18 acts (ps:create)
19 ;; Locations
20 locs (ps:create)))
10 21
11 22 ;; Launch the game from the first location
12 23 (setf window.onload
General Comments 0
You need to be logged in to leave comments. Login now