From af5c01f73bbbcaeebef59ce87a8d76c995e4442c Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 2 Apr 2021 21:43:24 +0100 Subject: [PATCH] movehist: Actually display in JS Signed-off-by: Ian Jackson --- templates/script.ts | 76 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/templates/script.ts b/templates/script.ts index aa52aab1..fc3af686 100644 --- a/templates/script.ts +++ b/templates/script.ts @@ -137,6 +137,9 @@ var links_elem : HTMLElement; var wresting: boolean; var occregions: wasm_bindgen.RegionList; +var movehist_gen: number = 0; +const MOVEHIST_ENDS = 2.5; + type PaneName = string; const pane_keys : { [key: string]: PaneName } = { "H" : "help", @@ -995,9 +998,80 @@ type MoveHistPosx = { messages.MoveHistEnt = movehist_record; function movehist_record(ent: MoveHistEnt) { - + let old_pos = ent.posx[0].pos; + let new_pos = ent.posx[1].pos; + + movehist_gen++; + movehist_gen %= (movehist_len_max * 2); + let meid = 'motionhint-marker-' + movehist_gen; + + let moved = ent.diff['Moved']; + if (moved) { + let d = moved.d; + let da = + `0 ${MOVEHIST_ENDS} ${d - MOVEHIST_ENDS*2} ${MOVEHIST_ENDS*2}`; + let g = document.createElementNS(svg_ns,'g'); + let sz = 4; + let pi = players[ent.held]; + let nick = pi ? pi.nick : ''; + let svg = ` + + + + + ${nick} + `; + g.innerHTML = svg; + space.insertBefore(g, movehist_end); + movehist_revisible(); + } } +function movehist_revisible() { + let n = movehist_lens[movehist_len_i]; + let i = 0; + let node = movehist_end; + while (i < movehist_len_max) { + i++; // i now eg 1..10 + node = node.previousElementSibling! as SVGGraphicsElement; + if (node == movehist_start) + return; + let prop = i > n ? 0 : (n-i+1)/n; + let stroke = (prop * 1.0).toString(); + let marker = node.firstElementChild!; + marker.setAttributeNS(null,'stroke-width',stroke); + let line = marker.nextElementSibling!; + line.setAttributeNS(null,'stroke-width',stroke); + let text = line.nextElementSibling!; + if (!prop) { + text.setAttributeNS(null,'stroke','none'); + text.setAttributeNS(null,'fill','none'); + } else { + text.setAttributeNS(null,'fill','yellow'); + text.setAttributeNS(null,'stroke','orange'); + } + } + for (;;) { + let del = node.previousElementSibling!; + if (del == movehist_start) + return; + del.remove(); + } +} + // ----- logs ----- messages.Log = function -- 2.30.2