GetSurfaceLocation() public method

public GetSurfaceLocation ( IntVector2 p ) : IntVector3
p IntVector2
return IntVector3
        AI.Group CreateHerd(int numAnimals, LivingID livingID)
        {
            var world = m_env.World;

            var group = new AI.Group();

            var center = m_env.GetRandomEnterableSurfaceLocation();

            using (var iter = IntVector2.SquareSpiral(center.ToIntVector2(), 20).GetEnumerator())
            {
                for (int i = 0; i < numAnimals; ++i)
                {
                    bool ok = true;

                    while (true)
                    {
                        if (iter.MoveNext() == false)
                        {
                            ok = false;
                            break;
                        }

                        var p2 = iter.Current;

                        if (m_env.Size.Plane.Contains(p2) == false)
                        {
                            continue;
                        }

                        var p = m_env.GetSurfaceLocation(p2);

                        if (m_env.CanEnter(p) == false)
                        {
                            continue;
                        }

                        var livingBuilder = new LivingObjectBuilder(livingID);

                        var living = livingBuilder.Create(world);
                        var ai     = new Dwarrowdelf.AI.HerbivoreAI(living, world.PlayerID);
                        ai.Group = group;
                        living.SetAI(ai);
                        living.MoveToMustSucceed(m_env, p);

                        break;
                    }

                    if (!ok)
                    {
                        break;
                    }
                }
            }

            return(group);
        }
        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);
        }
        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;
        }
        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);
        }
Example #5
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;
        }
		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));
			}
		}