Exemple #1
0
        /// <summary>
        /// Tries to acquire and draw a debug shape for better feedback and visualization.
        /// </summary>
        /// <param name="debugDrawShape">The type of the debug shape (sphere, cone, etc.)</param>
        /// <param name="translation">The shape's translation</param>
        /// <param name="rotation">The shape's rotation</param>
        /// <param name="scale">The shape's non-uniform scaling</param>
        /// <returns><c>true</c> if debug shape can be displayed</returns>
        public bool TryGetDebugDrawShape(ref DebugDrawShape debugDrawShape, ref Vector3 translation, ref Quaternion rotation, ref Vector3 scale)
        {
            foreach (var particleEmitter in Emitters)
            {
                if (!particleEmitter.Enabled)
                {
                    continue;
                }

                foreach (var initializer in particleEmitter.Initializers)
                {
                    if (!initializer.Enabled)
                    {
                        continue;
                    }

                    if (initializer.TryGetDebugDrawShape(out debugDrawShape, out translation, out rotation, out scale))
                    {
                        // Convert to world space if local
                        if (particleEmitter.SimulationSpace == EmitterSimulationSpace.Local)
                        {
                            return(ToWorldSpace(ref translation, ref rotation, ref scale));
                        }

                        return(true);
                    }
                }

                foreach (var updater in particleEmitter.Updaters)
                {
                    if (!updater.Enabled)
                    {
                        continue;
                    }

                    if (updater.TryGetDebugDrawShape(out debugDrawShape, out translation, out rotation, out scale))
                    {
                        // Convert to world space if local
                        if (particleEmitter.SimulationSpace == EmitterSimulationSpace.Local)
                        {
                            return(ToWorldSpace(ref translation, ref rotation, ref scale));
                        }

                        return(true);
                    }
                }
            }

            if (BoundingShape == null)
            {
                return(false);
            }

            if (BoundingShape.TryGetDebugDrawShape(out debugDrawShape, out translation, out rotation, out scale))
            {
                return(ToWorldSpace(ref translation, ref rotation, ref scale));
            }

            return(false);
        }