summaryrefslogtreecommitdiff
path: root/src/votann/event_handler.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/votann/event_handler.clj')
-rw-r--r--src/votann/event_handler.clj54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/votann/event_handler.clj b/src/votann/event_handler.clj
new file mode 100644
index 0000000..89d9795
--- /dev/null
+++ b/src/votann/event_handler.clj
@@ -0,0 +1,54 @@
+(ns votann.event-handler
+ (:import [javafx.scene.input KeyCode KeyEvent]))
+
+(def *list-units (atom {:points 0 :units []}))
+
+(defn enter-event [function e]
+ (if (= KeyCode/ENTER (.getCode ^KeyEvent (:fx/event e)))
+ (function e)))
+
+(defn undo-points [_]
+ (if-not (empty? (get-in @*list-units [:units]))
+ (let [points (:points (last (:units @*list-units)))]
+ (swap! *list-units assoc :points (max 0 (- (:points @*list-units) points)))
+ (swap! *list-units update-in [:units] pop))))
+
+(defn restart-list [_]
+ (if-not (empty? (get-in @*list-units [:units]))
+ (do
+ (swap! *list-units assoc :points 0)
+ (swap! *list-units assoc-in [:units] []))))
+
+(defn add-unit [e]
+ (swap! *list-units assoc :points (+ (:points @*list-units) (:points (:event/target e))))
+ (swap! *list-units update-in [:units] conj (:event/target e)))
+
+(defn remove-unit [e]
+ (do
+ (swap! *list-units assoc :points (max 0 (- (:points @*list-units) (:points (:event/target e)))))
+ (swap! *list-units update :units #(vec (concat (subvec % 0 (:index (:event/target e))) (subvec % (inc (:index (:event/target e)))))))))
+
+(defn map-event-handler [e]
+ (cond (= :event/undo-unit-click (:event/type e))
+ (undo-points e)
+
+ (= :event/undo-unit-enter (:event/type e))
+ (enter-event undo-points e)
+
+ (= :event/restart-click (:event/type e))
+ (restart-list e)
+
+ (= :event/restart-enter (:event/type e))
+ (enter-event restart-list e)
+
+ (= :event/remove-unit-click (:event/type e))
+ (remove-unit e)
+
+ (= :event/remove-unit-enter (:event/type e))
+ (enter-event remove-unit e)
+
+ (= :event/add-unit-click (:event/type e))
+ (add-unit e)
+
+ (= :event/add-unit-enter (:event/type e))
+ (enter-event add-unit e)))