Exemplo n.º 1
0
        public CleanAreaJob(IJobObserver parent, EnvironmentObject env, IntGrid2Z area)
            : base(parent)
        {
            m_environment = env;
            m_area = area;

            m_map = new Dictionary<IntPoint3, IJob>();

            foreach (var p in m_area.Range())
                m_map[p] = null;

            m_environment.World.TickStarting += World_TickStarting;
        }
Exemplo n.º 2
0
        public void AddConstructJob(ConstructMode mode, IntGrid2Z area, IItemFilter userItemFilter)
        {
            var locations = area.Range().Where(p => m_environment.Contains(p));

            ITerrainFilter filter;
            IItemFilter coreItemFilter;

            switch (mode)
            {
                case ConstructMode.Floor:
                    filter = WorkHelpers.ConstructFloorTerrainFilter;
                    coreItemFilter = WorkHelpers.ConstructFloorItemFilter;
                    break;

                case ConstructMode.Pavement:
                    filter = WorkHelpers.ConstructPavementTerrainFilter;
                    coreItemFilter = WorkHelpers.ConstructPavementItemFilter;
                    break;

                case ConstructMode.Wall:
                    filter = WorkHelpers.ConstructWallTerrainFilter;
                    coreItemFilter = WorkHelpers.ConstructWallItemFilter;
                    break;

                default:
                    throw new Exception();
            }

            IItemFilter itemFilter;

            if (userItemFilter != null)
                itemFilter = new AndItemFilter(coreItemFilter, userItemFilter);
            else
                itemFilter = coreItemFilter;

            locations = locations.Where(p => filter.Match(m_environment.GetTileData(p)));

            foreach (var l in locations)
            {
                var data = new ConstructJobData()
                {
                    Mode = mode,
                    Location = l,
                    ItemFilter = itemFilter,
                };

                m_jobDataList.Add(data);
            }
        }
Exemplo n.º 3
0
        public Map(int width, int height, int depth)
        {
            this.Grid = new AStarMapTile[depth, height, width];

            this.Bounds = new IntGrid3(0, 0, 0, width, height, depth);

            for (int y = 0; y < 350; ++y)
                SetBlocked(new IntVector3(5, y, 0), true);

            for (int y = 2; y < 22; ++y)
                SetBlocked(new IntVector3(14, y, 0), true);

            for (int y = 6; y < 11; ++y)
                SetWeight(new IntVector3(10, y, 0), 40);

            for (int y = 6; y < 18; ++y)
                SetBlocked(new IntVector3(3, y, 1), true);

            for (int y = 6; y < 11; ++y)
                SetWeight(new IntVector3(5, y, 1), 40);

            SetStairs(new IntVector3(10, 10, 0), Stairs.Up);
            SetStairs(new IntVector3(10, 10, 1), Stairs.Down);

            SetStairs(new IntVector3(15, 12, 0), Stairs.Up);
            SetStairs(new IntVector3(15, 12, 1), Stairs.Down);

            var r = new Random(4);
            var bounds = new IntGrid2Z(16, 0, 30, 30, 0);
            foreach (var p in bounds.Range())
            {
                var v = r.Next(100);
                if (v < 30)
                    SetBlocked(p, true);
                else if (v < 60)
                    SetWeight(p, v);
            }
        }
Exemplo n.º 4
0
        bool TestStartArea(EnvironmentObject env, IntGrid2Z r)
        {
            foreach (var p in r.Range())
            {
                var td = env.GetTileData(p);

                if (td.IsWalkable)
                    continue;
                else
                    return false;
            }

            return true;
        }
Exemplo n.º 5
0
        bool TestStartArea(EnvironmentObject env, IntGrid2Z r)
        {
            foreach (var p in r.Range())
            {
                var terrainID = env.GetTerrainID(p);
                var interiorID = env.GetInteriorID(p);

                if (terrainID == TerrainID.NaturalFloor)
                    continue;
                else
                    return false;
            }

            return true;
        }