67 lines
2.7 KiB
Dart
67 lines
2.7 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import '../models/military_operations_models.dart';
|
|
|
|
/// ============================================================================
|
|
/// [OverlaysController] - وحدة التحكم بمنظومة الشفافات العسكرية التكتيكية (IPB)
|
|
/// ============================================================================
|
|
/// English:
|
|
/// GetX Controller managing Intelligence Preparation of Battlefield (IPB)
|
|
/// transparent overlays, FEBA lines, mobility corridors, and No-Fire Areas.
|
|
///
|
|
/// العربية:
|
|
/// متحكم GetX لإدارة منظومة الشفافات العسكرية التكتيكية (IPB)،
|
|
/// والخطوط الأمامية لمنطقة القتال (FEBA)، وممرات الحركة، ومناطق حظر الرماية.
|
|
/// ============================================================================
|
|
class OverlaysController extends GetxController {
|
|
// ── Observables / الحالات التفاعلية ──────────────────────────────────────
|
|
final RxList<TacticalOverlayLayer> overlayLayers = <TacticalOverlayLayer>[
|
|
TacticalOverlayLayer(
|
|
id: 'layer_feba',
|
|
nameAr: 'الخط الأمامي لمنطقة القتال (FEBA / FLOT)',
|
|
color: const Color(0xFF0071E3),
|
|
isVisible: false,
|
|
lines: [],
|
|
),
|
|
TacticalOverlayLayer(
|
|
id: 'layer_mobility',
|
|
nameAr: 'ممرات الحركة ومحاور التقدم (Mobility Corridors)',
|
|
color: const Color(0xFF10B981),
|
|
isVisible: false,
|
|
lines: [],
|
|
),
|
|
TacticalOverlayLayer(
|
|
id: 'layer_no_fire',
|
|
nameAr: 'مناطق الحظر وعدم الرماية (No-Fire Areas - NFA)',
|
|
color: const Color(0xFFEF4444),
|
|
isVisible: false,
|
|
polygons: [],
|
|
),
|
|
].obs;
|
|
|
|
/// Toggle Overlay Layer Visibility / تبديل إظهار أو إخفاء طبقة معينة
|
|
void toggleLayer(String layerId, bool isVisible) {
|
|
final idx = overlayLayers.indexWhere((l) => l.id == layerId);
|
|
if (idx != -1) {
|
|
overlayLayers[idx] = overlayLayers[idx].copyWith(isVisible: isVisible);
|
|
}
|
|
}
|
|
|
|
/// Show All Overlay Layers / إظهار كافة الشفافات
|
|
void showAll() {
|
|
for (int i = 0; i < overlayLayers.length; i++) {
|
|
overlayLayers[i] = overlayLayers[i].copyWith(isVisible: true);
|
|
}
|
|
}
|
|
|
|
/// Hide All Overlay Layers / إخفاء كافة الشفافات
|
|
void hideAll() {
|
|
for (int i = 0; i < overlayLayers.length; i++) {
|
|
overlayLayers[i] = overlayLayers[i].copyWith(isVisible: false);
|
|
}
|
|
}
|
|
|
|
/// Reset / إعادة تعيين
|
|
void reset() => hideAll();
|
|
}
|