- aether-medical: Stationen/Belegung, Intensivstation, Blutbank, Fuhrpark, Nachrichten/Aushänge, Berichte und Textbausteine (server + NUI) - aether-admin: vollständiges Server-Admin-Panel als echtes FiveM-Resource, an aether-core gekoppelt (Rechte über aether_users.admin_group), mit WebRTC-Live-Kameras (Bildschirmfreigabe) und separatem Media-Server (SFU) - Prototypen admin/ vervollständigt - SQL-Schema aether_admin.sql - Docker-Compose mit MariaDB und idempotenter Auto-Migration (schema_migrations) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
77 lines
2.5 KiB
Lua
77 lines
2.5 KiB
Lua
-- =====================================================================
|
|
-- Aether Core — NUI-Helfer
|
|
-- Einheitliches Oeffnen/Schliessen von Benutzeroberflaechen.
|
|
-- Damit muss nicht jedes Modul Fokus- und Cursor-Logik neu bauen.
|
|
-- =====================================================================
|
|
|
|
Aether = Aether or {}
|
|
|
|
-- Name der Ressource, deren Oberflaeche gerade offen ist (nil = keine)
|
|
Aether.OffeneNui = nil
|
|
|
|
--- Oeffnet eine NUI: setzt Fokus und Mauszeiger
|
|
--- @param ressource string Name der Ressource, die die Oberflaeche besitzt
|
|
--- @param nachricht table|nil Daten, die an die Oberflaeche geschickt werden
|
|
function Aether.OeffneNui(ressource, nachricht)
|
|
-- Es darf immer nur eine Oberflaeche gleichzeitig offen sein
|
|
if Aether.OffeneNui and Aether.OffeneNui ~= ressource then
|
|
Aether.SchliesseNui()
|
|
end
|
|
|
|
Aether.OffeneNui = ressource
|
|
SetNuiFocus(true, true)
|
|
|
|
if nachricht then
|
|
SendNuiMessage(json.encode(nachricht))
|
|
end
|
|
end
|
|
|
|
--- Schliesst die aktuell offene NUI und gibt die Steuerung zurueck
|
|
function Aether.SchliesseNui()
|
|
if not Aether.OffeneNui then return end
|
|
SetNuiFocus(false, false)
|
|
Aether.OffeneNui = nil
|
|
end
|
|
|
|
--- Schickt Daten an die offene Oberflaeche, ohne den Fokus zu aendern
|
|
--- @param nachricht table Zu sendende Daten
|
|
function Aether.SendeAnNui(nachricht)
|
|
SendNuiMessage(json.encode(nachricht))
|
|
end
|
|
|
|
-- ---------------------------------------------------------------------
|
|
-- Sicherheitsnetz: bei ESC immer den Fokus freigeben
|
|
-- ---------------------------------------------------------------------
|
|
CreateThread(function()
|
|
while true do
|
|
if Aether.OffeneNui then
|
|
Wait(0)
|
|
-- Taste 322 = ESC
|
|
if IsControlJustReleased(0, 322) then
|
|
Aether.SchliesseNui()
|
|
-- Der offenen Ressource Bescheid geben, damit sie aufraeumen kann
|
|
TriggerEvent('aether:client:nuiGeschlossen', Aether.OffeneNui)
|
|
end
|
|
else
|
|
Wait(250)
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- =====================================================================
|
|
-- EXPORTS fuer andere Module
|
|
-- Beispiel: exports['aether-core']:OeffneNui('aether-phone', { aktion = 'oeffnen' })
|
|
-- =====================================================================
|
|
|
|
exports('OeffneNui', function(ressource, nachricht)
|
|
Aether.OeffneNui(ressource, nachricht)
|
|
end)
|
|
|
|
exports('SchliesseNui', function()
|
|
Aether.SchliesseNui()
|
|
end)
|
|
|
|
exports('SendeAnNui', function(nachricht)
|
|
Aether.SendeAnNui(nachricht)
|
|
end)
|