コード例 #1
0
ファイル: LevelManager.cs プロジェクト: conankzhang/fez
 public void UpdateInstance(TrileInstance instance)
 {
     if (FezMath.Round(instance.LastUpdatePosition) != FezMath.Round(instance.Position))
     {
         TrileEmplacement trileEmplacement = new TrileEmplacement(instance.LastUpdatePosition);
         TrileInstance    trileInstance;
         TrileInstance    instance1;
         if (this.Triles.TryGetValue(trileEmplacement, out trileInstance))
         {
             if (trileInstance == instance)
             {
                 this.Triles.Remove(trileEmplacement);
                 if (instance.Overlaps)
                 {
                     instance1 = instance.PopOverlap();
                     this.AddInstance(trileEmplacement, instance1);
                 }
             }
             else if (trileInstance.Overlaps && trileInstance.OverlappedTriles.Contains(instance))
             {
                 trileInstance.OverlappedTriles.Remove(instance);
             }
         }
         if (this.Triles.TryGetValue(instance.Emplacement, out instance1))
         {
             instance.PushOverlap(instance1);
             this.Triles.Remove(instance.Emplacement);
         }
         this.LevelMaterializer.UpdateInstance(instance);
         this.Triles.Add(instance.Emplacement, instance);
         instance.Update();
         this.LevelMaterializer.UpdateRow(trileEmplacement, instance);
         if (!this.IsInvalidatingScreen)
         {
             this.InvalidateScreenSpaceTile(trileEmplacement);
             this.InvalidateScreenSpaceTile(instance.Emplacement);
         }
     }
     if (instance.InstanceId == -1)
     {
         return;
     }
     this.LevelMaterializer.GetTrileMaterializer(instance.VisualTrile).UpdateInstance(instance);
 }
コード例 #2
0
ファイル: LevelManager.cs プロジェクト: conankzhang/fez
        public bool ClearTrile(TrileInstance instance, bool skipRecull)
        {
            this.LevelMaterializer.RemoveInstance(instance);
            TrileInstance trileInstance1;
            bool          flag1;

            if (this.Triles.TryGetValue(instance.Emplacement, out trileInstance1) && instance != trileInstance1 && trileInstance1.OverlappedTriles != null)
            {
                flag1 = trileInstance1.OverlappedTriles.Remove(instance);
            }
            else
            {
                flag1 = this.Triles.Remove(instance.Emplacement);
                if (flag1 && instance.Overlaps)
                {
                    this.RestoreTrile(instance.PopOverlap());
                }
            }
            if (!flag1)
            {
                foreach (TrileInstance trileInstance2 in (IEnumerable <TrileInstance>) this.Triles.Values)
                {
                    if (trileInstance2.Overlaps && trileInstance2.OverlappedTriles.Contains(instance))
                    {
                        flag1 = trileInstance2.OverlappedTriles.Remove(instance);
                        if (flag1)
                        {
                            break;
                        }
                    }
                }
            }
            if (!flag1)
            {
                foreach (KeyValuePair <TrileEmplacement, TrileInstance> keyValuePair in (IEnumerable <KeyValuePair <TrileEmplacement, TrileInstance> >) this.Triles)
                {
                    if (keyValuePair.Value == instance)
                    {
                        flag1 = this.Triles.Remove(keyValuePair.Key);
                        if (flag1)
                        {
                            break;
                        }
                    }
                }
            }
            bool flag2 = false;

            foreach (TrileGroup trileGroup in (IEnumerable <TrileGroup>) this.Groups.Values)
            {
                flag2 = flag2 | trileGroup.Triles.Remove(instance);
            }
            if (flag2)
            {
                foreach (int key in Enumerable.ToArray <int>((IEnumerable <int>) this.Groups.Keys))
                {
                    if (this.Groups[key].Triles.Count == 0)
                    {
                        this.Groups.Remove(key);
                    }
                }
            }
            if (!skipRecull)
            {
                this.LevelMaterializer.CullInstanceOut(instance, true);
                this.RecullAt(instance);
            }
            instance.Removed = true;
            return(flag1);
        }