StringToFunc !!! von Markus
Ein Beispiel wie man Positionen ect. als Textdatei
speichert und wieder ganz einfach ausließt .
Dafür list man Zeilenweise eine Textdatei ein
und übergibt diese zeile der Funktion StringToFunc(Zeile$)
In dieser Funktion werden dann Commandos ausgewertet
in Select Case .
z.B. TREE:10,0,20,100
Erzeugt dann im Beispiel einen Baum an XYZ mit größe 100 .
Alles was mit Komma getrennt ist wird in Parameter für
eine Funktion umgewandelt .
Also mit dem Beispiel könnt ihr z.B. eure Scene speichern und
auch wieder laden .
Denke mal das diese Funk. sehr gut ist 8)

Hab ich auch in mein Achterbahn Projekt eingebaut .
Uhrsprünglich war das ne TCP Schnittstelle von VB nach BB ,
also auch für Netzwerk Kommunikation sehr gut :!:





[code:1:f6001c25ed]
Dim para$(128) ;um einzelne Zeilen einer Textdatei in Parameter umzuwandeln

;--------------------------------------------------------

.TREES

Global tree_sprite=CreateMyTree(0,0,0)
HideEntity tree_sprite


Type TreeType
Field Entity
Field rn#
End Type

Global Tree.TreeType

;NewTrees()
;SaveTrees()
LoadTrees()

;--------------------------------------------------------

;#######################################################################################

Function NewTree(x#,y#,z#,rn#)

;MR 28.04.2003

;Neuer Baum an x,y,z größe rn

Tree.TreeType=New TreeType

TreeEntity=CopyEntity(tree_sprite)
Tree
n=rn
y=TerrainY( land,x,y,z )+1
MoveEntity TreeEntity,x,y,z ;Nicht Position !?
ScaleEntity TreeEntity,rn,rn*2,rn
EntityBox TreeEntity,-rn/2,0,-rn/2,rn,rn*4,rn

End Function

;#######################################################################################

Function FreeTrees()

;MR 28.04.2003

;Alle Bäume entfernen

For Tree.TreeType=Each TreeType
FreeEntity TreeEntity
Delete Tree
Next

End Function

;#######################################################################################

Function LoadTrees()

;MR 28.04.2003

;Bäume laden aus Textdatei :-)

FreeTrees

;---------------------------------------------------------------------

Print "Bäume laden ..."

Local f$="DataTrees.txt"
Local fh
Local o$

If FileExists(f$)=True

fh=ReadFile(f$)
If fh Then
While Not Eof(fh)
o$=StringToFunc(ReadLine(fh)+Chr(13)) ;Return wird entfernt ,brauche ich aber noch !
DebugLog o$
Wend
CloseFile fh
EndIf ;open ok

EndIf ;Datei ist da

Print "OK"

;---------------------------------------------------------------------

End Function

;#######################################################################################

Function SaveTrees()

;MR 28.04.2003

;Bäume speichern in Textdatei :-)

;---------------------------------------------------------------------

Print "Bäume speichern ..."

Local f$="DataTrees.txt"
Local fh
Local s$

fh=WriteFile(f$)
If fh Then
For Tree.TreeType=Each TreeType
s$="TREE:"+EntityX(TreeEntity)+","+EntityY(TreeEntity)+","+EntityZ(TreeEntity)+","+Tree
n
WriteLine fh,s$
Next
CloseFile fh
EndIf ;open ok

Print "OK"

;---------------------------------------------------------------------

End Function

;#######################################################################################

Function CreateMyTree(x#,y#,z#)

m=CreateMesh()
;front face
baumtex=LoadBrush( "spr ree.bmp",3+4 )
s=CreateSurface( m,baumtex )
AddVertex s,-1,+1,0,0,0:AddVertex s,+1,+1,0,1,0
AddVertex s,+1,-1,0,1,1:AddVertex s,-1,-1,0,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush baumtex
;left face

baumtex=LoadBrush( "spr ree.bmp",3+4 )
s=CreateSurface( m,baumtex )
AddVertex s,0,+1,+1,0,0:AddVertex s,0,+1,-1,1,0
AddVertex s,0,-1,-1,1,1:AddVertex s,0,-1,+1,0,1
AddTriangle s,0,1,2:AddTriangle s,0,2,3
FreeBrush baumtex

PositionMesh m,0,MeshHeight(m)/2,0

EntityFX m,1+16 ;16 mit Backface !

PositionEntity m,x,y+2,z

ScaleEntity m,400,400,400

EntityType m,cBaum
EntityPickMode m,3 ;Box

NameEntity m,"Baum"

EntityAutoFade m,15000,25000

Return m

End Function

;#######################################################################################

Function StringToFunc$(FileInput$)

;MR 28.04.2003

;----------------------------------------------------------------------------- String to Functions :-)

