Zombie - Immediate Mode GUI

Kommentare anzeigen Worklog abonnieren
Gehe zu Seite 1, 2  Weiter

Worklogs Zombie - Immediate Mode GUI

20. Neues Konzept - "Immediate Mode GUI"

Montag, 31. Mai 2010 von ComNik
Huhu (:

Also, kurze Vorgeschichte:

Nachdem ich die Zombie GUI weitgehend nutzbar gekriegt hatte, wollte ich sie natürlich auch nutzen.
Also fing ich mit meinen lang geplanten Projekten an : Dem Map Editor für The Vorx und dem Entity Editor für Vorx³Physics.

Doch da entwickelten sich schon bald die ersten Unanehmlichkeiten (keine Fehler, nur eben Unannehmlichkeiten Wink).

Denn um die GUI für den Entity Editor auf den Schirm zu bringen musste ich soviel Code schreiben, dass ich das ganze der übersichtlichkeithalber in ein eigenes Include ausgelagert hatte.
Als erste Vereinfachung hab ich dann wie im letzten Eintrag beschrieben die Menü Strukturen eingeführt die das wohl häufigste Gadget in einem Editor schnell erstellen können.

Trotzdem war der "Creation Pass" immer noch ziemlich umfangreich.

Dann fand ich folgendes: Immediate Mode GUI Systems

Dieser Eintrag soll dazu dienen, diese (fantastische) Methode der GUI Implementation zu beschreiben und dann natürlich den Weg in die Zombie GUI erläutern.

Also los gehts.

Der alte Weg:

    Arrow 1.) Creation Pass
    Arrow 2.) Init Pass
    Arrow 3.) Action/Update Pass
    Arrow 4.) Render Pass


mal vornehm ausgedrückt Wink

Und nun die neue Methode:

    Arrow 1.) Action/Update Pass
    Arrow 2.) Render Pass


Wobei 1.) und 2.) meistens zusammengefasst werden. Nur noch 1 Pass also "Immediate".

Jetzt die Vorteile dieser Methode:

    Überhaupt kein Creation Pass - keinerlei Overhead im "Header"
    Keine GUI interne Speicherlast! (erklär ich weiter unten)
    Super einfach zu bedienen (immer nur eine Funktion pro Gadget)
    Keinerlei Synchronization zwischen Gadgets (siehe unten...)


und die Nachteile:

    Eventuell ein paar wirklich komplexe Möglichkeiten weniger
    Viel Code in der Hauptschleife (einfach Funktions Zeiger nutzen...)
    Kein einzelner Draw()/Update() Aufruf mehr



Das Konzept ist folgendes:

Warum muss jedes kleine Gadget ständig alle Daten speichern, die es brauchen würde, würde es gerade benutzt werden. Also angenommen wir haben zwei TextBoxen. Natürlich kann immer nur eine gleichzeitig genutzt werden. Die zweite speichert aber trotzdem alles was sie brauchen würde (Mausposition, Maximale Buchstabenzahl etc...). Das ansich wäre kein großer Nachteil (selbst große GUI Anwendungen sind noch recht performant). Aber das Problem fängt an, wenn man z.B den Text aus der Textbox braucht. SpielerName = TextBox.GetText(). Wäre es nicht viel besser wenn alle Daten, die man sowieso braucht, von der Anwendung verwaltet werden?

Retained (der alte Weg):
Code: [AUSKLAPPEN]

Global spielerName:TTextBox = CreateTextBox(...)
spielerName.Init(...)

'//im Spiel dann
Player.name = spielerName.GetText()


Immediate:
Code: [AUSKLAPPEN]
 
'//im Spiel
Player.name = DoTextbox(x,y,w,h,maxChar,etc...)



Darin liegt auch schon der ganze Gag.

Die Implementation ist ziemlich einfach (also logisch gesehen):

Wir brauchen zwei (oder mehr, mindestens zwei) Variablen die eine beliebige Identifikation von Gadgets speichern können. Im einfachsten Fall Integers.

