BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Graphics3D 800, 600, 32, 2 SetBuffer BackBuffer()
Type ProgressDisk Field mesh Field surface Field max#, value# End Type
Local cam = CreateCamera() MoveEntity cam, 0.0, 3.0, 0.0 TurnEntity cam, 90.0, 0.0, 0.0
AmbientLight 255, 255, 255
Local d.ProgressDisk = CreateProgressDisc(100, 15, 0, LoadBrush("YOUR_TEXTURE_HERE.png", 2)) Local d2.ProgressDisk = CreateProgressDisc(1.0, 0.0)
MoveEntity d\mesh, -1.5, 0.0, 0.0 MoveEntity d2\mesh, 1.5, 0.0, 0.0
Local wire = False
Const diskdetail# = 10.0
Repeat WireFrame wire If KeyHit(17) Then wire = 1 - wire If KeyDown(2) Then SetProgressDiskValue(d, d\value# - 0.25) If KeyDown(3) Then SetProgressDiskValue(d, d\value# + 0.25) SetProgressDiskValue(d2, Abs(Sin(MilliSecs() / 100.0))) RenderWorld Text 20, 20, "Linke disk: " + d\value# Text 20, 40, "Rechte disk: " + d2\value# Text 20, GraphicsHeight() - 80, "W: Wireframe umschalten" Text 20, GraphicsHeight() - 60, "1: Wert der linken disk verringern" Text 20, GraphicsHeight() - 40, "2: Wert der linken disk vergrößern" Flip Until KeyHit(1)
Function CreateProgressDisc.ProgressDisk(max#, initialvalue#, parent = 0, brush = 0) Local d.ProgressDisk = New ProgressDisk d\value# = initialvalue# d\max# = max# d\mesh = CreateMesh(parent) d\surface = CreateSurface(d\mesh, brush) SetProgressDiskValue(d, d\value#) Return d End Function
Function SetProgressDiskValue(d.ProgressDisk, value#) ClearSurface d\surface, True, True d\value# = value# If d\value# > d\max# Then d\value# = d\max# If d\value# < 0.0 Then d\value# = 0.0 Local i# = 0.0 Local n = 0 AddVertex(d\surface, 0.0, 0.0, 0.0, 0.5, 0.5) AddVertex(d\surface, 0.0, 0.0, 1.0, 0.5, 1.0) For i# = diskdetail# To (d\value# / d\max# * 360.0) Step diskdetail# n = AddVertex(d\surface, Sin(i#), 0.0, Cos(i#), 0.5 + Sin(i#) / 2.0, 0.5 + Cos(i#) / 2.0) AddTriangle(d\surface, 0, n - 1, n) Next n = AddVertex(d\surface, Sin(d\value# / d\max# * 360.0), 0.0, Cos(d\value# / d\max# * 360.0), 0.5 + Sin(d\value# / d\max# * 360.0) / 2.0, 0.5 + Cos(d\value# / d\max# * 360.0) / 2.0) AddTriangle(d\surface, 0, n - 1, n) End Function
End
(3D) Progress Disk
Ja hallöchen, hier mal ein Code-Snippet, was ich Teilenswert finde, es handelt sich dabei um eine Progress Disk. Das ist so etwas wie eine Progress Bar, nur eben in Scheibenform:
Was kann man damit machen? Angenommen, man sitzt an einem 3D echtzeit RTS, dann kann man damit z.B. den Baufortschritt bei bestimmten Einheiten anzeigen:
Anmerkung: Das runde Ding ist durch einen Exporter verwurstet worden, und wurde noch nicht ersetzt, das Teil daneben ist halbtransparent mit alpha-channel und wird deswegen falsch gerendert.
Der Code ist Kommentiert und sollte gut verständlich sein, wenn nicht, gibt es ja noch den Thread hier zum Fragen.
Hoffe jemand kann das gebrauchen, runde Fortschrittsindikatoren sind ja seit einiger Zeit nun sehr viel beliebter als Balken
~ZaP
|