Well I'm using types and it doesn't work out the same way.
I'm checking one entities distance, and then another one's distance(whether it even exists or not which I probably shouldn't do), and whichever one is closer is the target.
I could do it like this, checking all the entities that I know exist...
Graphics3D 800,600,0,2
SetBuffer BackBuffer()
cam = CreateCamera()
PositionEntity cam,0,2,-10
light = CreateLight()
a2.Unit = Unit(CreateCube(),2,0,0,"a")
b2.Unit = Unit(CreateSphere(32),-2,-1,0,"b")
c2.Unit = Unit(CreateSphere(32),7,-1,0,"c")
While Not KeyDown(1)
If KeyDown(200) a2\y = a2\y + .1
If KeyDown(208) a2\y = a2\y - .1
If KeyDown(205) a2\x = a2\x + .1
If KeyDown(203) a2\x = a2\x - .1
UpdateUnit
If EntityDistance(a2\mdl,b2\mdl) < EntityDistance(a2\mdl,c2\mdl)
a2\target = EntityName(b2\mdl)
ElseIf EntityDistance(a2\mdl,c2\mdl) < EntityDistance(a2\mdl,b2\mdl)
a2\target = EntityName(c2\mdl)
Else
a2\target = 0
EndIf
UpdateWorld
RenderWorld
Text 0,0,"Target = " + a2\target
Text 0,20,EntityDistance(a2\mdl,b2\mdl)
Text 0,40,EntityDistance(a2\mdl,c2\mdl)
Flip
Wend
End
Type Unit
Field mdl
Field x#,y#,z#
Field target$
Field name$
End Type
Function Unit.Unit(mdl,x#,y#,z#,name$)
a.Unit = New Unit
a\mdl = mdl
a\x = x
a\y = y
a\z = z
a\name = name
NameEntity a\mdl,a\name
PositionEntity a\mdl,a\x,a\y,a\z
Return a
End Function
Function UpdateUnit()
For a.Unit = Each Unit
PositionEntity a\mdl,a\x,a\y,a\z
Next
End Function
But I want it updating for ALL of that Type...
Graphics3D 800,600,0,2
SetBuffer BackBuffer()
cam = CreateCamera()
PositionEntity cam,0,2,-10
light = CreateLight()
a2.Unit = Unit(CreateCube(),2,0,0,"a")
b2.Unit = Unit(CreateSphere(32),-2,-1,0,"b")
c2.Unit = Unit(CreateSphere(32),7,-1,0,"c")
While Not KeyDown(1)
If KeyDown(200) a2\y = a2\y + .1
If KeyDown(208) a2\y = a2\y - .1
If KeyDown(205) a2\x = a2\x + .1
If KeyDown(203) a2\x = a2\x - .1
UpdateUnit
UpdateWorld
RenderWorld
Text 0,0,"Target = " + a2\target
Text 0,20,EntityDistance(a2\mdl,b2\mdl)
Text 0,40,EntityDistance(a2\mdl,c2\mdl)
Flip
Wend
End
Type Unit
Field mdl
Field x#,y#,z#
Field target$
Field name$
End Type
Function Unit.Unit(mdl,x#,y#,z#,name$)
a.Unit = New Unit
a\mdl = mdl
a\x = x
a\y = y
a\z = z
a\name = name
NameEntity a\mdl,a\name
PositionEntity a\mdl,a\x,a\y,a\z
Return a
End Function
Function UpdateUnit()
For a.Unit = Each Unit
For b.Unit = Each Unit
For c.Unit = Each Unit
If EntityDistance(a\mdl,b\mdl) < EntityDistance(a\mdl,c\mdl)
a\target = EntityName(b\mdl)
ElseIf EntityDistance(a\mdl,c\mdl) < EntityDistance(a\mdl,b\mdl)
a\target = EntityName(c\mdl)
Else
a\target = 0
EndIf
Next
Next
PositionEntity a\mdl,a\x,a\y,a\z
Next
End Function