func main() { params := getArgs() nodecnt := params.sheeplecnt + params.tvcnt pkt := lib.SimPacket{} pkt.Itermax = int(params.itermax) // TODO overflow check pkt.Torus.W = params.width pkt.Torus.H = params.height pkt.Beliefs = strings.Split(params.beliefs, ",") pkt.Nodes = make([]lib.UserNode, nodecnt) for i := uint(0); i < params.tvcnt; i++ { n := ext.NewTvNode(pkt.Torus) pkt.Nodes[i] = lib.SimNode2UserNode(n) } shmax := params.tvcnt + params.sheeplecnt for i := params.tvcnt; i < shmax; i++ { n := ext.NewSheepleNode(pkt.Torus) pkt.Nodes[i] = lib.SimNode2UserNode(n) } for i, n := range pkt.Nodes { n.Id = i } lib.WriteSimPkt(pkt, os.Stdout) }
func (r *Renderer) userNodes(nodes []*core.SimNode) []core.UserNode { out := make([]core.UserNode, len(nodes)) for i, n := range nodes { out[i] = core.SimNode2UserNode(n) } return out }
func (base BaseExtension) DefaultRender(entity string) { boxes := make([]ColorBox, len(base.user)) for i, sn := range base.nodes { mapped := core.MapNode(base.render.torscreen, sn) un := core.SimNode2UserNode(mapped) boxes[i] = renderNode(un, base.noderad()) } sheepShape := base.render.entshapes[entity] fr := base.render.fr fr.Shapes[sheepShape] = append(fr.Shapes[sheepShape], boxes...) }
func (gr TvGroup) Render() { boxes := make([]ColorBox, len(gr.user)) fr := gr.render.fr for i, un := range gr.user { ts := gr.render.torscreen mapped := core.MapNode(ts, gr.nodes[i]) e := mapped.Entity tv := e.(*ext.Tv) // A better deserialization mechanism would allow no typecast exprad := ts.Scale(tv.R) boxes[i] = renderNode(core.SimNode2UserNode(mapped), BaseExtension(gr).noderad()) expls := make([]Explosion, len(un.Expression)) for i, b := range un.Expression { expls[i] = renderExplosion(core.BlasVec2UserVec(mapped.P), exprad, gr.render.time, b) } fr.Explosions = append(fr.Explosions, expls...) } tvShape := gr.render.entshapes["tv"] fr.Shapes[tvShape] = append(fr.Shapes[tvShape], boxes...) }