Exemplo n.º 1
0
        public static void FinalizeEnv(EnvironmentObject env)
        {
            // Add gems to random locs
            for (int i = 0; i < 6; ++i)
            {
                CreateItem(env, ItemID.Gem, GetRandomMaterial(MaterialCategory.Gem), env.GetRandomEnterableSurfaceLocation());
            }

            // Add rocks to random locs
            for (int i = 0; i < 6; ++i)
            {
                CreateItem(env, ItemID.Rock, GetRandomMaterial(MaterialCategory.Rock), env.GetRandomEnterableSurfaceLocation());
            }

            CreateWorkbenches(env);

            CreateStartItems(env);
            CreateDebugItems(env);

            {
                var gen = FoodGenerator.Create(env.World);
                gen.MoveToMustSucceed(env, env.GetSurfaceLocation(env.Width / 2 - 2, env.Height / 2 - 2));
            }

            AddMonsters(env);
        }
Exemplo n.º 2
0
        static IntVector3? GetLocNearEntry(EnvironmentObject env)
        {
            foreach (var p in IntVector2.SquareSpiral(env.StartLocation.ToIntVector2(), env.Width / 2))
            {
                if (env.Size.Plane.Contains(p) == false)
                    continue;

                var p3 = env.GetSurfaceLocation(p);

                if (env.CanEnter(p3))
                    return p3;
            }

            return null;
        }
Exemplo n.º 3
0
        private static void CreateStartItems(EnvironmentObject env)
        {
            var p = env.GetSurfaceLocation(env.Width / 2 - 1, env.Height / 2 - 4);

            ClearFloor(env, p);

            CreateItem(env, ItemID.Log, GetRandomMaterial(MaterialCategory.Wood), p);
            CreateItem(env, ItemID.Log, GetRandomMaterial(MaterialCategory.Wood), p);
            CreateItem(env, ItemID.Log, GetRandomMaterial(MaterialCategory.Wood), p);

            CreateItem(env, ItemID.Bar, GetRandomMaterial(MaterialCategory.Metal), p);
            CreateItem(env, ItemID.Bar, GetRandomMaterial(MaterialCategory.Metal), p);
            CreateItem(env, ItemID.Bar, GetRandomMaterial(MaterialCategory.Metal), p);

            CreateItem(env, ItemID.CarpentersWorkbench, GetRandomMaterial(MaterialCategory.Wood), p);
            CreateItem(env, ItemID.MasonsWorkbench, GetRandomMaterial(MaterialCategory.Wood), p);
        }
Exemplo n.º 4
0
        private static void CreateDebugItems(EnvironmentObject env)
        {
            var p = env.GetSurfaceLocation(env.Width / 2 - 1, env.Height / 2 - 2);

            ClearFloor(env, p);

            CreateItem(env, ItemID.Ore, MaterialID.Tin, p);
            CreateItem(env, ItemID.Ore, MaterialID.Tin, p);
            CreateItem(env, ItemID.Ore, MaterialID.Lead, p);
            CreateItem(env, ItemID.Ore, MaterialID.Lead, p);
            CreateItem(env, ItemID.Ore, MaterialID.Iron, p);
            CreateItem(env, ItemID.Ore, MaterialID.Iron, p);

            CreateItem(env, ItemID.Door, GetRandomMaterial(MaterialCategory.Wood), p);
            CreateItem(env, ItemID.Door, GetRandomMaterial(MaterialCategory.Wood), p);
            CreateItem(env, ItemID.Table, GetRandomMaterial(MaterialCategory.Wood), p);
            CreateItem(env, ItemID.Bed, GetRandomMaterial(MaterialCategory.Wood), p);
            CreateItem(env, ItemID.Chair, GetRandomMaterial(MaterialCategory.Wood), p);

            CreateItem(env, ItemID.Barrel, GetRandomMaterial(MaterialCategory.Wood), p);
            CreateItem(env, ItemID.Bin, GetRandomMaterial(MaterialCategory.Wood), p);

            CreateItem(env, ItemID.Block, GetRandomMaterial(MaterialCategory.Rock), p);
            CreateItem(env, ItemID.Block, GetRandomMaterial(MaterialCategory.Rock), p);
            CreateItem(env, ItemID.Block, GetRandomMaterial(MaterialCategory.Rock), p);
            CreateItem(env, ItemID.Block, GetRandomMaterial(MaterialCategory.Rock), p);
            CreateItem(env, ItemID.Block, GetRandomMaterial(MaterialCategory.Rock), p);

            CreateItem(env, ItemID.UncutGem, GetRandomMaterial(MaterialCategory.Gem), p);
            CreateItem(env, ItemID.UncutGem, GetRandomMaterial(MaterialCategory.Gem), p);
            CreateItem(env, ItemID.UncutGem, GetRandomMaterial(MaterialCategory.Gem), p);

            CreateItem(env, ItemID.Rock, GetRandomMaterial(MaterialCategory.Rock), p);
            CreateItem(env, ItemID.Rock, GetRandomMaterial(MaterialCategory.Rock), p);
            CreateItem(env, ItemID.Rock, GetRandomMaterial(MaterialCategory.Rock), p);

            p = p + new IntVector3(8, 0, 0);

            ClearFloor(env, p);

            var bed = CreateItem(env, ItemID.Bed, GetRandomMaterial(MaterialCategory.Wood), p);

            bed.IsInstalled = true;
        }
