From 68e6b5c0a6d73791fbbf27596b2cdbd3e680360c Mon Sep 17 00:00:00 2001 From: Mischa Untaga <99098079+MischaU8@users.noreply.github.com> Date: Sat, 21 Oct 2023 16:09:56 +0200 Subject: new map layout --- data.js | 2 +- map.svg | 2 +- play.html | 62 +++++++- play.js | 135 ++++++++++++++++ tools/gendata.js | 72 ++++----- tools/genlayout.py | 33 ++++ tools/layout.svg | 449 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 716 insertions(+), 39 deletions(-) create mode 100644 tools/genlayout.py create mode 100644 tools/layout.svg diff --git a/data.js b/data.js index f18d13e..bfc11e2 100644 --- a/data.js +++ b/data.js @@ -1,2 +1,2 @@ -const data = {"locations":{"NONE":0,"DEPLOY":1,"ELIMINATED":2,"FRANCE":3,"TUNISIA":4,"MOROCCO":5,"I-1":6,"I-2":7,"I-3":8,"I-4":9,"CONSTANTINE":10,"II-1":11,"II-2":12,"II-3":13,"III-1":14,"III-2":15,"III-3":16,"ALGIERS":17,"IV-1":18,"IV-2":19,"ORAN":20,"V-1":21,"V-2":22,"V-3":23,"V-4":24,"V-5":25,"V-6":26,"V-7":27,"V-8":28,"VI-1":29,"VI-2":30},"areas":[{"loc":0,"id":"NONE","name":"None"},{"loc":1,"id":"DEPLOY","name":"Deployment"},{"loc":2,"id":"ELIMINATED","name":"Eliminated"},{"loc":3,"id":"FRANCE","name":"France","type":4,"zone":null,"x":1690.3,"y":244.8,"w":94,"h":94},{"loc":4,"id":"TUNISIA","name":"Tunisia","type":4,"zone":"TUNISIA","x":2499.9,"y":1667.6,"w":94,"h":94},{"loc":5,"id":"MOROCCO","name":"Morocco","type":4,"zone":"MOROCCO","x":109,"y":1765,"w":94,"h":94},{"loc":6,"id":"I-1","name":"Barika","type":1,"zone":"I","x":1708.1,"y":1117.9},{"loc":7,"id":"I-2","name":"Batna","type":3,"zone":"I","x":2185.6,"y":1390.9},{"loc":8,"id":"I-3","name":"Biskra","type":3,"zone":"I","x":1853.6,"y":1620.9},{"loc":9,"id":"I-4","name":"Tebessa","type":1,"zone":"I","x":2299.6,"y":1120.9},{"loc":10,"id":"CONSTANTINE","name":"Constantine","type":2,"zone":"II","x":2066.6,"y":315.8},{"loc":11,"id":"II-1","name":"Setif","type":1,"zone":"II","x":1917.6,"y":800.8},{"loc":12,"id":"II-2","name":"Phillippeville","type":1,"zone":"II","x":2200.6,"y":584.9},{"loc":13,"id":"II-3","name":"Souk Ahras","type":1,"zone":"II","x":2347.6,"y":848.9},{"loc":14,"id":"III-1","name":"Tizi Ouzou","type":1,"zone":"III","x":1473.6,"y":578.9},{"loc":15,"id":"III-2","name":"Bordj Bou Arreridj","type":1,"zone":"III","x":1465.6,"y":832.9},{"loc":16,"id":"III-3","name":"Bougie","type":1,"zone":"III","x":1703.6,"y":616.9},{"loc":17,"id":"ALGIERS","name":"Algiers","type":2,"zone":"IV","x":1185.6,"y":346.8},{"loc":18,"id":"IV-1","name":"Medea","type":1,"zone":"IV","x":1212,"y":727},{"loc":19,"id":"IV-2","name":"Orleansville","type":1,"zone":"IV","x":982,"y":780.2},{"loc":20,"id":"ORAN","name":"Oran","type":2,"zone":"V","x":430.6,"y":588.8},{"loc":21,"id":"V-1","name":"Mecheria","type":3,"zone":"V","x":234,"y":1485.7},{"loc":22,"id":"V-2","name":"Tlemcen","type":1,"zone":"V","x":173,"y":1140.9},{"loc":23,"id":"V-3","name":"Sidi Bel Abbes","type":1,"zone":"V","x":476,"y":1038},{"loc":24,"id":"V-4","name":"Mostaganem","type":1,"zone":"V","x":741,"y":863.9},{"loc":25,"id":"V-5","name":"Saida","type":3,"zone":"V","x":501,"y":1419.1},{"loc":26,"id":"V-6","name":"Mascara","type":3,"zone":"V","x":785,"y":1302.9},{"loc":27,"id":"V-7","name":"Ain Sefra","type":3,"zone":"V","x":752,"y":1670.9},{"loc":28,"id":"V-8","name":"Laghouat","type":3,"zone":"V","x":1191,"y":1615.6},{"loc":29,"id":"VI-1","name":"Sidi Aissa","type":3,"zone":"VI","x":1385,"y":1186},{"loc":30,"id":"VI-2","name":"Ain Qussera","type":1,"zone":"VI","x":1070.6,"y":1235.6}],"zone_areas":{"TUNISIA":[4],"MOROCCO":[5],"I":[6,7,8,9],"II":[10,11,12,13],"III":[14,15,16],"IV":[17,18,19],"V":[20,21,22,23,24,25,26,27,28],"VI":[29,30]},"adjecents":{"4":[7,8,9,13],"5":[21,22,27],"6":[11,15,29],"7":[4],"8":[4,28,29],"9":[4,11,12,13],"11":[6,9,15,16],"12":[9],"13":[4,9],"14":[18],"15":[6,11,18,29],"16":[11],"18":[14,15,29,30],"19":[24,30],"21":[5],"22":[5],"24":[19,30],"26":[30],"27":[5],"28":[8,29,30],"29":[6,8,15,18,28],"30":[18,19,24,26,28]},"units":[{"side":1,"type":0,"name":"French 2nd division","class":"fr_xx_2","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 4th division","class":"fr_xx_4","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 9th division","class":"fr_xx_9","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 12th division","class":"fr_xx_12","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 13th division","class":"fr_xx_13","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 14th division","class":"fr_xx_14","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 19th division","class":"fr_xx_19","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 20th division","class":"fr_xx_20","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 21th division","class":"fr_xx_21","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 29th division","class":"fr_xx_29","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 27th division","class":"fr_xx_27","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 5th division","class":"fr_xx_5","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 7th division","class":"fr_xx_7","evasion_contact":1,"firepower":25},{"side":1,"type":1,"name":"French brigade","class":"fr_x","evasion_contact":1,"firepower":6},{"side":1,"type":1,"name":"French brigade","class":"fr_x","evasion_contact":1,"firepower":6},{"side":1,"type":1,"name":"French brigade","class":"fr_x","evasion_contact":1,"firepower":6},{"side":1,"type":1,"name":"French brigade","class":"fr_x","evasion_contact":1,"firepower":6},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_para","evasion_contact":2,"firepower":9},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_para","evasion_contact":2,"firepower":9},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_para","evasion_contact":2,"firepower":9},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_inf","evasion_contact":2,"firepower":9},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_marine","evasion_contact":2,"firepower":9},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_marine","evasion_contact":2,"firepower":9},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_marine","evasion_contact":2,"firepower":9},{"side":1,"type":3,"name":"Algerian brigade","class":"alg_x","evasion_contact":1,"firepower":5},{"side":1,"type":3,"name":"Algerian brigade","class":"alg_x","evasion_contact":1,"firepower":5},{"side":1,"type":3,"name":"Algerian brigade","class":"alg_x","evasion_contact":1,"firepower":5},{"side":1,"type":3,"name":"Algerian brigade","class":"alg_x","evasion_contact":1,"firepower":5},{"side":1,"type":3,"name":"Algerian brigade","class":"alg_x","evasion_contact":1,"firepower":5},{"side":1,"type":3,"name":"Algerian brigade","class":"alg_x","evasion_contact":1,"firepower":5},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3}]} +const data = {"locations":{"NONE":0,"DEPLOY":1,"ELIMINATED":2,"FRANCE":3,"TUNISIA":4,"MOROCCO":5,"I-1":6,"I-2":7,"I-3":8,"I-4":9,"CONSTANTINE":10,"II-1":11,"II-2":12,"II-3":13,"III-1":14,"III-2":15,"III-3":16,"ALGIERS":17,"IV-1":18,"IV-2":19,"ORAN":20,"V-1":21,"V-2":22,"V-3":23,"V-4":24,"V-5":25,"V-6":26,"V-7":27,"V-8":28,"VI-1":29,"VI-2":30},"areas":[{"loc":0,"id":"NONE","name":"None"},{"loc":1,"id":"DEPLOY","name":"Deployment"},{"loc":2,"id":"ELIMINATED","name":"Eliminated"},{"loc":3,"id":"FRANCE","name":"France","type":4,"zone":null},{"loc":4,"id":"TUNISIA","name":"Tunisia","type":4,"zone":"TUNISIA"},{"loc":5,"id":"MOROCCO","name":"Morocco","type":4,"zone":"MOROCCO"},{"loc":6,"id":"I-1","name":"Barika","type":1,"zone":"I"},{"loc":7,"id":"I-2","name":"Batna","type":3,"zone":"I"},{"loc":8,"id":"I-3","name":"Biskra","type":3,"zone":"I"},{"loc":9,"id":"I-4","name":"Tebessa","type":1,"zone":"I"},{"loc":10,"id":"CONSTANTINE","name":"Constantine","type":2,"zone":"II"},{"loc":11,"id":"II-1","name":"Setif","type":1,"zone":"II"},{"loc":12,"id":"II-2","name":"Phillippeville","type":1,"zone":"II"},{"loc":13,"id":"II-3","name":"Souk Ahras","type":1,"zone":"II"},{"loc":14,"id":"III-1","name":"Tizi Ouzou","type":1,"zone":"III"},{"loc":15,"id":"III-2","name":"Bordj Bou Arreridj","type":1,"zone":"III"},{"loc":16,"id":"III-3","name":"Bougie","type":1,"zone":"III"},{"loc":17,"id":"ALGIERS","name":"Algiers","type":2,"zone":"IV"},{"loc":18,"id":"IV-1","name":"Medea","type":1,"zone":"IV"},{"loc":19,"id":"IV-2","name":"Orleansville","type":1,"zone":"IV"},{"loc":20,"id":"ORAN","name":"Oran","type":2,"zone":"V"},{"loc":21,"id":"V-1","name":"Mecheria","type":3,"zone":"V"},{"loc":22,"id":"V-2","name":"Tlemcen","type":1,"zone":"V"},{"loc":23,"id":"V-3","name":"Sidi Bel Abbes","type":1,"zone":"V"},{"loc":24,"id":"V-4","name":"Mostaganem","type":1,"zone":"V"},{"loc":25,"id":"V-5","name":"Saida","type":3,"zone":"V"},{"loc":26,"id":"V-6","name":"Mascara","type":3,"zone":"V"},{"loc":27,"id":"V-7","name":"Ain Sefra","type":3,"zone":"V"},{"loc":28,"id":"V-8","name":"Laghouat","type":3,"zone":"V"},{"loc":29,"id":"VI-1","name":"Sidi Aissa","type":3,"zone":"VI"},{"loc":30,"id":"VI-2","name":"Ain Qussera","type":1,"zone":"VI"}],"zone_areas":{"TUNISIA":[4],"MOROCCO":[5],"I":[6,7,8,9],"II":[10,11,12,13],"III":[14,15,16],"IV":[17,18,19],"V":[20,21,22,23,24,25,26,27,28],"VI":[29,30]},"adjecents":{"4":[7,8,9,13],"5":[21,22,27],"6":[11,15,29],"7":[4],"8":[4,28,29],"9":[4,11,12,13],"11":[6,9,15,16],"12":[9],"13":[4,9],"14":[18],"15":[6,11,18,29],"16":[11],"18":[14,15,29,30],"19":[24,30],"21":[5],"22":[5],"24":[19,30],"26":[30],"27":[5],"28":[8,29,30],"29":[6,8,15,18,28],"30":[18,19,24,26,28]},"units":[{"side":1,"type":0,"name":"French 2nd division","class":"fr_xx_2","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 4th division","class":"fr_xx_4","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 9th division","class":"fr_xx_9","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 12th division","class":"fr_xx_12","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 13th division","class":"fr_xx_13","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 14th division","class":"fr_xx_14","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 19th division","class":"fr_xx_19","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 20th division","class":"fr_xx_20","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 21th division","class":"fr_xx_21","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 29th division","class":"fr_xx_29","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 27th division","class":"fr_xx_27","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 5th division","class":"fr_xx_5","evasion_contact":1,"firepower":25},{"side":1,"type":0,"name":"French 7th division","class":"fr_xx_7","evasion_contact":1,"firepower":25},{"side":1,"type":1,"name":"French brigade","class":"fr_x","evasion_contact":1,"firepower":6},{"side":1,"type":1,"name":"French brigade","class":"fr_x","evasion_contact":1,"firepower":6},{"side":1,"type":1,"name":"French brigade","class":"fr_x","evasion_contact":1,"firepower":6},{"side":1,"type":1,"name":"French brigade","class":"fr_x","evasion_contact":1,"firepower":6},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_para","evasion_contact":2,"firepower":9},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_para","evasion_contact":2,"firepower":9},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_para","evasion_contact":2,"firepower":9},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_inf","evasion_contact":2,"firepower":9},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_marine","evasion_contact":2,"firepower":9},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_marine","evasion_contact":2,"firepower":9},{"side":1,"type":2,"name":"French elite brigade","class":"fr_elite_x_marine","evasion_contact":2,"firepower":9},{"side":1,"type":3,"name":"Algerian brigade","class":"alg_x","evasion_contact":1,"firepower":5},{"side":1,"type":3,"name":"Algerian brigade","class":"alg_x","evasion_contact":1,"firepower":5},{"side":1,"type":3,"name":"Algerian brigade","class":"alg_x","evasion_contact":1,"firepower":5},{"side":1,"type":3,"name":"Algerian brigade","class":"alg_x","evasion_contact":1,"firepower":5},{"side":1,"type":3,"name":"Algerian brigade","class":"alg_x","evasion_contact":1,"firepower":5},{"side":1,"type":3,"name":"Algerian brigade","class":"alg_x","evasion_contact":1,"firepower":5},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":1,"type":4,"name":"Algerian Police","class":"alg_police","evasion_contact":2,"firepower":2},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":5,"name":"FLN Failek","class":"fln_failek","evasion_contact":2,"firepower":4},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":6,"name":"FLN Band","class":"fln_band","evasion_contact":3,"firepower":2},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":7,"name":"FLN Cadre","class":"fln_cadre","evasion_contact":4,"firepower":1},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3},{"side":0,"type":8,"name":"FLN Front","class":"fln_front","evasion_contact":3,"firepower":3}]} if (typeof module !== 'undefined') module.exports = data diff --git a/map.svg b/map.svg index a829e4d..ad38182 100644 --- a/map.svg +++ b/map.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/play.html b/play.html index 0323043..c91b316 100644 --- a/play.html +++ b/play.html @@ -50,7 +50,34 @@ main { background-color: dimgray } height: 1101px; background-size: 1500px 1101px; background-position: center; - background-image: url(map.svg); + background-image: url(map.svg?v=3); +} + +#map svg { + position: absolute; +} + +#map svg image { + pointer-events: none; +} + +#map svg path.area { + fill-opacity: 0; + fill: white; +} +#map svg path.area.where { + fill-opacity: 0.4; + fill: darkslategray; +} +#map svg path.area.highlight { + cursor: pointer; + fill-opacity: 0.4; + fill: white; +} +#map svg path.area.tip { + stroke: yellow; + stroke-width: 40; + stroke-dasharray: 80 40; } /* SPACES */ @@ -307,6 +334,39 @@ main { background-color: dimgray }
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/play.js b/play.js index 4ecf7fd..4060e28 100644 --- a/play.js +++ b/play.js @@ -40,6 +40,141 @@ function set_has(set, item) { return false } +// :r !python3 tools/genlayout.py +// BEGIN LAYOUT DATA +const LAYOUT = { + "Laghouat-OC": [846, 972], + "Laghouat-PTL": [648, 999], + "Laghouat-OPS": [806, 882], + "Laghouat-UG": [631, 896], + "Laghouat-MK": [727, 906], + "Ain Sefra-OC": [465, 1008], + "Ain Sefra-PTL": [365, 1009], + "Ain Sefra-OPS": [485, 927], + "Ain Sefra-UG": [263, 999], + "Ain Sefra-MK": [323, 961], + "Mascara-OC": [523, 815], + "Mascara-PTL": [453, 838], + "Mascara-OPS": [523, 751], + "Mascara-UG": [454, 766], + "Mascara-MK": [440, 714], + "Saida-OC": [379, 883], + "Saida-PTL": [303, 896], + "Saida-OPS": [363, 782], + "Saida-UG": [295, 782], + "Saida-MK": [301, 839], + "Mecheria-OC": [218, 919], + "Mecheria-PTL": [156, 928], + "Mecheria-OPS": [213, 817], + "Mecheria-UG": [153, 828], + "Mecheria-MK": [228, 866], + "Mostaganem-OC": [494, 618], + "Mostaganem-PTL": [436, 567], + "Mostaganem-OPS": [473, 435], + "Mostaganem-UG": [418, 468], + "Mostaganem-MK": [500, 556], + "Sidi Bel Abbes-OC": [368, 639], + "Sidi Bel Abbes-PTL": [301, 680], + "Sidi Bel Abbes-OPS": [338, 545], + "Sidi Bel Abbes-UG": [251, 552], + "Sidi Bel Abbes-MK": [256, 631], + "Tlemcen-OC": [183, 738], + "Tlemcen-PTL": [122, 703], + "Tlemcen-OPS": [183, 661], + "Tlemcen-UG": [112, 629], + "Tlemcen-MK": [130, 556], + "Orleansville-OC": [620, 574], + "Orleansville-PTL": [571, 526], + "Orleansville-OPS": [631, 496], + "Orleansville-UG": [572, 450], + "Orleansville-MK": [631, 436], + "Medea-OC": [751, 491], + "Medea-PTL": [701, 538], + "Medea-OPS": [768, 426], + "Medea-UG": [701, 432], + "Medea-MK": [771, 368], + "Ain Qussera-OC": [696, 794], + "Ain Qussera-PTL": [613, 749], + "Ain Qussera-OPS": [699, 642], + "Ain Qussera-UG": [601, 661], + "Ain Qussera-MK": [655, 689], + "Sidi Aissa-OC": [860, 744], + "Sidi Aissa-PTL": [791, 781], + "Sidi Aissa-OPS": [870, 641], + "Sidi Aissa-UG": [786, 613], + "Sidi Aissa-MK": [769, 731], + "Bougie-OC": [1029, 424], + "Bougie-PTL": [972, 424], + "Bougie-OPS": [1030, 365], + "Bougie-UG": [973, 365], + "Bougie-MK": [1047, 303], + "Bordj Bou Arreridj-OC": [893, 543], + "Bordj Bou Arreridj-PTL": [836, 544], + "Bordj Bou Arreridj-OPS": [893, 485], + "Bordj Bou Arreridj-UG": [837, 485], + "Bordj Bou Arreridj-MK": [945, 539], + "Tizi Ouzou-OC": [903, 411], + "Tizi Ouzou-PTL": [845, 411], + "Tizi Ouzou-OPS": [902, 353], + "Tizi Ouzou-UG": [845, 353], + "Tizi Ouzou-MK": [845, 262], + "Biskra-OC": [1146, 993], + "Biskra-PTL": [1004, 968], + "Biskra-OPS": [1216, 926], + "Biskra-UG": [988, 858], + "Biskra-MK": [1083, 889], + "Batna-OC": [1284, 859], + "Batna-PTL": [1143, 812], + "Batna-OPS": [1303, 781], + "Batna-UG": [1113, 737], + "Batna-MK": [1182, 749], + "Tebessa-OC": [1330, 704], + "Tebessa-PTL": [1249, 688], + "Tebessa-OPS": [1366, 642], + "Tebessa-UG": [1175, 639], + "Tebessa-MK": [1231, 619], + "Barika-OC": [1027, 714], + "Barika-PTL": [954, 737], + "Barika-OPS": [1082, 621], + "Barika-UG": [962, 595], + "Barika-MK": [957, 662], + "Souk Ahras-OC": [1386, 551], + "Souk Ahras-PTL": [1329, 550], + "Souk Ahras-OPS": [1391, 490], + "Souk Ahras-UG": [1327, 488], + "Souk Ahras-MK": [1381, 400], + "Constantine-OC": [1227, 263], + "Constantine-PTL": [1170, 263], + "Constantine-OPS": [1227, 204], + "Constantine-UG": [1170, 204], + "Constantine-MK": [1280, 151], + "Phillippeville-OC": [1244, 540], + "Phillippeville-PTL": [1251, 456], + "Phillippeville-OPS": [1306, 402], + "Phillippeville-UG": [1249, 344], + "Phillippeville-MK": [1306, 307], + "Setif-OC": [1139, 541], + "Setif-PTL": [1043, 523], + "Setif-OPS": [1164, 376], + "Setif-UG": [1104, 408], + "Setif-MK": [1157, 467], + "Algiers-OC": [742, 282], + "Algiers-PTL": [685, 282], + "Algiers-OPS": [742, 223], + "Algiers-UG": [685, 223], + "Algiers-MK": [771, 168], + "Oran-OC": [319, 415], + "Oran-PTL": [263, 415], + "Oran-OPS": [319, 356], + "Oran-UG": [263, 356], + "Oran-MK": [343, 300], + "Morocco-UG": [87, 1005], + "Tunisia-UG": [1412, 951], + "France-UG": [963, 162], + "France-MK": [1013, 128], +} +// END LAYOUT DATA + let ui = { board: document.getElementById("map"), map: document.getElementById("map"), diff --git a/tools/gendata.js b/tools/gendata.js index 7abf269..4e10a79 100644 --- a/tools/gendata.js +++ b/tools/gendata.js @@ -14,10 +14,10 @@ let areas = [] let zone_areas = {} let next_location_id = 0 -function def_area(id, name, type, zone, x, y, w, h) { +function def_area(id, name, type, zone) { let loc = next_location_id++ locations[id] = loc - areas.push({loc, id, name, type, zone, x, y, w, h}) + areas.push({loc, id, name, type, zone}) if (zone) { if (!(zone in zone_areas)) { zone_areas[zone] = [] @@ -32,40 +32,40 @@ def_area("DEPLOY", "Deployment") def_area("ELIMINATED", "Eliminated") // countries -def_area("FRANCE", "France", COUNTRY, null, 1690.3, 244.8, 94, 94) -def_area("TUNISIA", "Tunisia", COUNTRY, "TUNISIA", 2499.9, 1667.6, 94, 94) -def_area("MOROCCO", "Morocco", COUNTRY, "MOROCCO", 109, 1765, 94, 94) - -def_area("I-1", "Barika", RURAL, "I", 1708.1, 1117.9) -def_area("I-2", "Batna", REMOTE, "I", 2185.6, 1390.9) -def_area("I-3", "Biskra", REMOTE, "I", 1853.6, 1620.9) -def_area("I-4", "Tebessa", RURAL, "I", 2299.6, 1120.9) - -def_area("CONSTANTINE", "Constantine", URBAN, "II", 2066.6, 315.8) -def_area("II-1", "Setif", RURAL, "II", 1917.6, 800.8) -def_area("II-2", "Phillippeville", RURAL, "II", 2200.6, 584.9) -def_area("II-3", "Souk Ahras", RURAL, "II", 2347.6, 848.9) - -def_area("III-1", "Tizi Ouzou", RURAL, "III", 1473.6, 578.9) -def_area("III-2", "Bordj Bou Arreridj", RURAL, "III", 1465.6, 832.9) -def_area("III-3", "Bougie", RURAL, "III", 1703.6, 616.9) - -def_area("ALGIERS", "Algiers", URBAN, "IV", 1185.6, 346.8) -def_area("IV-1", "Medea", RURAL, "IV", 1212, 727) -def_area("IV-2", "Orleansville", RURAL, "IV", 982, 780.2) - -def_area("ORAN", "Oran", URBAN, "V", 430.6, 588.8) -def_area("V-1", "Mecheria", REMOTE, "V", 234, 1485.7) -def_area("V-2", "Tlemcen", RURAL, "V", 173, 1140.9) -def_area("V-3", "Sidi Bel Abbes", RURAL, "V", 476, 1038) -def_area("V-4", "Mostaganem", RURAL, "V", 741, 863.9) -def_area("V-5", "Saida", REMOTE, "V", 501, 1419.1) -def_area("V-6", "Mascara", REMOTE, "V", 785, 1302.9) -def_area("V-7", "Ain Sefra", REMOTE, "V", 752, 1670.9) -def_area("V-8", "Laghouat", REMOTE, "V", 1191, 1615.6) - -def_area("VI-1", "Sidi Aissa", REMOTE, "VI", 1385, 1186) -def_area("VI-2", "Ain Qussera", RURAL, "VI", 1070.6, 1235.6) +def_area("FRANCE", "France", COUNTRY, null) +def_area("TUNISIA", "Tunisia", COUNTRY, "TUNISIA") +def_area("MOROCCO", "Morocco", COUNTRY, "MOROCCO") + +def_area("I-1", "Barika", RURAL, "I") +def_area("I-2", "Batna", REMOTE, "I") +def_area("I-3", "Biskra", REMOTE, "I") +def_area("I-4", "Tebessa", RURAL, "I") + +def_area("CONSTANTINE", "Constantine", URBAN, "II") +def_area("II-1", "Setif", RURAL, "II") +def_area("II-2", "Phillippeville", RURAL, "II") +def_area("II-3", "Souk Ahras", RURAL, "II") + +def_area("III-1", "Tizi Ouzou", RURAL, "III") +def_area("III-2", "Bordj Bou Arreridj", RURAL, "III") +def_area("III-3", "Bougie", RURAL, "III") + +def_area("ALGIERS", "Algiers", URBAN, "IV") +def_area("IV-1", "Medea", RURAL, "IV") +def_area("IV-2", "Orleansville", RURAL, "IV") + +def_area("ORAN", "Oran", URBAN, "V") +def_area("V-1", "Mecheria", REMOTE, "V") +def_area("V-2", "Tlemcen", RURAL, "V") +def_area("V-3", "Sidi Bel Abbes", RURAL, "V") +def_area("V-4", "Mostaganem", RURAL, "V") +def_area("V-5", "Saida", REMOTE, "V") +def_area("V-6", "Mascara", REMOTE, "V") +def_area("V-7", "Ain Sefra", REMOTE, "V") +def_area("V-8", "Laghouat", REMOTE, "V") + +def_area("VI-1", "Sidi Aissa", REMOTE, "VI") +def_area("VI-2", "Ain Qussera", RURAL, "VI") let adjecents = {} diff --git a/tools/genlayout.py b/tools/genlayout.py new file mode 100644 index 0000000..2e7bafe --- /dev/null +++ b/tools/genlayout.py @@ -0,0 +1,33 @@ +from bs4 import BeautifulSoup + +SCALE = 1.8033333333333332 + +def readsvg(filename): + with open(filename) as fp: + soup = BeautifulSoup(fp, features="xml") + + result = [] + boxes = soup.find('g', id='Mission-Boxes') + for box in boxes.find_all('g', recursive=False): + area_name = box.attrs.get('serif:id', box.attrs['id']) + for rect in box.find_all('rect'): + rect_id = rect.attrs.get('serif:id', rect.attrs['id']) + x = float(rect.attrs['x']) + y = float(rect.attrs['y']) + w = float(rect.attrs['width']) + h = float(rect.attrs['height']) + xc = round((x+w/2.0)/SCALE) + yc = round((y+h/2.0)/SCALE) + name = area_name + '-' + rect_id + result.append([name, xc, yc]) + + return result + +def print_list(data): + print("const LAYOUT = {") + for (name, x, y) in data: + print(f'\t"{name}": [{x}, {y}],') + print("}") + +result = readsvg("tools/layout.svg") +print_list(result) diff --git a/tools/layout.svg b/tools/layout.svg new file mode 100644 index 0000000..00c43af --- /dev/null +++ b/tools/layout.svg @@ -0,0 +1,449 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3