Kann sich das jemand anschauen.Converted bb code

Previous topic - Next topic

Heiko

So nachdem ich hier schon haufenweise hilfe bekommen habe, muss ich eine lästige Frage zu Types stellen.
Ich hab mir schranz0r geiles tut reingezogen, kommt man ja richtig durcheinander, vor lauter flaschen, grins.

Jedenfalls hab ich hier versucht weitestgehend alles von bb nach glb zu konvertieren, aber gerade was types, bzw. neue typeerstellung/erweiterung anbelangt, steig ich nun nicht mehr durch.

Zu beachten ist, dass der ober Type Temitter im bb code nicht existierte, also nur Type Temitter EndType war nicht da, weiter unten im code, das war schon so.Hab nur gedacht, wenn unten schon solche types sind, dann gehört auch eine deklaration dazu.

so hier, wer mag, kann ja mal schauen.


Code (glbasic) Select
// --------------------------------- //
// Project: sample
// Start: Saturday, September 27, 2008
// IDE Version: 5.360
TYPE Tlight
entity
typ
r;g;b;intensity
near;far;inner;outer
active;shadows;infinite;overshoot
ENDTYPE

TYPE Temitter
     parent
     texture
     speed
     spread
     life
     size
     blend
     rate
     growth
     gravity
ENDTYPE


GLOBAL LIGHT_DIRECTIONAL = 1
GLOBAL LIGHT_OMNI     = 2
GLOBAL LIGHT_SPOT = 3
GLOBAL LIGHT_AMBIENT = 4

GLOBAL light AS Tlight
GLOBAL emitter AS Temitter

FUNCTION ParseB3D: entity


IF entity = 0 THEN RETURN

name$ = REPLACE$(xEntityName$(entity),CHR$(13),CHR$(10))


// Light properties
IF (INSTR(name$,"[LIGHT]")<>0) AND (INSTR(name$,"[/LIGHT]")<>0)

//light.light = New light

light.entity = entity

// Light TYPE
offset = INSTR(name$,"[LIGHT]")+9
lenght = LEN(name$)-offset
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))
typs$ = MID$(name$,offset,newoffset-offset)
SELECT typs
CASE "Directional"; light.typ = LIGHT_DIRECTIONAL
CASE "Point"; light.typ = LIGHT_OMNI
CASE "Spot"; light.typ = LIGHT_SPOT
CASE "Ambient"; light.typ = LIGHT_AMBIENT
ENDSELECT

// Red
offset = newoffset+1
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))
light.r = MID$(name$,offset,newoffset-offset)

// Green
offset = newoffset+1
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))
light.g = MID$(name$,offset,newoffset-offset)

// Blue
offset = newoffset+1
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))
light.b = MID$(name$,offset,newoffset-offset)

// Intensity
offset = newoffset+1
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))
light.intensity = MID$(name$,offset,newoffset-offset)

// Near Range
offset = newoffset+1
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))
light.near = MID$(name$,offset,newoffset-offset)

// Far Range
offset = newoffset+1
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))
light.far = MID$(name$,offset,newoffset-offset)

// Inner Cone
offset = newoffset+1
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))
light.inner = MID$(name$,offset,newoffset-offset)

// Outer Cone
offset = newoffset+1
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))
light.outer = MID$(name$,offset,newoffset-offset)

// Active
offset = newoffset+1
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))
light.active = MID$(name$,offset,newoffset-offset)

// Cast Shadows
offset = newoffset+1
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))
light.shadows = MID$(name$,offset,newoffset-offset)

// Infinite
offset = newoffset+1
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))
light.infinite = MID$(name$,offset,newoffset-offset)

// Overshoot
offset = newoffset+1
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))
light.overshoot = MID$(name$,offset,newoffset-offset)
ENDIF


// Custom properties
IF (INSTR(name$,"[PROPS]")<>0) AND (INSTR(name$,"[/PROPS]")<>0)
newoffset = INSTR(name$,"[PROPS]")+8

