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();
 }
Exemple #3
0
        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);
        }