aether-framework/resources/[aether]/aether-core/client/nui.lua
Jerrit Fritzsche e4b82dd685 Aether-Framework: Fachmodule, Admin-Panel und Docker-Datenbank
- 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>
2026-07-27 18:55:32 +02:00

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)