summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author0xNul <57599792+0xNul@users.noreply.github.com>2023-07-22 13:33:53 -0700
committer0xNul <57599792+0xNul@users.noreply.github.com>2023-07-22 13:33:53 -0700
commita38788a33a12e128361bfd2668951f21406344db (patch)
tree4ca8e34d01a98869adfd6654f8cc45d69c890ef4
parent9c601ef72f6c44e73c862f4efed0041463b8a257 (diff)
remove duplicate code
-rw-r--r--src/votann/event_handler.clj24
-rw-r--r--src/votann_battle_simulator/battle_round.clj63
2 files changed, 32 insertions, 55 deletions
diff --git a/src/votann/event_handler.clj b/src/votann/event_handler.clj
index e521724..aefabe3 100644
--- a/src/votann/event_handler.clj
+++ b/src/votann/event_handler.clj
@@ -1,7 +1,7 @@
(ns votann.event-handler
(:require [votann.codex :refer [kin-models]]
[votann.util :as util]
- [votann-battle-simulator.battle-round :refer [shooting-phase fight-phase]])
+ [votann-battle-simulator.battle-round :refer [combat-phase]])
(:import [javafx.scene.input KeyCode KeyEvent]))
(def *state (atom {:list
@@ -172,21 +172,23 @@
(cond (= "Ranged" (get-in @*state [:battle-simulator :weapon-type]))
(do
(swap! *state assoc-in [:battle-simulator :data]
- (shooting-phase (Integer/parseInt (get-in @*state [:battle-simulator :rolls]))
- (util/get-model (get-in @*state [:battle-simulator :model]))
- (Integer/parseInt (get-in @*state [:battle-simulator :target-count]))
- (util/get-model (get-in @*state [:battle-simulator :target]))
- (battle-modifiers *state)))
+ (combat-phase "shooting"
+ (Integer/parseInt (get-in @*state [:battle-simulator :rolls]))
+ (util/get-model (get-in @*state [:battle-simulator :model]))
+ (Integer/parseInt (get-in @*state [:battle-simulator :target-count]))
+ (util/get-model (get-in @*state [:battle-simulator :target]))
+ (battle-modifiers *state)))
(swap! *state assoc-in [:battle-simulator :count] (str (+ (Integer/parseInt (get-in @*state [:battle-simulator :count])) 1)))
(total-damage *state))
(= "Melee" (get-in @*state [:battle-simulator :weapon-type]))
(do
(swap! *state assoc-in [:battle-simulator :data]
- (fight-phase (Integer/parseInt (get-in @*state [:battle-simulator :rolls]))
- (util/get-model (get-in @*state [:battle-simulator :model]))
- (Integer/parseInt (get-in @*state [:battle-simulator :target-count]))
- (util/get-model (get-in @*state [:battle-simulator :target]))
- (battle-modifiers *state)))
+ (combat-phase "fight"
+ (Integer/parseInt (get-in @*state [:battle-simulator :rolls]))
+ (util/get-model (get-in @*state [:battle-simulator :model]))
+ (Integer/parseInt (get-in @*state [:battle-simulator :target-count]))
+ (util/get-model (get-in @*state [:battle-simulator :target]))
+ (battle-modifiers *state)))
(swap! *state assoc-in [:battle-simulator :count] (str (+ (Integer/parseInt (get-in @*state [:battle-simulator :count])) 1)))
(total-damage *state)))))
diff --git a/src/votann_battle_simulator/battle_round.clj b/src/votann_battle_simulator/battle_round.clj
index f5e55b2..7212e8e 100644
--- a/src/votann_battle_simulator/battle_round.clj
+++ b/src/votann_battle_simulator/battle_round.clj
@@ -1,7 +1,8 @@
(ns votann-battle-simulator.battle-round
(:require [votann-battle-simulator.util :as util]
[votann-battle-simulator.weapon-abilities :as weapon-abilities])
- (:import [votann.records.model Model]))
+ (:import [votann.records.model Model]
+ [votann.records.weapon Weapon]))
(defn resolve-hit-roll [rolls skill]
(vec (filter #(>= % skill) rolls)))
@@ -25,12 +26,26 @@
(defn resolve-saving-throw-roll [rolls ap save]
(vec (filter #(< % (+ ap save)) rolls)))
+(defn resolve-damage [^Integer unit-size ^Weapon weapon ^Integer target-size ^Model target battle-modifiers]
+ (let [rolls (util/roll-d6 (weapon-abilities/resolve-attack-abilities weapon unit-size target-size))
+ rolls (weapon-abilities/resolve-hit-dice-abilities weapon rolls)
+ rolls (weapon-abilities/resolve-hit-modifier-abilities weapon (:hit battle-modifiers) rolls)
+ hits (resolve-hit-roll rolls (:bs weapon))
+ wounds (weapon-abilities/resolve-wound-dice-abilites weapon (util/roll-d6 (count hits)) (:s weapon) (:t target))
+ mortal-wounds (count (filter #(= 99 %) wounds))
+ wounds (vec (filter #(not= 99 %) wounds))
+ wounds (weapon-abilities/resolve-wound-modifier-abilites weapon (:wound battle-modifiers) wounds)
+ wounds (resolve-wound-roll (util/roll-d6 (count wounds)) (:s weapon) (:t target))
+ non-saves (count (resolve-saving-throw-roll (util/roll-d6 (count wounds)) (:ap weapon) (:sv target)))
+ damage (* (util/resolve-stat-count (:d weapon)) (+ mortal-wounds non-saves))]
+ damage))
+
(defn command-phase [])
(defn movement-phase [])
-(defn shooting-phase [^Integer unit-size ^Model model ^Integer target-size ^Model target battle-modifiers]
- (println "Starting shooting-phase ")
+(defn combat-phase [^String phase ^Integer unit-size ^Model model ^Integer target-size ^Model target battle-modifiers]
+ (println (str "\n----------\nStarting " phase "-phase"))
(println (str (:name model) " x" unit-size " target " (:name target)
" W: " (:w target)
" T: " (:t target)
@@ -38,47 +53,7 @@
(for [weapon (:ranged-weapons model)]
(do
(println (str "\nUsing weapon: " (:name weapon)))
- (let [rolls (util/roll-d6 (weapon-abilities/resolve-attack-abilities weapon unit-size target-size))
- rolls (weapon-abilities/resolve-hit-dice-abilities weapon rolls)
- rolls (weapon-abilities/resolve-hit-modifier-abilities weapon (:hit battle-modifiers) rolls)
- hits (resolve-hit-roll rolls (:bs weapon))
- wounds (weapon-abilities/resolve-wound-dice-abilites weapon (util/roll-d6 (count hits)) (:s weapon) (:t target))
- mortal-wounds (count (filter #(= 99 %) wounds))
- wounds (vec (filter #(not= 99 %) wounds))
- wounds (weapon-abilities/resolve-wound-modifier-abilites weapon (:wound battle-modifiers) wounds)
- wounds (resolve-wound-roll (util/roll-d6 (count wounds)) (:s weapon) (:t target))
- non-saves (count (resolve-saving-throw-roll (util/roll-d6 (count wounds)) (:ap weapon) (:sv target)))
- damage (* (util/resolve-stat-count (:d weapon)) (+ mortal-wounds non-saves))]
- (println (str "Total damage: " damage))
- {:dialog (str (:name model) " x" unit-size " target " (:name target)
- " W: " (:w target)
- " T: " (:t target)
- " SV: " (:sv target))
- :weapon (:name weapon) :damage damage}
- ))))
-
-(defn charge-phase [])
-
-(defn fight-phase [^Integer unit-size ^Model model ^Integer target-size ^Model target battle-modifiers]
- (println "Starting fight-phase ")
- (println (str (:name model) " x" unit-size " target " (:name target)
- " W: " (:w target)
- " T: " (:t target)
- " SV: " (:sv target)))
- (for [weapon (:melee-weapons model)]
- (do
- (println (str "\nUsing weapon: " (:name weapon)))
- (let [rolls (util/roll-d6 (weapon-abilities/resolve-attack-abilities weapon unit-size target-size))
- rolls (weapon-abilities/resolve-hit-dice-abilities weapon rolls)
- rolls (weapon-abilities/resolve-hit-modifier-abilities weapon (:hit battle-modifiers) rolls)
- hits (resolve-hit-roll rolls (:bs weapon))
- wounds (weapon-abilities/resolve-wound-dice-abilites weapon (util/roll-d6 (count hits)) (:s weapon) (:t target))
- mortal-wounds (count (filter #(= 99 %) wounds))
- wounds (vec (filter #(not= 99 %) wounds))
- wounds (weapon-abilities/resolve-wound-modifier-abilites weapon (:wound battle-modifiers) wounds)
- wounds (resolve-wound-roll (util/roll-d6 (count wounds)) (:s weapon) (:t target))
- non-saves (count (resolve-saving-throw-roll (util/roll-d6 (count wounds)) (:ap weapon) (:sv target)))
- damage (* (util/resolve-stat-count (:d weapon)) (+ mortal-wounds non-saves))]
+ (let [damage (resolve-damage unit-size weapon target-size target battle-modifiers)]
(println (str "Total damage: " damage))
{:dialog (str (:name model) " x" unit-size " target " (:name target)
" W: " (:w target)