/// <summary> /// Processes the disposed controllers, joints, springs, bodies and cleans up the arbiter list. /// </summary> private void ProcessDisposedItems() { //Allow each controller to validate itself. this is where a controller can Dispose of itself if need be. for (int i = 0; i < ControllerList.Count; i++) { ControllerList[i].Validate(); } //Allow each joint to validate itself. this is where a joint can Dispose of itself if need be. for (int i = 0; i < JointList.Count; i++) { JointList[i].Validate(); } //Allow each spring to validate itself. this is where a spring can Dispose of itself if need be. for (int i = 0; i < SpringList.Count; i++) { SpringList[i].Validate(); } _tempCount = GeomList.RemoveDisposed(); if (_tempCount > 0) { _broadPhaseCollider.ProcessDisposedGeoms(); } BodyList.RemoveDisposed(); ControllerList.RemoveDisposed(); SpringList.RemoveDisposed(); JointList.RemoveDisposed(); //Clean up the arbiterlist ArbiterList.CleanArbiterList(arbiterPool); }
private void ConstructPhysicsSimulator(Vector2 gravity) { geomList = new GeomList(); geomAddList = new List <Geom>(); geomRemoveList = new List <Geom>(); bodyList = new BodyList(); bodyAddList = new List <Body>(); bodyRemoveList = new List <Body>(); controllerList = new ControllerList(); controllerAddList = new List <Controller>(); controllerRemoveList = new List <Controller>(); jointList = new JointList(); jointAddList = new List <Joint>(); jointRemoveList = new List <Joint>(); _broadPhaseCollider = new SelectiveSweepCollider(this); arbiterList = new ArbiterList(); _gravity = gravity; arbiterPool = new Pool <Arbiter>(_arbiterPoolSize); #region Added by Daniel Pramel 08/17/08 _inactivityController = new InactivityController(this); _scaling = new Scaling(0.001f, 0.01f); #endregion }
private float _width; // width and height of bodies to create /// <summary> /// Initializes a new instance of the <see cref="Path"/> class. /// </summary> /// <param name="width">The width.</param> /// <param name="height">The height.</param> /// <param name="mass">The mass.</param> /// <param name="endless">if set to <c>true</c> [endless].</param> public Path(float width, float height, float mass, bool endless) { _width = width; _height = height; _loop = endless; _mass = mass; _geoms = new GeomList(); _bodies = new BodyList(); _joints = new JointList(); _springs = new SpringList(); _controlPoints = new Vertices(); }
private void ConstructPhysicsSimulator(Vector2 gravity) { geomList = new GeomList(); geomAddList = new List<Geom>(); geomRemoveList = new List<Geom>(); bodyList = new BodyList(); bodyAddList = new List<Body>(); bodyRemoveList = new List<Body>(); controllerList = new ControllerList(); controllerAddList = new List<Controller>(); controllerRemoveList = new List<Controller>(); jointList = new JointList(); jointAddList = new List<Joint>(); jointRemoveList = new List<Joint>(); springList = new SpringList(); springAddList = new List<Spring>(); springRemoveList = new List<Spring>(); _broadPhaseCollider = new SelectiveSweepCollider(this); arbiterList = new ArbiterList(); _gravity = gravity; arbiterPool = new Pool<Arbiter>(_arbiterPoolSize); #region Added by Daniel Pramel 08/17/08 _inactivityController = new InactivityController(this); _scaling = new Scaling(0.001f, 0.01f); #endregion }
/// <summary> /// Processes the removed geometries (and their arbiters), bodies, controllers, joints and springs. /// </summary> private void ProcessRemovedItems() { //Remove any new geometries _tempCount = _geomRemoveList.Count; for (int i = 0; i < _tempCount; i++) { _geomRemoveList[i].InSimulation = false; GeomList.Remove(_geomRemoveList[i]); //Remove any arbiters associated with the geometries being removed for (int j = ArbiterList.Count; j > 0; j--) { if (ArbiterList[j - 1].GeometryA == _geomRemoveList[i] || ArbiterList[j - 1].GeometryB == _geomRemoveList[i]) { //TODO: Should we create a RemoveComplete method and remove all Contacts associated //with the arbiter? arbiterPool.Insert(ArbiterList[j - 1]); ArbiterList.Remove(ArbiterList[j - 1]); } } } if (_geomRemoveList.Count > 0) { _broadPhaseCollider.ProcessRemovedGeoms(); } _geomRemoveList.Clear(); //Remove any new bodies _tempCount = _bodyRemoveList.Count; for (int i = 0; i < _tempCount; i++) { BodyList.Remove(_bodyRemoveList[i]); } _bodyRemoveList.Clear(); //Remove any new controllers _tempCount = _controllerRemoveList.Count; for (int i = 0; i < _tempCount; i++) { ControllerList.Remove(_controllerRemoveList[i]); } _controllerRemoveList.Clear(); //Remove any new joints int jointRemoveCount = _jointRemoveList.Count; for (int i = 0; i < jointRemoveCount; i++) { JointList.Remove(_jointRemoveList[i]); } _jointRemoveList.Clear(); //Remove any new springs _tempCount = _springRemoveList.Count; for (int i = 0; i < _tempCount; i++) { SpringList.Remove(_springRemoveList[i]); } _springRemoveList.Clear(); }
/// <summary> /// Processes the added geometries, springs, joints, bodies and controllers. /// </summary> private void ProcessAddedItems() { //Add any new geometries _tempCount = _geomAddList.Count; for (int i = 0; i < _tempCount; i++) { if (!GeomList.Contains(_geomAddList[i])) { _geomAddList[i].InSimulation = true; GeomList.Add(_geomAddList[i]); //Add the new geometry to the broad phase collider. _broadPhaseCollider.Add(_geomAddList[i]); } } _geomAddList.Clear(); //Add any new bodies _tempCount = _bodyAddList.Count; for (int i = 0; i < _tempCount; i++) { if (!BodyList.Contains(_bodyAddList[i])) { BodyList.Add(_bodyAddList[i]); } } _bodyAddList.Clear(); //Add any new controllers _tempCount = _controllerAddList.Count; for (int i = 0; i < _tempCount; i++) { if (!ControllerList.Contains(_controllerAddList[i])) { ControllerList.Add(_controllerAddList[i]); } } _controllerAddList.Clear(); //Add any new joints _tempCount = _jointAddList.Count; for (int i = 0; i < _tempCount; i++) { if (!JointList.Contains(_jointAddList[i])) { JointList.Add(_jointAddList[i]); } } _jointAddList.Clear(); //Add any new springs _tempCount = _springAddList.Count; for (int i = 0; i < _tempCount; i++) { if (!SpringList.Contains(_springAddList[i])) { SpringList.Add(_springAddList[i]); } } _springAddList.Clear(); }