Freeentity Not Clearing Bones

BlitzMax Forums/MiniB3D Module/Freeentity Not Clearing Bones

Stu_ovine(Posted 2008) [#1]
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



simonh(Posted 2008) [#2]
Yeah, this is fixed in the next version - must get round to releasing it.


Stu_ovine(Posted 2008) [#3]
I'll join the list of many that want to congratulate you on an excellent job.


siread(Posted 2008) [#4]
Hey Simon, it would be great if you could. I'm hoping to release NSS4 in the next week or so. :)


siread(Posted 2008) [#5]
Simon, is it possible that you could post the fix for this?