243 lines
7.9 KiB
TypeScript
243 lines
7.9 KiB
TypeScript
|
|
|
||
|
|
module mod_vtm_darstellung_steuerung
|
||
|
|
{
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @author kcf <vidofnir@folksprak.org>
|
||
|
|
*/
|
||
|
|
const svg_float_praezission : int = 4;
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @author kcf <vidofnir@folksprak.org>
|
||
|
|
*/
|
||
|
|
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 <vidofnir@folksprak.org>
|
||
|
|
*/
|
||
|
|
export class klasse_web_welt
|
||
|
|
{
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @author kcf <vidofnir@folksprak.org>
|
||
|
|
*/
|
||
|
|
protected aufbau : mod_vtm_aufbau.klasse_welt;
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @author kcf <vidofnir@folksprak.org>
|
||
|
|
*/
|
||
|
|
public constructor(aufbau : mod_vtm_aufbau.klasse_welt)
|
||
|
|
{
|
||
|
|
this.aufbau = aufbau;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @author kcf <vidofnir@folksprak.org>
|
||
|
|
*/
|
||
|
|
public darstellen() : mod_vtm_helfer.schnittstelle_xmlknoten
|
||
|
|
{
|
||
|
|
let kinder_welt : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
|
||
|
|
// felder
|
||
|
|
{
|
||
|
|
let kinder_felder : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
|
||
|
|
this.aufbau.felder_lesen().forEach
|
||
|
|
(
|
||
|
|
({"stelle": stelle, "aktor": aktor}) =>
|
||
|
|
{
|
||
|
|
let kinder_feld : Array<mod_vtm_helfer.schnittstelle_xmlknoten> = [];
|
||
|
|
// 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 = <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 = <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 = <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 = <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;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|