vtm/quelldatein/darstellung_steuerung/welt.ts

243 lines
7.9 KiB
TypeScript
Raw Normal View History

2017-11-08 15:05:06 +01:00
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;
}
}
}