Files
qt5-legatus-legacy/Lts/Tools/rme-playback/simulator/Map_Component.qml
T
2026-08-13 18:33:10 +02:00

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)
}
}
}