public void ResetDynamicObjectsState() { foreach (var dynamicObject in ObjectsCollection.OfType <IDynamicObject>()) { dynamicObject.Updated = false; } }
public IDestroyableObject GetBiggestDestroyable() { var destroyable = ObjectsCollection.OfType <IDestroyableObject>().ToArray(); var bigDestroyable = destroyable.FirstOrDefault(obj => obj.BlocksMovement); if (bigDestroyable != null) { return(bigDestroyable); } return(destroyable.LastOrDefault()); }
private void ProcessDynamicObjects(Point position, UpdateOrder updateOrder) { var dynamicObjects = ObjectsCollection.OfType <IDynamicObject>() .Where(obj => !obj.Updated && obj.UpdateOrder == updateOrder).ToArray(); foreach (var dynamicObject in dynamicObjects) { dynamicObject.Update(position); dynamicObject.Updated = true; } }
private void ProcessDestroyableObjects(IAreaMap map, Point position) { var destroyableObjects = ObjectsCollection.OfType <IDestroyableObject>().ToArray(); ProcessStatusesAndEnvironment(destroyableObjects, position); var deadObjects = destroyableObjects.Where(obj => obj.Health <= 0).ToArray(); foreach (var deadObject in deadObjects) { map.RemoveObject(position, deadObject); deadObject.OnDeath(position); } }
private void CheckSpreadingObjects(IAreaMapCellInternal other) { var localSpreadingObjects = ObjectsCollection.OfType <ISpreadingObject>().ToArray(); var otherSpreadingObjects = other.ObjectsCollection.OfType <ISpreadingObject>().ToArray(); foreach (var spreadingObject in localSpreadingObjects) { if (spreadingObject.Volume >= spreadingObject.MaxVolumeBeforeSpread) { SpreadObject(spreadingObject, other); } } foreach (var otherSpreadingObject in otherSpreadingObjects) { if (otherSpreadingObject.Volume >= otherSpreadingObject.MaxVolumeBeforeSpread) { SpreadObject(otherSpreadingObject, this); } } }