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(); }
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(); }
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>(); } } }
/// <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 }