Local c$,o$,x,x1,x2,p,i
c$=""
o$=""

;---------------------------------------------------------

;Command
x=Instr(FileInput,":")
If x>1 Then
c$=Mid(FileInput,1,x-1)
c$=Upper(c$)
EndIf

;---------------------------------------------------------

;Clear Parameter
p=0
For i=1 To 128
Para(i)=""
Next

;Search for Parameters
x2=0
If Len(FileInput)>x Then
x1=x+1
Repeat
x2=Instr(FileInput,",",x1)
If x2=0 Then x2=Instr(FileInput,Chr(13),x1) ;or to End
If x2>x1 Then
p=p+1
Para(p)=Mid(FileInput,x1,x2-x1)
x1=x2+1
EndIf
If x2=Len(FileInput) Then x2=0 ;no endless loop ;-)
Until x2=0
EndIf

;------------------------------------------------------------> COMMAND <---

;Functions
If Len(c$)>0 Then
Select c$

Case "TREE","BAUM"
;x,y,z,rn
NewTree Para(1),Para(2),Para(3),Para(4)
o$=c$

Default
o$="UNKNOWN COMMAND "+c$
End Select
EndIf ;Command >0

;---------------------------------------------------------

;Output what i have done :-)

If Len(o$)>0 Then o$=o$+":"

If p>0 Then
For i=1 To p
o$=o$+Para(i)
If i<p Then o$=o$+","
Next
EndIf

If Len(o$)>0 Then
Return o$
EndIf

End Function

[/code:1:f6001c25ed]
===
Anhang :-) von Markus
[code:1:a602f5908b]

Dim xz(1000,1000) ;zum verteilen der Bäume und Boxen :-)

Global Land=Terrain()

;#######################################################################################

Function NewTrees()

;MR 28.04.2003

FreeTrees

;---------------------------------------------------------------------

Print "Bäume erzeugen ..."

Local c

SeedRnd MilliSecs()

For c=1 To 32000 Step 300
xz(Rnd(0,1000),Rnd(0,1000))=1 ;1=Baum
Next

Local sx,sy

For x=0 To 1000 Step 1
For z=0 To 1000 Step 1
sx=(x-500)*100
sz=(z-500)*100
If xz(x,z)=1 Then
rn=Rnd(400,800)
NewTree sx,0,sz,rn
EndIf

Next
Next

Print "OK"

;---------------------------------------------------------------------

End Function

;#######################################################################################

Function Terrain()

;---------------------------------------------------------------------

Print "Terrain ..."

;--> load terrain data
floor_size=512
Local land=LoadTerrain("worldHMap.tga")

land_scale=100000/floor_size

ScaleEntity land,land_scale,5000,land_scale ;32*128
PositionEntity land,-(floor_size*land_scale)/2,0,-(floor_size*land_scale)/2 ;-4.5*128

TerrainShading land,False
TerrainDetail land,1000,True
EntityFX land,1

;Maserung
floor_tex=LoadTexture("worldTerrain.jpg")
ScaleTexture floor_tex,256/1,256/1
TextureBlend floor_tex,2
EntityTexture land,floor_tex,0,1

;Boden an sich
floor_map=LoadTexture("TexFels.bmp")
ScaleTexture floor_map,256/15,256/15
TextureBlend floor_map,2
EntityTexture land,floor_map,0,2

EntityType land,cTerrain
NameEntity land,"Land"

Print "OK"

;---------------------------------------------------------------------

Return Land

End Function

;#######################################################################################

Function FileExists(Path$)

;MR 08.01.2003

If FileSize(Path$) > 0 Then
Return True
Else
Return False
End If

End Function
[/code:1:a602f5908b]
===
von ???
Nett, genau dasselbe macht mein "MenuScript", ist auch in den Codearchives zu finden ;)



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: