Exemplo n.º 1
0
 public void ResetDynamicObjectsState()
 {
     foreach (var dynamicObject in ObjectsCollection.OfType <IDynamicObject>())
     {
         dynamicObject.Updated = false;
     }
 }
Exemplo n.º 2
0
        public IDestroyableObject GetBiggestDestroyable()
        {
            var destroyable    = ObjectsCollection.OfType <IDestroyableObject>().ToArray();
            var bigDestroyable = destroyable.FirstOrDefault(obj => obj.BlocksMovement);

            if (bigDestroyable != null)
            {
                return(bigDestroyable);
            }
            return(destroyable.LastOrDefault());
        }
Exemplo n.º 3
0
        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;
            }
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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);
                }
            }
        }