// Uncomment this IF you need it
//
//DebugLog "Custom properties for: "+Left$(name$,newoffset-9)

//emitter.emitter = 0 Type Temitter member clearen, vielleicht

WHILE  abc=0
//
// Text offset FOR the NEXT line
offset = newoffset+1
newoffset = INSTR((MID$(name$,offset,lenght)),CHR$(10))

//
// The text on this line
ins$ = MID$(name$,offset,newoffset-offset)

// Jump out of the loop
// at the END of the properties
IF ins$ = "[/PROPS]"
abc=1
ENDIF

//
// Get the keyword
key$ = ""
offset = INSTR(ins$,"=")
IF offset
key$ = LCASE$(MID$(ins$,0,offset-1))
content$ = RMid(ins$,LEN(ins$)-offset)

ELSE
key$ = LCASE$(ins)
ENDIF

//
// this is where you add your own stuff!
// The things used IN this example, are just that: examples
// You can do anything!
//
SELECT key$

CASE "emittype";
emitter.parent = entity
emitter.texture = xLoadTexture(GetCSV(content,1)+".bmp")

CASE "emitspeed";
IF  emitter <> 0
emitter.speed = GetCSV(content,1)
ENDIF

CASE "emitspread";
IF emitter <> 0
emitter.spread = GetCSV(content,1)
ENDIF

CASE "emitlife";
IF emitter <> 0
emitter.life = GetCSV(content,1)
ENDIF

CASE "emitsize";
IF emitter <> 0
emitter.size = GetCSV(content,1)
ENDIF

CASE "emitblend";
IF emitter <> 0
emitter.blend = GetCSV(content,1)
ENDIF

CASE "emitrate";
IF emitter <> 0
emitter.rate = GetCSV(content,1)
ENDIF

CASE "emitgrowth";
IF emitter <> 0
emitter.growth = GetCSV(content,1)
ENDIF

CASE "emitgravity";
IF emitter <> 0
emitter.gravity = GetCSV(content,1)
ENDIF

CASE "moon";
sprite = xCreateSprite(entity)
moontex = xLoadTexture("skymoon.bmp")
xEntityTexture (sprite,moontex)
xEntityBlend (sprite,3)
xScaleSprite (sprite,200,200)

ENDSELECT

// Uncomment this TO
// PRINT the property TO the DEBUG log
// DebugLog "  Property: "+CHR$(34)+ins$+CHR$(34)

WEND
ENDIF

//
// Go through the children of this entity
children = xCountChildren(entity)
FOR child = 1 TO children
ParseB3D(xGetChild(entity,child))
NEXT

ENDFUNCTION

//
// GetCSV$
//
// Returns the Nth comma seperated value from a string
// IF the Nth value doesn't exist the last found value
// is returned
//
FUNCTION GetCSV: ins$,which=1

n = 1
offset = 0
nextoffset = 1
WHILE offset<LEN(ins$)

nextoffset = INSTR((MID$(ins$,offset,lenght)),",")
IF nextoffset = 0
nextoffset = LEN(ins$)+1
which = n
ENDIF
valueret$ = MID$(ins$,offset+1,nextoffset-offset-1)
IF which = n
RETURN valueret
ENDIF
offset = nextoffset
n=n+1
WEND

RETURN n-1

ENDFUNCTION

FUNCTION RMid: text$, anzahl
rmid$ = MID$(text$, LEN(text$)-anzahl, anzahl)
RETURN rmid$
ENDFUNCTION



Quentin

kann es sein, daß in dem BB-Code ein Include dabei war, in dem dieses Type schon deklariert war?

Heiko

Nein, dies ist die include datei, aaaber ich hab grad gesehen, die type definition ist in der hauptdatei drin, hab ich jetzt ersetzt, ergänzt mit

Code (glbasic) Select
TYPE Temitter
parent;rate;time
   texture;blend
speed;spread;life;size;growth;gravity
ENDTYPE


aber kommt immer noch diese fehlermeldung beim compilieren

http://pastebin.com/m5bd98c67

