private void TryInitialize() { this.TrackedTreasures.Clear(); foreach (TrileInstance trileInstance in (IEnumerable <TrileInstance>) this.LevelManager.Triles.Values) { if (trileInstance.Enabled && (ActorTypeExtensions.IsTreasure(trileInstance.Trile.ActorSettings.Type) || trileInstance.Trile.ActorSettings.Type == ActorType.GoldenCube)) { this.TrackedTreasures.Add(trileInstance); } } }
public override void Initialize() { base.Initialize(); this.LevelManager.LevelChanged += new Action(this.TryInitialize); this.LevelManager.TrileRestored += (Action <TrileInstance>)(t => { if (!t.Enabled || !ActorTypeExtensions.IsTreasure(t.Trile.ActorSettings.Type) && t.Trile.ActorSettings.Type != ActorType.GoldenCube) { return; } this.TrackedTreasures.Add(t); }); this.TryInitialize(); }
private void TryInitialize() { this.BatchedInstances.Clear(); this.BatchedInstancesSet.Clear(); this.CleanInstances.Clear(); this.AllEmplacements.Clear(); this.AllEmplacements.TrimExcess(); this.CleanInstances.TrimExcess(); this.BatchedInstances.TrimExcess(); this.RandomTrileIds = (int[])null; if (this.Enabled) { this.LevelMaterializer.TrileInstanceBatched -= new Action <TrileInstance>(this.BatchInstance); } this.Enabled = false; if (!this.LevelManager.Quantum || this.LevelManager.TrileSet == null) { return; } this.Enabled = true; List <int> list1 = Enumerable.ToList <int>(Enumerable.Select <Trile, int>(Enumerable.Where <Trile>(this.LevelMaterializer.MaterializedTriles, (Func <Trile, bool>)(x => { if (x.Geometry != null && !x.Geometry.Empty && !ActorTypeExtensions.IsTreasure(x.ActorSettings.Type)) { return(x.ActorSettings.Type != ActorType.SplitUpCube); } else { return(false); } })), (Func <Trile, int>)(x => x.Id))); this.RandomTrileIds = new int[250]; int num = 0; for (int index1 = 0; index1 < 250; ++index1) { int index2 = Quantumizer.Random.Next(0, list1.Count); int index3 = list1[index2]; this.RandomTrileIds[num++] = index3; this.LevelManager.TrileSet[index3].ForceKeep = true; list1.RemoveAt(index2); } Trile trile = Enumerable.FirstOrDefault <Trile>((IEnumerable <Trile>) this.LevelManager.TrileSet.Triles.Values, (Func <Trile, bool>)(x => x.Name == "__QIPT")); if (trile == null) { trile = new Trile(CollisionType.None) { Name = "__QIPT", Immaterial = true, SeeThrough = true, Thin = true, TrileSet = this.LevelManager.TrileSet, MissingTrixels = (TrixelCluster)null, Id = IdentifierPool.FirstAvailable <Trile>((IDictionary <int, Trile>) this.LevelManager.TrileSet.Triles) }; this.LevelManager.TrileSet.Triles.Add(trile.Id, trile); this.LevelMaterializer.RebuildTrile(trile); } List <int> list2 = new List <int>(); bool flag = (double)this.LevelManager.Size.X > (double)this.LevelManager.Size.Z; float[] numArray = new float[4] { 0.0f, 1.570796f, 3.141593f, 4.712389f }; for (int y = 0; (double)y < (double)this.LevelManager.Size.Y; ++y) { if (flag) { list2.Clear(); list2.AddRange(Enumerable.Range(0, (int)this.LevelManager.Size.Z)); for (int x = 0; (double)x < (double)this.LevelManager.Size.X; ++x) { int z; if (list2.Count > 0) { int index = RandomHelper.Random.Next(0, list2.Count); z = list2[index]; list2.RemoveAt(index); } else { z = RandomHelper.Random.Next(0, (int)this.LevelManager.Size.Z); } this.LevelManager.RestoreTrile(new TrileInstance(new TrileEmplacement(x, y, z), trile.Id) { Phi = numArray[Quantumizer.Random.Next(0, 4)] }); } while (list2.Count > 0) { int index = RandomHelper.Random.Next(0, list2.Count); int z = list2[index]; list2.RemoveAt(index); this.LevelManager.RestoreTrile(new TrileInstance(new TrileEmplacement(RandomHelper.Random.Next(0, (int)this.LevelManager.Size.X), y, z), trile.Id) { Phi = numArray[Quantumizer.Random.Next(0, 4)] }); } } else { list2.Clear(); list2.AddRange(Enumerable.Range(0, (int)this.LevelManager.Size.X)); for (int z = 0; (double)z < (double)this.LevelManager.Size.Z; ++z) { int x; if (list2.Count > 0) { int index = RandomHelper.Random.Next(0, list2.Count); x = list2[index]; list2.RemoveAt(index); } else { x = RandomHelper.Random.Next(0, (int)this.LevelManager.Size.X); } this.LevelManager.RestoreTrile(new TrileInstance(new TrileEmplacement(x, y, z), trile.Id) { Phi = numArray[Quantumizer.Random.Next(0, 4)] }); } while (list2.Count > 0) { int index = RandomHelper.Random.Next(0, list2.Count); int x = list2[index]; list2.RemoveAt(index); this.LevelManager.RestoreTrile(new TrileInstance(new TrileEmplacement(x, y, RandomHelper.Random.Next(0, (int)this.LevelManager.Size.Z)), trile.Id) { Phi = numArray[Quantumizer.Random.Next(0, 4)] }); } } } foreach (TrileInstance trileInstance in (IEnumerable <TrileInstance>) this.LevelManager.Triles.Values) { trileInstance.VisualTrileId = new int?(this.RandomTrileIds[Quantumizer.Random.Next(0, this.RandomTrileIds.Length)]); trileInstance.RefreshTrile(); trileInstance.NeedsRandomCleanup = true; } this.LevelMaterializer.CleanUp(); this.LevelMaterializer.TrileInstanceBatched += new Action <TrileInstance>(this.BatchInstance); }