chiark / gitweb /
wip halo
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 12 Jul 2020 15:41:53 +0000 (16:41 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 12 Jul 2020 15:41:53 +0000 (16:41 +0100)
templates/script.ts

index e3e4bf33c6467f4ffa7b1652903766e873c794b5..b90a5bf42692983aaecb0bd1fb2cbeaa6224b07a 100644 (file)
 //      <g id="piece{}" >
 //      currently-displayed version of the piece
 //      to allow addition/removal of selected indication
-//      contains 1 or 2 subelements:
-//      first is straight from server and not modified
-//      second is possible <use href="#select{}" >
+//      contains 1 or 3 subelements:
+//      one is straight from server and not modified
+//      one is possible <use href="#select{}" >
+//      one is possible <use href="#halo{}" >
 //
 //   #select{}
 //      generated by server, referenced by JS in pelem for selection
@@ -82,6 +83,7 @@ var pieces_marker : SVGGraphicsElement;
 var defs_marker : SVGGraphicsElement;
 var logdiv : HTMLElement;
 var status_node : HTMLElement;
+var halo : PieceId | null;
 
 type PlayerInfo = {
   dasharray : string,
@@ -221,8 +223,8 @@ function set_grab(piece: PieceId, p: PieceInfo, owner: PlayerId) {
   display_grab(piece,p);
 }
 function display_grab(piece: PieceId, p: PieceInfo) {
-  var nelem = document.createElementNS(svg_ns,'use');
   piece_undisplay_grab(piece, p);
+  var nelem = document.createElementNS(svg_ns,'use');
   nelem.setAttributeNS(null,'href','#select'+piece);
   let da = players[p.held!]!.dasharray;
   nelem.setAttributeNS(null,'stroke-dasharray',da);
@@ -352,6 +354,7 @@ pieceops.Modify = <PieceHandler>function
   p.pelem= piece_element('piece',piece)!;
   p.uelem.setAttributeNS(null, "x", info.pos[0]+"");
   p.uelem.setAttributeNS(null, "y", info.pos[1]+"");
+  if (halo == piece) { halo = null }
   piece_checkconflict(piece,p);
   if (info.held == null) {
     set_ungrab(piece,p);
@@ -434,6 +437,18 @@ messages.Recorded = <MessageHandler>function
 }
 
 function piece_checkconflict(piece: PieceId, p: PieceInfo) {
+  if (halo != piece) {
+    if (halo != null) {
+      console.log('UNHALOING',halo);
+      piece_undisplay_ancillary(p, "#halo"+halo);
+    }
+    console.log('HALOING',piece);
+    halo = piece;
+    var nelem = document.createElementNS(svg_ns,'use');
+    nelem.setAttributeNS(null,'href','#halo'+piece);
+    p.pelem.prepend(nelem);
+  }
+
   if (p.cseq == null) { return; }
   p.cseq = null;
   add_log_message('Conflict! - simultaneous update');