public void Step(float timestep, out MultiSourceCombinedSnapshot snapshotOut)
        {
            // Update transforms held by each source
            foreach (var source in _sources.Values)
            {
                // Update current state
                source.Step(timestep);

                // Reset rigid body iterator
                source.ResetIterator();
            }

            MultiSourceCombinedSnapshot snapshot = new MultiSourceCombinedSnapshot();

            // Prepare rigid bodies for output
            foreach (var rb in _rigidBodySourceMap)
            {
                var source = _sources[rb.Value];

                SnapshotBuffer.RigidBodyData data;

                if (source.Find(rb.Key, out data))
                {
                    snapshot.RigidBodies.Add(rb.Key,
                                             new MultiSourceCombinedSnapshot.RigidBodyState(
                                                 rb.Key, source.CurrentLocalTime, data.Transform,
                                                 data.LinearVelocity, data.AngularVelocity,
                                                 source.HasUpdate, data.MotionType));
                }
            }

            snapshotOut = snapshot;
        }
Example #2
0
        /// <summary>
        /// Generate next snapshot with specified timestep.
        /// </summary>
        /// <param name="timestep"></param>
        /// <returns></returns>
        public MultiSourceCombinedSnapshot GetNextSnapshot(float timestep)
        {
            MultiSourceCombinedSnapshot snapshot = new MultiSourceCombinedSnapshot();

            foreach (SourceInfo source in Sources.Values)
            {
                // move snapshot forward for specified timestep
                source.step(timestep);

                // if it's new source, it may have no snapshot
                if (source.CurrentSnapshot != null)
                {
                    foreach (var t in source.CurrentSnapshot.Transforms)
                    {
                        snapshot.RigidBodies.Add(t.Id,
                                                 new MultiSourceCombinedSnapshot.RigidBodyState(t.Id, source.CurrentSnapshot.Time,
                                                                                                t.Transform, source.HasUpdate, t.motionType));
                    }
                }
            }

            return(snapshot);
        }