I've made a mistake in parsing somewhere..
Blitz3D Forums/Blitz3D Beginners Area/I've made a mistake in parsing somewhere..
| ||
| Or something. :) Writing an alternative text command so I can use colour codes in strings (ala L.O.R.D, Quake3, etc). Now - it works, but not the way I wanted it to. Two colour codes in use atm - WH for white and GO for gold. Now, I want to do a sentence like this: "^GO500 ^WHgold pieces" however, I screwed something up, and I have to do them like this, for the obvious intended result: "500^GO gold pieces^WH" I want the color codes before, not after. I've looked back over it a few times and can't figure where I'm going wrong. Maybe someone else with more experience will spot the problem instantly. BTW, the WH at the end of the sentence is not needed - as it adds a WHITE colour automatically to any sentence if its not defined. Okay - code below:
Graphics 800,600,32,2
Global sfont=LoadFont("Times New Roman",18,0,0,0)
Global bfont=LoadFont("Times New Roman",18,1,0,0)
Global ifont=LoadFont("Times New Roman",18,0,1,0)
Global ufont=LoadFont("Times New Roman",18,0,0,1)
Type Word
Field T$
Field C
End Type
SetBuffer BackBuffer()
ClsColor 100,100,100
Cls
ctext "52760 ^GOgold pieces^WH",135,105 ; here lies the problem
Flip
WaitKey()
End
Function Ctext(T$,x,y,bold=1,italic=0,underline=0)
;as for the labels - b$ is the current character
; a$ is the color code detected (if any)
SetFont bfont
If bold=0 Then SetFont sfont
If italic=1 Then SetFont ifont
If underline=1 Then SetFont ufont
this.word=New word
For i = 1 To Len(t$)
b$=Mid$(t$,i,1)
If b$ = "^" Then
a$=Mid$(t$,i+1,2)
a$=Lower(a$)
curc=-1
If a$="wh" Then curc=1
If a$="go" Then curc=2
If curc > -1 Then this\c=curc Else this\c=1
this.word=New Word
i=i+2
this\c=1
Else
this\t$=this\t$+b$
End If
Next
tx=x
For this.word = Each word
Color 0,0,0
Text tx,y+2,this\t$
Select this\c
Case 1:Color 255,255,255
Case 2:Color 200,200,100
End Select
Text tx,Y,this\t$
tx=tx+StringWidth(this\t$)
Delete this
Next
End Function
sorry its long.. only if someone's bored enough to look, i guess. :) Theres lots of error checking and stuff in there (which is why it looks so bloated). :) +BlackD |
| ||
| ack! fixed it.. sorry folks.. had to change this: If b$ = "^" Then this.word=New Word a$=Mid$(t$,i+1,2) a$=Lower(a$) curc=-1 If a$="wh" Then curc=1 If a$="go" Then curc=2 If curc > -1 Then this\c=curc Else this\c=1 i=i+2 Else this\t$=this\t$+b$ End If now it works: ctext "^go52760 ^whgold pieces",135,105 feel free to use this code and modify it to use full color codes\whatever. :) +BlackD |
| ||
| I ended up rewriting the function a little: *EDIT* Obviously the word type needs to be changed to work with this: Type Word Field txt$ Field Col$ End Type |
| ||
| mmm very tidy :) I'm so far away from tidying the code in this project it's not funny. :) Thanks |
| ||
| Welldone mate! :) All the best. |