Yet another Löve2D GUI libary - na még egy Löve2D GUI könyvtár
Készítés ideje: 2020 május 1-10
Linkek
Minek még egy Löve2D GUI lib?
Ha ránézünk egy Löve2D modulgyűjteményre, azt látjuk hogy már létezik egy tucat különböző könyvtár GUI-k tervezésére. Amikor a Crossfire-höz kerestem egy használhatót, mégsem találtam olyat ami tetszett volna.
Az én követelményeim ezek voltak:
- egyszerű - nem kell 50 sor kód két gomb hozzáadásához
- reaktív, ön-elrendező - nem nekem kell minden gombot elhelyeznem kézzel
- platformfüggetlen - működik windowson, linuxon és androidon is
Nekem elég lett volna pár alap gomb és címke, de ilyen libet, ami megfelelt volna mindennek, nem találtam…
Úgy döntöttem összedobok gyorsan valamit, ami használható lesz. GUI libet úgy sem írtam még - ha nem számítjuk amit egyszer minecraftban, a computercraft-os érintőképernyős monitorokra írtam és szöveges karakterekkel rajzolt…
Felhasználtam a classic Lua-s OOP könyvtárat, mivel segített az öröklődés implementálásában.
Tervezés
Ami nagyon egyedivé teszi a YALG-ot a többi könyvtárral szemben, az hogy az YALG magától elrendezi az egyes elemeket. A tárolók automatikusan felosztják a teret az elemek között, az elemek beállítástól függően igazítják középre magukat vagy töltik ki a rendelkezésre álló teret. Nem mondom meg semminek hogy hova kerüljön, az elrendezés alapján magukat rendezik el.
Elemek
A YALG nagyon egyszerű, összesen 6 fajta elemet tartalmaz:
GUI
- a legmagasabb szintű tároló, mindent más elem ebbe kerülVDiv
- függőlegesen osztott tárolóHDiv
- vízszintesen osztott tárolóSwitcher
- választóelem, amely több al-elem között képes váltaniLabel
- címkeButton
- gomb
Felépítés
Az elemekből összetett felületek deklaratív módon építhetőek fel:
local g = GUI(
HDiv(
Button("Gomb 1"),
Button("Gomb 2")
),
Button("Gomb 3")
)
Stílusok
Minden elem rendelkezik stílusbeállításokkal, amelyek egy részét a CSS-ből másoltam, például:
margin
- margófont
- betűtípusbackgroundColor
- háttérszínplacement
- elhelyezés
Minden elemtípusnak vannak alapértelmezettjei (a gomb és a címke csak ezekben különbözik!), de bármelyiket felülírhatjuk.
ID-k
Minden elem kap egy szigorúan egyedi ID-t, de mi is beállíthatunk nekik sajátot. Ez jól jön ha később módosítani akarunk valamely tulajdonságot.
Események
Összesen 3 fajta eseményt kezel a rendszer:
mouseEnter
- az egér az elem fölé lett húzvamouseLeave
- az egér elment az elem fölülclick
- az egérrel rákattintottunk az elemre
Hekkelhetőség
A YALG baromi egyszerű, de mégis utólag alakítgatható, és elég sokat ki lehet belőle hozni. Erre szerintem jó példa a két játék amikben használtam, a 13 és a crossfire
Továbbiak
Eddig mindössze egyszer változtattam rajta az 1.0 verzió után, minden másra képes volt amit akartam tőle. Simán működik androidon is (bár ott az egérhuzigálós események ugye kiesnek)
Továbbfejleszteni nem nagyon akarom, de jó első próbálkozás volt. Ha még egyszer ilyet csinálok, tudom hogy mi fogok másként csinálni - és fel is írtam szóval nem felejtem el…