public void init() { // Init random generator _rand = new Random((int)DateTime.Now.Ticks); // Load character with walk animation int characterRes = Horde3D.addResource((int)Horde3D.ResourceTypes.SceneGraph, "models/man/man.scene.xml", 0); int characterWalkRes = Horde3D.addResource((int)Horde3D.ResourceTypes.Animation, "animations/man.anim", 0); Horde3DUtils.loadResourcesFromDisk( "../Content" ); // Add characters for( int i = 0; i < 100; ++i ) { Particle p = new Particle(); // Add character to scene and apply animation p.node = Horde3D.addNodes(Horde3D.RootNode, characterRes); Horde3D.setupModelAnimStage(p.node, 0, characterWalkRes, string.Empty, false); // Characters start in a circle formation p.px = (float)Math.Sin( (i / 100.0f) * 6.28f ) * 10.0f; p.pz = (float)Math.Cos( (i / 100.0f) * 6.28f ) * 10.0f; chooseDestination( ref p ); Horde3D.setNodeTransform( p.node, p.px, 0.02f, p.pz, 0, 0, 0, 1, 1, 1 ); _particles.Add( p ); } }
private void chooseDestination( ref Particle p ) { // Choose random destination within a circle float ang = ((_rand.Next() % 360) / 360.0f) * 6.28f; float rad = (_rand.Next() % 30) * 1.0f; p.dx = (float)Math.Sin( ang ) * rad; p.dz = (float)Math.Cos(ang) * rad; }