alphagui problem

Blitz3D Forums/Blitz3D Userlibs/alphagui problem

chrisnorris007(Posted 2009) [#1]
I created a gui and it works great...only one problem

there is a miniature version of it on the ground in my game as well as the one taking the whole screen.

Any reasoning for this?

Chris


Naughty Alien(Posted 2009) [#2]
can you be more specific??? Post some screens??


chrisnorris007(Posted 2009) [#3]
here is a link to the screen shot you request




Naughty Alien(Posted 2009) [#4]
..may i see pieces of code you initialize AlphaGui as well as commands related to it within main loop, in relation with renderworld..


chrisnorris007(Posted 2009) [#5]
AlphaInit ; initialize the gui system; create the camera used throughout the system.
AlphaGuiLoad("ar.gui") ; load the gui in, set to fill the whole screen


then in the main loop

RenderWorld tween
AlphaGui

play\px = EntityX(play\entity) : play\py = EntityY(play\entity) : play\pz = EntityZ(play\entity)

Flip
Wend
End


Naughty Alien(Posted 2009) [#6]
..you should put AlphaGui() update before renderworld since updates of all gadgets should happen before rendering..another thing what may causing this issue is that you using custom camera, after AlphaInit()...It is because after AlphaInit(), its created GUI camera..and obviously on your screen you have 2 cameras, i guess one you have created and another one belong to GUI...if so, you should do this:

AlphaInit()
AlphaGuiLoad("Example.gui")
;camera
camera=CreateCamera()
;and now, place your GUI in front of camera you have created
AlphaToFront ; bring the gui camera to front, in front of the previously created camera

and keep AlphaGui() at begining of rendering loop, not after..keep in mind...you have 2 cams here..one AlphaGui and one yours..

I hope this helps..


chrisnorris007(Posted 2009) [#7]
Here is the full code minus types

AppTitle "Alternate Realities client Test"
Dim splitdata$(10)
; collision determinators
Const TYPE_PLAYER=1,TYPE_BULLET=2,TYPE_TARGET=3

Const TYPE_SCENERY=10,TYPE_TERRAIN=11
Global noserver=0
Global fps	        = 30
Global send_freq=2	;send every fifth update
Global networked=0
Dim splitdata$(1)
SeedRnd MilliSecs()
				
Global my_status$
Global play.player
Global message$
Global msg$
Global client_id$
Global me_net
; basic graphics setup
;Include "start.bb"
Graphics3D 1024,768,16,2
send_ct=1

Include "3denginefunctions.bb" ; all functions for world interaction
Include "3denginetypes.bb" ; all types and structures
Include "Alpha_Include.bb" ; include the functions

Global player_model

Global water_level=-98
Global light,castle,land,ground,water,sky

Global bull_x#=1.5
Global playercount
Collisions TYPE_PLAYER,TYPE_TERRAIN,2,3
Collisions TYPE_PLAYER,TYPE_SCENERY,2,3

Collisions TYPE_BULLET,TYPE_TERRAIN,2,1
Collisions TYPE_BULLET,TYPE_SCENERY,2,1

Collisions TYPE_TARGET,TYPE_TERRAIN,2,2
Collisions TYPE_TARGET,TYPE_SCENERY,2,2


setupworld()

ChangeDir "environ"
LoadEnviron( "terrain-1.jpg","water-2_mip.bmp","sky","heightmap_256.bmp" )
ChangeDir "..\"
				
; connect to server
name$=Input("what is your name?")
ip$="ar.game-host.org"
port=8080
Global stream=OpenTCPStream(ip$,port)
If stream=0
	Print "could not connect to server...playing solo"
	Print "press a key to continue"
	WaitKey()
Else
split(ReadLine(stream))
			play.player=createplayer(0,8,5)
	
playercount=Int(splitdata$(1))
play\netid=Int(splitdata$(2))
play\name$=name$
	networked=1
	Print "You are playerid:"+play\netid+" and there are currently " + playercount + " players connected"
	WaitKey()
EndIf
Global walk=ExtractAnimSeq(play\model,280,310)
			;	AnimateMD2 play\model,1,1,32,100,1
				play\stream=stream				

				If networked=1 And playercount>1
				WriteLine(play\stream,1+","+play\netid+","+EntityX(play\entity)+","+EntityY(play\entity)+","+EntityZ(play\entity)+","+EntityPitch(play\entity)+","+EntityYaw(play\entity)+","+EntityRoll(play\entity)+",1,1,"+name$) ; notify new player of all existing player
				If ReadAvail(stream)
				For ct=1 To playercount-1
				p.player=createplayer(0,8,5)
				Line$=ReadLine(stream)
				split(Line$)
				p\netid=Int(splitdata$(2))
				p\px=Float(splitdata$(3)):p\py=Float(splitdata$(4)):p\pz=Float(splitdata$(5)):p\rx=Float(splitdata$(6)):p\ry=Float(splitdata$(7)):p\rz=Float(splitdata$(8))
		         p\Aniseq=Int(splitdata$(9)):p\animframe=Int(splitdata$(10)):p\name$=splitdata$(11)
            		p\stream=stream
    		        PositionEntity p\entity,p\px,p\py,p\pz,1
		         RotateEntity p\entity,p\rx,p\ry,p\rz
		         Next	
				End If
				End If
camera1.ChaseCam=CreateChaseCam( play\entity )
listener=CreateListener( play\entity,.1,1,.2 )

period=1000/fps
time=MilliSecs()-period
piv=CreatePivot()
PositionEntity piv,0,10,40

AlphaInit ; initialize the gui system; create the camera used throughout the system.
AlphaGuiLoad("ar.gui")  ; load the gui in, set to fill the whole screen


While Not KeyHit(1)
			AlphaGui
			AlphaToFront


	If KeyHit(17)
		wire=Not wire
		WireFrame wire
	EndIf
	Repeat
	elapsed=MilliSecs()-time
Until elapsed
	
	;how many 'frames' have elapsed	
	ticks=elapsed/period

	;fractional remainder
   tween#=Float(elapsed Mod period)/Float(period)
	
	For k=1 To ticks
		time=time+period
		If k=ticks Then CaptureWorld
		
		TurnEntity piv,0,5,0
		PositionEntity piv,0,7,40;47+Sin(time*.1)*40,40

		UpdateGame()
		UpdateWorld
	     


		For c.ChaseCam=Each ChaseCam
			UpdateChaseCam( c )
			PositionEntity sky,EntityX(c\camera),EntityY(c\camera),EntityZ(c\camera)
		Next
Next

	RenderWorld tween

play\px = EntityX(play\entity) : play\py = EntityY(play\entity) : play\pz = EntityZ(play\entity)

	Flip
Wend
End

Function UpdateGame()
	;For h.Hole=Each Hole
;		UpdateHole( h )
	;Next
	;For b.Bullet=Each Bullet
	;	UpdateBullet( b )
	
	;Next
	;For s.Spark=Each Spark
;		UpdateSpark( s )
	;Next

				UpdatePlayer(play )

		updatenetwork()

			
End Function

Function setupworld()
	
	do1=LoadMesh("drawftest.b3d")
   ScaleEntity do1,.03,.03,.03
PositionEntity do1,0,130,0
;	ScaleEntity do1,.003,.003,.003
	EntityType do1, TYPE_SCENERY
text2=LoadTexture("s04_stone01_s_01.tga")
EntityTexture(do1,text2)
   player_model=LoadAnimMesh( "necromancer.b3d" )
DebugLog(AnimLength(player_model));
	ScaleEntity player_model,.03,.03,.03
RotateEntity player_model,0,180,0;
	TranslateEntity player_model,0,-1.25,0
  
	HideEntity player_model

	
	
	
	
     ; setup collisions - PLAYER TO DUNGEON
	
End Function


Function UpdateNetwork()
	While ReadAvail(stream)

	split(ReadLine(stream))
		Select splitdata$(1)

		Case 1
	    For p.player=Each player
	  If Int(splitdata$(2))=p\netid
		
			p\px=Float(splitdata$(3)):p\py=Float(splitdata$(4)):p\pz=Float(splitdata$(5)):p\rx=Float(splitdata$(6)):p\ry=Float(splitdata$(7)):p\rz=Float(splitdata$(8))
	    	p\Aniseq=Int(splitdata$(9)):p\animframe=Int(splitdata$(10)):p\name$=splitdata$(11)
	            PositionEntity p\entity,p\px,p\py,p\pz,1
		RotateEntity p\entity,p\rx,p\ry,p\rz
			p\anim_speed=1.75
				 If Not AnimSeq(p\model) = walk
  necro_anim(p)
 EndIf


	    EndIf
	
	   Next
	   Case 2	
		p.player=createplayer(0,1.501,5)
		Animate p\model,0
		p\netid=splitdata$(2)	
	
		Case 7
		For p.player=Each player
		If Int(splitdata$(2))=p\netid
		FreeEntity p\entity
		
		Delete p
		
		EndIf
		Next	
		End Select
		
		
Wend

For p.player=Each player	
If Animating(p\model)=False And anim_whichone(p\model)<>1
Animate p\model,0
EndIf
Next
End Function

Function UpdateChaseCam( c.chasecam )
	
	If KeyDown(200)
		TranslateEntity c\heading,0,-3,0
	Else If KeyDown(208)
		TranslateEntity c\heading,0,+3,0
	EndIf
	
	dx#=EntityX(c\target,True)-EntityX(c\camera,True)
	dy#=EntityY(c\target,True)-EntityY(c\camera,True)
	dz#=EntityZ(c\target,True)-EntityZ(c\camera,True)
	
	TranslateEntity c\camera,dx*.1,dy*.1,dz*.1
	
	PointEntity c\camera,c\heading
	
	PositionEntity c\target,0,0,0
	ResetEntity c\target
	PositionEntity c\target,0,3,-10
	
;	PositionEntity c\sky,EntityX(c\camera),EntityY(c\camera),EntityZ(c\camera)
	AlphaToFront


End Function

Function CreatePlayer.Player( x#,y#,z#)
	p.Player=New Player
	p\px=x
	p\py=y
	p\pz=z
	p\entity=CreatePivot()
	p\model=CopyEntity( player_model,p\entity )
	PositionEntity p\entity,x,y,z,0
	EntityType p\entity,TYPE_PLAYER
	EntityRadius p\entity,1.5
	ResetEntity p\entity

	HideEntity player_model

	Return p
End Function

Function CreateChaseCam.ChaseCam( entity )
	c.ChaseCam=New ChaseCam
	c\entity=entity
	c\camera=CreateCamera()
	
	c\target=CreatePivot( entity )
	PositionEntity c\target,0,3,-10
	EntityType c\target,TYPE_TARGET
	
	c\heading=CreatePivot( entity )
	PositionEntity c\heading,0,0,20
;	c\sky=CopyEntity( sky )
	Return c
	
End Function

Function UpdatePlayer( p.Player )
			DebugLog("anim frame:"+AnimTime#(p\model))

move$=""
	If KeyHit(56)	;fire?
;		CreateBullet( p )
	EndIf

	If KeyDown(203)	;left/right
		move$="L"		
		TurnEntity p\entity,0,6,0	;turn player left/right
	ElseIf KeyDown(205)
	    move$=move$+"R"		
		TurnEntity p\entity,0,-6,0

	EndIf
	
	If KeyDown(30)		;forward
	    move$=move$+"F"		
		If p\anim_speed<=0
			p\anim_speed=1.75
;	Stop
		DebugLog("animseq:"+AnimSeq(p\model))
		 If Not AnimSeq(p\model) = walk
  necro_anim(p)
 EndIf

	;		anim_walk(p)
		EndIf
		MoveEntity p\entity,0,0,1
	
	ElseIf KeyDown(44)	;back
	    move$=move$+"B"		

		If p\anim_speed>=0
			p\anim_speed=-1.75
			 If Not AnimSeq(p\model) = walk
  necro_anim(p)
 EndIf

		EndIf
		MoveEntity p\entity,0,0,-1
	ElseIf p\anim_speed
	p\anim_speed=0
	Animate p\model,0
;			anim_idle(p)
			;move$="I"
   EndIf	
	
	Goto skip	
	ex#=EntityX(p\entity):ez#=EntityZ(p\entity)
	PositionEntity p\entity,ex,TerrainY( land,ex,0,ez )+1.5,ez
	Return
	.skip
	
	ty#=EntityY(p\entity)
	y_vel#=(ty-p\player_y)
	p\player_y=ty
	
	If KeyHit(57)	;jump?
	y_vel=5	;2.4
    ;move$=move$+"JUMP"		
Else
	y_vel=y_vel-.5	;2
	EndIf
	TranslateEntity p\entity,0,y_vel,0	
	If networked=1 And move$<>""
;	p\Animframe=MD2AnimTime(p\model)
	If  Instr(move$,"L") Or Instr(move$,"R") Then WriteLine(stream,1+","+p\netid+","+p\px+","+p\py+","+p\pz+","+p\rx+","+p\ry+","+p\rz+","+7+","+p\animframe+","+p\name$)

	If  Instr(move$,"F") Or Instr(move$,"B") Then WriteLine(stream,1+","+p\netid+","+p\px+","+p\py+","+p\pz+","+p\rx+","+p\ry+","+p\rz+","+8+","+p\animframe+","+p\name$)
	EndIf
	
	p\px=EntityX(p\entity)
	p\py=EntityY(p\entity)
	p\pz=EntityZ(p\entity)

	p\rx=EntityPitch(p\entity)
	p\ry=EntityYaw(p\entity)
	p\rz=EntityRoll(p\entity)
	my_status$="A"
.totallyskip
End Function

Function LoadEnviron( land_tex$,water_tex$,sky_tex$,height_map$ )
	
	light=CreateLight()
	TurnEntity light,45,45,0
	LightRange light,500
;	AmbientLight 10,10,10 ;dungeon to be dark, except for torch (local) lighting
	
	LightRange light,1
	land_tex=LoadTexture( land_tex$,1 )
	ScaleTexture land_tex,10,10
	
	land=LoadTerrain( height_map$ )
	EntityTexture land,land_tex
	
	TerrainShading land,True
	PositionEntity land,-1000,-100,-1000
	ScaleEntity land,2000.0/256,100,2000.0/256
	EntityType land,TYPE_TERRAIN
	TerrainDetail land,750,True
	
	For k=1 To n_trees
		Repeat
			tx#=Rnd(-70,70)-150
			tz#=Rnd(-70,70)+400
			ty#=TerrainY( land,tx,0,tz )
		Until ty>water_level
		t=CopyEntity( tree_sprite )
		PositionEntity t,tx,ty,tz
		ScaleSprite t,Rand(2,3),Rand(4,6)
	Next
	
	ground=CreatePlane()
	EntityTexture ground,land_tex
	PositionEntity ground,0,-100,0
	EntityOrder ground,9
	
	water_tex=LoadTexture( water_tex$,3 )
	ScaleTexture water_tex,20,20
	
	water=CreatePlane()
	EntityTexture water,water_tex
	PositionEntity water,0,water_level,0
	
	sky=LoadSkyBox( sky_tex$ )
	EntityOrder sky,10
	HideEntity sky
	
End Function

Function LoadSkyBox( file$ )
	m=CreateMesh()
	;front face
	b=LoadBrush( file$+"_FR.jpg",49 )
	s=CreateSurface( m,b )
	AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
	AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;right face
	b=LoadBrush( file$+"_LF.jpg",49 )
	s=CreateSurface( m,b )
	AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
	AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;back face
	b=LoadBrush( file$+"_BK.jpg",49 )
	s=CreateSurface( m,b )
	AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
	AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;left face
	b=LoadBrush( file$+"_RT.jpg",49 )
	s=CreateSurface( m,b )
	AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
	AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;top face
	b=LoadBrush( file$+"_UP.jpg",49 )
	s=CreateSurface( m,b )
	AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
	AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	;bottom face	
	b=LoadBrush( file$+"_DN.jpg",49 )
	s=CreateSurface( m,b )
	AddVertex s,-1,-1,-1,1,0:AddVertex s,+1,-1,-1,1,1
	AddVertex s,+1,-1,+1,0,1:AddVertex s,-1,-1,+1,0,0
	AddTriangle s,0,1,2:AddTriangle s,0,2,3
	FreeBrush b
	ScaleMesh m,100,100,100
	FlipMesh m
	EntityFX m,1
	Return m
End Function




Function anim_walk(p.player)

If anim_whichone(p\model)<>2
;			DebugLog("frame:"+MD2AnimTime(p\model))
;	AnimateMD2 p\model,1,p\anim_speed,1,31,1

EndIf

End Function

Function anim_walk2(p.player)

If anim_whichone(p\model)<>2
;			DebugLog("frame:"+MD2AnimTime(p\model))
	;AnimateMD2 p\model,3,p\anim_speed,1,31,1

EndIf

End Function
Function anim_idle(p.player)
If anim_whichone(p\model)<>1

;	AnimateMD2 p\model,1,1,32,100,1

End If

End Function

Function anim_whichone(md2)
End Function

Function pnu(p.player)
			pack$ = EntityX(p\Entity)+" "+EntityY(p\Entity)+" "+EntityZ(p\Entity)
;			SendNBMsg(1,pack,0,mainstream)
			pitch# = EntityPitch(p\entity)
			roll# = EntityRoll(p\entity)
			pack$=LSet$( pitch,7 )+LSet$( EntityYaw(p\entity),7 )+LSet$( roll,7 )
;			SendNBMsg(3,pack,nbmsgfrom(mainstream),mainstream)
End Function	

Function Split(DataToSplit$)
;Declare our variables

Local splitcounter = 0, pntr = -1,chris=1, pntr2 = 0, counter = 0

;	Continue to check for splits until we reach the end of the string
	Local a=0
	While pntr <> 0

		pntr = Instr(datatosplit$, ",", chris)
;	If we found a split then add 1 to the counter
		If pntr > 0 Then splitcounter = splitcounter + 1
	chris=pntr+1
	a=a+1
	Wend

;	Now we have the amount of items (-1) in the string so we can dimension our array

	Dim SplitData$(splitcounter + 1)

;	the first item in the string is handled differently than the rest since there is no comma preceding it

	pntr = 0:pntr2 = Instr(DataToSplit$, ",", 1)
	SplitData$(1) = Left$(DataToSplit$, pntr2 - 1)

;	After splitting off the first item we move on to the rest of the string.

	For counter = 2 To splitcounter

;	These 2 pointers keep track of the beginning and ending of the item we are looking for in the string.

		pntr = pntr2 + 1
		pntr2 = Instr(DataToSplit$, ",", pntr)

;	Now that we have the items location we can pull it from the main string and insert it in to our return array

		SplitData$(counter) = Mid$(DataToSplit$, pntr, (pntr2 - pntr))
	Next

;	Once we have done every instance of the comma delimiters we are left with the very end of the string

;	This also is handled differently than the rest of the string since there is no comma after it.

	SplitData$(counter) = Right$(DataToSplit$, Len(DataToSplit$) - pntr2)

;	Now we can return the # of items located in the string back to the calling program.

	Return (splitcounter + 1)
End Function

Function necro_anim(p.player)
;If Animateseq(p\model)=False
Animate p\model,1,p\anim_speed,1,10
;EndIf
End Function




chrisnorris007(Posted 2009) [#8]
sorry its very NOT finished...so a lot of useless stuff in it


Naughty Alien(Posted 2009) [#9]
AlphaToFront() should be before main loop, after AlphaGuiLoad..

;like this:
;############################
AlphaInit() ; initialize the gui system; create the camera used throughout the system.
AlphaGuiLoad("ar.gui") ; load the gui in, set to fill the whole screen
AlphaToFront()

While Not KeyHit(1)
CLS
AlphaGui
;###################################


chrisnorris007(Posted 2009) [#10]
didnt work

here is fixed part

AlphaInit() ; initialize the gui system; create the camera used throughout the system.
AlphaGuiLoad("ar.gui") ; load the gui in, set to fill the whole screen
AlphaToFront()


While Not KeyHit(1)
Cls
AlphaGui



If KeyHit(17)
wire=Not wire
WireFrame wire
EndIf
Repeat
elapsed=MilliSecs()-time
Until elapsed


chrisnorris007(Posted 2009) [#11]
i keep trying everything you are saying, but still its there ;(


Naughty Alien(Posted 2009) [#12]
..Chris..one of your cams are ON..thats why you have double HUD elements..Ill take a look closer when i came back...but point is..take a careful look where you updating your game camera in relation with Alpha Gui update...


chrisnorris007(Posted 2009) [#13]
the only cam I have is a chase cam


Naughty Alien(Posted 2009) [#14]
there is also AlphaGui cam created..do you have same FOV set for both cams??


chrisnorris007(Posted 2009) [#15]
probably since i dont think i set that at all


Naughty Alien(Posted 2009) [#16]
..ahh..ok..i see that you using AlphaInit, after creating your camera..that should happen (AlphaInit) after Graphics3D command and BEFORE any camera of yours...second I see that you using AlphatoFront in your camera update, and before main loop too, whats shouldnt be a case.. so, try to structure like this

Graphics3D
AlphaInit()
AlphaGuiLoad()

MyCamera=CreateCamera()
AlphaToFront()

;main loop
repeat
AlphaGui()
..blah blah
UpdateWorld()
RenderWorld()
Flip
Until KeyDown(1)


chrisnorris007(Posted 2009) [#17]
if I do that the gui goes away all together :(


Naughty Alien(Posted 2009) [#18]
..thats very very weird..it must be something more you messing with..because this basic structure should work with no problems at all..I never had issue with it..


Naughty Alien(Posted 2009) [#19]
..try to keep same structure as I posted, except changing AlphaGui() position in relation with renderworld()