Code: [AUSKLAPPEN]

Global GUI_HOVER:Int
Global GUI_ACTIVE:Int


In Hover ist nun immer die ID (einfach eine Zahl die beim Funktionsaufruf mit übergeben wird) des Gadgets,
über dem z.B der Mauszeiger schwebt. Also das Gadget mit dem der User evtl. gleich interagieren will.
Sollte man übrigens wollen, dass mehrere Gadgets "gehovert" werden, wenn eins gehovert wird, muss man ihnen einfach die gleiche id geben.

Und Active ist das, mit dem er es gerade tut. Die Beiden müssen logischerweise nicht die gleichen sein.

Die unterschiedlichen Do<GadgetName>() Funktionen machen ihr Ding und updaten GUI_HOVER und GUI_ACTIVE.

Das wars auch schon.

Im Moment werden nur Buttons unterstützt. Aber da ich nur die Update() Funktionen aus der alten Zombie GUI ein wenig umbauen muss, werden das bestimmt bald mehr Wink

Ich hoffe ich konnte euch einen Einblick in diesen eleganten Weg zur GUI Programmierung geben.
Mal sehen wie sich das entwickelt.
lg
ComNik

19. Menus

Samstag, 29. Mai 2010 von ComNik
Guten Morgen,

da ich in letzter Zeit viel mit der GUI mache (Map Editor, Entity Editor etc...) ist mir aufgefallen, dass
einfache Menus doch ziemlichen Aufwand benötigen.

Erstmal, was wollte ich erreichen:
user posted image

Eben so ein Dropdown Menu.

Der Codeaufwand sah in etwa so aus:
BlitzMax: [AUSKLAPPEN]

'//Grafiken laden
Global buttonImg:TImage = LoadAnimImage("data/gfx/button.png",100,20,0,2,MASKEDIMAGE)

'//Hier der Button, der das ganze "aufklappt"
Global _map:TButton = TButton.CreateButton(2,2,100,20,buttonImg)
_map.InitButton("Map",0,TYP_TABBER) 'Der Button ist ein Tabber, das erspart ne extra "aufklapp" Funktion

'//Und das eigentliche Menu (in der alten Version eben noch ein TWindow)
Global _mapMenu:TWindow = TWindow.CreateMenu(2,22,100,0)
_mapMenu.InitWindow("")

