Skip to content

Commit fc34a5b

Browse files
committed
Add keymap
1 parent 750002a commit fc34a5b

File tree

3 files changed

+50
-1
lines changed

3 files changed

+50
-1
lines changed

client/src/keymap.lisp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
(in-package :mortar-combat)
2+
3+
4+
;; fixme: don't forget to make thread safe for generalization
5+
(defclass keymap (lockable)
6+
((callbacks :initform nil)
7+
(cursor-action :initform nil)
8+
(key-table :initform (make-hash-table :test 'eq))))
9+
10+
11+
(defun enable-keymap (keymap)
12+
(with-slots (callbacks cursor-action key-table) keymap
13+
(when callbacks
14+
(error "Keymap already enabled"))
15+
(let ((eve (events)))
16+
(flet ((register-callback (class action)
17+
(push (cons class (subscribe-to class action eve)) callbacks))
18+
(process-button-event (ev)
19+
(when-let ((action (gethash (key-from ev) key-table)))
20+
(funcall action (state-from ev))))
21+
(process-cursor-event (ev)
22+
(when cursor-action
23+
(funcall cursor-action (x-from ev) (y-from ev)))))
24+
(register-callback 'keyboard-event #'process-button-event)
25+
(register-callback 'mouse-event #'process-button-event)
26+
(register-callback 'cursor-event #'process-cursor-event)))))
27+
28+
29+
(defun disable-keymap (keymap)
30+
(with-slots (callbacks) keymap
31+
(unless callbacks
32+
(error "Keymap already disabled"))
33+
(loop with eve = (events)
34+
for (class . cb) in callbacks
35+
do (unsubscribe-from class cb eve))
36+
(setf callbacks nil)))
37+
38+
39+
(defun bind-button (keymap button action)
40+
(with-slots (key-table) keymap
41+
(setf (gethash button key-table) action)))
42+
43+
44+
(defun bind-cursor (keymap action)
45+
(with-slots (cursor-action) keymap
46+
(setf cursor-action action)))

client/src/main.lisp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
(room-model)
2424
((transform-node :translation (vec3 4.0 0.0 0.0))
2525
(mortar-model)
26-
((dude-model :color (vec3 0.9 0.4 0.4) :animation-name "animation.Running"))))))))
26+
((dude-model :color (vec3 0.9 0.4 0.4)))))))))
2727

2828

2929
(defmethod initialize-system :after ((this mortar-combat))
@@ -35,6 +35,8 @@
3535
(setf (viewport-size) (vec2 800 600)))
3636
(-> ((physics)) ()
3737
(setf (gravity) (vec3 0.0 -9.81 0.0)))
38+
(-> ((graphics)) ()
39+
(gl:viewport 0 0 800 600))
3840
(scenegraph-flow)
3941
(instantly (scenegraph-root)
4042
(setf scene (make-scene (make-pass-chain (make-simulation-pass)

mortar-combat.asd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
:pathname "client/src/"
2929
:components ((:file "packages")
3030
(:file "utils")
31+
(:file "keymap")
3132
(:file "camera")
3233
(:file "room")
3334
(:file "ball")

0 commit comments

Comments
 (0)