GLBasic forum

Other languages => GLBasic - de => Topic started by: Heiko on 2008-Sep-27

Title: Kann sich das jemand anschauen.Converted bb code
Post by: Heiko on 2008-Sep-27
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


Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Quentin on 2008-Sep-27
kann es sein, daß in dem BB-Code ein Include dabei war, in dem dieses Type schon deklariert war?
Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Heiko on 2008-Sep-27
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 (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)
Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Quentin on 2008-Sep-27
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.
Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Heiko on 2008-Sep-27
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.
Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Quentin on 2008-Sep-27
ä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 ;)
Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Heiko on 2008-Sep-27
Code (glbasic) Select
lightblue$ = MID$(name$,offset,newoffset-offset)
light.b = lightblue$


das müsste also funktionieren, richtig?
Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Quentin on 2008-Sep-27
ja, im Prinzip schon, sofern lightblue$ etwas sinnvolles enthält

st$ = 1kk794j"
zahl = st$       // zahl = 1
Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Heiko on 2008-Sep-27
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]
Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Heiko on 2008-Sep-27
und hier nochmal das bb3d original, vielleicht findest du ja eine lösung....
musste doppelt posten, da anhang zu groß...

[attachment deleted by admin]
Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Schranz0r on 2008-Sep-27
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!
Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: BumbleBee on 2008-Sep-28
: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
Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Heiko on 2008-Sep-28
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?
Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: BumbleBee on 2008-Sep-28
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
Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Heiko on 2008-Sep-28
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.

Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Quentin on 2008-Sep-28
erst einmal, du solltest niemals GLBasic-Schlüsselwörter als Variablen oder Funktionsparameter nutzen, sonst passiert sowas

Code (glbasic) Select

FUNCTION xKeyHit: KEY
INLINE
PROC_ADDR(wrap_xKeyHit);
DGInt fkt_rv;
fkt_rv=(DGInt)wrap_xKeyHit((int)key);
return fkt_rv;
ENDINLINE
ENDFUNCTION


key hattest du erst klein geschrieben, als ich das Coding jetzt geladen haben, war es in Großbuchstaben konvertiert, gibt haufenweise Syntax-Error. Benenn den Parameter um in p_key, dann gehts.


zweitens:
deine Funktion:
Code (glbasic) Select

//! xLightColor
// \param light -
// \param r -
// \param g -
// \param b -
FUNCTION xLightColor: light,r,g,b
INLINE
PROC_ADDR(wrap_xLightColor);
wrap_xLightColor((int)light,(float)r,(float)g,(float)b);
ENDINLINE
ENDFUNCTION


hat einen FLOAT-Parameter light, aber light hast du an anderer Stelle schon als
Code (glbasic) Select

GLOBAL light AS Tlight

definiert. Das beißt sich. Benenn den parameter light um z.B. in p_light, dann sollte es keine Fehler mehr geben, zumindest dafür nicht ;). Das hast du auch noch in einigen anderen Funktionen.

Generell bei einem Projekt dieser Größenördnung solltest du dir angewöhnen, deine Variablen ordentlich zu benennen.

z.B.
- globale Variablen alle mit g_ beginnen lassen
- type-Definitionen mit t_
- Instanzen von types z.B. mit s_
- Arrays von types mit a_ oder arr_
- lokale Variablen mit l_
- Funktionsparameter mit p_

nur als Vorschlag. Kannst dir gerne auch eine andere Struktur ausdenken, es geht nur prinzipiell darum, daß man einer Variable gleich ansieht, um was es sich handelt, dann passieren dir solche Sachen auch nicht so häufig.

Nebenbei: richtig schönes großes Projekt. Hut ab!


Title: Re: Kann sich das jemand anschauen.Converted bb code
Post by: Heiko on 2008-Sep-28
Stimmt, darauf hatte ich garnicht geachtet, da werd ich das erstmal soweit anpassen, und für den rest, da brauch ich sicher die ein oder andere nacht.smile.

nebenbei, das ist nur ein teil des projekts, da ist auch noch ein physx wrapper aktuell dabei, der aber nicht ausschlaggebend war.