Hi :)
Here is the version for blitz3D SDK, i hope do not forget
anything :) Is there a way to draw rectangle from the left
up corner ?
Library 3.1
'Draw3D.V.3.1
'29.01.2008
'Autor.hectic
'www.hectic.de
' convertion & modification
' - To b3dsdk by filax
'====-===-==-=-O-P-T-I-O-N-S-=---- --- -- - - - - -
Const DRAWOFFSET:Float=0.25 'Grabing-UV-Offset-Constant (Standard 0.25)
Const DRAWBANKSIZE=4096 'Drawbank-Size-Declaration (Maximal Images)
Const DRAWFONTBANKSIZE=16 'Fontbank-Size-Declaration (Maximal Fonts)
Const DRAWRECTOFFSET:Float=0.0 'Rect-Drawing-Art-Constant (Less Than 0.25)
'====-===-==-=-O-P-T-I-O-N-S-=---- --- -- - - - - -
'Used-Variables
Global MouseX3D:Int=0
Global MouseY3D:Int=0
Global MouseHit3D:Int=0
Global MousePit3D:Int=0
Global MouseDown3D:Int=0
Global MouseOver3D:Int=0
Global MouseText3D:String=""
'Internal-Global-Variables
Global ADrawPivot:Int[2] 'Camera-Pivot-Handle
Global GDrawNFR:Int=255 'Native-Farbe-Rot
Global GDrawNFG:Int=255 'Native-Farbe-Grün
Global GDrawNFB:Int=255 'Native-Farbe-Blau
Global GDrawNFA:Float=1 'Native-Alpha-Angabe
Global GDrawTFR:Int=255 'Text3D-Farbe-Rot
Global GDrawTFG:Int=255 'Text3D-Farbe-Grün
Global GDrawTFB:Int=255 'Text3D-Farbe-Blau
Global GDrawTFA:Float=1 'Text3D-Alpha-Angabe
Global GDrawGFR:Int=255 'Grafik-Farbe-Rot
Global GDrawGFG:Int=255 'Grafik-Farbe-Grün
Global GDrawGFB:Int=255 'Grafik-Farbe-Blau
Global GDrawGFA:Float=1 'Grafik-Alpha-Angabe
Global GDrawSFont:Float=1 'Font-Größen-Skallierung
Global GDrawHFont:Float=1 'Font-Nur-Höhenskallierung
Global GDrawPFont:Float=0 'Font-Zeichenabstand-In-Pixel
Global GDrawIFont:Float=0 'Font-Kursiv-(Negativ/Positiv)-Grad
Global GDrawXScale:Float=1 'X-Skallierungsfaktor-Für-IDrawPivot
Global GDrawYScale:Float=1 'Y-Skallierungsfaktor-Für-IDrawPivot
Global GDrawXSize:Int=0 'X-Skallierungsfaktor-Für-MouseX3D
Global GDrawYSize:Int=0 'Y-Skallierungsfaktor-Für-MouseY3D
Global GDrawMouseHit:Int=0 'Für-Eigene-MouseHit-Berechnung
Global GDrawMousePit:String="" 'Für-Eigene-MousePit-Berechnung
Global GDrawBankUsed:Int=0 'Maximale-Bankbesetzung
'Bank-Offset-Constants
Const DRAWBANKKING=0
Const DRAWBANKMESH=4
Const DRAWBANKFACE=8
Const DRAWBANKTEXTURE=12
Const DRAWBANKXMAIN=16
Const DRAWBANKYMAIN=20
Const DRAWBANKXSIZE=24
Const DRAWBANKYSIZE=28
Const DRAWBANKU1MAP=32
Const DRAWBANKV1MAP=36
Const DRAWBANKU2MAP=40
Const DRAWBANKV2MAP=44
Const DRAWBANKSTEP=48
'Font-Offset-Constants
Const DRAWFONTBANK=DRAWBANKXMAIN
Const DRAWFONTSIZE=DRAWBANKYMAIN
Const DRAWFONTUVSTEP:Float=1.0/16.0
Const DRAWFONTBANKSTEP=256
'Bank-Creating-And-Setting-The-Size
Global GDrawBank=CreateBank(DRAWBANKSTEP+DRAWBANKSIZE*DRAWBANKSTEP)
Global GDrawFontBank=CreateBank(DRAWFONTBANKSIZE*DRAWFONTBANKSTEP)
'DrawInit3D( Camera )
Function DrawInit3D(FDrawCamera)
If FDrawCamera=0 Then RuntimeError "Camera not found"
ADrawPivot[0]=bbCreatePivot(FDrawCamera)
ADrawPivot[1]=bbCreatePivot()
bbPositionEntity ADrawPivot[0],0,0,bbGraphicsWidth()/2.0
bbPositionEntity ADrawPivot[1],0,0,bbGraphicsWidth()/2.0
bbMoveMouse bbGraphicsWidth()/2,bbGraphicsHeight()/2
Origin3D(bbGraphicsWidth(),bbGraphicsHeight())
'MAV-Workaround-Für-FACE
Local IDrawMesh:Int=bbCreateMesh(ADrawPivot[0])
Local IDrawFace:Int=bbCreateSurface(IDrawMesh)
PokeInt GDrawBank,DRAWBANKMESH,IDrawMesh
PokeInt GDrawBank,DRAWBANKFACE,IDrawFace
End Function
'DrawFree3D( )
Function DrawFree3D()
Local IDrawLoop:Int
'Alle-Bankpositionen-Durchgehen
For IDrawLoop=DRAWBANKSTEP To GDrawBankUsed Step DRAWBANKSTEP
If PeekInt(GDrawBank,IDrawLoop+DRAWBANKKING)>0
bbClearSurface PeekInt(GDrawBank,IDrawLoop+DRAWBANKFACE),True,True
bbFreeEntity PeekInt(GDrawBank,IDrawLoop*DRAWBANKSTEP+DRAWBANKMESH)
bbFreeTexture PeekInt(GDrawBank,IDrawLoop*DRAWBANKSTEP+DRAWBANKTEXTURE)
PokeInt GDrawBank,IDrawLoop,0
End If
Next
'Sonstiges-Freigeben
bbFreeEntity ADrawPivot[0]
bbFreeEntity ADrawPivot[1]
GDrawBank=Null
End Function
'Origin3D( X-Size, Y-Size )
Function Origin3D(FDrawX:Float=0,FDrawY:Float=0)
'Automatische-1:1-Stellung
If FDrawX=0 And FDrawY=0 Then
FDrawX=bbGraphicsWidth()
FDrawY=bbGraphicsHeight()
End If
'Relationsberechnungen
GDrawXScale=bbGraphicsWidth()/FDrawX
GDrawYScale=bbGraphicsHeight()/FDrawY
bbPositionEntity ADrawPivot[0],0,0,(bbGraphicsWidth()/2.0)/GDrawXScale
bbPositionEntity ADrawPivot[1],0,0,(bbGraphicsWidth()/2.0)/GDrawXScale
bbScaleEntity ADrawPivot[0],1,GDrawYScale/GDrawXScale,1
bbScaleEntity ADrawPivot[1],1,GDrawYScale/GDrawXScale,1
GDrawXSize=FDrawX
GDrawYSize=FDrawY
End Function
'Clear3D( Handle )
Function Clear3D(FDrawFace:Int=0)
Local IDrawLoop:Int
If FDrawFace=0
If MouseText3D="" Then GDrawMousePit="" Else MouseText3D=""
MouseX3D=bbMouseX()/GDrawXScale-(GDrawXSize/2)
MouseY3D=(GDrawYSize/2)-bbMouseY()/GDrawYScale
For IDrawLoop=DRAWBANKSTEP To GDrawBankUsed Step DRAWBANKSTEP
If PeekInt(GDrawBank,IDrawLoop+DRAWBANKKING)>0
bbClearSurface PeekInt(GDrawBank,IDrawLoop+DRAWBANKFACE),True,True
End If
Next
Else
bbClearSurface PeekInt(GDrawBank,FDrawFace+DRAWBANKFACE),True,True
End If
End Function
'ClearOn3D( Handle )
Function ClearOn3D(FDrawHandle:Int)
Local LDrawKing:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKKING)
Local IDrawMaster:Int=DRAWBANKSTEP+DRAWBANKSIZE*DRAWBANKSTEP
If LDrawKing=-IDrawMaster-FDrawHandle Then PokeInt(GDrawBank,FDrawHandle,FDrawHandle)
End Function
'ClearOff3D( Handle )
Function ClearOff3D(FDrawHandle:Int)
Local LDrawKing:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKKING)
Local IDrawMaster:Int=DRAWBANKSTEP+DRAWBANKSIZE*DRAWBANKSTEP
If LDrawKing>0 Then PokeInt(GDrawBank,LDrawKing,-LDrawKing-IDrawMaster)
End Function
'ColorN3D( Red, Green, Blue, Alpha )
Function ColorN3D(FDrawFR:Int=255,FDrawFG:Int=255,FDrawFB:Int=255,FDrawFA:Float=1)
GDrawNFR=FDrawFR
GDrawNFG=FDrawFG
GDrawNFB=FDrawFB
GDrawNFA=FDrawFA
End Function
'ColorT3D( Red, Green, Blue, Alpha )
Function ColorT3D(FDrawFR:Int=255,FDrawFG:Int=255,FDrawFB:Int=255,FDrawFA:Float=1)
GDrawTFR=FDrawFR
GDrawTFG=FDrawFG
GDrawTFB=FDrawFB
GDrawTFA=FDrawFA
End Function
'ColorG3D( Red, Green, Blue, Alpha )
Function ColorG3D(FDrawFR:Int=255,FDrawFG:Int=255,FDrawFB:Int=255,FDrawFA:Float=1)
GDrawGFR=FDrawFR
GDrawGFG=FDrawFG
GDrawGFB=FDrawFB
GDrawGFA=FDrawFA
End Function
'SetFont3D( Font-Size, Font-Height, Font-Padding, Italic-Font)
Function SetFont3D(FDrawSFont:Float=1,FDrawHFont:Float=1,FDrawPFont:Float=0,FDrawIFont:Float=0)
GDrawSFont=FDrawSFont
GDrawHFont=FDrawHFont
GDrawPFont=FDrawPFont
GDrawIFont=FDrawIFont
End Function
'LoadFont3D( Texture-Name, Texture-Mode, Texture-Blend, Texture-Pivot )
Function LoadFont3D(FDrawFile:String,FDrawMode:Int=2,FDrawBlend:Int=2,FDrawPivot:Int=0)
If FileType(FDrawFile)<>1 Then RuntimeError FDrawFile+" not found"
'Variablen-Vorberechnung
If FDrawMode<0 Then FDrawMode=0
If FDrawMode>4 Then FDrawMode=4
If FDrawBlend<0 Then FDrawBlend=0
If FDrawBlend>5 Then FDrawBlend=5
If FDrawPivot<0 Then FDrawPivot=0
If FDrawPivot>1 Then FDrawPivot=1
'Neue-Bank-Positionen-Festlegen
Local IDrawBankPosition:Int=XDrawBP3D()
Local IDrawFontBankPosition:Int=XDrawFP3D()
'Variablen-Vorberechnung
Local IDrawXLoop:Int=0
Local IDrawYLoop:Int=0
Local IDrawValue:Int=0
Local IDrawKing:Int=IDrawBankPosition
Local IDrawMesh:Int=bbCreateMesh(ADrawPivot(FDrawPivot))
Local IDrawFace:Int=bbCreateSurface(IDrawMesh)
Local IDrawTexture:Int=bbLoadTexture(FDrawFile,FDrawMode)
Local IDrawXMain:Int=bbTextureWidth(IDrawTexture)
Local IDrawYMain:Int=bbTextureHeight(IDrawTexture)
Local IDrawXSize:Int=IDrawXMain/16
'DrawBank-Variablen-EINweisung
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKKING,IDrawKing
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKMESH,IDrawMesh
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKFACE,IDrawFace
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKTEXTURE,IDrawTexture
PokeInt GDrawBank,IDrawBankPosition+DRAWFONTBANK,IDrawFontBankPosition
PokeInt GDrawBank,IDrawBankPosition+DRAWFONTSIZE,IDrawXSize
'Sonstige-Zuweisung/Berechnungen
bbEntityTexture IDrawMesh,IDrawTexture
bbTextureBlend IDrawTexture,FDrawBlend
' bbEntityOrder IDrawMesh,-1000-IDrawKing/DRAWBANKSTEP
bbEntityFx IDrawMesh,1+2+8+16
XDrawMP3D(IDrawKing,FDrawMode)
'Zeichenspezifische-Festlegung
For IDrawYLoop=0 To 15
For IDrawXLoop=0 To 15
IDrawValue=XDrawTT3D(IDrawTexture,IDrawXMain,IDrawYMain,IDrawXLoop,IDrawYLoop)
PokeByte GDrawFontBank,IDrawFontBankPosition+IDrawXLoop+IDrawYLoop*16,IDrawValue
Next
Next
IDrawValue=PeekByte(GDrawFontBank,IDrawFontBankPosition+33)
PokeByte GDrawFontBank,IDrawFontBankPosition+DRAWBANKKING,1
PokeByte GDrawFontBank,IDrawFontBankPosition+32,IDrawValue
'Variablen-Ausstiegsvorbereitung
Return IDrawKing
End Function
'LoadImage3D( Texture-Name, Texture-Mode, Texture-Blend, Texture-Pivot )
Function LoadImage3D(FDrawFile:String,FDrawMode:Int=2,FDrawBlend:Int=2,FDrawPivot:Int=0)
If FileType(FDrawFile)<>1 Then RuntimeError FDrawFile+" not found"
'Variablen-Vorberechnung
If FDrawMode<0 Then FDrawMode=0
If FDrawMode>4 Then FDrawMode=4
If FDrawBlend<0 Then FDrawBlend=0
If FDrawBlend>5 Then FDrawBlend=5
If FDrawPivot<0 Then FDrawPivot=0
If FDrawPivot>1 Then FDrawPivot=1
'Neue-Bank-Position-Festlegen
Local IDrawBankPosition:Int=XDrawBP3D()
'Variablen-Vorberechnung
Local IDrawKing:Int=IDrawBankPosition
Local IDrawMesh:Int=bbCreateMesh(ADrawPivot(FDrawPivot))
Local IDrawFace:Int=bbCreateSurface(IDrawMesh)
Local IDrawTexture:Int=bbLoadTexture(FDrawFile,FDrawMode)
Local IDrawXMain:Int=bbTextureWidth(IDrawTexture)/2
Local IDrawYMain:Int=bbTextureHeight(IDrawTexture)/2
Local IDrawXSize:Int=IDrawXMain
Local IDrawYSize:Int=IDrawYMain
Local IDrawU1Map:Float=0+(DRAWOFFSET/IDrawXMain)
Local IDrawV1Map:Float=0+(DRAWOFFSET/IDrawYMain)
Local IDrawU2Map:Float=1-(DRAWOFFSET/IDrawXMain)
Local IDrawV2Map:Float=1-(DRAWOFFSET/IDrawYMain)
'DrawBank-Variablen-EINweisung
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKKING,IDrawKing
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKMESH,IDrawMesh
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKFACE,IDrawFace
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKTEXTURE,IDrawTexture
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKXMAIN,IDrawXMain
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKYMAIN,IDrawYMain
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKXSIZE,IDrawXSize
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKYSIZE,IDrawYSize
PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKU1MAP,IDrawU1Map
PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKV1MAP,IDrawV1Map
PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKU2MAP,IDrawU2Map
PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKV2MAP,IDrawV2Map
'Sonstige-Zuweisung/Berechnungen
bbEntityTexture IDrawMesh,IDrawTexture
bbTextureBlend IDrawTexture,FDrawBlend
bbEntityOrder IDrawMesh,-1000-IDrawKing/DRAWBANKSTEP
bbEntityFx IDrawMesh,1+2+8+16
XDrawMP3D(IDrawKing,FDrawMode)
'Variablen-Ausstiegsvorbereitung
Return IDrawKing
End Function
'GrabImage3D( Handle, U-Start-Position, V-Start-Position, U-Size, V-Size, X-Scale, Y-Scale )
Function GrabImage3D(FDrawHandle:Int,FDrawUP:Float,FDrawVP:Float,FDrawUSize:Float,FDrawVSize:Float,FDrawXScale:Float=1,FDrawYScale:Float=1)
If FDrawHandle<0 Then RuntimeError "Grabbing only main-images!"
'Variablen-Vorberechnung
FDrawUP=FDrawUP/2.0
FDrawVP=FDrawVP/2.0
FDrawUSize=FDrawUSize/2.0
FDrawVSize=FDrawVSize/2.0
'Neue-Bank-Position-Festlegen
Local IDrawBankPosition:Int=XDrawBP3D()
'DrawBank-Variablen-AUSweisung
Local LDrawMesh:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKMESH)
Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
Local LDrawXMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXMAIN)
Local LDrawYMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYMAIN)
'DrawBank-Variablen-EINweisung
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKKING,-FDrawHandle
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKMESH,LDrawMesh
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKFACE,LDrawFace
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKTEXTURE,LDrawTexture
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKXMAIN,LDrawXMain
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKYMAIN,LDrawYMain
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKXSIZE,Abs(FDrawUSize)*FDrawXScale
PokeInt GDrawBank,IDrawBankPosition+DRAWBANKYSIZE,Abs(FDrawVSize)*FDrawYScale
PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKU1MAP,(FDrawUP/LDrawXMain)+(DRAWOFFSET/LDrawXMain*Sgn(FDrawUSize))
PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKV1MAP,(FDrawVP/LDrawYMain)+(DRAWOFFSET/LDrawYMain*Sgn(FDrawVSize))
PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKU2MAP,(FDrawUP+FDrawUSize)/LDrawXMain-(DRAWOFFSET/LDrawXMain*Sgn(FDrawUSize))
PokeFloat GDrawBank,IDrawBankPosition+DRAWBANKV2MAP,(FDrawVP+FDrawVSize)/LDrawYMain-(DRAWOFFSET/LDrawYMain*Sgn(FDrawVSize))
'Variablen-Ausstiegsvorbereitung
Return IDrawBankPosition
End Function
'DrawImage3D( Handle, X-Center-Position, Y-Center-Position, Button, Rotation, Image-Frame )
Function DrawImage3D(FDrawHandle:Int,FDrawX:Float,FDrawY:Float,FDrawButton:Int=0,FDrawAngle:Float=0,FDrawScale:Float=1,FDrawFrame:Int=0)
FDrawFrame=FDrawFrame*DRAWBANKSTEP
'DrawBank-Variablen-AUSweisung
Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE+FDrawFrame)
Local LDrawXSize:Float=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXSIZE+FDrawFrame)*FDrawScale
Local LDrawYSize:Float=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYSIZE+FDrawFrame)*FDrawScale
Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU1MAP+FDrawFrame)
Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV1MAP+FDrawFrame)
Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU2MAP+FDrawFrame)
Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV2MAP+FDrawFrame)
'Variablen-Vorberechnung
FDrawX=FDrawX-0.5
FDrawY=FDrawY+0.5
If FDrawAngle<>0 Then
Local IDrawAngle:Float=ATan2(LDrawYSize,LDrawXSize)
Local IDrawRadius:Float=Sqr((LDrawXSize*LDrawXSize)+(LDrawYSize*LDrawYSize))
Local IDrawXPos1:Float=Cos(IDrawAngle+FDrawAngle)*IDrawRadius
Local IDrawYPos1:Float=Sin(IDrawAngle+FDrawAngle)*IDrawRadius
Local IDrawXPos2:Float=Cos(IDrawAngle-FDrawAngle)*IDrawRadius
Local IDrawYPos2:Float=Sin(IDrawAngle-FDrawAngle)*IDrawRadius
Else
IDrawXPos1=LDrawXSize
IDrawYPos1=LDrawYSize
IDrawXPos2=LDrawXSize
IDrawYPos2=LDrawYSize
End If
'Vertex/Ploygon-Zuweisung/Berechnungen
Local IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1,FDrawY+IDrawYPos1,0 ,LDrawU1Map,LDrawV1Map)
Local IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2,FDrawY+IDrawYPos2,0 ,LDrawU2Map,LDrawV1Map)
Local IDrawV2=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1,FDrawY-IDrawYPos1,0 ,LDrawU2Map,LDrawV2Map)
Local IDrawV3=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2,FDrawY-IDrawYPos2,0 ,LDrawU1Map,LDrawV2Map)
bbVertexColor LDrawFace,IDrawV0,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbVertexColor LDrawFace,IDrawV1,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbVertexColor LDrawFace,IDrawV2,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbVertexColor LDrawFace,IDrawV3,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbAddTriangle LDrawFace,IDrawV0,IDrawV1,IDrawV2
bbAddTriangle LDrawFace,IDrawV2,IDrawV3,IDrawV0
If FDrawButton<>0 Then CheckQuad3D(FDrawX-IDrawXPos1,FDrawY+IDrawYPos1,FDrawX+IDrawXPos2,FDrawY+IDrawYPos2,FDrawX+IDrawXPos1,FDrawY-IDrawYPos1,FDrawX-IDrawXPos2,FDrawY-IDrawYPos2,FDrawButton,"image:"+String(FDrawHandle/DRAWBANKSTEP))
End Function
'ImageLine3D( Handle, X-Start, Y-Start, X-End, Y-End, IDrawing-Size, IDrawing-Mode, Image-Frame )
Function ImageLine3D(FDrawHandle:Int,FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawSize:Float,FDrawMode:Int=0,FDrawFrame:Int=0)
If FDrawX1<>FDrawX2 Or FDrawY1<>FDrawY2 Then
FDrawFrame=FDrawFrame*DRAWBANKSTEP
'DrawBank-Variablen-AUSweisung
Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE+FDrawFrame)
Local LDrawXSize:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXSIZE+FDrawFrame)
Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU1MAP+FDrawFrame)
Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV1MAP+FDrawFrame)
Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU2MAP+FDrawFrame)
Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV2MAP+FDrawFrame)
'Variablen-Vorberechnung
bbTFormNormal FDrawX2-FDrawX1,FDrawY2-FDrawY1,0,0,0
Local IDrawXTForm:Float=bbTFormedX()*FDrawSize
Local IDrawYTForm:Float=bbTFormedY()*FDrawSize
'Modus-Rollen
If FDrawMode=1 Then
Local IDrawLineSize:Float=Sqr((FDrawX1-FDrawX2)*(FDrawX1-FDrawX2)+(FDrawY1-FDrawY2)*(FDrawY1-FDrawY2))
LDrawU2Map:Float=LDrawU1Map+(IDrawLineSize/PeekInt(GDrawBank,FDrawHandle+DRAWBANKXMAIN))/2
End If
'Modus-Absolut
If FDrawMode=2 Then
FDrawX2=FDrawX1+bbTFormedX()*LDrawXSize*2
FDrawY2=FDrawY1+bbTFormedY()*LDrawXSize*2
End If
'Vertex/Ploygon-Zuweisung/Berechnungen
Local IDrawV0=bbAddVertex(LDrawFace,FDrawX1-IDrawYTForm-0.5,FDrawY1+IDrawXTForm+0.5,0, LDrawU1Map,LDrawV1Map)
Local IDrawV1=bbAddVertex(LDrawFace,FDrawX2-IDrawYTForm-0.5,FDrawY2+IDrawXTForm+0.5,0, LDrawU2Map,LDrawV1Map)
Local IDrawV2=bbAddVertex(LDrawFace,FDrawX2+IDrawYTForm-0.5,FDrawY2-IDrawXTForm+0.5,0, LDrawU2Map,LDrawV2Map)
Local IDrawV3=bbAddVertex(LDrawFace,FDrawX1+IDrawYTForm-0.5,FDrawY1-IDrawXTForm+0.5,0, LDrawU1Map,LDrawV2Map)
bbVertexColor LDrawFace,IDrawV0,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbVertexColor LDrawFace,IDrawV1,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbVertexColor LDrawFace,IDrawV2,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbVertexColor LDrawFace,IDrawV3,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
End If
End Function
'DrawQuad3D( Handle, X1-Pos, Y1-Pos, X2-Pos, Y2-Pos, X3-Pos, Y3-Pos, X4-Pos, Y4-Pos, Button, Image-Frame )
Function DrawQuad3D(FDrawHandle:Int,FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawX3:Float,FDrawY3:Float,FDrawX4:Float,FDrawY4:Float,FDrawButton:Int=0,FDrawFrame:Int=0)
FDrawFrame=FDrawFrame*DRAWBANKSTEP
'DrawBank-Variablen-AUSweisung
Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE+FDrawFrame)
Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU1MAP+FDrawFrame)
Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV1MAP+FDrawFrame)
Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU2MAP+FDrawFrame)
Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV2MAP+FDrawFrame)
'Vertex/Ploygon-Zuweisung/Berechnungen
Local IDrawV0=bbAddVertex(LDrawFace,FDrawX1-0.5,FDrawY1+0.5,0 ,LDrawU1Map,LDrawV1Map)
Local IDrawV1=bbAddVertex(LDrawFace,FDrawX2-0.5,FDrawY2+0.5,0 ,LDrawU2Map,LDrawV1Map)
Local IDrawV2=bbAddVertex(LDrawFace,FDrawX3-0.5,FDrawY3+0.5,0 ,LDrawU2Map,LDrawV2Map)
Local IDrawV3=bbAddVertex(LDrawFace,FDrawX4-0.5,FDrawY4+0.5,0 ,LDrawU1Map,LDrawV2Map)
bbVertexColor LDrawFace,IDrawV0,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbVertexColor LDrawFace,IDrawV1,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbVertexColor LDrawFace,IDrawV2,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbVertexColor LDrawFace,IDrawV3,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbAddTriangle LDrawFace,IDrawV0,IDrawV1,IDrawV2
bbAddTriangle LDrawFace,IDrawV2,IDrawV3,IDrawV0
If FDrawButton<>0 Then CheckQuad3D(FDrawX1,FDrawY1,FDrawX2,FDrawY2,FDrawX3,FDrawY3,FDrawX4,FDrawY4,FDrawButton,"image:"+String(FDrawHandle/DRAWBANKSTEP))
End Function
'DrawMouse3D( Handle, Angle, Scale )
Function DrawMouse3D(FDrawHandle:Int,FDrawAngle:Float=0,FDrawScale:Float=1)
'DrawBank-Variablen-AUSweisung
Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
'Variablen-Vorberechnung
Local IDrawXPos1:Float=Cos(25.5+FDrawAngle+90)*64*FDrawScale
Local IDrawYPos1:Float=Sin(25.5+FDrawAngle+90)*64*FDrawScale
Local IDrawXPos2:Float=Cos(25.5-FDrawAngle-90)*64*FDrawScale
Local IDrawYPos2:Float=Sin(25.5-FDrawAngle-90)*64*FDrawScale
'Vertex/Ploygon-Zuweisung/Berechnungen
Local IDrawV0=bbAddVertex(LDrawFace,MouseX3D-IDrawXPos1-0.5,MouseY3D+IDrawYPos1+0.5,0 ,0.002,0.002)
Local IDrawV1=bbAddVertex(LDrawFace,MouseX3D+IDrawXPos2-0.5,MouseY3D+IDrawYPos2+0.5,0 ,0.248,0.002)
Local IDrawV2=bbAddVertex(LDrawFace,MouseX3D+IDrawXPos1-0.5,MouseY3D-IDrawYPos1+0.5,0 ,0.248,0.123)
Local IDrawV3=bbAddVertex(LDrawFace,MouseX3D-IDrawXPos2-0.5,MouseY3D-IDrawYPos2+0.5,0 ,0.002,0.123)
bbVertexColor LDrawFace,IDrawV0,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
bbVertexColor LDrawFace,IDrawV1,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
bbVertexColor LDrawFace,IDrawV2,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
bbVertexColor LDrawFace,IDrawV3,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
bbAddTriangle LDrawFace,IDrawV0,IDrawV1,IDrawV2
bbAddTriangle LDrawFace,IDrawV2,IDrawV3,IDrawV0
End Function
'OnLockBuffer3D( Handle )
Function OnLockBuffer3D(FDrawHandle:Int)
Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
bbLockBuffer bbTextureBuffer(LDrawTexture)
End Function
'UnLockBuffer3D( Handle )
Function UnLockBuffer3D(FDrawHandle:Int)
Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
bbUnLockBuffer bbTextureBuffer(LDrawTexture)
End Function
'SetPixel3D( Handle, X-Position, Y-Position, ARGB-Color )
Function SetPixel3D(FDrawHandle:Int,FDrawX:Int,FDrawY:Int,FDrawARGB:Int=0)
Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
bbWritePixelFast FDrawX,FDrawY,FDrawARGB,bbTextureBuffer(LDrawTexture)
End Function
'GetPixel3D( Handle, X-Position, Y-Position, ARGB-Mask )
Function GetPixel3D(FDrawHandle:Int,FDrawX:Int,FDrawY:Int,FDrawMask:Int=$FFFFFFFF)
Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
Local IDrawARGB:Int=bbReadPixelFast(FDrawX,FDrawY,bbTextureBuffer(LDrawTexture))
If FDrawMask<>$FFFFFFFF Then
Local IDrawRPMXPos:Int=0
Local IDrawRPMWert:Int=0
Local IDrawRPMPlus:Int=1
'Maske-Zusammenfassen
For IDrawRPMXPos=0 To 31
If FDrawMask And 2^IDrawRPMXPos Then
If IDrawARGB And 2^IDrawRPMXPos Then
IDrawRPMWert=IDrawRPMWert+IDrawRPMPlus
End If
IDrawRPMPlus=IDrawRPMPlus*2
End If
Next
'Ausgabe-Mit-Maske
Return IDrawRPMWert
Else
'Reine-Ausgabe
Return IDrawARGB
End If
End Function
'SetTexel3D( Handle, X-Bullet, Y-Bullet, X-Image, Y-Image, Image-Angle, Image-Scale, ARGB-Color )
Function SetTexel3D(FDrawHandle:Int,FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawAngle:Float=0,FDrawScale:Float=1,FDrawARGB:Int=0)
'DrawBank-Variablen-AUSweisung
Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
Local LDrawXMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXMAIN)
Local LDrawYMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYMAIN)
Local LDrawXSize:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXSIZE)*FDrawScale
Local LDrawYSize:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYSIZE)*FDrawScale
Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU1MAP)
Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV1MAP)
Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU2MAP)
Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV2MAP)
'Variablen-Vorberechnung
FDrawX2=FDrawX2-0.5
FDrawY2=FDrawY2+0.5
Local IDrawXOffset:Float=LDrawXMain*2*LDrawU1Map-1
Local IDrawYOffset:Float=LDrawYMain*2*LDrawV1Map-1
Local IDrawXScale:Float=(LDrawXMain*2*LDrawU2Map)-IDrawXOffset
Local IDrawYScale:Float=(LDrawYMain*2*LDrawV2Map)-IDrawYOffset
Local IDrawXRelative:Float=FDrawX1-FDrawX2
Local IDrawYRelative:Float=FDrawY1-FDrawY2
Local IDrawURelative:Float=0
Local IDrawVRelative:Float=0
'Texel/Textur-Setzen
If FDrawAngle=0 Then
If IDrawXRelative>-LDrawXSize Then
If IDrawXRelative<+LDrawXSize Then
If IDrawYRelative>-LDrawYSize Then
If IDrawYRelative<+LDrawYSize Then
IDrawURelative:Float=0.5+(IDrawXRelative/LDrawXSize*0.5)
IDrawVRelative:Float=0.5-(IDrawYRelative/LDrawYSize*0.5)
bbWritePixelFast IDrawXOffset+IDrawXScale*IDrawURelative,IDrawYOffset+IDrawYScale*IDrawVRelative,FDrawARGB,bbTextureBuffer(LDrawTexture)
End If
End If
End If
End If
Else
Local IDrawAngle:Float=ATan2(IDrawYRelative,IDrawXRelative)
Local IDrawRadius:Float=Sqr((Abs(IDrawXRelative*IDrawXRelative))+(Abs(IDrawYRelative*IDrawYRelative)))
IDrawXRelative=Cos(-FDrawAngle-IDrawAngle)*IDrawRadius
IDrawYRelative=Sin(-FDrawAngle-IDrawAngle)*IDrawRadius
If IDrawXRelative>-LDrawXSize Then
If IDrawXRelative<+LDrawXSize Then
If IDrawYRelative>-LDrawYSize Then
If IDrawYRelative<+LDrawYSize Then
IDrawURelative:Float=0.5+(IDrawXRelative/LDrawXSize*0.5)
IDrawVRelative:Float=0.5+(IDrawYRelative/LDrawYSize*0.5)
bbWritePixelFast IDrawXOffset+IDrawXScale*IDrawURelative,IDrawYOffset+IDrawYScale*IDrawVRelative,FDrawARGB,bbTextureBuffer(LDrawTexture)
End If
End If
End If
End If
End If
End Function
'GetTexel3D( Handle, X-Bullet, Y-Bullet, X-Image, Y-Image, Image-Angle, Image-Scale, ARGB-Mask )
Function GetTexel3D(FDrawHandle:Int,FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawAngle:Float=0,FDrawScale:Float=1,FDrawMask:Int=$FFFFFFFF)
'DrawBank-Variablen-AUSweisung
Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
Local LDrawXMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXMAIN)
Local LDrawYMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYMAIN)
Local LDrawXSize:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXSIZE)*FDrawScale
Local LDrawYSize:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYSIZE)*FDrawScale
Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU1MAP)
Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV1MAP)
Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU2MAP)
Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV2MAP)
'Variablen-Vorberechnung
FDrawX2=FDrawX2-0.5
FDrawY2=FDrawY2+0.5
Local IDrawXOffset:Float=LDrawXMain*2*LDrawU1Map-1
Local IDrawYOffset:Float=LDrawYMain*2*LDrawV1Map-1
Local IDrawXScale:Float=(LDrawXMain*2*LDrawU2Map)-IDrawXOffset
Local IDrawYScale:Float=(LDrawYMain*2*LDrawV2Map)-IDrawYOffset
Local IDrawXRelative:Float=FDrawX1-FDrawX2
Local IDrawYRelative:Float=FDrawY1-FDrawY2
Local IDrawURelative:Float=0
Local IDrawVRelative:Float=0
Local IDrawARGB:Int=0
'Texel/Textur-Lesen
If FDrawAngle=0 Then
If IDrawXRelative>-LDrawXSize Then
If IDrawXRelative<+LDrawXSize Then
If IDrawYRelative>-LDrawYSize Then
If IDrawYRelative<+LDrawYSize Then
IDrawURelative:Float=0.5+(IDrawXRelative/LDrawXSize*0.5)
IDrawVRelative:Float=0.5-(IDrawYRelative/LDrawYSize*0.5)
IDrawARGB=bbReadPixelFast(IDrawXOffset+IDrawXScale*IDrawURelative,IDrawYOffset+IDrawYScale*IDrawVRelative,bbTextureBuffer(LDrawTexture))
End If
End If
End If
End If
Else
Local IDrawAngle:Float=ATan2(IDrawYRelative,IDrawXRelative)
Local IDrawRadius:Float=Sqr((Abs(IDrawXRelative*IDrawXRelative))+(Abs(IDrawYRelative*IDrawYRelative)))
IDrawXRelative=Cos(-FDrawAngle-IDrawAngle)*IDrawRadius
IDrawYRelative=Sin(-FDrawAngle-IDrawAngle)*IDrawRadius
If IDrawXRelative>-LDrawXSize Then
If IDrawXRelative<+LDrawXSize Then
If IDrawYRelative>-LDrawYSize Then
If IDrawYRelative<+LDrawYSize Then
IDrawURelative:Float=0.5+(IDrawXRelative/LDrawXSize*0.5)
IDrawVRelative:Float=0.5+(IDrawYRelative/LDrawYSize*0.5)
IDrawARGB=bbReadPixelFast(IDrawXOffset+IDrawXScale*IDrawURelative,IDrawYOffset+IDrawYScale*IDrawVRelative,bbTextureBuffer(LDrawTexture))
End If
End If
End If
End If
End If
'Eingabe-Maske-Überprüfen
If FDrawMask<>$FFFFFFFF Then
Local IDrawRPMXPos:Int=0
Local IDrawRPMWert:Int=0
Local IDrawRPMPlus:Int=1
'Maske-Zusammenfassen
For IDrawRPMXPos=0 To 31
If FDrawMask And 2^IDrawRPMXPos Then
If IDrawARGB And 2^IDrawRPMXPos Then
IDrawRPMWert=IDrawRPMWert+IDrawRPMPlus
End If
IDrawRPMPlus=IDrawRPMPlus*2
End If
Next
'Ausgabe-Mit-Maske
Return IDrawRPMWert
Else
'Reine-Ausgabe
Return IDrawARGB
End If
End Function
'FreeImage3D( Handle )
Function FreeImage3D(FDrawHandle:Int)
Local IDrawLoop:Int
'Master-Bild
If PeekInt(GDrawBank,FDrawHandle+DRAWBANKKING)>0 Then
'Textur-Und-Entity-Entfernen/Löschen
bbFreeTexture PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
bbClearSurface PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE),True,True
bbFreeEntity PeekInt(GDrawBank,FDrawHandle+DRAWBANKMESH)
'Angegebene-Bank-Position-Freigeben
PokeInt GDrawBank,FDrawHandle+DRAWBANKKING,0
PokeInt GDrawBank,FDrawHandle+DRAWBANKMESH,0
PokeInt GDrawBank,FDrawHandle+DRAWBANKFACE,0
'Bank-Dependencies-GGF-Auch-Freigeben
For IDrawLoop=DRAWBANKSTEP To GDrawBankUsed Step DRAWBANKSTEP
If PeekInt(GDrawBank,IDrawLoop+DRAWBANKKING)=-FDrawHandle Then
PokeInt GDrawBank,IDrawLoop+DRAWBANKKING,0
PokeInt GDrawBank,IDrawLoop+DRAWBANKMESH,0
PokeInt GDrawBank,IDrawLoop+DRAWBANKFACE,0
End If
Next
End If
'Teil-Bild
If PeekInt(GDrawBank,FDrawHandle+DRAWBANKKING)<0 Then
'Angegebene-Bank-Position-Freigeben
PokeInt GDrawBank,FDrawHandle+DRAWBANKKING,0
PokeInt GDrawBank,FDrawHandle+DRAWBANKMESH,0
PokeInt GDrawBank,FDrawHandle+DRAWBANKFACE,0
End If
End Function
'Plot3D( Handle, X-Center, Y-Center, IDrawing-Size )
Function Plot3D(FDrawHandle:Int,FDrawX:Float,FDrawY:Float,FDrawSize:Float=2)
'Variablen-Vorberechnung
If FDrawSize=0 Then FDrawSize=1
'DrawBank-Variablen-AUSweisung
Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
'Vertex/Ploygon-Zuweisung/Berechnungen
Local IDrawV0=bbAddVertex(LDrawFace,FDrawX-FDrawSize-0.5,FDrawY+FDrawSize+0.5,0, 0,0)
Local IDrawV1=bbAddVertex(LDrawFace,FDrawX+FDrawSize-0.5,FDrawY+FDrawSize+0.5,0, 1,0)
Local IDrawV2=bbAddVertex(LDrawFace,FDrawX+FDrawSize-0.5,FDrawY-FDrawSize+0.5,0, 1,1)
Local IDrawV3=bbAddVertex(LDrawFace,FDrawX-FDrawSize-0.5,FDrawY-FDrawSize+0.5,0, 0,1)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
End Function
'Line3D( Handle, X-Start, Y-Start, X-End, Y-End, IDrawing-Size )
Function Line3D(FDrawHandle:Int,FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawSize:Float=2)
'DrawBank-Variablen-AUSweisung
Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
' Filax Hack
'FDrawX2=FDrawX2+FDrawX1
'FDrawY2=FDrawY2+FDrawY1
FDrawX1=FDrawX1-(bbGraphicsWidth()/2)
FDrawY1=-FDrawY1+(bbGraphicsHeight()/2+1)
FDrawX2=FDrawX2-(bbGraphicsWidth()/2)
FDrawY2=-FDrawY2+(bbGraphicsHeight()/2)
'Fehlerkorrektur-Durch-Ausblendung
If FDrawX1<>FDrawX2 Or FDrawY1<>FDrawY2 Then
'Variablen-Vorberechnung
If FDrawSize=0 Then FDrawSize=1
bbTFormNormal FDrawX2-FDrawX1,FDrawY2-FDrawY1,0,0,0
Local IDrawUTForm:Float=bbTFormedX()*0.5
Local IDrawVTForm:Float=bbTFormedY()*0.5
' Filax Hack
'Local IDrawXTForm:Float=IDrawUTForm*2*FDrawSize
'Local IDrawYTForm:Float=IDrawVTForm*2*FDrawSize
Local IDrawXTForm:Float=IDrawUTForm*FDrawSize
Local IDrawYTForm:Float=IDrawVTForm*FDrawSize
'Vertex/Ploygon-Zuweisung/Berechnungen
Local IDrawV0=bbAddVertex(LDrawFace,FDrawX1+IDrawYTForm-0.5,FDrawY1-IDrawXTForm+0.5,0, 0.5+IDrawVTForm,0.5+IDrawUTForm)
Local IDrawV1=bbAddVertex(LDrawFace,FDrawX1-IDrawYTForm-0.5,FDrawY1+IDrawXTForm+0.5,0, 0.5-IDrawVTForm,0.5-IDrawUTForm)
Local IDrawV2=bbAddVertex(LDrawFace,FDrawX2-IDrawYTForm-0.5,FDrawY2+IDrawXTForm+0.5,0, 0.5-IDrawVTForm,0.5-IDrawUTForm)
Local IDrawV3=bbAddVertex(LDrawFace,FDrawX2+IDrawYTForm-0.5,FDrawY2-IDrawXTForm+0.5,0, 0.5+IDrawVTForm,0.5+IDrawUTForm)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
End If
End Function
'Rect3D( Handle, X-Center, Y-Center, X-Size, Y-Size, IDrawing-Mode, Border-Size )
Function Rect3D(FDrawHandle:Int,FDrawX:Float,FDrawY:Float,FDrawXS:Float,FDrawYS:Float,FDrawFill:Int=1,FDrawSize:Float=0)
'DrawBank-Variablen-AUSweisung
Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
' Filax Hack
FDrawX=FDrawX-(bbGraphicsWidth()/2)
FDrawY=-FDrawY+(bbGraphicsHeight()/2)
FDrawXS=FDrawXS/2
FDrawYS=FDrawYS/2
FDrawX=FDrawX+FDrawXS
FDrawY=FDrawY-FDrawYS
'Variablen-Vorberechnung
FDrawX=FDrawX-0.5
FDrawY=FDrawY+0.5
FDrawXS=Abs(FDrawXS)
FDrawYS=Abs(FDrawYS)
'Rahmen-Allein-Modus
If FDrawFill=0 Then
If FDrawSize=0 Then FDrawSize=1
'Vertex/Ploygon-Zuweisung/Berechnungen
Local IDrawV0=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 0.5,0)
Local IDrawV1=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 0.5,0)
Local IDrawV2=bbAddVertex(LDrawFace,FDrawX+FDrawXS-FDrawSize,FDrawY+FDrawYS-FDrawSize,0, 0.5,1)
Local IDrawV3=bbAddVertex(LDrawFace,FDrawX-FDrawXS+FDrawSize,FDrawY+FDrawYS-FDrawSize,0, 0.5,1)
Local IDrawV4=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 1,0.5)
Local IDrawV5=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 1,0.5)
Local IDrawV6=bbAddVertex(LDrawFace,FDrawX+FDrawXS-FDrawSize,FDrawY-FDrawYS+FDrawSize,0, 0,0.5)
Local IDrawV7=bbAddVertex(LDrawFace,FDrawX+FDrawXS-FDrawSize,FDrawY+FDrawYS-FDrawSize,0, 0,0.5)
Local IDrawV8=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 0.5,1)
Local IDrawV9=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 0.5,1)
Local IDrawVA=bbAddVertex(LDrawFace,FDrawX-FDrawXS+FDrawSize,FDrawY-FDrawYS+FDrawSize,0, 0.5,0)
Local IDrawVB=bbAddVertex(LDrawFace,FDrawX+FDrawXS-FDrawSize,FDrawY-FDrawYS+FDrawSize,0, 0.5,0)
Local IDrawVC=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 0,0.5)
Local IDrawVD=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 0,0.5)
Local IDrawVE=bbAddVertex(LDrawFace,FDrawX-FDrawXS+FDrawSize,FDrawY+FDrawYS-FDrawSize,0, 1,0.5)
Local IDrawVF=bbAddVertex(LDrawFace,FDrawX-FDrawXS+FDrawSize,FDrawY-FDrawYS+FDrawSize,0, 1,0.5)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV4,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV5,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV6,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV7,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV8,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV9,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawVA,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawVB,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawVC,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawVD,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawVE,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawVF,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
bbAddTriangle(LDrawFace,IDrawV4,IDrawV5,IDrawV6)
bbAddTriangle(LDrawFace,IDrawV6,IDrawV7,IDrawV4)
bbAddTriangle(LDrawFace,IDrawV8,IDrawV9,IDrawVA)
bbAddTriangle(LDrawFace,IDrawVA,IDrawVB,IDrawV8)
bbAddTriangle(LDrawFace,IDrawVC,IDrawVD,IDrawVE)
bbAddTriangle(LDrawFace,IDrawVE,IDrawVF,IDrawVC)
Else
'Gefüllt-Allein-Modus | Vertex/Ploygon-Zuweisung/Berechnungen
IDrawV0=bbAddVertex(LDrawFace,FDrawX-FDrawXS,FDrawY+FDrawYS,0, 0.5-DRAWRECTOFFSET,0.5-DRAWRECTOFFSET)
IDrawV1=bbAddVertex(LDrawFace,FDrawX+FDrawXS,FDrawY+FDrawYS,0, 0.5+DRAWRECTOFFSET,0.5-DRAWRECTOFFSET)
IDrawV2=bbAddVertex(LDrawFace,FDrawX+FDrawXS,FDrawY-FDrawYS,0, 0.5+DRAWRECTOFFSET,0.5+DRAWRECTOFFSET)
IDrawV3=bbAddVertex(LDrawFace,FDrawX-FDrawXS,FDrawY-FDrawYS,0, 0.5-DRAWRECTOFFSET,0.5+DRAWRECTOFFSET)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
'Halbrahmen-Hinzufügen
If FDrawSize>0 Then
'Vertex/Ploygon-Zuweisung/Berechnungen
IDrawV4=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 0.5,0)
IDrawV5=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 0.5,0)
IDrawV6=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 1,0.5)
IDrawV7=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 1,0.5)
IDrawV8=bbAddVertex(LDrawFace,FDrawX+FDrawXS+FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 0.5,1)
IDrawV9=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 0.5,1)
IDrawVA=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY-FDrawYS-FDrawSize,0, 0,0.5)
IDrawVB=bbAddVertex(LDrawFace,FDrawX-FDrawXS-FDrawSize,FDrawY+FDrawYS+FDrawSize,0, 0,0.5)
bbVertexColor LDrawFace,IDrawV4,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV5,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV6,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV7,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV8,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV9,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawVA,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawVB,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV4,IDrawV5,IDrawV1)
bbAddTriangle(LDrawFace,IDrawV1,IDrawV0,IDrawV4)
bbAddTriangle(LDrawFace,IDrawV6,IDrawV7,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV1,IDrawV6)
bbAddTriangle(LDrawFace,IDrawV8,IDrawV9,IDrawV3)
bbAddTriangle(LDrawFace,IDrawV3,IDrawV2,IDrawV8)
bbAddTriangle(LDrawFace,IDrawVA,IDrawVB,IDrawV0)
bbAddTriangle(LDrawFace,IDrawV0,IDrawV3,IDrawVA)
End If
End If
End Function
'Oval3D( Handle, X-Center, Y-Center, X-Size, Y-Size, IDrawing-Mode, Border-Size )
Function Oval3D(FDrawHandle:Int,FDrawX:Float,FDrawY:Float,FDrawXS:Float,FDrawYS:Float,FDrawFill:Int=1,FDrawSize:Float=0)
'DrawBank-Variablen-AUSweisung
Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
' Filax Hack
FDrawX=FDrawX-(bbGraphicsWidth()/2)
FDrawY=-FDrawY+(bbGraphicsHeight()/2)
'Variablen-Vorberechnung
FDrawX=FDrawX-0.5
FDrawY=FDrawY+0.5
FDrawXS=Abs(FDrawXS)
FDrawYS=Abs(FDrawYS)
Local IDrawSequences:Float=8+Int((FDrawXS+FDrawYS)/20)
If IDrawSequences>32 Then IDrawSequences=32
Local IDrawAngle:Float=90.0/IDrawSequences
Local IDrawLoop:Int
'Rahmen-Allein-Modus
If FDrawFill=0 Then
If FDrawSize=0 Then FDrawSize=1
Local IDrawXOutside:Float=FDrawXS+FDrawSize
Local IDrawYOutside:Float=FDrawYS+FDrawSize
Local IDrawXInside:Float=FDrawXS-FDrawSize
Local IDrawYInside:Float=FDrawYS-FDrawSize
For IDrawLoop=1 To IDrawSequences
'Vertex/Ploygon-Zuweisung/Berechnungen
Local IDrawXPos1:Float=Cos(IDrawLoop*IDrawAngle)
Local IDrawYPos1:Float=Sin(IDrawLoop*IDrawAngle)
Local IDrawXPos2:Float=Cos(IDrawLoop*IDrawAngle-IDrawAngle)
Local IDrawYPos2:Float=Sin(IDrawLoop*IDrawAngle-IDrawAngle)
Local IDrawUPos1:Float=IDrawXPos1*0.5
Local IDrawVPos1:Float=IDrawYPos1*0.5
Local IDrawUPos2:Float=IDrawXPos2*0.5
Local IDrawVPos2:Float=IDrawYPos2*0.5
'Oval3D-Quartal-1/4-Mirror
Local IDrawV0=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*IDrawXOutside,FDrawY+IDrawYPos1*IDrawYOutside,0, 0.5+IDrawUPos1,0.5-IDrawVPos1)
Local IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*IDrawXOutside,FDrawY+IDrawYPos2*IDrawYOutside,0, 0.5+IDrawUPos2,0.5-IDrawVPos2)
Local IDrawV2=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*IDrawXInside,FDrawY+IDrawYPos2*IDrawYInside,0, 0.5-IDrawUPos2,0.5+IDrawVPos2)
Local IDrawV3=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*IDrawXInside,FDrawY+IDrawYPos1*IDrawYInside,0, 0.5-IDrawUPos1,0.5+IDrawVPos1)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
'Oval3D-Quartal-2/4-Mirror
IDrawV0=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*IDrawXOutside,FDrawY-IDrawYPos1*IDrawYOutside,0, 0.5+IDrawUPos1,0.5+IDrawVPos1)
IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*IDrawXOutside,FDrawY-IDrawYPos2*IDrawYOutside,0, 0.5+IDrawUPos2,0.5+IDrawVPos2)
IDrawV2=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*IDrawXInside,FDrawY-IDrawYPos2*IDrawYInside,0, 0.5-IDrawUPos2,0.5-IDrawVPos2)
IDrawV3=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*IDrawXInside,FDrawY-IDrawYPos1*IDrawYInside,0, 0.5-IDrawUPos1,0.5-IDrawVPos1)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
'Oval3D-Quartal-3/4-Mirror
IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*IDrawXOutside,FDrawY-IDrawYPos1*IDrawYOutside,0, 0.5-IDrawUPos1,0.5+IDrawVPos1)
IDrawV1=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*IDrawXOutside,FDrawY-IDrawYPos2*IDrawYOutside,0, 0.5-IDrawUPos2,0.5+IDrawVPos2)
IDrawV2=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*IDrawXInside,FDrawY-IDrawYPos2*IDrawYInside,0, 0.5+IDrawUPos2,0.5-IDrawVPos2)
IDrawV3=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*IDrawXInside,FDrawY-IDrawYPos1*IDrawYInside,0, 0.5+IDrawUPos1,0.5-IDrawVPos1)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
'Oval3D-Quartal-4/4-Mirror
IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*IDrawXOutside,FDrawY+IDrawYPos1*IDrawYOutside,0, 0.5-IDrawUPos1,0.5-IDrawVPos1)
IDrawV1=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*IDrawXOutside,FDrawY+IDrawYPos2*IDrawYOutside,0, 0.5-IDrawUPos2,0.5-IDrawVPos2)
IDrawV2=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*IDrawXInside,FDrawY+IDrawYPos2*IDrawYInside,0, 0.5+IDrawUPos2,0.5+IDrawVPos2)
IDrawV3=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*IDrawXInside,FDrawY+IDrawYPos1*IDrawYInside,0, 0.5+IDrawUPos1,0.5+IDrawVPos1)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
Next
Else
'Mittelpunkt-Vertex-Zuweisung/Berechnungen
Local IDrawVC=bbAddVertex(LDrawFace,FDrawX,FDrawY,0, 0.5,0.5)
bbVertexColor LDrawFace,IDrawVC,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
'Gefüllt+Halbrahmen-Modus
If FDrawSize>0 Then
IDrawXOutside:Float=FDrawXS+FDrawSize
IDrawYOutside:Float=FDrawYS+FDrawSize
For IDrawLoop=1 To IDrawSequences
'Vertex/Ploygon-Zuweisung/Berechnungen
IDrawXPos1:Float=Cos(IDrawLoop*IDrawAngle)
IDrawYPos1:Float=Sin(IDrawLoop*IDrawAngle)
IDrawXPos2:Float=Cos(IDrawLoop*IDrawAngle-IDrawAngle)
IDrawYPos2:Float=Sin(IDrawLoop*IDrawAngle-IDrawAngle)
IDrawUPos1:Float=IDrawXPos1*0.5
IDrawVPos1:Float=IDrawYPos1*0.5
IDrawUPos2:Float=IDrawXPos2*0.5
IDrawVPos2:Float=IDrawYPos2*0.5
'Oval3D-Quartal-1/4-Mirror
IDrawV0=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*IDrawXOutside,FDrawY+IDrawYPos1*IDrawYOutside,0, 0.5+IDrawUPos1,0.5-IDrawVPos1)
IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*IDrawXOutside,FDrawY+IDrawYPos2*IDrawYOutside,0, 0.5+IDrawUPos2,0.5-IDrawVPos2)
IDrawV2=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*FDrawXS,FDrawY+IDrawYPos2*FDrawYS,0, 0.5,0.5)
IDrawV3=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*FDrawXS,FDrawY+IDrawYPos1*FDrawYS,0, 0.5,0.5)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
bbAddTriangle(LDrawFace,IDrawVC,IDrawV3,IDrawV2)
'Oval3D-Quartal-2/4-Mirror
IDrawV0=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*IDrawXOutside,FDrawY-IDrawYPos1*IDrawYOutside,0, 0.5+IDrawUPos1,0.5+IDrawVPos1)
IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*IDrawXOutside,FDrawY-IDrawYPos2*IDrawYOutside,0, 0.5+IDrawUPos2,0.5+IDrawVPos2)
IDrawV2=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*FDrawXS,FDrawY-IDrawYPos2*FDrawYS,0, 0.5,0.5)
IDrawV3=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*FDrawXS,FDrawY-IDrawYPos1*FDrawYS,0, 0.5,0.5)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
bbAddTriangle(LDrawFace,IDrawVC,IDrawV3,IDrawV2)
'Oval3D-Quartal-3/4-Mirror
IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*IDrawXOutside,FDrawY-IDrawYPos1*IDrawYOutside,0, 0.5-IDrawUPos1,0.5+IDrawVPos1)
IDrawV1=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*IDrawXOutside,FDrawY-IDrawYPos2*IDrawYOutside,0, 0.5-IDrawUPos2,0.5+IDrawVPos2)
IDrawV2=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*FDrawXS,FDrawY-IDrawYPos2*FDrawYS,0, 0.5,0.5)
IDrawV3=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*FDrawXS,FDrawY-IDrawYPos1*FDrawYS,0, 0.5,0.5)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
bbAddTriangle(LDrawFace,IDrawVC,IDrawV3,IDrawV2)
'Oval3D-Quartal-4/4-Mirror
IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*IDrawXOutside,FDrawY+IDrawYPos1*IDrawYOutside,0, 0.5-IDrawUPos1,0.5-IDrawVPos1)
IDrawV1=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*IDrawXOutside,FDrawY+IDrawYPos2*IDrawYOutside,0, 0.5-IDrawUPos2,0.5-IDrawVPos2)
IDrawV2=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*FDrawXS,FDrawY+IDrawYPos2*FDrawYS,0, 0.5,0.5)
IDrawV3=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*FDrawXS,FDrawY+IDrawYPos1*FDrawYS,0, 0.5,0.5)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV3,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
bbAddTriangle(LDrawFace,IDrawV2,IDrawV3,IDrawV0)
bbAddTriangle(LDrawFace,IDrawVC,IDrawV3,IDrawV2)
Next
Else
'Gefüllt-Allein-Modus
For IDrawLoop=1 To IDrawSequences
'Vertex/Ploygon-Zuweisung/Berechnungen
IDrawXPos1:Float=Cos(IDrawLoop*IDrawAngle)
IDrawYPos1:Float=Sin(IDrawLoop*IDrawAngle)
IDrawXPos2:Float=Cos(IDrawLoop*IDrawAngle-IDrawAngle)
IDrawYPos2:Float=Sin(IDrawLoop*IDrawAngle-IDrawAngle)
'Oval3D-Quartal-1/4-Mirror
IDrawV0=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*FDrawXS,FDrawY+IDrawYPos1*FDrawYS,0, 0.5,0.5)
IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*FDrawXS,FDrawY+IDrawYPos2*FDrawYS,0, 0.5,0.5)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawVC,IDrawV1,IDrawV0)
'Oval3D-Quartal-2/4-Mirror
IDrawV0=bbAddVertex(LDrawFace,FDrawX+IDrawXPos1*FDrawXS,FDrawY-IDrawYPos1*FDrawYS,0, 0.5,0.5)
IDrawV1=bbAddVertex(LDrawFace,FDrawX+IDrawXPos2*FDrawXS,FDrawY-IDrawYPos2*FDrawYS,0, 0.5,0.5)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawVC,IDrawV1,IDrawV0)
'Oval3D-Quartal-3/4-Mirror
IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*FDrawXS,FDrawY-IDrawYPos1*FDrawYS,0, 0.5,0.5)
IDrawV1=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*FDrawXS,FDrawY-IDrawYPos2*FDrawYS,0, 0.5,0.5)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawVC,IDrawV1,IDrawV0)
'Oval3D-Quartal-4/4-Mirror
IDrawV0=bbAddVertex(LDrawFace,FDrawX-IDrawXPos1*FDrawXS,FDrawY+IDrawYPos1*FDrawYS,0, 0.5,0.5)
IDrawV1=bbAddVertex(LDrawFace,FDrawX-IDrawXPos2*FDrawXS,FDrawY+IDrawYPos2*FDrawYS,0, 0.5,0.5)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawVC,IDrawV1,IDrawV0)
Next
End If
End If
End Function
'Poly3D( Handle, X1-Pos, Y1-Pos, X2-Pos, Y2-Pos, X3-Pos, Y3-Pos )
Function Poly3D(FDrawHandle:Int,FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawX3:Float,FDrawY3:Float)
'DrawBank-Variablen-AUSweisung
Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
'Vertex/Ploygon-Zuweisung/Berechnungen
Local IDrawV0=bbAddVertex(LDrawFace,FDrawX1-0.5,FDrawY1+0.5,0, 0.5,0.5)
Local IDrawV1=bbAddVertex(LDrawFace,FDrawX2-0.5,FDrawY2+0.5,0, 0.5,0.5)
Local IDrawV2=bbAddVertex(LDrawFace,FDrawX3-0.5,FDrawY3+0.5,0, 0.5,0.5)
bbVertexColor LDrawFace,IDrawV0,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV1,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbVertexColor LDrawFace,IDrawV2,GDrawNFR,GDrawNFG,GDrawNFB,GDrawNFA
bbAddTriangle(LDrawFace,IDrawV0,IDrawV1,IDrawV2)
End Function
'Text3D( Handle, X-Center-Position, Y-Center-Position, Text-String, Text-Align, Button, Rotation )
Function Text3D(FDrawHandle:Int,FDrawX:Float,FDrawY:Float,FDrawString:String,FDrawAlign:Float=0,FDrawButton:Int=0,FDrawAngle:Float=0)
If FDrawHandle=0 Then RuntimeError "Handle not set"
'DrawBank-Variablen-AUSweisung
Local LDrawFace:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKFACE)
Local LDrawBank:Int=PeekInt(GDrawBank,FDrawHandle+DRAWFONTBANK)
Local LDrawSize:Int=PeekInt(GDrawBank,FDrawHandle+DRAWFONTSIZE)
' Filax Hack
FDrawX=FDrawX-(bbGraphicsWidth()/2)
FDrawY=-FDrawY+(bbGraphicsHeight()/2)
'Variablen-Vorberechnung
FDrawX=FDrawX-0.5
FDrawY=FDrawY+0.5
Local IDrawLen:Int=Len(FDrawString)
Local IDrawXVector:Float=Cos(-FDrawAngle)*GDrawSFont
Local IDrawYVector:Float=Sin(-FDrawAngle)*GDrawSFont
Local IDrawXI:Float=IDrawXVector*GDrawIFont*GDrawHFont
Local IDrawYI:Float=IDrawYVector*GDrawIFont*GDrawHFont
Local IDrawX1Pos:Float=FDrawX-IDrawYVector*GDrawHFont*0.5*LDrawSize+IDrawXI
Local IDrawY1Pos:Float=FDrawY+IDrawXVector*GDrawHFont*0.5*LDrawSize+IDrawYI
Local IDrawX4Pos:Float=FDrawX+IDrawYVector*GDrawHFont*0.5*LDrawSize-IDrawXI
Local IDrawY4Pos:Float=FDrawY-IDrawXVector*GDrawHFont*0.5*LDrawSize-IDrawYI
Local IDrawLoop:Int
'String-GGF-Ausrichten
If FDrawAlign<>0 Then
For IDrawLoop=1 To IDrawLen
Local IDrawAsc=Asc(Mid:String(FDrawString,IDrawLoop,1))
Local LDrawWidth:Int=PeekByte(GDrawFontBank,LDrawBank+IDrawAsc)
IDrawX1Pos=IDrawX1Pos-(LDrawWidth*IDrawXVector+GDrawPFont*IDrawXVector)*FDrawAlign*0.5
IDrawY1Pos=IDrawY1Pos-(LDrawWidth*IDrawYVector+GDrawPFont*IDrawYVector)*FDrawAlign*0.5
IDrawX4Pos=IDrawX4Pos-(LDrawWidth*IDrawXVector+GDrawPFont*IDrawXVector)*FDrawAlign*0.5
IDrawY4Pos=IDrawY4Pos-(LDrawWidth*IDrawYVector+GDrawPFont*IDrawYVector)*FDrawAlign*0.5
Next
End If
Local IDrawX1Temp:Float=IDrawX1Pos
Local IDrawY1Temp:Float=IDrawY1Pos
Local IDrawX4Temp:Float=IDrawX4Pos
Local IDrawY4Temp:Float=IDrawY4Pos
'String-Durchgehend-Zeichnen
For IDrawLoop=1 To IDrawLen
IDrawAsc=Asc(Mid:String(FDrawString,IDrawLoop,1))
LDrawWidth:Int=PeekByte(GDrawFontBank,LDrawBank+IDrawAsc)
Local IDrawX2Pos:Float=IDrawX1Pos+IDrawXVector*LDrawWidth
Local IDrawY2Pos:Float=IDrawY1Pos+IDrawYVector*LDrawWidth
Local IDrawX3Pos:Float=IDrawX4Pos+IDrawXVector*LDrawWidth
Local IDrawY3Pos:Float=IDrawY4Pos+IDrawYVector*LDrawWidth
Local IDrawU1Map:Float=(IDrawAsc Mod 16)*DRAWFONTUVSTEP
Local IDrawV1Map:Float=Floor(IDrawAsc/16)*DRAWFONTUVSTEP
Local IDrawU2Map:Float=IDrawU1Map+DRAWFONTUVSTEP*LDrawWidth/LDrawSize
Local IDrawV2Map:Float=IDrawV1Map+DRAWFONTUVSTEP
'Vertex/Ploygon-Zuweisung/Berechnungen
Local IDrawV0=bbAddVertex(LDrawFace,IDrawX1Pos,IDrawY1Pos,0, IDrawU1Map,IDrawV1Map)
Local IDrawV1=bbAddVertex(LDrawFace,IDrawX2Pos,IDrawY2Pos,0, IDrawU2Map,IDrawV1Map)
Local IDrawV2=bbAddVertex(LDrawFace,IDrawX3Pos,IDrawY3Pos,0, IDrawU2Map,IDrawV2Map)
Local IDrawV3=bbAddVertex(LDrawFace,IDrawX4Pos,IDrawY4Pos,0, IDrawU1Map,IDrawV2Map)
bbVertexColor LDrawFace,IDrawV0,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
bbVertexColor LDrawFace,IDrawV1,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
bbVertexColor LDrawFace,IDrawV2,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
bbVertexColor LDrawFace,IDrawV3,GDrawTFR,GDrawTFG,GDrawTFB,GDrawTFA
bbAddTriangle LDrawFace,IDrawV0,IDrawV1,IDrawV2
bbAddTriangle LDrawFace,IDrawV2,IDrawV3,IDrawV0
IDrawX1Pos=IDrawX1Pos+LDrawWidth*IDrawXVector+GDrawPFont*IDrawXVector
IDrawY1Pos=IDrawY1Pos+LDrawWidth*IDrawYVector+GDrawPFont*IDrawYVector
IDrawX4Pos=IDrawX4Pos+LDrawWidth*IDrawXVector+GDrawPFont*IDrawXVector
IDrawY4Pos=IDrawY4Pos+LDrawWidth*IDrawYVector+GDrawPFont*IDrawYVector
Next
If FDrawButton<>0 Then CheckQuad3D(IDrawX1Temp,IDrawY1Temp,IDrawX2Pos,IDrawY2Pos,IDrawX3Pos,IDrawY3Pos,IDrawX4Temp,IDrawY4Temp,FDrawButton,FDrawString)
End Function
'StringWidth3D( Handle, Text-String )
Function StringWidth3D(FDrawHandle:Int,FDrawString:String)
If FDrawHandle=0 Then RuntimeError "Handle not set"
'DrawBank-Variablen-AUSweisung
Local LDrawBank:Int=PeekInt(GDrawBank,FDrawHandle+DRAWFONTBANK)
'Variablen-Vorberechnung
Local IDrawLen:Int=Len(FDrawString)
Local IDrawWidth:Float=0
Local IDrawLoop:Int
'Stringlänge-Berechnen
For IDrawLoop=1 To IDrawLen
Local IDrawAsc=Asc(Mid:String(FDrawString,IDrawLoop,1))
Local LDrawWidth:Int=PeekByte(GDrawFontBank,LDrawBank+IDrawAsc)
IDrawWidth=IDrawWidth+LDrawWidth+GDrawPFont
Next
'Variablen-Ausstiegsvorbereitung
Return IDrawWidth*GDrawSFont-GDrawPFont
End Function
'USwap3D( Handle, Image-Frame )
Function USwap3D(FDrawHandle:Int,FDrawFrame:Int)
FDrawFrame=FDrawFrame*DRAWBANKSTEP
'DrawBank-Variablen-AUSweisung
Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU1MAP+FDrawFrame)
Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKU2MAP+FDrawFrame)
'DrawBank-Variablen-EINweisung
PokeFloat GDrawBank,FDrawHandle+DRAWBANKU1MAP+FDrawFrame,LDrawU2Map
PokeFloat GDrawBank,FDrawHandle+DRAWBANKU2MAP+FDrawFrame,LDrawU1Map
End Function
'VSwap3D( Handle, Image-Frame )
Function VSwap3D(FDrawHandle:Int,FDrawFrame:Int)
FDrawFrame=FDrawFrame*DRAWBANKSTEP
'DrawBank-Variablen-AUSweisung
Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV1MAP+FDrawFrame)
Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawHandle+DRAWBANKV2MAP+FDrawFrame)
'DrawBank-Variablen-EINweisung
PokeFloat GDrawBank,FDrawHandle+DRAWBANKV1MAP+FDrawFrame,LDrawV2Map
PokeFloat GDrawBank,FDrawHandle+DRAWBANKV2MAP+FDrawFrame,LDrawV1Map
End Function
'CheckQuad3D( X1-Pos, Y1-Pos, X2-Pos, Y2-Pos, X3-Pos, Y3-Pos, X4-Pos, Y4-Pos, Button-Handle, Image-Text )
Function CheckQuad3D(FDrawX1:Float,FDrawY1:Float,FDrawX2:Float,FDrawY2:Float,FDrawX3:Float,FDrawY3:Float,FDrawX4:Float,FDrawY4:Float,FDrawButton:Int=1,FDrawOver:String="not set")
'Variablen-Vorberechnung
MouseOver3D=0
MouseDown3D=0
MouseHit3D=0
MousePit3D=0
'Quadkollision-Berechnen/CheckQuad3D-Anwenden
If (FDrawY2-FDrawY1)*(MouseX3D-FDrawX2)-(FDrawX2-FDrawX1)*(MouseY3D-FDrawY2)>0 Then
If (FDrawY3-FDrawY2)*(MouseX3D-FDrawX3)-(FDrawX3-FDrawX2)*(MouseY3D-FDrawY3)>0 Then
If (FDrawY4-FDrawY3)*(MouseX3D-FDrawX4)-(FDrawX4-FDrawX3)*(MouseY3D-FDrawY4)>0 Then
If (FDrawY1-FDrawY4)*(MouseX3D-FDrawX1)-(FDrawX1-FDrawX4)*(MouseY3D-FDrawY1)>0 Then
'Globale-Maus-Variablen-Berechnung
MouseDown3D=bbMouseDown(1)+(bbMouseDown(2)*2)+(bbMouseDown(3)*4)
If GDrawMouseHit=0 Then MouseHit3D=MouseDown3D
If GDrawMousePit<>FDrawOver Then MousePit3D=1
GDrawMouseHit=MouseDown3D
GDrawMousePit=FDrawOver
MouseText3D=FDrawOver
MouseOver3D=1
'Nur-Wenn-Imagehandle-Gegeben
If FDrawButton Mod DRAWBANKSTEP=0 Then
'DrawBank-Variablen-AUSweisung
Local LDrawFace:Int=PeekInt(GDrawBank,FDrawButton+DRAWBANKFACE+(MouseDown3D>0)*DRAWBANKSTEP)
Local LDrawU1Map:Float=PeekFloat(GDrawBank,FDrawButton+DRAWBANKU1MAP+(MouseDown3D>0)*DRAWBANKSTEP)
Local LDrawV1Map:Float=PeekFloat(GDrawBank,FDrawButton+DRAWBANKV1MAP+(MouseDown3D>0)*DRAWBANKSTEP)
Local LDrawU2Map:Float=PeekFloat(GDrawBank,FDrawButton+DRAWBANKU2MAP+(MouseDown3D>0)*DRAWBANKSTEP)
Local LDrawV2Map:Float=PeekFloat(GDrawBank,FDrawButton+DRAWBANKV2MAP+(MouseDown3D>0)*DRAWBANKSTEP)
'Vertex/Ploygon-Zuweisung/Berechnungen
Local IDrawV0=bbAddVertex(LDrawFace,FDrawX1,FDrawY1,0 ,LDrawU1Map,LDrawV1Map)
Local IDrawV1=bbAddVertex(LDrawFace,FDrawX2,FDrawY2,0 ,LDrawU2Map,LDrawV1Map)
Local IDrawV2=bbAddVertex(LDrawFace,FDrawX3,FDrawY3,0 ,LDrawU2Map,LDrawV2Map)
Local IDrawV3=bbAddVertex(LDrawFace,FDrawX4,FDrawY4,0 ,LDrawU1Map,LDrawV2Map)
bbVertexColor LDrawFace,IDrawV0,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbVertexColor LDrawFace,IDrawV1,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbVertexColor LDrawFace,IDrawV2,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbVertexColor LDrawFace,IDrawV3,GDrawGFR,GDrawGFG,GDrawGFB,GDrawGFA
bbAddTriangle LDrawFace,IDrawV0,IDrawV1,IDrawV2
bbAddTriangle LDrawFace,IDrawV2,IDrawV3,IDrawV0
End If
'Ausstiegsvorbereitung
Return True
End If
End If
End If
End If
End Function
'XDrawMP3D( Handle, Mask-Alpha )
Function XDrawMP3D(FDrawHandle:Int,FDrawAlpha:Int=0)
'DrawBank-Variablen-AUSweisung
Local LDrawTexture:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKTEXTURE)
Local LDrawXMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKXMAIN)*2
Local LDrawYMain:Int=PeekInt(GDrawBank,FDrawHandle+DRAWBANKYMAIN)*2
'Variablen-Vorberechnung
Local IDrawXLoop:Int=0
Local IDrawYLoop:Int=0
Local IDrawColor:Int=0
'Maske-Auf-Textur-Anwendung
bbLockBuffer bbTextureBuffer(LDrawTexture)
If FDrawAlpha=3 Then
'Alphamaske-Hinzufügen
For IDrawYLoop=0 To LDrawYMain-1
For IDrawXLoop=0 To LDrawXMain-1
IDrawColor=bbReadPixelFast(IDrawXLoop,IDrawYLoop,bbTextureBuffer(LDrawTexture))
bbWritePixelFast IDrawXLoop,IDrawYLoop,$FF000000+(IDrawColor And $FFFFFF),bbTextureBuffer(LDrawTexture)
Next
Next
Else
'MAV-Workaround-Für-FAST
For IDrawYLoop=0 To LDrawYMain-1
For IDrawXLoop=0 To LDrawXMain-1
IDrawColor=bbReadPixelFast(IDrawXLoop,IDrawYLoop,bbTextureBuffer(LDrawTexture))
bbWritePixelFast IDrawXLoop,IDrawYLoop,IDrawColor,bbTextureBuffer(LDrawTexture)
Next
Next
End If
bbUnLockBuffer bbTextureBuffer(LDrawTexture)
End Function
'XDrawBP3D( )
Function XDrawBP3D()
'Start-Draw-Bank-Vorgabe
Local IDrawBP:Int=DRAWBANKSTEP
'Nächst-Freie-Bank-Suchen
Repeat
If PeekInt(GDrawBank,IDrawBP+DRAWBANKKING)=0 Then Exit
IDrawBP=IDrawBP+DRAWBANKSTEP
If IDrawBP>(DRAWBANKSIZE*DRAWBANKSTEP) Then
RuntimeError "GDrawBank is to small"
End If
Forever
'Bank-Benutzungseingrenzung-Festlegen
If IDrawBP>GDrawBankUsed Then GDrawBankUsed=IDrawBP
'Variablen-Ausstiegsvorbereitung
Return IDrawBP
End Function
'XDrawFP3D( )
Function XDrawFP3D()
'Start-Font-Bank-Vorgabe
Local IDrawFP:Int=0
'Nächst-Freie-Bank-Suchen
Repeat
If PeekByte(GDrawFontBank,IDrawFP+DRAWBANKKING)=0 Then Exit
IDrawFP=IDrawFP+DRAWFONTBANKSTEP
If IDrawFP>(DRAWFONTBANKSIZE*DRAWFONTBANKSTEP) Then
RuntimeError "GDrawFontBank is to small"
End If
Forever
'Variablen-Ausstiegsvorbereitung
Return IDrawFP
End Function
'XDrawTT3D( Handle, X-Main, Y-Main, X-Tile-Pos, Y-Tile-Pos )
Function XDrawTT3D(FDrawHandle:Int,FDrawXT:Int,FDrawYT:Int,FDrawXP:Int,FDrawYP:Int)
'Variablen-Vorberechnung
Local IDrawXSize:Int=FDrawXT/16
Local IDrawYSize:Int=FDrawYT/16
Local IDrawField:Int=CreateBank(IDrawXSize*IDrawYSize*4)
Local IDrawXTile:Int=IDrawXSize*FDrawXP
Local IDrawYTile:Int=IDrawYSize*FDrawYP
Local IDrawXLoop:Int=0
Local IDrawYLoop:Int=0
Local IDrawValue:Int=0
Local IDrawLSet:Int=0
Local IDrawRSet:Int=0
Local IDrawXPos:Int=0
'Textursymbol-Zwischenspeichern
For IDrawXLoop=0 To IDrawXSize-1 Step+1
For IDrawYLoop=0 To IDrawYSize-1 Step+1
IDrawValue=bbReadPixelFast(IDrawXTile+IDrawXLoop,IDrawYTile+IDrawYLoop,bbTextureBuffer(FDrawHandle))
bbWritePixelFast IDrawXTile+IDrawXLoop,IDrawYTile+IDrawYLoop,$00000000,bbTextureBuffer(FDrawHandle)
PokeInt IDrawField,(IDrawXLoop*IDrawYSize+IDrawYLoop)*4,IDrawValue
Next
Next
'Linke-Grenze-Des-Symbols-Suchen
For IDrawXLoop=IDrawXSize-1 To 0 Step-1
For IDrawYLoop=0 To IDrawYSize-1 Step+1
If PeekInt(IDrawField,(IDrawXLoop*IDrawYSize+IDrawYLoop)*4) Shr 24 <> 0 Then IDrawLSet=IDrawXLoop
Next
Next
'Rechte-Grenze-Des-Symbols-Suchen
For IDrawXLoop=0 To IDrawXSize-1 Step+1
For IDrawYLoop=0 To IDrawYSize-1 Step+1
If PeekInt(IDrawField,(IDrawXLoop*IDrawYSize+IDrawYLoop)*4) Shr 24 <> 0 Then IDrawRSet=IDrawXLoop
Next
Next
'Symbol-Nach-Links-Verschieben
For IDrawXLoop=0 To IDrawXSize-1 Step+1
For IDrawYLoop=0 To IDrawYSize-1 Step+1
IDrawXPos=IDrawXLoop+IDrawLSet
If IDrawXPos=>0 And IDrawXPos<IDrawXSize Then
IDrawValue=PeekInt(IDrawField,(IDrawXPos*IDrawYSize+IDrawYLoop)*4)
bbWritePixelFast IDrawXTile+IDrawXLoop,IDrawYTile+IDrawYLoop,IDrawValue,bbTextureBuffer(FDrawHandle)
End If
Next
Next
'Variablen-Ausstiegsvorbereitung
Return IDrawRSet-IDrawLSet+1+FDrawXT/512
End Function