public void Dispose() { if (Disposed) { return; } Layer?.Remove(this, false); Disposed = true; // Remove this from parents if (ParentObjects != null) { foreach (var relevantObject in ParentObjects) { relevantObject.ChildObjects.Remove(this); } } // Return if there are no children if (ChildObjects == null) { return; } // Kill all children var objectsToDispose = ChildObjects.ToArray(); foreach (var t in objectsToDispose) { t.Dispose(); } }
private void CycleQueue() { foreach (var screenObject in ChildObjects.ToArray()) { screenObject.AutoMove(); RemoveObjectIfOffscreen(screenObject); } AddOffscreenObjectToOnscreen(); }
private void LoadElements(XElement element, int parentTriggerIndex) { foreach (XElement subElement in element.Elements()) { switch (subElement.Name.ToString().ToLowerInvariant()) { case "sprite": Sprites.Add(new Sprite(subElement, lazyLoad: true)); break; case "specularsprite": SpecularSprites.Add(new Sprite(subElement, lazyLoad: true)); break; case "deformablesprite": DeformableSprite = new DeformableSprite(subElement, lazyLoad: true); break; case "overridecommonness": string levelType = subElement.GetAttributeString("leveltype", ""); if (!OverrideCommonness.ContainsKey(levelType)) { OverrideCommonness.Add(levelType, subElement.GetAttributeFloat("commonness", 1.0f)); } break; case "leveltrigger": case "trigger": OverrideProperties.Add(null); LevelTriggerElements.Add(subElement); LoadElements(subElement, LevelTriggerElements.Count - 1); break; case "childobject": ChildObjects.Add(new ChildObject(subElement)); break; case "overrideproperties": var propertyOverride = new LevelObjectPrefab(subElement); OverrideProperties[OverrideProperties.Count - 1] = propertyOverride; if (!propertyOverride.Sprites.Any() && propertyOverride.DeformableSprite == null) { propertyOverride.Sprites = Sprites; propertyOverride.DeformableSprite = DeformableSprite; } break; case "body": case "physicsbody": PhysicsBodyElement = subElement; PhysicsBodyTriggerIndex = parentTriggerIndex; break; } } }
private void RemoveObjectIfOffscreen(GameObject gameObject) { if (!ObjectPastEndOfQueue(gameObject)) { return; } ChildObjects.Remove(gameObject); _offScreenObjects.Add(new OffscreenQueueObject { DistanceToWait = GenerateDistance(), Object = gameObject }); }
/// <summary> /// Removes an image from our overlay list /// </summary> private void Menu_Remove(object sender, EventArgs e) { if (SelectedOverlay == null) { return; } string msg = "Are you sure you want to remove " + SelectedOverlay.Name + "?"; if (MessageBox.Show(msg, "Remove image", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes) { return; } // Remove the image ChildObjects.Remove(SelectedOverlay); SelectedOverlay.Dispose(); SelectedOverlay = null; }
private void AddOffscreenObjectToOnscreen() { var offscreenObjectToAdd = _offScreenObjects.FirstOrDefault(); if (offscreenObjectToAdd == null) { return; } var distanceToLastObject = GetDistanceToLastObject(); if (distanceToLastObject < offscreenObjectToAdd.DistanceToWait) { return; } _offScreenObjects.Remove(offscreenObjectToAdd); offscreenObjectToAdd.Object.ChangeSpawnPosition(Position); offscreenObjectToAdd.Object.Respawn(); ChildObjects.Add(offscreenObjectToAdd.Object); }
public void AddChild(IEntity entity) { ChildObjects.Add(entity); entity.Parent = this; entity.Path = Path + entity.DirectoryName; }
private void CreateQueueObject(ChildObjectCreateMethod factoryMethod, int xPos) { var newObject = factoryMethod(new Position(xPos, Position.YPos)); ChildObjects.Add(newObject); }
protected override int GetDistanceToLastObject() { var lastxpos = ChildObjects.Min(m => m.Position.XPos); return((int)(lastxpos - Position.XPos)); }