|
ChangeLog
What has changed in the project each version.
IntroductionThis is the ChangeLog for Physics2D.NET DetailsPhysics2D.Net2.0.0.0Fixed: bug with PhysicsTimer that would let it run faster then it should. Changed: Made Pivot and Hinge Joint Breakable by adding the DistanceTolerance Property. Changed: Made it so the PhysicsEngine.Update commands Removes Expired Bodies First instead of last. Changed: Renamed PivotJoint to FixedHingeJoint. Added: FixedAngleJoint Changed: Redid the Lifespan class to get rid of Master and to make it possible to have multiple items have the same lifespan. Added: TimeStep and used it to replace all internal dt parameters. Fixed: UseDouble to work. Fixed: RaySegments.TryGetCustomIntersection against a MultipartPolygon Added: GlobalFluidLogic and changes to make it work. Added: a bunch of methods and properties to Shape. Added: PhysicsLogic.Order to allow for Logics to run in a certain order declaratively. Added: LinearDamping and AngularDamping Properties to Body. Added: MassInfo.Infinite Fixed: The bug where objects can get trapped inside each other and are next to impossible to separate. Added: Shape.Normals as a part to the above bug fix. BREAKING Change: Made all shapes stateless. a shape no longe knows or cares what body it is attached too. Breaking Change: Renamed all shapes to end in “Shape” this for naming conflicts with other libraries. Added: the Matrices class and property to the body. This used to me the matrix properties on the Shape. Added: Rectangle property to the Body (this use to be on the shape). Changed: Shapes that object that can collide with a RaySegmentsShape to implement a new IRaySegmentsCollidable interface. Added: the IRaySegmentsCollidable interface. Changed: Replaced all usage of Matrix3x3 with Matrix3x2. Changed: Got rid of the Matrix2D struct Added: Matrices class. Added: LineFluidLogic and associated classes Fixed: The RaySegments to work properly with Body.Transform Changed: put all PhysicsLogics into a PhysicsLogics namespace Changed: put all Joints into a Joints namespace Changed: put all Ignorers into a Ignorers namespace Changed: put all Shapes into a Shapes namespace Added: RaySegmentsCollisionLogic to manage a RaySegmentsShape Added: ExplosionLogic Changed: Removed ApplyMatrix from Body Changed: Renamed ApplyMatrix to ApplyPosition Added: SpatialHashDetector Added: Body.IgnoresPhysicsLogics Added: OneWayPlatformIgnorer Changed: Ignorer.CanCollide to take bodies as well as the other Ignorer Added: Body.IsEventable Changed: Reorder parameters in PolygonShape.CreateRectangle. Removed: RectangleShape Removed: Shape.IsBroadPhaseDetectionOnly Added: Body.IsBroadPhaseOnly Added: MousePickingLogic Added: Body.JointAdded Added: Body.JointRemoved Changed: Moved: Shape.IgnoreVertexes To Body Changed: Moved all static methods in the Shape classes into the new VertexHelper class. Removed: the shape object now all shape directly impliment IShape. Added: GroupedOneWayPlatformIgnorer Added: PhysicsTimer.IsRunningChanged Changed: Body.Collided Event to only be raised on initial contact. Contact in the event args can get rest. Changed: Moved where ApplyPosition is called from. 1.5.0.0added: "#if CompactFramework ... #endif" statements for all non Compact framework compatible code. changed: PhysicsTimer to be compatible with the Compact framework removed: most of the classes in Collections. Added: CFReaderWriterLock which a class to replace the .Net frameworks ReaderWriterLock class since the Compact Framework does not have it. Added: ReadOnlyThreadSafeList to replace all those classes in collections. changed: some code to be do things in a more compact framework friendly manner. changed: now compiles on compact framework. Added: The Serializable Attribute to RaySegment and RaySegmentIntersectionInfo. Changed: The physicsTimer so it no longer tries to abort the Physics thread when it is disposed. (people had security problems with this) Changed: The physicsTimer to no longer use the Stopwatch class. fixed: a bug with PhysicsTimer.IsRunning that would cause it not to unpause. added: some more parameter checking. added: some minor speed improvements to sweep and prune. changed: made it so the first ID for a Body is 1. changed: PhysicsEngine to initialize all its fields in its constructor. ADDED: SingleSweepDetector this broad phase kicks Sweep and Prunes butt! (inspired by the idea "the fastest code is code that is never executed") Added: BruteForceDetector this is the slowest possible broad phase for comparison purposes. added: The Serializable Attribute to more classes. Added: SelectiveSweepDetector, its more consistent and potentially faster then SingleSweepDetector Changed: Redid how I did the compatibility with the Compact Framework to drastically reduce the number of #if statements. BREAKING: Changed: renamed all the ignorers to not hav eth word Collision in front of them. Added: GroupCollection. which holds most of the logic GroupIgnorer did. BREAKING: Changed: GroupIgnorer so that it uses the new GroupsCollection. BREAKING: Changed: renamed Body.Ignorer to Body.CollisionIgnorer Added: AdvGroupIgnorer which has 2 GroupCollections one of the group its part of one of the groups it ignores. Added: Body.EventIgnorer. this is to allow ignoring of collision events Added: a bunch of static Methods to MultiPartPolygon. Added: CreateFromBitmap to MultiPartPolygon. This will return multiple polygons :) Added: IBitmap and ArrayBitmap that are parameters to the CreateFromBitmap method Changed: made it so the CreateFromBitmap method can take a interface to allow for custom Bitmap conversions to not require a large boolean array. Changed: Made Major Speed improvment to the MultiPartPolygon.CreateFromBitmap method. Added: Proxying. Body.Proxy, A system to make 2 object appear to be the same. can be used for asteroids style game or a 2D version of portal. Added: FrameCoherentSAPDetector. SAP = sweep and prune. Its good for very static enviroments. Contributed by Andrew D.Jones Removed: SingleSweepDetector since SelectiveSweepDetector is better. Changed: made a few changes suggested by FXcop. Including a few bug fixes. Renamed: MultiPartPolygon to MultipartPolygon because of FXcop. Changed: did a global Search and replace for float to Scalar. changed: some things to fix serialization Fixed: the false negative bugs in FrameCoherentSAPDetector. fixed: A bug where a body's ID would not be assigned before it was added to the solver or the detector Added: AddBodyRange, RemoveExpired, and Clear to PhysicsLogic 1.4.0.0changed: moved the BroadPhaseDetectionOnly to Shape and made it abstract and read only. Added: CanGetDistance property to Shape. changed: renamed Body.StateChanged to PositionChanged and will be only raised when it is changed. Added: a Transformation property to Body to transform the shape. changed: refactored some collsion handling. Added: CanGetcustomIntersection and TryGetCustomIntersection to Shape. changed: CollsionEventArgs to have extra members to handle custom intersection methods in Shape. changed: Distance grid to not accept Shapes you cannot GetDistance from. removed: ICollisionInfo added: MultiPartPolygon class. added: PhysicsTimer class. added: RaySegments class and support classes. changed: replaced all instances of float with Scalar. fixed: restitution to Work a whole lot better. removed: Line shape since it would not work with certain features like the new raySegments Shape. And it can be represented better with a polygon. changed: made the Body constructor to set last position so the position changed event will fire correctly the first time. Added: the Shape.IgnoreVertexes property. 1.3.0.0changed: inlined code in the Body.UpdateVelocity method. changed: ApplyMatrix to use MathHelper.ClampAngle instead of its own logic. Removed: The BiasMultiplier from the PreApply method in Arbiter. changed: The SequentialImpulsesSolver.Arbiter to have a reference to the SequentialImpulsesSolver containing it. changed: The SequentialImpulsesSolver.Arbiter to use the values in the SequentialImpulsesSolver instead of having the values passed to it. Added: Reduce Method to Polygon. renamed: BoundingBox2D to BoundingRectangle and moved it to the AdvanceMath.Geometry2D namespace. added: TypeConverter attribuites to PhysicsState and MassInfo removed: System.Data from reference list. replaced: most of the foreach loops in SequentialImpulsesSolver.Solve with normal for loops Changed: IDuplicateable to also impliment IClone Changed: Implimented all the math from the Box2D GCD 2007. Added: math to handle Restitution. changed: the sweep and prunes use of nodes so that it will reuse linked list nodes. added: a Pivot Joint class. removed: code in the Arbiter class that was not supposed to be there. changed: a few shape objects to utilize methods and classes in the AdvanceMath.Geometry2D namespace. moved: some logic in Polygon into advanceMaths BoundingPolygon renamed: Polygon.CalcArea and CalcCentroid to GetArea and GetCentroid changed: The Solver and Detecter with a few speed improvements. added: CreateFromBitmap to the Polygon class a BitmapHelper class that assists it. fixed: Body.duplicate to copy the boolean values. changed: the collisionIgnorer to not have the IsCollidable value and moved it to Body. Added: CollisionGroupIgnorer that impliments CollisionIgnorer removed: CanCollide(1) from Body. You should use CanCollide(2) moved: CollisionIgnorer into Ignorers directory. Added: another version of the PhysicsHelper.GetRelativeVelocity to be used by PivotJoint. changed: the Sweep and Prune to be a little more optimized for particles. changed: The shape object to make the inertia multiplier one of its constructors parameters. Added: AngleJoint. Added: CollisionObjectIgnorer. changed: Sequential impulse solver to clear forces after velocity is updated instead of after update position. changed: Sweep and Prune to be faster (by alot), by replacing the wrappers dictionary with a List and using BinarySearch for the second sweep. changed: IntersectionInfo into a struct. changed: TryGetIntersection to reflect the change of IntersectionInfo. changed: the Arbiter to minimize the number of contact creations. this was to massivly reduce the number of creation and deletion of objects. IE less memory allocation. added: new method for throwing errors to classes that are added to the engine. changed: Joints.bodies to be the ReadOnlycollection. Fixed: A bug in the Reduce methods that would evaluate the last edge incorrectly. Changed: the Polygon.Reduce method to evaluate vertex removal based on the how it would change the area instead of on the difference in angle. Changed: Sweep and Prune to sort with a IComparer instead of a delegate. (Speed boost) Changed: Sweep and Prune to be faster by adding a custom IntList class to store colliders. Added: a IsInverted Property to the CollisionIgnorer class. changed: made the code more aware of divide by zero errors. Added: Body1 and Body2 properties to IContact. 1.2.0.0Changed: made the Joints Implement an interface specific to the solver. Changed: Implemented the Solver from Super Split Box2D. This changed the joints quite a bit but basically left everything else alone. Changed: Made it so a joint will be removed when one of the bodies it is attached to is removed. Added: JointCount property to Body. Changed: Cleaned up some code in the Sequential Impulse Solver. Added: IContact and ICollisionInfo for use with CollisionEventArgs Changed: the solvers and all classes involved to added contact info to the collided event. Moved: BroadPhasedCollisionDetector into the Detectors namespace. Moved: CollsionSolver into the Solvers namespace. Changed: Made the Lifespan class impliment IDuplicateable Added: ImplicitCastCollection to be used by the Solver to convert Contacts to IContact without making a copy of the contacts. Changed: CollisionEventArgs and ICollisionInfo to return a ReadOnlyCollection of Contacts not an array. Added: CollectionEventArgs class. Added: events to PhysicsEngine for when objects are added to or removed from it. Changed: the logic of removing and adding so they will “short circuit” so to not add empty lists. Removed: the PhysicsConstants class and moved its contents to PhysicsHelper. Added: a IsPending property to IPhysicsEntity, changed: Made it so it will throw an error in the add method if a object is added more then once. Added: A Transform Method to ALVector2D. Changed: Made the Body.ApplyMatrix transform the Position ALVector2D,then recreate the matrix to apply to the shape. Fixed: MakeCentroidOrigin. Added: BoundingBox2DShape. Changed: Made the distance grid use Jagged arrays. Renamed: SITag to SequentialImpulsesTag Moved: the SequentialImpulsesTag outside of the SequentialImpulsesSolver Removed: SolverVelocity from PhysicsState. Added: biasImpulse to SequentialImpulsesTag. Added: tag1 and tag2 to HidgeJoint. Added: Pending Event to IPhysicsEntity Fixed: a bug that trying to add an item to the engine in a AddRange method that has already been added would corrupt the state. Fixed: a few problems that made the PhysicsEngine class not threadsafe. Added: IsAdded property to IPhysicsEntity. changed: made it so the bodies effected by a joint must be added to the engine before the joint. Changed: made it so it throws ArgumentNullExceptions when you pass a null object to the Add or AddRange methods in PhysicsEngine. Added: IJoint interface. Added: RemovedEventArgs. 1.1.0.0changed: made it so the line's thickness is actaully its thickness so the lines are no longer twice as thick as the parameter passed. removed: the add methods to collision detector and solver since they will only use addRange now. changed: how objects are added now they are always added to a pending queue first then truly added to the engine on a call to update. Changed: made it so 2 bodies with infinite mass cannot collide. changed: made the StateChanged event get generated on calls to apply matrix or in PhysicsEngine.Update. added: The event Body.ShapedChanged. renamed: the event Body.Collision to Collided. renamed: the event Body.NewState to StateChanged changed: the Matrix2D struct to have the three versions of each operator. changed: the Sequential Impulese Solver to be in the Solvers Namespace and all classes used by it to be in it. changed: it so the angular position will be bounded between -2PI and 2PI with every parameterless call to apply matrix. fixed: a bug that really slowed the UpdatePosition if the angular position's absolute value was very large. added: BroadPhaseDetectionOnly property to Body fixed: a bug with the wrapped collection that could allow access to a non locked Enumerator. Changed: all the collection wrappers names from wrapper to Wrapped becuase of fxCop. changed: a few properties and names FxCop complained about. added: allot of the parameter checking FxCop complained about. fixed: In theory a bug when a Body is set to Expired in the middle of a call to RemoveExpired and when a object is re-added in its removed event. causing multiple nodes and wrappers for the Body in Sweep and prune.(this bug was/is hard to generate) Added: the newer versions of The Sequential Impuleses Solver that impliments the newest Algorithms from Box2D changed: the math in the joints and arbiters to look better using the PhysicsHelper. Added: a static PhysicsHelper class and methods for impulse, relative velocity calcualtions and other physics related math. Added: SolversTag and DetectorsTag properties to Body Added: A SolversVelocity value to PhysicsState.(this is the bias velocity for the newer solver) fixed: the distance grid so that it will no longer throw a index out of bounds exception. Changed: The Sweep and prune to store LinkList nodes in the wrapper instead of searching for them when its time to remove them. changed: The Linked list in Sweep and prune to store Bodies instead of Nodes. Removed: junk code from the Polygon.CreateRectangle method. Changed: the SequentialImpulsesSolver.Solve method to copy the Arbiters into an array before running apply and preApply 1.0.0.0Completely new, See release notes for explanation. AdvanceMath2.0.0.0Added: the struct Matrix3x2 and changes to other classes to make it work. Fixed: Line's GetDistance method Added: Line.Transform Fixed: BoundingPolygon.Intersects (thanks DW) 1.7.0.0added: "#if CompactFramework ... #endif" statements for all non Compact framework compatible code. removed: some unneeded code that was not supported by compact framework. changed: now compiles on compact framework. Fixed: a bug in BoundingPolygon.GetDistance. It may be slower as a result. Changed: LineSegment.GetDistance to be a little more optimized. Fixed: a bug with AdvanceMath.Design.AdvPropertyDescriptor.IsReadOnly. Fixed: a few problems pointed out by AeHNC in AdvanceMath.Design Removed: useless using statements Added: a few Faux Attributes for Compact Framework Changed: Redid how I did the compatibility with the Compact Framework to drastically reduce the number of #if statements. changed: Vector2D.GetAngle to use a more accepted approuch. Changed: BoundingPolygon.GetDistance to potentially be faster Changed: renamed MathHelper constants to be closer to XNA 1.6.1.0fixed: A really retarded bug by me in the MathHelper.TrySolveQuadratic. 1.6.0.0Added: a new define: UNSAFE Changed: made it so all code that has or uses unsafe code blocks is inside "#if UNSAFE #endif" statements. Renamed: RadianMin to ClampAngle Changed: ClampAngle's logic to not use loops. renamed: GetAngleDifference to AngleSubtract. Changed: AngleSubtract's logic to be better. renamed: RadainsToDegrees to ToDegrees renamed: DegreesToRadains to ToRadains changed: Vector2D angle methods/properties to use pass by reference versions. added: Hermite and catmullRom to all the vector classes using the code in Vector2D. added: Max and Min to all vector classes. Removed: FromArray methods from all the Vector Classes since they were redundent. removed: some unneeded wrapper methods from MathHelper. Added: Geometry2D namespace and contained classes.(BIG CHANGE) removed: System.Data from reference list. added: WrapClamp to MathHelper. changed: optimized a few methods. changed: all constants to not be float by default. allow sthe compiler to figure out if they are double or float. changed: Matri3x3.FromRotationX to be public. changed: the normalize methods on the vetor classes to be inlined. fixed: MathHelper.HALF_THREE_PI to be the correct value. fixed: ClampAngle and WrapClamp in MathHelper added: distance and distanceSq to all Vector classes. changed: the contains methods to be closer to XNAs model. fixed: an elusive bug with the BoundingPolygon.GetDistance method and it should be faster (in theory). changed: LineSegment.Getdistance so it will no longer return a negative value. changed: the order of parameters to the BoundingRectagle's constructors. removed: origin from Vector2D use Zero instead. added: Point2D added: IntersectionType changed: made the code more aware of divide by zero errors. Added: the Clamped class. 1.5.0.0Added: Lerp to the matrix structs. changed: only a few things fxCop pointed out. added: a few of the parameter checking FxCop complained about. fixed: a potetial bug with the pass by reference version of Vector2D.ZCross, GetRightHandNormal and GetLeftHandNormal methods change: some method names to be closer to XNAs math classes. added: methods for adding and subtracting matrices and vectors of different size. 1.4.0.0Added pass by reference versions of most methods. Removed all copyrighted code for re-licensing as MIT except for the Quaternion. Re-licensed as MIT. |
Sign in to add a comment