public static void CgPtPCollide( CollGrid cg ) { if ( cg == null ) return; Particle p1, p2; int l = cg.PL.Count; for (int i = 0; i < l; i++) { p1 = (Particle)cg.PL[i]; //Parallel.For(i, l, index => for (int j = i; j < l; j++) { p2 = (Particle)cg.PL[j]; PtoPCollide(p1, p2); }//); } if (cg.CL[0] != null){ foreach (CollGrid clg in cg.CL) CgPtPCollide(clg); //lock(cg.CL){ //Parallel.ForEach(cg.CL, CgPtPCollide); //} } }
public void TestCollGrid() { var collGrid = new CollGrid(); collGrid.boundsMin.Set(1, 2, 3); collGrid.boundsMax.Set(4, 5, 6); collGrid.unknown1 = 7; collGrid.gridX = 2; collGrid.gridY = 3; for (var i = 0; i < 2 * 3; ++i) { collGrid.unknown2.Add(i); } var collGroup = new CollGroup(); collGroup.unknown1 = new byte[] { 1, 2, 3, 4 }; collGrid.groups.Add(collGroup); collGrid.groups.Add(collGroup); TestGcnSerializableExisting(collGrid); }
public static void CgPtPCollide( CollGrid cg ) { if ( cg == null ) return; // lock (cg.PL.SyncRoot) // { Particle p1, p2; int l = cg.PL.Count; /* Parallel.For(0, l, i => { // lock(cg.PL) //{ p1 = (Particle)cg.PL[i]; // lock(cg.PL.SyncRoot) // { Parallel.For(i, l, j => { p2 = (Particle)cg.PL[j]; PtoPCollide(p1, p2); }); /* for (int j = i; j < l; j++) { p2 = (Particle)cg.PL[j]; PtoPCollide(p1, p2); } //} });*/ //}*/ for (int i = 0; i < l; i++) { p1 = (Particle)cg.PL[i]; //p1.force.y += 0.2f*p1.mass; //p1.Upd(); for (int j = i; j < l; j++) { p2 = (Particle)cg.PL[j]; PtoPCollide(p1, p2); } } if (cg.CL[0] != null){ foreach (CollGrid clg in cg.CL) CgPtPCollide(clg); //lock(cg.CL){ //Parallel.ForEach(cg.CL, CgPtPCollide); //} } //} }