Beispiel #1
0
func (jm *JotaModule) NearestEnt(vs ...runtime.Val) runtime.Val {
	jm.dieOnTerminated()
	jm.engine.Pause()
	defer jm.engine.Unpause()
	g := jm.engine.GetState().(*game.Game)
	me := g.Ents[jm.myGid]
	if me == nil {
		return runtime.Nil
	}
	var closest game.Ent
	dist := 1e9
	for _, ent := range g.Ents {
		if ent == me {
			continue
		}
		if closest == nil {
			closest = ent
		} else if closest.Pos().Sub(me.Pos()).Mag2() < dist {
			dist = closest.Pos().Sub(me.Pos()).Mag2()
		}
	}
	if closest == nil {
		return runtime.Nil
	}
	return jm.newEnt(closest.Id())
}