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()) }