/// <summary> /// Rotates the given Position and Orientation around the Pivot Point, changing the Position and Orientation /// </summary> /// <param name="sRotationMatrix">The Rotation to apply to the object</param> /// <param name="sPivotPoint">The Point to rotate the object around</param> /// <param name="srPosition">The Position of the object (to be modified)</param> /// <param name="srOrientation">The Orientation of the object (to be modified)</param> public static void RotatePositionAndOrientation(Matrix sRotationMatrix, Vector3 sPivotPoint, ref Vector3 srPosition, ref Quaternion srOrientation) { // Rotate the Orientation about it's center to change its Orientation srOrientation = Orientation3D.Rotate(sRotationMatrix, srOrientation); // Rotate the Position around the specified Pivot Point srPosition = PivotPoint3D.RotatePosition(sRotationMatrix, sPivotPoint, srPosition); }
/// <summary> /// Rotates the object around the Pivot Point, changing its Position, without /// changing its Orientation /// </summary> /// <param name="sRotationMatrix">The Rotation to apply to the object, rotating it /// around the Pivot Point</param> public void RotatePosition(Matrix sRotationMatrix) { // If the object should rotate around a point other than it's center if (PivotPoint != mcPositionData.Position) { // Rotate the Position around the Pivot Point mcPositionData.Position = PivotPoint3D.RotatePosition(sRotationMatrix, PivotPoint, mcPositionData.Position); } }
/// <summary> /// Copy the given PivotPoint3D object's data into this object's data /// </summary> /// <param name="cPivotPointToCopy">The PivotPoint3D object to copy from</param> public void CopyFrom(PivotPoint3D cPivotPointToCopy) { PivotPoint = cPivotPointToCopy.PivotPoint; PivotRotationalVelocity = cPivotPointToCopy.PivotRotationalVelocity; PivotRotationalAcceleration = cPivotPointToCopy.PivotRotationalAcceleration; mbRotateOrientationToo = cPivotPointToCopy.RotateOrientationToo; mcPositionData = new Position3D(cPivotPointToCopy.PositionData); mcOrientationData = new Orientation3D(cPivotPointToCopy.OrientationData); }
/// <summary> /// Initializes a new instance of the <see cref="ParticleEmitter"/> class. /// </summary> public ParticleEmitter() { // Initialize the Position, Orientation, and Pivot Point variables. _positionData = new Position3DWithPreviousPosition(); _orientationData = new Orientation3DWithPreviousOrientation(); _pivotPointData = new PivotPoint3D(_positionData, _orientationData); // Disable Lerping the Emitter on the first update, since the Previous Position and Orientation won't be set yet. LerpEmittersPositionAndOrientationOnNextUpdate = false; LerpEmittersPositionAndOrientation = true; // Default any other properties. Enabled = true; EmitParticlesAutomatically = true; // Assign a unique ID to this emitter. ID = _particleEmitterCount++; }
/// <summary> /// Copies the given Emitter's values into this instance. /// </summary> /// <param name="emitterToCopy">The emitter to copy from.</param> public void CopyFrom(ParticleEmitter emitterToCopy) { _positionData.CopyFrom(emitterToCopy._positionData); _orientationData.CopyFrom(emitterToCopy._orientationData); _pivotPointData = new PivotPoint3D(_positionData, _orientationData); Enabled = emitterToCopy.Enabled; EmitParticlesAutomatically = emitterToCopy.EmitParticlesAutomatically; _burstNumberOfParticles = emitterToCopy._burstNumberOfParticles; _burstTimeInSeconds = emitterToCopy._burstTimeInSeconds; _particlesPerSecond = emitterToCopy._particlesPerSecond; _secondsPerParticle = emitterToCopy._secondsPerParticle; _timeElapsedSinceGeneratingLastParticle = emitterToCopy._timeElapsedSinceGeneratingLastParticle; BurstComplete = emitterToCopy.BurstComplete; }
/// <summary> /// Copy Constructor /// </summary> /// <param name="cPivotPointToCopy">The PivotPoint3D object to copy</param> public PivotPoint3D(PivotPoint3D cPivotPointToCopy) { CopyFrom(cPivotPointToCopy); }