problem ist auch emitter = 0 weil in bb es eigentlich emitter = NULL heißt, ich dafür aber noch keine Lösung gefunden habe.NULL, der Typ der variable wird auf NULL zurückgesetzt.(http://www.blitzforum.de/help/Null)

und wie man einen neuen eintrag zu einer type kollektion hinzufügt, weiß ich im moment auch grad nicht.bei bb macht das ja NEW.

die x* befehle bzw. deren fehlermeldungen ignorieren, ist eine weitere quelldatei von mir.
es ist ein typeproblem, nur weiß ich nicht welches.

(ich seh schon, ich muss mich weiter mit types beschäftigen, bzw. wenn ich das durch hab, träum ich sicher von types)

Quentin

ah ok,

daß Problem ist die Zeile
Code (glbasic) Select

IF  emitter <> 0


hier überprüfst du ja den kompletten type auf ungleich 0 und dieser Operator ist nicht definiert. Du könntest also nur für die einzelnen Felder des Types auf ungleich prüfen

änder doch mal in
Code (glbasic) Select

IF emitter.speed <> =0


dann sollte es keinen Fehler mehr geben

möglicherweise kann man in BB mit <type> <> 0 prüfen, ob der type überhaupt angelegt ist, weiß ich aber nicht.
wenn das der Fall ist, kannst du das so in GL nicht übertragen.

Heiko

ja ich glaub das ist das problem, es wird nicht direkt auf 0 überprüft, sondern eher auf emitter AS Temitter.

es wird geprüft ob emitter schon mit Temitter verbunden ist.

Siehe: http://www.blitzforum.de/help/Null  und den quelltext dort.

irgendeine idee?

dort steht auch dass man das mit dims machen kann, aber riesenaufwand, oder?

kann mir jemand zur hand gehen?


[edit] okay hab jetzt die einzelnen member auf 0 überprüfen lassen, der fehler ist weg.

kann mir jemand sagen, ohne den code zu kennen, was folgende fehlermeldung bedeutet?also übersetzen, sozusagen?

Code (glbasic) Select

_______________________________________
*** Configuration: WIN32 ***
precompiling:
GPC - GLBasic Precompiler V.2008.210 - 3D, NET
"Gile_B3D_Parser.gbas"(48) warning : probably unassigned variable : typs
"Gile_B3D_Parser.gbas"(152) warning : probably unassigned variable : ins
"Gile_B3D_Parser.gbas"(164) warning : probably unassigned variable : content
"Gile_B3D_Parser.gbas"(252) warning : probably unassigned variable : valueret
Wordcount:279 commands

compiling:
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp2.cpp: In function `DGInt __GLBASIC__::xLightColor(__GLBASIC__::Tlight&, DGInt, DGInt, DGInt)':
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp2.cpp:3038: error: `class __GLBASIC__::Tlight' used where a `int' was expected
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp2.cpp: In function `DGInt __GLBASIC__::xLightConeAngles(__GLBASIC__::Tlight&, DGInt, DGInt)':
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp2.cpp:3054: error: `class __GLBASIC__::Tlight' used where a `int' was expected
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp2.cpp: In function `DGInt __GLBASIC__::xLightRange(__GLBASIC__::Tlight&, DGInt)':
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp2.cpp:3069: error: `class __GLBASIC__::Tlight' used where a `int' was expected
*** FATAL ERROR - Bitte die Compiler-Ausgabe ins Forum kopieren
_______________________________________
*** Fertig ***
Dauer: 4.2 sek. Zeit: 23:11
Erstellen: 0 erfolgreich.
*** 1 FEHLGESCHLAGEN ***



ich glaub ich habs, es liest aus einer datei einen string, dieser muss aber als integer übergeben werden...

wie macht man das, ich habe nur gefunden wie man mit format$ zahlen in strings wandeln kann.

Quentin

ähem, ich denke eher, diese Prüfung eines types auf 0 brauchst du gar nicht.
mit
Code (glbasic) Select

LOCAL type AS t_type


legst du hier schon tatsächlich einen type an, wähend das in BB oder BMax erst einmal mit new passieren muss. (bin mir da aber nicht zu 100% sicher)
Die Prüfung auf Null ist also sinnlos, weil der type auf jeden Fall schon existiert und nicht erst angelegt werden muss.

zur weiteren Frage:
ganz einfach

stringzahl$ = "125"
num = stringzahl$          // num ist jetzt 125 als Zahl, geht auch umgekehrt ;)

Heiko

Code (glbasic) Select
lightblue$ = MID$(name$,offset,newoffset-offset)
light.b = lightblue$


das müsste also funktionieren, richtig?

Quentin

ja, im Prinzip schon, sofern lightblue$ etwas sinnvolles enthält

st$ = 1kk794j"
zahl = st$       // zahl = 1

Heiko

hier wenn du magst schau es dir mal an.
ich hab das jetzt so gemacht, trotzdem haut es nicht hin, und die selben fehler kommen wieder.



[attachment deleted by admin]

Heiko

und hier nochmal das bb3d original, vielleicht findest du ja eine lösung....
musste doppelt posten, da anhang zu groß...

[attachment deleted by admin]

Schranz0r

#10
Du kannst BB-Code nicht direkt in GLB umwandeln!
Grade bei den Types merkt man es, BB liest die von unter her, GLBasic aber von oben nach unten!
Sprich:

Hättest du nun eine Type in Type "verknüpfung" musst du oben das haben, was es in den anderen Types verknüpft wird!
Simples beispiel

Window und Button, Button will in Window verlinkt werden...

Muss so von der reihenfolge sein :

Button
Window

bei:

Window
Button

Schepperts!
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

BumbleBee

:offtopic:
@Heiko
Ich finds ja auf der einen Seite nicht schlecht was du machst, aber ich werd das Gefühl nicht los das du immer noch zu sehr an Blitz hängst. Ich hab mich ja für GLBasic entschieden und nicht für Blitz. Darum bin ich ja eigentlich hier. :P
Aber Ok, du hast gewonnen.  :giveup: :giveup:

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Heiko

grins bumblebee, das mach ich ja für glb.
das ist ein .b3d environment loader für xors3d unter glbasic.

und ich mein, wenn man dx9 unter glb auch anbieten kann, warum nicht....

p.s. warum hab ich gewonnen?

BumbleBee

#13
Quote from: Heiko
grins bumblebee, das mach ich ja für glb.
Ach ne. Das ist mir schon klar das du es für GLBasic machst. Darum schreibst du's ja auch hier rein. ;)
Schreibst du das eigentlich auch ins Blitzforum? Die sollten schon bescheid wissen was hier jetzt so alles möglich ist.  =D

Quote from: Heiko
p.s. warum hab ich gewonnen?
Weil ich schon mal gesagt hab das soviel BlitzBasic hier normal nicht hergehört. Aber ich habs jetzt aufgegeben. Daher  :giveup: :giveup: und du damit den Streit um BB hier gewonnen hast. :P Muß mich doch schonen. ;)

Cheers
The day will come...

CPU Intel(R) Core(TM) i5-3570k, 3.4GHz, AMD Radeon 7800 , 8 GB RAM, Windows 10 Home 64Bit

Heiko

oh wußte nicht dass du dich schonen musst.
nein ich wollte eigentlich nur den .b3d loader hier konvertieren, und, das wird dich freuen, der ist von der gile(s) seite, also nicht vom blitzforum.
ich versuch halt was möglich ist.
von xors3d und so kommt noch einiges, stehe in gutem kontakt mit dem entwickler dort.
ich bin mit meinem wrapper weiter, als die mit ihrem blitz3d-wrapper, von daher.

simple mach ich nur letztendlich möglich, dx9 features mittels der xors3d engine auf glbasic zu nutzen, auch wenn die syntax bb3d ähnlich ist, aber das liegt wohl daran, dass bb3d wohl hauptaugenmerk der entwickler zu beginn war.

es gibt inzwischen auch die c++ dateien dazu, aber noch nicht öffentlich.