refactor(tactical-app): modernize state management with GetX controllers, bindings, and clean MVP architecture
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:intaleq_maps/intaleq_maps.dart';
|
||||
import '../models/military_operations_models.dart';
|
||||
import '../services/artillery_ballistics_engine.dart';
|
||||
|
||||
/// ============================================================================
|
||||
/// [ArtilleryController] - وحدة التحكم برماية المدفعية وقوس القذيفة
|
||||
/// ============================================================================
|
||||
/// English:
|
||||
/// GetX Controller managing artillery firing mission parameters, ballistic
|
||||
/// trajectory calculations, weapon profiles, and crest clearance checks.
|
||||
///
|
||||
/// العربية:
|
||||
/// متحكم GetX لإدارة معايير رماية المدفعية الميدانية، حلول الرماية البالستية،
|
||||
/// اختيار أنظمة السلاح، وفحص سلامة المسار من الاصطدام بقمم الجبال (Crest Clearance).
|
||||
/// ============================================================================
|
||||
class ArtilleryController extends GetxController {
|
||||
// ── Observables / الحالات التفاعلية ──────────────────────────────────────
|
||||
final Rx<LatLng?> gunPosition = Rx<LatLng?>(null);
|
||||
final Rx<LatLng?> targetPosition = Rx<LatLng?>(null);
|
||||
final Rx<ArtilleryWeaponSystem> selectedWeapon =
|
||||
Rx<ArtilleryWeaponSystem>(ArtilleryWeaponSystem.standardSystems.first);
|
||||
final RxBool highAngle = false.obs;
|
||||
final RxBool isLoading = false.obs;
|
||||
final Rx<ArtilleryFiringSolution?> firingSolution =
|
||||
Rx<ArtilleryFiringSolution?>(null);
|
||||
|
||||
/// Set Battery Gun Position / تعيين موقع مربض المدفعية
|
||||
void setGunPosition(LatLng pos) {
|
||||
gunPosition.value = pos;
|
||||
calculateFiringSolution();
|
||||
}
|
||||
|
||||
/// Set Enemy Target Position / تعيين موقع الهدف المعادي
|
||||
void setTargetPosition(LatLng pos) {
|
||||
targetPosition.value = pos;
|
||||
calculateFiringSolution();
|
||||
}
|
||||
|
||||
/// Swap Gun and Target Positions / تبديل مربض المدفعية مع الهدف
|
||||
void swapPositions() {
|
||||
final temp = gunPosition.value;
|
||||
gunPosition.value = targetPosition.value;
|
||||
targetPosition.value = temp;
|
||||
calculateFiringSolution();
|
||||
}
|
||||
|
||||
/// Select Weapon Profile / اختيار نوع نظام المدفعية أو الهاون
|
||||
void selectWeapon(ArtilleryWeaponSystem weapon) {
|
||||
selectedWeapon.value = weapon;
|
||||
calculateFiringSolution();
|
||||
}
|
||||
|
||||
/// Toggle High-Angle Trajectory / التبديل بين قوس الرماية المنخفض والعالي
|
||||
void toggleHighAngle(bool value) {
|
||||
highAngle.value = value;
|
||||
calculateFiringSolution();
|
||||
}
|
||||
|
||||
/// Calculate Ballistic Firing Solution / احتساب الحل البالستي الشامل
|
||||
Future<void> calculateFiringSolution() async {
|
||||
if (gunPosition.value == null || targetPosition.value == null) {
|
||||
firingSolution.value = null;
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
isLoading.value = true;
|
||||
final sol = await ArtilleryBallisticsEngine.calculateFireMission(
|
||||
weapon: selectedWeapon.value,
|
||||
gunPos: gunPosition.value!,
|
||||
targetPos: targetPosition.value!,
|
||||
highAngle: highAngle.value,
|
||||
);
|
||||
firingSolution.value = sol;
|
||||
} catch (e) {
|
||||
firingSolution.value = null;
|
||||
} finally {
|
||||
isLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
/// Clear artillery state / إعادة ضبط رماية المدفعية
|
||||
void reset() {
|
||||
gunPosition.value = null;
|
||||
targetPosition.value = null;
|
||||
firingSolution.value = null;
|
||||
highAngle.value = false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user