Different type of loop

Blitz3D Forums/Blitz3D Programming/Different type of loop

LOL... try THAT little snippet you say? I've already created my own little fancy pancy um... texty thingy... heh.

Graphics3D 800,600,0,2
SetBuffer BackBuffer()

PositionEntity CreateCamera(),0,0,-5
CreateLight()
CreateCube()

Locate 0,20
a$=FUNC_OutputMessage(0,8,"Text + render first: ",1)
b$=FUNC_OutputMessage(0,8,"Text - render first: ",0)

Print a
Print b

WaitKey
End

Function FUNC_OutputMessage$(x%,y%,parameter$="",render_first%=1)
	Local TempLabel$
	Local Parameter_Offset% = Len(parameter)*FontWidth()
	
	Local S_TextMessage_Message$
	Local I_TextMessage_Column%
	Local I_TextMessage_Time_Delete%,I_TextMessage_Time_Arrow%,I_TextMessage_Time_Blink%
	
	FUNC_FlushInput()
	
	Repeat
		Cls
		
		If render_first = 1
			RenderWorld
		EndIf
		
		;BackSpace Start
			If KeyHit(14) Or KeyHit(211) Then
				FUNC_FlushInput()
				
				If S_TextMessage_Message <> "" Then
					If I_TextMessage_Column > 0 Then
						TempLabel$ = Right(S_TextMessage_Message,Len(S_TextMessage_Message)-I_TextMessage_Column)
						S_TextMessage_Message = Left(S_TextMessage_Message, I_TextMessage_Column-1 )+TempLabel
						I_TextMessage_Column = I_TextMessage_Column - 1
					EndIf
				EndIf
			EndIf
			
			If KeyDown(14) Or KeyDown(211) Then
				FUNC_FlushInput()
				I_TextMessage_Time_Blink = 0
				
				I_TextMessage_Time_Blink = I_TextMessage_Time_Blink + 1
				
				If I_TextMessage_Time_Blink > 25 Then
					I_TextMessage_Time_Blink = 25
					
					If S_TextMessage_Message <> "" Then
						If I_TextMessage_Column > 0 Then
							TempLabel$ = Right(S_TextMessage_Message,Len(S_TextMessage_Message)-I_TextMessage_Column)
							S_TextMessage_Message = Left(S_TextMessage_Message, I_TextMessage_Column-1 )+TempLabel
							I_TextMessage_Column = I_TextMessage_Column - 1
						EndIf
					EndIf
				EndIf
					
					Else
						I_TextMessage_Time_Blink = 0
			EndIf
		;BackSpace End
			
			
		;Enter Start
			If KeyHit(28) Then
				FUNC_FlushInput()
				
				DebugLog "S_TextMessage_Message = " + S_TextMessage_Message
				
				If Trim(S_TextMessage_Message) <> ""
					Return S_TextMessage_Message
						Else
							Return ""
				EndIf
			EndIf
		;Enter End
			
			
		;Arrow Keys Start
			If KeyHit(203) Then
				FUNC_FlushInput()
				I_TextMessage_Column = I_TextMessage_Column - 1
			EndIf
			
			If KeyHit(205) Then
				FUNC_FlushInput()
				I_TextMessage_Column = I_TextMessage_Column + 1
			EndIf
			
			If KeyDown(203) Then
				FUNC_FlushInput()
				I_TextMessage_Time_Blink = 0
				
				I_TextMessage_Time_Arrow = I_TextMessage_Time_Arrow + 1
				
				If I_TextMessage_Time_Arrow > 25 Then
					I_TextMessage_Time_Arrow = 25
					I_TextMessage_Column = I_TextMessage_Column - 1
				EndIf
				
					ElseIf KeyDown(205) Then
						FUNC_FlushInput()
						I_TextMessage_Time_Blink = 0
						
						I_TextMessage_Time_Arrow = I_TextMessage_Time_Arrow + 1
						
						If I_TextMessage_Time_Arrow > 25 Then
							I_TextMessage_Time_Arrow = 25
							I_TextMessage_Column = I_TextMessage_Column + 1
						EndIf
							
							Else
								I_TextMessage_Time_Arrow = 0
			EndIf
		;Arrow Keys End
		
		
		;Home End Keys Start
			If KeyHit(199) Then
				FUNC_FlushInput()
				I_TextMessage_Time_Blink = 0
				I_TextMessage_Column = 0
			EndIf
			
			If KeyHit(207) Then
				FUNC_FlushInput()
				I_TextMessage_Time_Blink = 0
				I_TextMessage_Column = Len(S_TextMessage_Message)
			EndIf
		;Home End Keys End
		
		;MouseHit 1 Start
			If MouseDown(1) Then
				If MouseY() => y Then
					If MouseY() <= y+FontHeight() Then
						I_TextMessage_Time_Blink = 0
						
						I_TextMessage_Column = (MouseX()/Float(FontWidth()))
					EndIf
				EndIf
			EndIf
		;MouseHit 1 Start
			
			Local TempKey% = GetKey()
			
			If TempKey <> 0
				DebugLog "TempKey = " + TempKey
				Select TempKey
					
					;ASCII
					;Delete			127
					
					;Left			31
					;Right			30
					;Up				28
					;Down			29
					
					;Escape/Esc		27
					;Enter/Return	13
					;Backspace		8
					
					;Home			1
					;End			2
					
					Case  127, 31,30,29,28, 13,8 ,1,2
						FUNC_FlushInput()
						;Does nothing if those keys are pressed
						
					Case 27
						FUNC_FlushInput()
						Return ""
						
					Default
						FUNC_FlushInput()
						
						I_TextMessage_Time_Blink = 0
						
						TempLabel$ = Right(S_TextMessage_Message,Len(S_TextMessage_Message)-I_TextMessage_Column)
						S_TextMessage_Message=Left(S_TextMessage_Message,I_TextMessage_Column)+Chr(TempKey)+TempLabel
						I_TextMessage_Column = I_TextMessage_Column + 1
						
				End Select
			EndIf
			
		If I_TextMessage_Column > Len(S_TextMessage_Message) Then
			I_TextMessage_Column = Len(S_TextMessage_Message)
				ElseIf I_TextMessage_Column < 0
					I_TextMessage_Column = 0
		EndIf
		
		I_TextMessage_Time_Blink = I_TextMessage_Time_Blink + 1
		
		If I_TextMessage_Time_Blink < 25
			Rect Parameter_Offset+x+Float(I_TextMessage_Column*FontWidth())-(FontWidth()*.5)+3,y-(FontWidth()*.5), 3,FontHeight()
		EndIf
		
		If I_TextMessage_Time_Blink > 50
			I_TextMessage_Time_Blink = 0
		EndIf
		
		Text x,y,parameter+S_TextMessage_Message,0,1
		
		Flip
	Forever
End Function

Function FUNC_FlushInput()
	FlushJoy()
	FlushKeys()
	FlushMouse()
End Function