'//Und jetzt jeden Button einzeln zum Fenster hinzufügen...
Local _newMap:TButton = TButton.CreateButton( 'Position,etc... muss hier nich alles nochmal rein)
_newMap.Init()
_mapMenu.AddGadget(_newMap)

'//Das war der Aufwand für einen Button

Local _saveMap:TButton = TButton.CreateButton()
_saveMap.Init()
_mapMenu.AddGadget(_saveMap)

Local _loadMap:TButton = TButton.CreateButton()
_loadMap.Init()
_mapMenu.AddGadget(_loadMap)

'//Und schlussendlich dem Tabber sagen, was er aufklappen soll
_map.SetChild(_mapMenu)



So, ziemlich umständlich, wenn man Bedenkt: Mehr als ein Menü... , mehr als drei Buttons und eventuell für jeden Button noch ne Zeile, die ihm eine OnClick Funktion zuweist.


Also habe ich endlich die Menus eingebaut, die nur dafür dienen sollen, eine Anzahl Buttons schnell und einfach aufzulisten...

Kurzer Sinn, der Code für das gleiche Ergebnis, sieht nun so aus:
BlitzMax: [AUSKLAPPEN]

Global _map:TButton = TButton.CreateButton(2,2,100,20,buttonImg)
_map.InitButton("Map",0,TYP_TABBER)

Global _mapMenu:TMenu = TMenu.CreateMenu(2,22,100,0)
_mapMenu.InitMenu(buttonImg,20,2,0)
_mapMenu.AddButton("New Map")
_mapMenu.AddButton("Save Map",SaveMap) '//SaveMap ist in diesem Fall der Name der OnClick Funktion
_mapMenu.AddButton("Load Map",LoadMap)
_map.SetChild(_mapMenu)


Wie gesagt, gleiches Ergebnis, viel weniger Aufwand.
Ein Menu wird wie jedes andere Gadget erstellt, aber wird mit einer Grafik für die Buttons, dem Abstand zwischen diesen und einem kleinen Flag ob der hover Effekt dargestellt werden soll initialisiert.

Danach können Buttons ganz einfach mir AddButton(text,OnClick Pointer, OnSwitch Pointer)
hinzugefügt werden.


Das wars.
lg
ComNik

18. Alpha Release 0.0.9

Donnerstag, 6. Mai 2010 von ComNik
Moin,

Wie man dem Titel schon entnehmen kann, kommt heute mal ein erstes Release. 0.0.9 steht einfach nur für RC.Beta.Alpha, daher heute Alpha 0.9 - Grundfunktionalität.

Dieses Release enthält:
Arrow Vorkompiliertes Modul
Arrow Modul Doku
Arrow Noch keinen Code
Arrow Windows
Arrow Buttons
Arrow Text Input

Wer lust hat kann ja mal ein paar Tests machen und am besten rückmeldung über die Bedienbarkeit geben. Das wäre sehr nett Wink

Hier erstmal der Download:

Zombie GUI - Alpha 0.0.9

und hier nochmal eine .exe mit Grafiken, wenn man nur bisschen klicken will:

Zombie GUI Executable + Gfx

Wegen einem kleinen Missverständnis mit SVN kann es sein, dass ich eventuell einen falschen Download hochgeladen habe. Ich bin mir aber ziemlich sicher Wink


So und hier nochmal ein Beispiel:

BlitzMax: [AUSKLAPPEN]

SuperStrict

'//Modul laden
Import ComNik.Zombie

Graphics(800,600,0,60)
SetMaskColor(255,0,255)

'//Die ganzen Grafiken laden
Global mouse:TImage = LoadImage("data/gfx/cursor.png")
Global button:TImage = LoadAnimImage("data/gfx/buttons/button2.png",100,20,0,3)
Global checkBox:TImage = LoadAnimImage("data/gfx/buttons/switch.png",13,13,0,3)
Global radioImg:TImage = LoadAnimImage("data/gfx/buttons/radio.png",13,13,0,3)
Global sliderbar:TImage = LoadImage("data/gfx/buttons/slider.png")
Global inputImage:TImage = LoadImage("data/gfx/input.png")
Global sliderImg:TImage = LoadImage("data/gfx/buttons/sliderButton.png")

Global font:TImageFont = LoadImageFont("data/gfx/fonts/visitor.ttf",15)


'..........................................
' Gadgets erstellen
'

'// Zuerst einmal ein Window, was alle anderen Gadgets beinhaltet
Global demoWin:TWindow = TWindow.CreateWindow(100,100,400,400)
demoWin.InitWindow("Window 1")


'//Ein stinknormaler click Button
Global click:TButton = TButton.CreateButton(350,250,100,50,button)
click.font = font
click.InitButton("Click",True,TYP_CLICK) ' <-- Da ist er genau spezifiziert
click.OnClick = ClickAction ' Funktion wird bei einem Klick aufgerufen
click.OnSwitch = SwitchAction ' Funktion wird alle zwei Klicks aufgerufen


'// Eine CheckBox, auch nur ein Button aber mit anderen Settings
Global check:TButton = TButton.CreateButton(460,250,50,50,checkBox,click)
check.InitButton("",True,TYP_SWITCH) ' <-- see?
check.switch = 1


'// Und ein Radio Button, der allerdings als Tabber fungiert
Global radio:TButton = TButton.CreateButton(350,310,13,13,radioImg,click)
radio.InitButton("",True,TYP_TABBER) ' <-- ...
radio.switch = 1
radio.SetChild(click) '<-- Dieses Gadget wird "getabbt"


'// Und eine Text Box
Global text:TInput = TInput.CreateInput(350,330,200,200,inputImage)
text.InitInput(1000,100)
'text.SetFont(font)

'// Alle Gadgets zum Window hinzufügen
demoWin.AddGadget(click)
demoWin.AddGadget(check)
demoWin.AddGadget(radio)
demoWin.AddGadget(text)

demoWin.OnClick = WinAction ' Sollte man das Window klicken

Global mh:Int

HideMouse()
SetClsColor(100,200,100)

While Not (KeyDown(KEY_ESCAPE) Or AppTerminate())
Cls
mh = MouseHit(1)

demoWin.Update(mh) ' <-- MouseHit übergeben
demoWin.Draw()

DrawImageRect(mouse,MouseX(),MouseY(),32,32)
Flip
Wend
End


'// Und hier ein paar "Actions" für die click und switch Pointer
Function ClickAction(gadget:TGadget)
DrawText("clicked",0,0)
End Function

Function SwitchAction(gadget:TGadget)
DrawText("switched",0,10)
End Function

Function WinAction(gadget:TGadget)
DrawText("window is clicked",0,60)
End Function


EDIT: Hier ist mal ein etwas umfangreicheres Beispiel.

user posted image

Noch fragen? Einfach in den Kommentaren stellen, ich arbeite aber auch an einer umfassenderen pdf Doku.


Das wars für heute,
lg
ComNik

17. Input

Mittwoch, 5. Mai 2010 von ComNik
Guten Abend,

viel Zeit hab ich nicht (Arbeiten, Schule hach... -.-)

Wie man dem Titel entnehmen kann, Text Boxen sind auch drin:

user posted image

Das wars auch schon für heute.
Mehr demnächst.

lg und gn8
ComNik

16. Neuer Name, nues Glück

Sonntag, 2. Mai 2010 von ComNik
Wie schon im The Vorx Worklog erwähnt, habe ich in den Ferien die WarpGUI
komplett neu geschrieben. Außerdem in einem Anfall von Ideenlosigkeit in Zombie GUI umbenannt...

Was ist neu?

Arrow Es gibt nun auch richtig Windows, mit Status Bar, etc...
Arrow Menus gibts immernoch, sind aber den Windows untergeordnet
Arrow Windows und Menus haben nichtmehr eine Add Methode für jedes Gadget, sondern nur noch eine
allgemeine AddGadget() Methode.
Arrow Buttons können nicht nur auf click sondern auch auf switch (also schalter) abgefragt werden:
- 1.Click: switch = 1, 2.Click Switch = 0 etc...
Arrow Buttons können außerdem als Tabber fungieren (mehr dazu irgendwann...)
Arrow Alle Gadgets haben zwei Funktionszeiger "OnClick()" und "OnSwitch()" die automatisch (natürlich nur falls gesetzt) aufgerufen werden.
Arrow Es gibt Slider und Scroller
Arrow Fonts sind nun endlich individuell setzbar.
Arrow Es gibt drei "Beschriftungs aligns" CAPTION_LEFT, CAPTION_CENTER und CAPTION_RIGHT
Arrow Gadgets müssen nichtmehr zwingend in einem Menü vorkommen
Arrow Buttons können gegrouped werden (z.B für eine gruppe radio Buttons)
Arrow Buttons können einem von drei Typen angehören TYP_CLICK, TYP_SWITCH oder TYP_TABBER
Arrow Je nach Typ werden die Dinger passend gemalt (mit zusätzlicher hover variable , um zu definieren ob auch der Hover Effekt als Frame vorhanden ist...)

Das sind die Neuerungen.
Im Moment gibt es nur Windows, Menus, Buttons und Slider.

In Arbeit sind:
Arrow natürlich List/Combo Boxen
Arrow Textareas
Arrow Image Boxen


Außerdem muss ich wieder die DrawTiled() Methode für Gadgets einbauen.


Hier mal ein kleines Beispiel, wie man die GUI z.B nutzen könnte:

BlitzMax: [AUSKLAPPEN]

Graphics(800,600,0,60)

SetMaskColor(255,0,255)

Global mouse:TImage = LoadImage("data/gfx/cursor.png")
Global button:TImage = LoadAnimImage("data/gfx/buttons/button2.png",100,20,0,3)
Global checkBox:TImage = LoadAnimImage("data/gfx/buttons/switch.png",13,13,0,3)
Global radioImg:TImage = LoadAnimImage("data/gfx/buttons/radio.png",13,13,0,3)

Global font:TImageFont = LoadImageFont("data/gfx/fonts/visitor.ttf",15)

Global demoWin:TWindow = TWindow.CreateWindow(100,100,400,400) ' Kein Bild, flag = GUI_DONTDRAW
demoWin.InitWindow("Window 1")

Global click:TButton = TButton.CreateButton(350,250,100,50,button)
click.font = font
click.InitButton("Click",True,TYP_CLICK)
click.OnClick = ClickAction
click.OnSwitch = SwitchAction

Global check:TButton = TButton.CreateButton(460,250,50,50,checkBox,click)
check.InitButton("",True,TYP_SWITCH)
check.switch = 1

Global radio:TButton = TButton.CreateButton(350,310,13,13,radioImg,click)
radio.InitButton("",True,TYP_TABBER)
radio.switch = 1
radio.SetChild(demoWin)

demoWin.AddGadget(click)
demoWin.AddGadget(check)
demoWin.AddGadget(radio)

demoWin.OnClick = WinAction

Global mh:Int

HideMouse()
SetClsColor(100,200,100)

While Not (KeyDown(KEY_ESCAPE) Or AppTerminate())
Cls
mh = MouseHit(1)

demoWin.Update(mh)
demoWin.Draw()

DrawImageRect(mouse,MouseX(),MouseY(),32,32)
Flip
Wend
End

Function ClickAction(gadget:TGadget)
Print("clicked")
End Function

Function SwitchAction(gadget:TGadget)
Print("switched")
End Function

Function WinAction(gadget:TGadget)
Print("window is clicked")
End Function


demoWin ist das Fenster, zu dem alle Gadgets gehören. Somit werden sie automatisch bei demoWin.Update/Draw mit upgedatet/gezeichnet.

Das ganze sähe z.B so aus:

user posted image

Das Window wird nicht gezeichnet, da ich noch keine passenden Grafiken habe Rolling Eyes


Ja ist wohl leicht zu erkennen, was was sein soll.
Demnächst kommt hoffentlich mal eine Demo (z.B in Form von einem Entity Editor für The Vorx...)

Das wars auch schon für heute,
schönen Sonntag noch.

ComNik

15. Kompletter Entwicklungsstopp

Sonntag, 21. Februar 2010 von ComNik
Guten Abend,

eine schnelle Meldung:

Wie mann sich vielleicht denken kann, arbeite ich im Moment mit voller Kraft an "The Vorx", da brauche ich die GUI natürlich auch (und nutze sie). Allerdings wird sie jetzt erstmal nicht weiter entwickelt.
Sollte sich nochmal was maßgeblich tun, kommts hier natürlich rein.

Ansonsten danke ich für die bisherige Aufmerksamkeit.
lg
ComNik

14. McGUIver

Sonntag, 10. Januar 2010 von ComNik
So heute habe ich mithilfe des RC 1 den McGUIver neu geschrieben.
Das Tool System und das Interface stehen fürs erste. Buttons fürs Speichern oder Laden kommen erst wenn alles andere Funktioniert. Bilder gibts heute auch noch keine, noch kann man zu wenig sehen.
Das ganze geht eigentlich gut voran, leider fängt morgen die Schule wieder an, trotzdem hoffe ich spätestens Samstag (16.01) ein erstes Release zum Download anzubieten. Bis dahin wird eventuell einiges noch in der WarpGUI gemacht. Eben alles was ich beim schreiben vom McGUIver noch brauche. Je nach Stand der Dinge packe ich dann die aktualisierte WarpGUI zusammen mit dem Editor und release beides. Aber das hängt auch stark von Schule und Motivation ab. Manche haben eventuell auch bemerkt das ich ein neues Hauptprojekt habe. Daher schreibe ich hier keine detaillierten Neuerungen rein. Immer wenn sich was wesentliches ändert oder hinzukommt, stell ich hier nen neuen Download rein.
Auch arbeite ich gerade an 3 Tools für mein Spiel, die stelle ich hier dann auch kurz vor.

Ansonsten danke ich für die Aufmerksamkeit und die (wie ich finde) befriedigende Downloadzahl.
lg und allen einen schönen Schulanfang die Morgen mein Glück teilen.
ComNik

13. Release 0.9

Freitag, 1. Januar 2010 von ComNik
Moin zusammen,
die WarpGui ist tatsächlich zu einem ersten Pre-Alpha Release gebracht worden.
Zwar nicht ganz 100% wie gestern erhofft (aufgrund von Problemen mit Schlaf und Textareas).
Aber es ist glaube ich ganz gut benutzbar. Außerdem habe ich eine kleine Dokumentation geschrieben.

Erstmal Anmerkungen zum Release:
Textareas sind noch etwas buggy, weil ich die grade noch neu schreiben musste -.-
Da ich zwischendurch auch noch packen musste ist das Interface Gadget leider auch nicht mehr drin.
Es ist einfach noch nicht benutzbar.


Alle Downloads down, nur noch Zombie GUI wird entwickelt.


Die Demo hat extrem schlechte Grafiken wirklich extrem schlecht. Außerdem wird noch die Standardtfont genutzt. Es geht erstmal nur um Funktionalität.

So ich hoffe es testen ein paar Leute. Feedback wäre erwünscht, Kritik genauso. Ich kann allerdings erst in einer Woche wieder drauf reagieren. Skifahren...
Trotzdem bitte beachten das es lediglich eine Pre Alpha ist.

Hier noch ein Beispielcode:
BlitzMax: [AUSKLAPPEN]

SuperStrict

Import Warpstudios.Warpgui

Graphics(800,600,0,60)

SetMaskColor(255,0,255)
Global IMG_menu:TImage = LoadImage("Demo/Menu.png")
Global IMG_button:TImage = LoadAnimImage("Demo/IMG_button.png",100,50,0,3)
Global IMG_tabber:TImage = LoadAnimImage("Demo/IMG_tabber.png",50,25,0,2)
Global TTipp:TImage = LoadImage("gfx\TT.png")

Global menu1:WP_Menu = WP_CreateMenu(100,100,400,200,IMG_Menu)
Global button1:WP_Button = menu1.AddButton(170,150,100,50,IMG_button)
button1.SetCaption("Button...",20,20)
Global exitButton:WP_Button = menu1.AddButton(480,100,20,20,IMG_button)
exitButton.SetCaption("X",4,2)
exitButton.SetTooltipp("Close the Menu")
Global tabber1:WP_Tabber = menu1.AddTabber(179,135,25,25,button1,IMG_tabber)
Global label1:WP_Label = menu1.AddLabel(300,150,100,50,TTipp)
label1.SetCaption(" <-- Click!")
Global list1:WP_ListBox = menu1.AddListBox(150,150,200,50,IMG_button,IMG_tabber)
list1.trigger.SetTooltipp("Open Listbox")
list1.choice.SetTooltipp("Your Choice stands here!")
list1.AddEntry("BBP")
list1.AddEntry("Dark GDK")
list1.AddEntry("B+")
list1.AddEntry("C++")
Global text1:WP_Textarea = menu1.AddTextarea(150,200,200,70,100,4,TTipp)

While Not (KeyDown(KEY_ESCAPE) Or AppTerminate())
Cls
DrawText(text1.switch,0,0)
If exitButton.state = ST_CLICKED Then menu1.Hide()
If menu1.state = ST_CLICKED Then TX = MX-menu1.x;TY = MY-menu1.y
If menu1.drag = ST_DRAGGED
menu1.x = MX-TX
menu1.y = MY-TY
End If
If KeyHit(KEY_SPACE) Then menu1.Show()

WP_Update()
Flip
Wend
End


Zeigt ein bisschen die Syntax, die ist aber sehr einfach und kann durch lesen der Dokumentation problemlos verstanden werden.

Ich wünsche noch schöne Ferien!
lg
ComNik

12. Ein paar Sachen hier und Da

Donnerstag, 31. Dezember 2009 von ComNik
Einen schnellen Eintrag noch, dann gehts zur Silvester Party.

Dem Release Morgen (spätestens Samstag) steht nichts mehr im Wege.
Lediglich ein wenig Feinschliff hier, und ein bisschen Optimierung da.
Außerdem ein, zwei simple Gadgets.

Die komplette Gadget Liste nochmal:

Ist drinn:
Arrow Menu
Arrow Button
Arrow Textarea
Arrow Tabber
Arrow Label
Arrow Radio Button bzw Check Box
Arrow ListBox

Für Morgen soll noch rein (ist teilweise schon extern Fertig):
Arrow ImageBox
Arrow Interface
Arrow TabGroup

Es gab noch ein paar kleinere Änderungen:
Das Field "drag" aus dem letzten Eintrag, heisst nun sinnvoller "switch" und kann durch die States "ST_ACTIVE" und "ST_INACTIVE" gesetzt werden. "drag" ist allerdings immer noch drin. Mit diesem Feld kann man nun abfragen ob der Mauszeiger über dem Gadget gedrückt ist (somit lässt sich Drag'n'Drop schöner realisieren).

Morgen Versuche ich noch eine kleine Dokumentation zu erstellen, die die Flags und States und wasweisich noch alles erklären.

lg und nun zum letzten Mal: Einen guten Rutsch und ein fröhliches, gesundes Jahr 2010 Smile
ComNik

11. OOP Update, baldiges Release in Sicht

Mittwoch, 30. Dezember 2009 von ComNik
Guten Abend,

Nach einem unterhaltsamen "Mini BBP Treff" mit n-halbleiter im gemütlichen Dorf Gernsheim bin ich wieder voll an der WarpGUI dran.

Heute wurde der gesamte Code auf komplett OOP umgestellt, das heisst Konstruktor Funktionen innerhalb der Klasse (danke an halbleiter). Gadgets werden nun durch ein Create - Init Konstrukt erstellt, was dem End User aber herzlich egal sein kann. Er kann Gadgets nun auf zwei Weisen erstellen:

Code: [AUSKLAPPEN]

WP_CreateMenu()
WP_AddButton()
WP_Add xy


oder

Code: [AUSKLAPPEN]

menu.AddButton()
menu.Add xy


OOP halt...

Außerdem bastel ich gerade wild Gadgets zusammen und gucke was rauskommt (bisher eher Müll)...
Ich hoffe aber das ich bevor es in den Ski Urlaub geht, ein erstes Release fertig bekomme.
Dieses wird vermutlich nur Standard Gadgets enthalten also erwartet nicht zuviel. Ich hoffe die (von mir als so empfundene) User - Freundlichkeit tut wofür sie erdacht wurde...
Der RC 1 wäre dann die WarpGui Rewrite - V0.9 .
Dieses Modul bietet mir dann hoffentlich genügend Funktionen ein paar der von mir erstelleten Tools für mein kommendes Spieleprojekt zu erstellen. Nach dem Release geht es hier im Worklog verstärkt um den McGUIver Editor.

Ich wünsche des weiteren allen einen guten Rutsch und ein frohes neues Jahr,
ComNik

Gehe zu Seite 1, 2  Weiter