95 lines
2.7 KiB
TypeScript
95 lines
2.7 KiB
TypeScript
import { JsonObject, JsonProperty } from 'typescript-json-serializer';
|
|
import Style from 'ol/style/Style'
|
|
import Feature from 'ol/Feature'
|
|
import CircleStyle from 'ol/style/Circle'
|
|
import Point from 'ol/geom/Point'
|
|
import Fill from 'ol/style/Fill'
|
|
import Stroke from 'ol/style/Stroke'
|
|
import InterfaceManager from '@burguillosinfo/conquer/interface-manager'
|
|
import NodeView from '@burguillosinfo/conquer/interface/node-view'
|
|
|
|
@JsonObject()
|
|
export default class MapNode {
|
|
private feature: Feature | null = null;
|
|
private callbacks: Record<string, Array<() => void>> = {}
|
|
|
|
constructor(
|
|
@JsonProperty() private uuid: string,
|
|
@JsonProperty() private coordinate_1: number,
|
|
@JsonProperty() private coordinate_2: number,
|
|
@JsonProperty() private type: string,
|
|
@JsonProperty() private name: string,
|
|
@JsonProperty() private description: string,
|
|
@JsonProperty() private kind: string,
|
|
) {
|
|
}
|
|
|
|
public click(interfaceManager: InterfaceManager): void {
|
|
const viewNodeInterface = new NodeView(this);
|
|
viewNodeInterface.on('close', () => {
|
|
interfaceManager.remove(viewNodeInterface);
|
|
});
|
|
interfaceManager.push(viewNodeInterface);
|
|
this.runCallbacks('click');
|
|
}
|
|
|
|
public on(eventName: string, callback: () => void): void {
|
|
if (this.callbacks[eventName] === undefined) {
|
|
this.callbacks[eventName] = []
|
|
}
|
|
this.callbacks[eventName].push(callback)
|
|
}
|
|
|
|
protected runCallbacks(eventName: string) {
|
|
const callbacks = this.callbacks[eventName];
|
|
if (callbacks === undefined) {
|
|
return
|
|
}
|
|
for (const callback of callbacks) {
|
|
callback()
|
|
}
|
|
}
|
|
|
|
public getType(): string {
|
|
return this.type;
|
|
}
|
|
|
|
public getName(): string {
|
|
return this.name;
|
|
}
|
|
|
|
public getDescription(): string {
|
|
return this.description;
|
|
}
|
|
|
|
public getId(): string {
|
|
return 'node-' + this.uuid;
|
|
}
|
|
|
|
public getFeature(): Feature {
|
|
if (this.feature === null) {
|
|
console.log(this.coordinate_1);
|
|
console.log(this.coordinate_2);
|
|
this.feature = new Feature({
|
|
geometry: new Point([this.coordinate_1, this.coordinate_2]),
|
|
type: 'node-' + this.uuid,
|
|
})
|
|
}
|
|
return this.feature;
|
|
}
|
|
|
|
public getStyle(): Style {
|
|
return new Style({
|
|
image: new CircleStyle({
|
|
radius: 14,
|
|
fill: new Fill({color: 'white'}),
|
|
stroke: new Stroke({
|
|
color: 'gray',
|
|
width: 2,
|
|
})
|
|
})
|
|
});
|
|
}
|
|
|
|
}
|