public bool Do() { if (_uid == -1) { _p = _sim.MakeParticle(_pos); _uid = _p.uid; _marker.MakeParticleMarker(_p); } else { var current = _sim.uidDistributer.current; _p = _sim.MakeParticle(_pos); _p.OverrideUID(_uid); for (var i = 0; i < _relatedSprings.Count; ++i) { var s = _sim.MakeSpringByUID( _relatedSprings[i].a.uid, _relatedSprings[i].b.uid, _relatedSprings[i].stiffness ); s.OverrideUID(_relatedSprings[i].uid); } for (var i = 0; i < _relatedAngles.Count; ++i) { var a = _sim.MakeAngleByUID( _relatedAngles[i].a.uid, _relatedAngles[i].b.uid, _relatedAngles[i].m.uid, _relatedAngles[i].stiffness ); a.OverrideUID(_relatedAngles[i].uid); } for (var i = 0; i < _relatedPins.Count; ++i) { var a = _sim.MakePinByUID( _relatedPins[i].a.uid, _relatedPins[i].pos ); a.OverrideUID(_relatedAngles[i].uid); } _sim.uidDistributer.SetCounter(current); CommandHelper.MakeParticleMarker(_marker, _p, _relatedSprings, _relatedAngles, _relatedPins); } return(true); }
/* * Particle related */ public static void MakeParticleMarker( MarkerManager marker, Particle p, List <SpringConstraint> springs, List <AngleConstraint> angles, List <PinConstraint> pins ) { marker.MakeParticleMarker(p); for (var i = 0; i < springs.Count; ++i) { marker.MakeSpringMarker(springs[i]); } for (var i = 0; i < angles.Count; ++i) { marker.MakeAngleMarker(angles[i]); } for (var i = 0; i < pins.Count; ++i) { marker.MakePinMarker(pins[i]); } }