module mod_vtm_darstellung_steuerung { /** * @author kcf */ const svg_float_praezission : int = 4; /** * @author kcf */ function symbol_zu_farbe(symbol : mod_vtm_aufbau.typ_symbol) : string { switch (symbol) { case 0: {return "hsl( 0, 50%, 50%)"; break;} case 1: {return "hsl(120, 50%, 50%)"; break;} default: {throw (new Error("unbehandeltes Symbol")); break;} } } /** * @author kcf */ export class klasse_web_welt { /** * @author kcf */ protected aufbau : mod_vtm_aufbau.klasse_welt; /** * @author kcf */ public constructor(aufbau : mod_vtm_aufbau.klasse_welt) { this.aufbau = aufbau; } /** * @author kcf */ public darstellen() : mod_vtm_helfer.schnittstelle_xmlknoten { let kinder_welt : Array = []; // felder { let kinder_felder : Array = []; this.aufbau.felder_lesen().forEach ( ({"stelle": stelle, "aktor": aktor}) => { let kinder_feld : Array = []; // rahmen { let knoten_rahmen : mod_vtm_helfer.schnittstelle_xmlknoten = ( new mod_vtm_helfer.klasse_xmlknoten_normal ( "circle", { "cx": (0.0).toFixed(svg_float_praezission), "cy": (0.0).toFixed(svg_float_praezission), "r": (0.5).toFixed(svg_float_praezission), } ) ); kinder_feld.push(knoten_rahmen); } // inhalt { if (aktor instanceof mod_vtm_aufbau.klasse_befoerderer) { let befoerderer : mod_vtm_aufbau.klasse_befoerderer = (aktor); let richtung : mod_vtm_aufbau.typ_richtung = befoerderer.richtung_lesen(); let knoten_pfeil = ( new mod_vtm_helfer.klasse_xmlknoten_normal ( "path", { "class": "pfeil", "d": "M +0.4 0.0 L -0.2 +0.1 L -0.2 -0.1 Z", "style": ("stroke: none; fill: " + "hsl(0, 0%, 50%)" + ";"), "transform": ("rotate(" + ((richtung/6.0) * 360).toFixed(svg_float_praezission) + ")"), } ) ); kinder_feld.push(knoten_pfeil); } else if (aktor instanceof mod_vtm_aufbau.klasse_schreiber) { let schreiber : mod_vtm_aufbau.klasse_schreiber = (aktor); let richtung : mod_vtm_aufbau.typ_richtung = schreiber.richtung_lesen(); let symbol : mod_vtm_aufbau.typ_symbol = schreiber.symbol_lesen(); let knoten_pfeil = ( new mod_vtm_helfer.klasse_xmlknoten_normal ( "path", { "class": "pfeil", "d": "M +0.4 0.0 L -0.2 +0.1 L -0.2 -0.1 Z", "style": ("stroke: none; fill: " + symbol_zu_farbe(symbol) + ";"), "transform": ("rotate(" + ((richtung/6.0) * 360).toFixed(svg_float_praezission) + ")"), } ) ); kinder_feld.push(knoten_pfeil); } else if (aktor instanceof mod_vtm_aufbau.klasse_leser) { let leser : mod_vtm_aufbau.klasse_leser = (aktor); let richtung : mod_vtm_aufbau.typ_richtung = leser.richtung_lesen(); // ausgang ersatz { let knoten_pfeil = ( new mod_vtm_helfer.klasse_xmlknoten_normal ( "path", { "class": "pfeil", "d": "M +0.4 0.0 L +0.1 +0.1 L +0.1 -0.1 Z", "style": ("stroke: none; fill: " + "hsl(0, 0%, 50%)" + ";"), "transform": ("rotate(" + ((richtung/6.0) * 360).toFixed(svg_float_praezission) + ")"), } ) ); kinder_feld.push(knoten_pfeil); } // ausgang rot { let knoten_pfeil = ( new mod_vtm_helfer.klasse_xmlknoten_normal ( "path", { "class": "pfeil", "d": "M +0.4 0.0 L +0.1 +0.1 L +0.1 -0.1 Z", "style": ("stroke: none; fill: " + symbol_zu_farbe(0) + ";"), "transform": ("rotate(" + (((richtung+1)/6.0) * 360).toFixed(svg_float_praezission) + ")"), } ) ); kinder_feld.push(knoten_pfeil); } // ausgang gruen { let knoten_pfeil = ( new mod_vtm_helfer.klasse_xmlknoten_normal ( "path", { "class": "pfeil", "d": "M +0.4 0.0 L +0.1 +0.1 L +0.1 -0.1 Z", "style": ("stroke: none; fill: " + symbol_zu_farbe(1) + ";"), "transform": ("rotate(" + (((richtung-1)/6.0) * 360).toFixed(svg_float_praezission) + ")"), } ) ); kinder_feld.push(knoten_pfeil); } } else if (aktor instanceof mod_vtm_aufbau.klasse_annehmer) { let annehmer : mod_vtm_aufbau.klasse_annehmer = (aktor); // TODO console.warn("not implemented"); } else { let meldung : string = ("unbehandelter Aktor-Typ"); throw (new Error(meldung)); } } let position : typ_position = position_von_stelle(stelle); let knoten_feld : mod_vtm_helfer.schnittstelle_xmlknoten = ( new mod_vtm_helfer.klasse_xmlknoten_normal ( "g", { "class": "feld", "transform": ("translate(" + position.x.toFixed(svg_float_praezission) + ", " + position.y.toFixed(svg_float_praezission) + ")"), }, kinder_feld ) ); kinder_felder.push(knoten_feld); } ) ; let knoten_felder : mod_vtm_helfer.schnittstelle_xmlknoten = ( new mod_vtm_helfer.klasse_xmlknoten_normal ( "g", { "class": "felder", }, kinder_felder ) ); kinder_welt.push(knoten_felder); } // figur { let figur : mod_vtm_aufbau.klasse_figur = this.aufbau.figur_lesen(); let position : typ_position = position_von_stelle(figur.stelle_lesen()); let knoten_figur : mod_vtm_helfer.schnittstelle_xmlknoten = ( new mod_vtm_helfer.klasse_xmlknoten_normal ( "circle", { "class": "figur", "cx": position.x.toFixed(svg_float_praezission), "cy": position.y.toFixed(svg_float_praezission), "r": (0.2).toFixed(svg_float_praezission), } ) ); kinder_welt.push(knoten_figur); } let knoten_welt : mod_vtm_helfer.schnittstelle_xmlknoten = ( new mod_vtm_helfer.klasse_xmlknoten_normal ( "g", { "class": "welt", }, kinder_welt ) ); return knoten_welt; } } }