Exemplo n.º 5
0
        static IntVector3?GetLocNearEntry(EnvironmentObject env)
        {
            foreach (var p in IntVector2.SquareSpiral(env.StartLocation.ToIntVector2(), env.Width / 2))
            {
                if (env.Size.Plane.Contains(p) == false)
                {
                    continue;
                }

                var p3 = env.GetSurfaceLocation(p);

                if (env.CanEnter(p3))
                {
                    return(p3);
                }
            }

            return(null);
        }
Exemplo n.º 6
0
        static void CreateWaterTest(EnvironmentObject env)
        {
            var pos = env.GetSurfaceLocation(env.Width / 2 + 10, env.Height / 2 - 10);

            int surface = pos.Z;

            CreateWalls(env, new IntGrid2Z(pos.X, pos.Y, 5, 8, surface));
            CreateWater(env, new IntGrid2Z(pos.X + 1, pos.Y + 1, 3, 6, surface));
            CreateWalls(env, new IntGrid2Z(pos.X + 2, pos.Y + 2, 1, 4, surface));

            if (true)
            {
                int x = pos.X + 1;
                int y = pos.Y + 1;

                ClearTile(env, new IntVector3(x, y, surface - 0));
                ClearTile(env, new IntVector3(x, y, surface - 1));
                ClearTile(env, new IntVector3(x, y, surface - 2));
                ClearTile(env, new IntVector3(x, y, surface - 3));
                ClearTile(env, new IntVector3(x, y, surface - 4));
                ClearTile(env, new IntVector3(x + 0, y, surface - 5));
                ClearTile(env, new IntVector3(x + 1, y, surface - 5));
                ClearTile(env, new IntVector3(x + 2, y, surface - 5));
                ClearTile(env, new IntVector3(x + 3, y, surface - 5));
                ClearTile(env, new IntVector3(x + 4, y, surface - 5));
                ClearTile(env, new IntVector3(x + 4, y, surface - 4));
                ClearTile(env, new IntVector3(x + 4, y, surface - 3));
                ClearTile(env, new IntVector3(x + 4, y, surface - 2));
                ClearTile(env, new IntVector3(x + 4, y, surface - 1));
                ClearTile(env, new IntVector3(x + 4, y, surface - 0));
            }

            if (true)
            {
                // Add a water generator
                var item = WaterGenerator.Create(env.World);
                item.MoveToMustSucceed(env, new IntVector3(pos.X + 1, pos.Y + 2, surface));
            }
        }
Exemplo n.º 7
0
        Player CreatePlayer(int playerNum, EnvironmentObject env)
        {
            const int NUM_DWARVES = 7;

            var player = new FortressPlayer(2 + playerNum, this, env);

            IntVector3 pos;

            switch (playerNum)
            {
            case 0:
                pos = env.StartLocation;
                break;

            case 1:
                pos = env.GetSurfaceLocation(env.Width / 4, env.Height / 4);
                break;

            case 2:
                pos = env.GetSurfaceLocation(env.Width / 4 * 3, env.Height / 4 * 3);
                break;

            default:
                throw new Exception();
            }

            var startRect = FindStartLocation(env, pos);

            if (!startRect.HasValue)
            {
                throw new Exception();
            }

            player.EnvObserver.Add(startRect.Value);

            var startLocs = startRect.Value.Range().ToArray();

            // clear trees
            foreach (var p in startLocs)
            {
                var td = env.GetTileData(p);
                if (td.HasTree)
                {
                    td.ID         = TileID.Grass;
                    td.MaterialID = MaterialID.RyeGrass;
                    env.SetTileData(p, td);
                }
            }

            var list = new List <LivingObject>();

            for (int i = 0; i < NUM_DWARVES; ++i)
            {
                var p = startLocs[Helpers.GetRandomInt(startLocs.Length - 1)];

                var l = CreateDwarf(i);

                l.SetAI(new DwarfAI(l, player.EnvObserver, this.World.PlayerID));

                l.MoveToMustSucceed(env, p);

                list.Add(l);
            }

            player.AddControllables(list);

            return(player);
        }