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