예제 #1
0
        private static IEnumerable <IEntity> GetFilteredEntities(IEntityPool pool, EntityFilterInfo filter)
        {
            var entities = pool.GetAll();

            if (filter.Type != null)
            {
                entities = entities.Where(e => e.Name == filter.Type);
            }

            if (filter.Direction != null)
            {
                entities = entities.Where(e => e.Direction == filter.Direction);
            }

            if (filter.Position != null)
            {
                if (filter.Position.X != null)
                {
                    if (filter.Position.X.Min.HasValue)
                    {
                        entities = entities.Where(e => {
                            var pos = e.GetComponent <PositionComponent>();
                            return(pos == null || pos.X >= filter.Position.X.Min.Value);
                        });
                    }

                    if (filter.Position.X.Max.HasValue)
                    {
                        entities = entities.Where(e => {
                            var pos = e.GetComponent <PositionComponent>();
                            return(pos == null || pos.X <= filter.Position.X.Max.Value);
                        });
                    }
                }

                if (filter.Position.Y != null)
                {
                    if (filter.Position.Y.Min.HasValue)
                    {
                        entities = entities.Where(e => {
                            var pos = e.GetComponent <PositionComponent>();
                            return(pos == null || pos.Y >= filter.Position.Y.Min.Value);
                        });
                    }

                    if (filter.Position.Y.Max.HasValue)
                    {
                        entities = entities.Where(e => {
                            var pos = e.GetComponent <PositionComponent>();
                            return(pos == null || pos.Y <= filter.Position.Y.Max.Value);
                        });
                    }
                }
            }

            return(entities);
        }
예제 #2
0
        private static IEnumerable<IEntity> GetFilteredEntities(IEntityPool pool, EntityFilterInfo filter)
        {
            var entities = pool.GetAll();

            if (filter.Type != null)
                entities = entities.Where(e => e.Name == filter.Type);

            if (filter.Direction != null)
                entities = entities.Where(e => e.Direction == filter.Direction);

            if (filter.Position != null)
            {
                if (filter.Position.X != null)
                {
                    if (filter.Position.X.Min.HasValue)
                        entities = entities.Where(e => {
                            var pos = e.GetComponent<PositionComponent>();
                            return pos == null || pos.X >= filter.Position.X.Min.Value;
                        });

                    if (filter.Position.X.Max.HasValue)
                        entities = entities.Where(e => {
                            var pos = e.GetComponent<PositionComponent>();
                            return pos == null || pos.X <= filter.Position.X.Max.Value;
                        });
                }

                if (filter.Position.Y != null)
                {
                    if (filter.Position.Y.Min.HasValue)
                        entities = entities.Where(e => {
                            var pos = e.GetComponent<PositionComponent>();
                            return pos == null || pos.Y >= filter.Position.Y.Min.Value;
                        });

                    if (filter.Position.Y.Max.HasValue)
                        entities = entities.Where(e => {
                            var pos = e.GetComponent<PositionComponent>();
                            return pos == null || pos.Y <= filter.Position.Y.Max.Value;
                        });
                }
            }

            return entities;
        }
 public IEnumerable <IEntity> GetAll()
 {
     return(_basePool.GetAll());
 }