181 lines
4.8 KiB
QML
Executable File
181 lines
4.8 KiB
QML
Executable File
import QtQuick
|
|
import QtPositioning
|
|
import QtLocation
|
|
import QtQuick.Controls
|
|
|
|
Rectangle {
|
|
id: mapContainer
|
|
width: parent.width * 3 / 4
|
|
height: parent.height
|
|
|
|
property real bookmarkTimestamp: 0
|
|
|
|
|
|
function statusGen() {
|
|
var random = Math.random();
|
|
var status;
|
|
|
|
if (random < 0.01) {
|
|
status = 'damaged';
|
|
} else if (random < 0.10) {
|
|
status = 'destroyed';
|
|
} else {
|
|
status = 'fully_capable';
|
|
}
|
|
|
|
return status
|
|
}
|
|
|
|
function partieGen() {
|
|
var random = Math.random();
|
|
var status;
|
|
|
|
if (random < 0.33) {
|
|
status = 'Red';
|
|
} else {
|
|
status = 'Blue';
|
|
}
|
|
|
|
return status
|
|
}
|
|
|
|
function createMarker() {
|
|
var centerLat = 53.5200;
|
|
var centerLng = 9.4050;
|
|
var latRange = 0.1; // Beschränke auf ±0.1 Grad um centerLat
|
|
var lngRange = 0.1; // Beschränke auf ±0.1 Grad um centerLng
|
|
|
|
for (var i = 1; i <= 200; i++) {
|
|
var lat = centerLat + (Math.random() * latRange * 2 - latRange);
|
|
var lng = centerLng + (Math.random() * lngRange * 2 - lngRange);
|
|
|
|
|
|
var component = Qt.createComponent("marker.qml");
|
|
var sprite = component.createObject(map, {
|
|
"lat": lat,
|
|
"lng": lng
|
|
});
|
|
logic.markerHelper.postObject(replay_uuid, i, lng, lat, statusGen(), partieGen());
|
|
markers.push(sprite);
|
|
}
|
|
return markers;
|
|
}
|
|
|
|
|
|
Timer {
|
|
id: moveTimer
|
|
interval: 1000 // Move every second
|
|
repeat: true
|
|
onTriggered: {
|
|
for (var i = 0 ; i < markers.length; i++) {
|
|
|
|
var newLat = markers[i].lat + (Math.random() * 0.01 - 0.005)
|
|
var newLng = markers[i].lng + (Math.random() * 0.01 - 0.005)
|
|
|
|
markers[i].lat = newLat
|
|
markers[i].lng = newLng
|
|
|
|
logic.markerHelper.postObject(replay_uuid, i+1, newLng, newLat, statusGen(), partieGen())
|
|
}
|
|
}
|
|
}
|
|
|
|
Plugin {
|
|
id: mapPlugin
|
|
name: "osm"
|
|
PluginParameter {
|
|
name: "osm.mapping.custom.host"
|
|
value: "https://tile.openstreetmap.de/"
|
|
}
|
|
}
|
|
|
|
Map {
|
|
id: map
|
|
anchors.fill: parent
|
|
plugin: mapPlugin
|
|
center: QtPositioning.coordinate(53.5200, 9.4050) // Berlin
|
|
zoomLevel: 14
|
|
z: 1
|
|
|
|
property geoCoordinate startCentroid
|
|
property var markers: []
|
|
|
|
PinchHandler {
|
|
id: pinch
|
|
target: null
|
|
onActiveChanged: if (active) {
|
|
map.startCentroid = map.toCoordinate(
|
|
pinch.centroid.position, false)
|
|
}
|
|
onScaleChanged: delta => {
|
|
map.zoomLevel += Math.log2(delta)
|
|
map.alignCoordinateToPoint(
|
|
map.startCentroid, pinch.centroid.position)
|
|
}
|
|
onRotationChanged: {} // Deaktiviert Rotation
|
|
grabPermissions: PointerHandler.TakeOverForbidden
|
|
}
|
|
|
|
DragHandler {
|
|
id: drag
|
|
target: map
|
|
onTranslationChanged: delta => map.pan(-delta.x, -delta.y)
|
|
}
|
|
|
|
activeMapType: supportedMapTypes[supportedMapTypes.length - 1]
|
|
|
|
Button {
|
|
text: "Start Simulation"
|
|
width: parent.width
|
|
z: 10
|
|
onClicked: {
|
|
var sprites = createMarker()
|
|
|
|
for (var i = 0; i < sprites.length; i++) {
|
|
map.addMapItem(sprites[i])
|
|
}
|
|
|
|
moveTimer.start()
|
|
}
|
|
}
|
|
|
|
Button {
|
|
text: "Add Lesezeichen"
|
|
width: parent.width
|
|
z:10
|
|
y:25
|
|
onClicked: {
|
|
bookmarkTimestamp = Date.now();
|
|
bookmarkDialog.open();
|
|
}
|
|
}
|
|
}
|
|
Dialog {
|
|
id: bookmarkDialog
|
|
title: "Add Lesezeichen"
|
|
modal: true
|
|
standardButtons: Dialog.Ok | Dialog.Cancel
|
|
|
|
Column {
|
|
spacing: 10
|
|
padding: 20
|
|
|
|
TextField {
|
|
id: nameField
|
|
placeholderText: "Name"
|
|
}
|
|
|
|
TextArea {
|
|
id: descriptionField
|
|
placeholderText: "Description"
|
|
}
|
|
}
|
|
|
|
onAccepted: {
|
|
var name = nameField.text;
|
|
var description = descriptionField.text;
|
|
logic.bookmarkHelper.postBookmark(replay_uuid, name, description, bookmarkTimestamp)
|
|
}
|
|
}
|
|
}
|