summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--play.js79
-rw-r--r--rules.js4
2 files changed, 63 insertions, 20 deletions
diff --git a/play.js b/play.js
index 2fe5152..1732157 100644
--- a/play.js
+++ b/play.js
@@ -450,7 +450,7 @@ const ui = {
vp2: document.getElementById("vp2"),
}
-let locale_layout = new Array(data.locales.length).fill(0)
+let locale_layout = []
let calendar_layout_service = []
let calendar_layout_cylinder = []
@@ -749,21 +749,52 @@ function on_log(text) {
return p
}
-function layout_locale_item(loc, e, is_upper, yofs = 0) {
- let [x, y] = locale_xy[loc]
- let z = 0
- if (is_upper) {
- y -= 18
- z = 1
- }
- x += locale_layout[loc] * 44
- y += yofs
+function layout_locale_item(loc, e, is_upper) {
+ locale_layout[loc].push([e, is_upper])
e.classList.toggle("lieutenant", is_upper)
- e.style.top = (y - 23) + "px"
- e.style.left = (x - 23) + "px"
- e.style.zIndex = z
- if (!is_upper)
- locale_layout[loc] ++
+}
+
+function layout_locale_cylinders(loc) {
+ let [xc, yc] = locale_xy[loc]
+
+ let n = 0
+ for (let [e,is_upper] of locale_layout[loc])
+ if (!is_upper)
+ ++n
+
+ let wrap = 3
+ switch (data.locales[loc].type) {
+ case "region": wrap = 2; break
+ case "town": wrap = 2; break
+ case "novgorod": wrap = 4; break
+ }
+
+ let m = Math.floor((n-1) / wrap)
+ let i = 0
+ let k = 0
+ for (let [e,is_upper] of locale_layout[loc]) {
+ let nn = n
+ if (nn > wrap)
+ nn = wrap
+ let x = xc + (i - (nn-1)/2) * 44 + k * 22
+ let y = yc + (k * 32) - m * 32
+ let z = 0
+ if (is_upper) {
+ y -= 18
+ z = 1
+ }
+ if (e === ui.legate)
+ y -= 16
+ e.style.top = (y - 23) + "px"
+ e.style.left = (x - 23) + "px"
+ e.style.zIndex = z
+ if (!is_upper)
+ ++i
+ if (i >= wrap) {
+ i = 0
+ ++k
+ }
+ }
}
function layout_calendar() {
@@ -980,7 +1011,7 @@ function update_legate() {
ui.legate.style.top = "1580px"
ui.legate.style.left = "170px"
} else {
- layout_locale_item(view.pieces.legate, ui.legate, 0, -16)
+ layout_locale_item(view.pieces.legate, ui.legate, 0)
}
}
}
@@ -1013,6 +1044,8 @@ function update_veche() {
}
function update_locale(loc) {
+ layout_locale_cylinders(loc)
+
ui.locale[loc].classList.toggle("action", is_locale_action(loc) || is_laden_march_action(loc))
ui.locale[loc].classList.toggle("laden", is_laden_march_action(loc))
if (ui.locale_name[loc]) {
@@ -1191,12 +1224,14 @@ function update_cards() {
function on_update() {
restart_cache()
- locale_layout.fill(0)
for (let i = 0; i < 18; ++i) {
calendar_layout_cylinder[i] = []
calendar_layout_service[i] = []
}
+ for (let i = 0; i < data.locales.length; ++i)
+ locale_layout[i].length = 0
+
for (let ix = 0; ix < data.lords.length; ++ix) {
if (view.pieces.locale[ix] < 0) {
ui.lord_cylinder[ix].classList.add("hide")
@@ -1208,9 +1243,6 @@ function on_update() {
}
}
- for (let loc = 0; loc < data.locales.length; ++loc)
- update_locale(loc)
-
for (let way = 0; way < ui.ways.length; ++way) {
if (is_way_action(way))
ui.ways[way].classList.add("action")
@@ -1224,6 +1256,9 @@ function on_update() {
update_smerdi()
update_veche()
+ for (let loc = 0; loc < data.locales.length; ++loc)
+ update_locale(loc)
+
update_current_card_display()
if (view.turn & 1)
@@ -1262,6 +1297,7 @@ function on_update() {
action_button("left", "Left")
action_button("right", "Right")
action_button("march", "March")
+ action_button("avoid", "Avoid battle")
action_button("withdraw", "Withdraw")
action_button("surrender", "Surrender")
action_button("siegeworks", "Siegeworks")
@@ -1398,6 +1434,9 @@ const locale_size = {
}
function build_map() {
+ for (let i = 0; i < data.locales.length; ++i)
+ locale_layout[i] = []
+
data.locales.forEach((locale, ix) => {
let region = clean_name(locale.region)
let x = floor(locale.box.x * MAP_DPI / 300)
diff --git a/rules.js b/rules.js
index 940808f..257db82 100644
--- a/rules.js
+++ b/rules.js
@@ -3528,6 +3528,7 @@ states.avoid_battle_laden = {
}
} else {
gen_action_locale(to)
+ view.actions.avoid = 1
}
},
prov(lord) {
@@ -3539,6 +3540,9 @@ states.avoid_battle_laden = {
locale(to) {
avoid_battle_2(false)
},
+ avoid() {
+ avoid_battle_2(false)
+ },
}
function avoid_battle_2() {