Freeentity Not Clearing Bones

BlitzMax Modules Forums/MiniB3D/Freeentity Not Clearing Bones

After a Freeentity on an animMesh, the bones are not being deleted.


Using one of the demonstration examples (press 1 to delete and reload the zombie)



Import "../minib3d.bmx"

Strict

Local width=640,height=480,depth=16,mode=0

Graphics3D width,height,depth,mode

Local cam:TCamera=CreateCamera()
PositionEntity cam,0,10,-15

Local light:TLight=CreateLight()

' load anim mesh
Local ent:TMesh=LoadAnimMesh("media/zombie.b3d")

' child entity variables
Local child_ent:TEntity ' this will store child entity of anim mesh
Local child_no=1 ' used to select child entity
Local count_children=TEntity.CountAllChildren(ent) ' total no. of children belonging to entity

' marker entity. will be used to highlight selected child entity (with zombie anim mesh it will be a bone)
Local marker_ent:TMesh=CreateSphere(8)
EntityColor marker_ent,255,255,0
ScaleEntity marker_ent,.25,.25,.25
EntityOrder marker_ent,-1

' anim time - this will be incremented/decremented each frame and then supplied to SetAnimTime to animate entity
Local anim_time#=0

' used by fps code
Local old_ms=MilliSecs()
Local renders=0
Local fps=0

While Not KeyDown(KEY_ESCAPE)		

	If KeyHit(KEY_ENTER) Then DebugStop

	' control camera
	MoveEntity cam,KeyDown(KEY_D)-KeyDown(KEY_A),0,KeyDown(KEY_W)-KeyDown(KEY_S)
	TurnEntity cam,KeyDown(KEY_DOWN)-KeyDown(KEY_UP),KeyDown(KEY_LEFT)-KeyDown(KEY_RIGHT),0

	' change anim time values
	If KeyDown(KEY_MINUS) Then anim_time#=anim_time#-0.1
	If KeyDown(KEY_EQUALS) Then anim_time#=anim_time#+0.1
	
	' animte entity
	SetAnimTime(ent,anim_time#)

	' select child entity
	If KeyHit(KEY_OPENBRACKET) Then child_no=child_no-1
	If KeyHit(KEY_CLOSEBRACKET) Then child_no=child_no+1
	If child_no<1 Then child_no=1
	If child_no>count_children Then child_no=count_children
	
	' get child entity
	Local count=0 ' this is just a count variable needed by GetChildFromAll. must be set to 0.
	child_ent=ent.GetChildFromAll(child_no,count) ' get child entity

	' position marker entity at child entity position
	If child_ent<>Null
		PositionEntity marker_ent,EntityX(child_ent,True),EntityY(child_ent,True),EntityZ(child_ent,True)
	EndIf

	RenderWorld
	renders=renders+1
	
	' calculate fps
	If MilliSecs()-old_ms>=1000
		old_ms=MilliSecs()
		fps=renders
		renders=0
	EndIf
	
	Text 0,0,"FPS: "+fps
	Text 0,20,"+/- to animate"
	Text 0,40,"[] to select different child entity (bone)"
	If child_ent<>Null
		Text 0,60,"Child Name: "+EntityName$(child_ent)
	EndIf

'Clear the Zombie and reload him.
	If KeyDown(key_1) Then 
		FreeEntity ent
		ent:TMesh=LoadAnimMesh("media/zombie.b3d")
	EndIf
	tdebug.debugworld()


	Flip
	
Wend
End


Yeah, this is fixed in the next version - must get round to releasing it.

I'll join the list of many that want to congratulate you on an excellent job.

Hey Simon, it would be great if you could. I'm hoping to release NSS4 in the next week or so. :)

Simon, is it possible that you could post the fix for this?