summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/votann/event_handler.clj210
1 files changed, 136 insertions, 74 deletions
diff --git a/src/votann/event_handler.clj b/src/votann/event_handler.clj
index 794fd22..009dcb9 100644
--- a/src/votann/event_handler.clj
+++ b/src/votann/event_handler.clj
@@ -73,69 +73,94 @@
(if-not (empty? (get-in @*state [:list :units]))
(spit (str (.toString (java.time.Instant/now)) ".list") (:list @*state))))
-(defn map-event-handler [e]
- (cond
- ;; list events
- (= :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)
-
- (= :event/export-list-click (:event/type e))
- (export-list e)
-
- (= :event/export-list-enter (:event/type e))
- (enter-event export-list e)
-
- ;;battle-simulator events
- (= :event/choice-select-weapon (:event/type e))
- (do
- (swap! *state assoc-in [:battle-simulator :weapon-type] (.getValue (.getTarget (:fx/event e))))
- (if (= "Ranged" (get-in @*state [:battle-simulator :weapon-type]))
- (swap! *state assoc-in [:battle-simulator :target-distance] "2")
- (swap! *state assoc-in [:battle-simulator :target-distance] "1")))
-
- (= :event/choice-select-model (:event/type e))
- (do
- (swap! *state assoc-in [:battle-simulator :model] (.getValue (.getTarget (:fx/event e))))
- (swap! *state assoc-in [:battle-simulator :count] "0")
- (swap! *state assoc-in [:battle-simulator :rolls] "1")
- (swap! *state assoc-in [:battle-simulator :data] [])
- (swap! *state assoc-in [:battle-simulator :total-damage] {}))
-
- (= :event/choice-select-reset (:event/type e))
- (do
- (swap! *state assoc-in [:battle-simulator :count] "0")
- (swap! *state assoc-in [:battle-simulator :data] [])
- (swap! *state assoc-in [:battle-simulator :total-damage] {}))
-
- (= :event/choice-select-target (:event/type e))
- (do
- (swap! *state assoc-in [:battle-simulator :target] (.getValue (.getTarget (:fx/event e))))
- (swap! *state assoc-in [:battle-simulator :count] "0")
- (swap! *state assoc-in [:battle-simulator :data] [])
- (swap! *state assoc-in [:battle-simulator :total-damage] {}))
-
- (= :event/choice-select-rolls (:event/type e))
+(defprotocol EventHandler
+ (handle-event [this]))
+
+(defrecord UndoUnitClick [e]
+ EventHandler
+ (handle-event [this]
+ (undo-points e)))
+
+(defrecord UndoUnitEnter [e]
+ EventHandler
+ (handle-event [this]
+ (enter-event undo-points e)))
+
+(defrecord RestartClick [e]
+ EventHandler
+ (handle-event [this]
+ (restart-list e)))
+
+(defrecord RestartEnter [e]
+ EventHandler
+ (handle-event [this]
+ (restart-list e)))
+
+(defrecord RestartUnitClick [e]
+ EventHandler
+ (handle-event [this]
+ (remove-unit e)))
+
+(defrecord RemoveUnitEnter [e]
+ EventHandler
+ (handle-event [this]
+ (enter-event remove-unit e)))
+
+(defrecord AddUnitClick [e]
+ EventHandler
+ (handle-event [this]
+ (add-unit e)))
+
+(defrecord AddUnitEnter [e]
+ EventHandler
+ (handle-event [this]
+ (enter-event add-unit e)))
+
+(defrecord ExportListClick [e]
+ EventHandler
+ (handle-event [this]
+ (export-list e)))
+
+(defrecord ExportListEnter [e]
+ EventHandler
+ (handle-event [this]
+ (enter-event export-list e)))
+
+(defrecord ChoiceSelectWeapon [e]
+ EventHandler
+ (handle-event [this]
+ (swap! *state assoc-in [:battle-simulator :weapon-type] (.getValue (.getTarget (:fx/event e))))
+ (if (= "Ranged" (get-in @*state [:battle-simulator :weapon-type]))
+ (swap! *state assoc-in [:battle-simulator :target-distance] "2")
+ (swap! *state assoc-in [:battle-simulator :target-distance] "1"))))
+
+(defrecord ChoiceSelectModel [e]
+ EventHandler
+ (handle-event [this]
+ (swap! *state assoc-in [:battle-simulator :model] (.getValue (.getTarget (:fx/event e))))
+ (swap! *state assoc-in [:battle-simulator :count] "0")
+ (swap! *state assoc-in [:battle-simulator :rolls] "1")
+ (swap! *state assoc-in [:battle-simulator :data] [])
+ (swap! *state assoc-in [:battle-simulator :total-damage] {})))
+
+(defrecord ChoiceSelectReset [e]
+ EventHandler
+ (handle-event [this]
+ (swap! *state assoc-in [:battle-simulator :count] "0")
+ (swap! *state assoc-in [:battle-simulator :data] [])
+ (swap! *state assoc-in [:battle-simulator :total-damage] {})))
+
+(defrecord ChoiceSelectTarget [e]
+ EventHandler
+ (handle-event [this]
+ (swap! *state assoc-in [:battle-simulator :target] (.getValue (.getTarget (:fx/event e))))
+ (swap! *state assoc-in [:battle-simulator :count] "0")
+ (swap! *state assoc-in [:battle-simulator :data] [])
+ (swap! *state assoc-in [:battle-simulator :total-damage] {})))
+
+(defrecord ChoiceSelectRolls [e]
+ EventHandler
+ (handle-event [this]
(try
(let [roll (Integer/parseInt (.getText (.getTarget (:fx/event e))))]
(if (< roll 1)
@@ -149,9 +174,11 @@
(catch java.lang.NumberFormatException | java.lang.NullPointerException e
(swap! *state assoc-in [:battle-simulator :rolls] "")
(.setText (.getTarget (:fx/event e)) "")
- (swap! *state assoc-in [:battle-simulator :disabled] true)))
+ (swap! *state assoc-in [:battle-simulator :disabled] true)))))
- (= :event/choice-select-target-size (:event/type e))
+(defrecord ChoiceSelectSize [e]
+ EventHandler
+ (handle-event [this]
(try
(let [count (Integer/parseInt (.getText (.getTarget (:fx/event e))))]
(if (< count 1)
@@ -165,27 +192,35 @@
(catch java.lang.NumberFormatException | java.lang.NullPointerException e
(swap! *state assoc-in [:battle-simulator :target-count] "")
(.setText (.getTarget (:fx/event e)) "")
- (swap! *state assoc-in [:battle-simulator :disabled] true)))
+ (swap! *state assoc-in [:battle-simulator :disabled] true)))))
- (= :event/choice-select-target-distance (:event/type e))
+(defrecord ChoiceSelectTargetDistance [e]
+ EventHandler
+ (handle-event [this]
(try
(let [count (Integer/parseInt (.getText (.getTarget (:fx/event e))))]
(if (< count 1)
(do
(swap! *state assoc-in [:battle-simulator :target-distance] "")
(.setText (.getTarget (:fx/event e)) ""))
- (swap! *state assoc-in [:battle-simulator :target-distance] (str count))))
+ (swap! *state assoc-in [:battle-simulator :target-distance] (str count))))
(catch java.lang.NumberFormatException | java.lang.NullPointerException e
(swap! *state assoc-in [:battle-simulator :target-distance] "")
- (.setText (.getTarget (:fx/event e)) "")))
+ (.setText (.getTarget (:fx/event e)) "")))))
- (= :event/choice-select-tokens (:event/type e))
- (swap! *state assoc-in [:battle-simulator :tokens] (.getValue (.getTarget (:fx/event e))))
+(defrecord ChoiceSelectTokens [e]
+ EventHandler
+ (handle-event [this]
+ (swap! *state assoc-in [:battle-simulator :tokens] (.getValue (.getTarget (:fx/event e))))))
- (= :event/choice-select-stats (:event/type e))
- (swap! *state assoc-in [:battle-simulator :data-type] (.getValue (.getTarget (:fx/event e))))
+(defrecord ChoiceSelectStats [e]
+ EventHandler
+ (handle-event [this]
+ (swap! *state assoc-in [:battle-simulator :data-type] (.getValue (.getTarget (:fx/event e))))))
- (= :event/choice-select-start (:event/type e))
+(defrecord ChoiceSelectStart [e]
+ EventHandler
+ (handle-event [this]
(cond (= "Ranged" (get-in @*state [:battle-simulator :weapon-type]))
(do
(swap! *state assoc-in [:battle-simulator :data]
@@ -209,3 +244,30 @@
(battle-modifiers *state)))
(swap! *state assoc-in [:battle-simulator :count] (str (+ (Integer/parseInt (get-in @*state [:battle-simulator :count])) 1)))
(total-damage *state)))))
+
+(def event-handlers
+ {:event/undo-unit-click (fn [e] (handle-event (UndoUnitClick. e)))
+ :event/undo-unit-enter (fn [e] (handle-event (UndoUnitEnter. e)))
+ :event/restart-click (fn [e] (handle-event (RestartClick. e)))
+ :event/restart-enter (fn [e] (handle-event (RestartEnter. e)))
+ :event/remove-unit-click (fn [e] (handle-event (RestartUnitClick. e)))
+ :event/remove-unit-enter (fn [e] (handle-event (RemoveUnitEnter. e)))
+ :event/add-unit-click (fn [e] (handle-event (AddUnitClick. e)))
+ :event/add-unit-enter (fn [e] (handle-event (AddUnitEnter. e)))
+ :event/export-list-click (fn [e] (handle-event (ExportListClick. e)))
+ :event/export-list-enter (fn [e] (handle-event (ExportListEnter. e)))
+ :event/choice-select-weapon (fn [e] (handle-event (ChoiceSelectWeapon. e)))
+ :event/choice-select-model (fn [e] (handle-event (ChoiceSelectModel. e)))
+ :event/choice-select-reset (fn [e] (handle-event (ChoiceSelectReset. e)))
+ :event/choice-select-target (fn [e] (handle-event (ChoiceSelectTarget. e)))
+ :event/choice-select-rolls (fn [e] (handle-event (ChoiceSelectRolls. e)))
+ :event/choice-select-target-size (fn [e] (handle-event (ChoiceSelectSize. e)))
+ :event/choice-select-target-distance (fn [e] (handle-event (ChoiceSelectTargetDistance. e)))
+ :event/choice-select-tokens (fn [e] (handle-event (ChoiceSelectTokens. e)))
+ :event/choice-select-stats (fn [e] (handle-event (ChoiceSelectStats. e)))
+ :event/choice-select-start (fn [e] (handle-event (ChoiceSelectStart. e)))})
+
+(defn map-event-handler [e]
+ (let [event-type (:event/type e)
+ event (event-type event-handlers)]
+ (event e)))