/// <summary> /// Adds fences to the farmyard /// </summary> /// <param name="indices"></param> /// <returns></returns> public Farmyard AddFences(int[] indices) { return(new Farmyard(Grid, Pastures, Fences.AddRange(indices), AnimalManager, HouseType)); }
private void InitFences(Fences fence, Vector3Int cellPosition, string tileName) { if (fence) { ScriptableTile xm = tilemap.GetTile <ScriptableTile>(cellPosition + new Vector3Int(-1, 0, 0)); ScriptableTile xp = tilemap.GetTile <ScriptableTile>(cellPosition + new Vector3Int(1, 0, 0)); ScriptableTile zm = tilemap.GetTile <ScriptableTile>(cellPosition + new Vector3Int(0, -1, 0)); ScriptableTile zp = tilemap.GetTile <ScriptableTile>(cellPosition + new Vector3Int(0, 1, 0)); bool xmb = (xm && xm.building && xm.building.name.Contains("Fence")); bool xpb = (xp && xp.building && xp.building.name.Contains("Fence")); bool zmb = (zm && zm.building && zm.building.name.Contains("Fence")); bool zpb = (zp && zp.building && zp.building.name.Contains("Fence")); if (!xmb || !xpb || !zmb || !zpb) { fence.Initialize(xpb, xmb, zmb, zpb, tileName); } else { Destroy(fence.gameObject); } } }
public bool CanFencePasture() { var fenceCount = Fences.Count; if (fenceCount == MAX_FENCES) { return(false); } var fencesLeft = MAX_FENCES - fenceCount; var borderingFences = new FenceInfo[4]; var minFencesRequired = 5; for (var x = 0; x < WIDTH; x++) { for (var y = 0; y < HEIGHT; y++) { var plot = Grid[y * WIDTH + x]; if (plot is Pasture || plot is Empty) { var fencesRequired = 0; var plotData = FenceUtils.GetPlotBorderingFenceData(x, y); if (!Fences.Contains(plotData.NorthFence.Index)) { fencesRequired++; } if (!Fences.Contains(plotData.EastFence.Index)) { fencesRequired++; } if (!Fences.Contains(plotData.SouthFence.Index)) { fencesRequired++; } if (!Fences.Contains(plotData.WestFence.Index)) { fencesRequired++; } if (fencesRequired != 0 && fencesRequired < minFencesRequired) { minFencesRequired = fencesRequired; } } } } // this will only be greater than 4 if there are no valid locations to put a fence at all if (minFencesRequired > 4 || minFencesRequired > fencesLeft) { return(false); } return(true); }
public void LoadMap() { Blocks = new List <Block>(); Ladders = new List <Ladder>(); Doors = new List <Door>(); Nodes = new List <Node>(); if (!KeyCollected) { stars = new List <Star>(); } key = null; Block Block; Ladder Ladder; Toilet Toilet; Star Star; Door Door; Key Key; Block Fence; Node Node; for (int i = 0; i < ActiveMap.Map.GetLength(0); i++) { for (int j = 0; j < ActiveMap.Map.GetLength(1); j++) { switch (ActiveMap.Map[i, j]) { case 0: break; case 1: Block = new Block(new Vector2(j * 50, i * 50)); if (i == 0) { Block.Texture = FloorTexture; } else if (ActiveMap.Map[i - 1, j] != 1) { Block.Texture = FloorTexture; Node = new Node(new Vector2(j * 50, (i - 1) * 50)); Nodes.Add(Node); } else { Block.Texture = WallTexture; } Blocks.Add(Block); break; case 2: Ladder = new Ladder(new Vector2(j * 50, i * 50)) { Texture = LadderTexture }; Ladders.Add(Ladder); Node = new Node(new Vector2(j * 50, i * 50)); Nodes.Add(Node); if (ActiveMap.Map[i - 1, j] == 0) { Node = new Node(new Vector2(j * 50, (i - 1) * 50)); Nodes.Add(Node); } break; case 3: //toilet Toilet = new Toilet(new Vector2(j * 50, i * 50)) { Texture = toiletTexture }; Goal = Toilet; break; case 4: //end break; case 5: //key if (!KeyCollected) { Key = new Key(new Vector2(j * 50, i * 50)) { Texture = keyTexture }; key = Key; } break; case 6: //star if (!KeyCollected) { Star = new Star(new Vector2(j * 50, i * 50)) { Texture = starTexture }; Stars.Add(Star); } break; case 7: //door if (!KeyCollected) { if (ActiveMap.Map[i + 1, j] == 7) { Door = new Door(new Vector2(j * 50, i * 50)) { Texture = doorTextureTop }; } else { Door = new Door(new Vector2(j * 50, i * 50)) { Texture = doorTexture }; } Doors.Add(Door); } break; case 8: Flag = new Flag(new Vector2(j * 50, i * 50)) { Texture = flagTexture }; break; case 9: Fence = new Block(new Vector2(j * 50, i * 50)) { Texture = fenceTexture }; Fences.Add(Fence); break; } } } for (int i = 0; i < Nodes.Count; i++) { Debug.WriteLine(i + ". " + Nodes[i].Position); } for (int i = 0; i < Enemies.Count; i++) { Enemies[i].Texture = EnemyTexture; } }