Exemple #1
0
        public void Explode(ExploderObject.OnExplosion callback)
        {
            var settings = new ExploderSettings
            {
                Position              = ExploderUtils.GetCentroid(exploder.gameObject),
                DontUseTag            = exploder.DontUseTag,
                Radius                = exploder.Radius,
                ForceVector           = exploder.ForceVector,
                UseForceVector        = exploder.UseForceVector,
                Force                 = exploder.Force,
                FrameBudget           = exploder.FrameBudget,
                TargetFragments       = exploder.TargetFragments,
                DeactivateOptions     = exploder.DeactivateOptions,
                DeactivateTimeout     = exploder.DeactivateTimeout,
                MeshColliders         = exploder.MeshColliders,
                ExplodeSelf           = exploder.ExplodeSelf,
                HideSelf              = exploder.HideSelf,
                DestroyOriginalObject = exploder.DestroyOriginalObject,
                ExplodeFragments      = exploder.ExplodeFragments,
                SplitMeshIslands      = exploder.SplitMeshIslands,
                FragmentOptions       = exploder.FragmentOptions.Clone(),
                Callback              = callback,
                processing            = false,
            };

            queue.Enqueue(settings);
            ProcessQueue();
        }
Exemple #2
0
        public void Explode(ExploderObject.OnExplosion callback)
        {
            var settings = new ExploderSettings
            {
                Position = ExploderUtils.GetCentroid(exploder.gameObject),
                DontUseTag = exploder.DontUseTag,
                Radius = exploder.Radius,
                UseCubeRadius = exploder.UseCubeRadius,
                CubeRadius = exploder.CubeRadius,
                ForceVector = exploder.ForceVector,
                UseForceVector = exploder.UseForceVector,
                Force = exploder.Force,
                FrameBudget = exploder.FrameBudget,
                TargetFragments = exploder.TargetFragments,
                DeactivateOptions = exploder.DeactivateOptions,
                DeactivateTimeout = exploder.DeactivateTimeout,
                MeshColliders = exploder.MeshColliders,
                ExplodeSelf = exploder.ExplodeSelf,
                HideSelf = exploder.HideSelf,
                DestroyOriginalObject = exploder.DestroyOriginalObject,
                ExplodeFragments = exploder.ExplodeFragments,
                SplitMeshIslands = exploder.SplitMeshIslands,
                FragmentOptions = exploder.FragmentOptions.Clone(),
                SfxOptions = exploder.SFXOptions.Clone(),
                Callback = callback,
                processing = false,
            };

            queue.Enqueue(settings);
            ProcessQueue();
        }
        public void Enqueue(ExploderObject.OnExplosion callback, GameObject obj)
        {
            var settings = new ExploderSettings(exploder)
            {
                Callback   = callback,
                Target     = obj,
                processing = false
            };

            queue.Enqueue(settings);
            ProcessQueue();
        }
        public void Enqueue(ExploderObject.OnExplosion callback, GameObject obj)
        {
            var settings = new ExploderSettings(exploder)
            {
                Callback = callback,
                Target = obj,
                processing = false
            };

            queue.Enqueue(settings);
            ProcessQueue();
        }
Exemple #5
0
        private void Awake()
        {
            // init cutter
            cutter = new Core.MeshCutter();
            cutter.Init(512, 512);
            UnityEngine.Random.seed = System.DateTime.Now.Millisecond;

            settings= new ExploderSettings(this);

            var use2d = settings.Use2DCollision;

            // init pool
            FragmentPool.Instance.Allocate(settings.FragmentPoolSize, settings.MeshColliders, use2d, settings.FragmentPrefab);
            FragmentPool.Instance.SetDeactivateOptions(settings.DeactivateOptions, settings.FadeoutOptions, settings.DeactivateTimeout);
            FragmentPool.Instance.SetExplodableFragments(settings.ExplodeFragments, settings.DontUseTag);
            FragmentPool.Instance.SetFragmentPhysicsOptions(settings.FragmentOptions, use2d);
            FragmentPool.Instance.SetSFXOptions(settings.SFXOptions);
            timer = new Stopwatch();

            // init queue
            queue = new ExploderQueue(this);

            if (settings.ExplodeSelf)
            {
                if (settings.DontUseTag)
                {
                    gameObject.AddComponent<Explodable>();
                }
                else
                {
                    gameObject.tag = "Exploder";
                }
            }

            state = State.DryRun;

            PreAllocateBuffers();

            state = State.None;

            if (settings.SFXOptions.ExplosionSoundClip)
            {
                audioSource = gameObject.GetComponent<AudioSource>();

                if (!audioSource)
                {
                    audioSource = gameObject.AddComponent<AudioSource>();
                }
            }
        }
Exemple #6
0
        /// <summary>
        /// callback from queue, do not call this unles you know what you are doing!
        /// </summary>
        public void StartExplosionFromQueue(ExploderSettings settings)
        {
            ExploderUtils.Assert(state == State.None, "Wrong state: " + state);

			this.settings = settings;
            state = State.Preprocess;

#if DBG
        processingTime = 0.0f;
        preProcessingTime = 0.0f;
        postProcessingTime = 0.0f;
        postProcessingTimeEnd = 0.0f;
        isolatingIslandsTime = 0.0f;
#endif
        }