Exemple #1
0
 /// <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));
 }
Exemple #2
0
    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);
            }
        }
    }
Exemple #3
0
        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;
            }
        }