Example #1
0
        /*********
        ** Public methods
        *********/
        /// <summary>Construct an instance.</summary>
        /// <param name="machineGroup">The machine group to analyze.</param>
        public GroupStats(IMachineGroup machineGroup)
        {
            this.MachineGroup = machineGroup;

            if (machineGroup.IsJunimoGroup)
            {
                this.Name = "Distributed group";
            }
            else
            {
                Vector2 tile = machineGroup.GetTiles(machineGroup.LocationKey).FirstOrDefault();
                this.Name = $"Group at ({tile.X}, {tile.Y})";
            }

            this.IsJunimoGroup = machineGroup.IsJunimoGroup;

            this.Machines = machineGroup.Machines
                            .GroupBy(p => p.MachineTypeID)
                            .Select(p => new GroupMachineStats(p.Key, p))
                            .ToArray();

            this.Containers = machineGroup.Containers
                              .GroupBy(p => p.Name)
                              .Select(p => new GroupContainerStats(p.Key, p))
                              .ToArray();
        }
        /*********
        ** Private methods
        *********/
        /// <summary>Draw borders for each unconnected edge of a tile.</summary>
        /// <param name="spriteBatch">The sprite batch being drawn.</param>
        /// <param name="group">The machine group.</param>
        /// <param name="tile">The group tile.</param>
        /// <param name="color">The border color.</param>
        private void DrawEdgeBorders(SpriteBatch spriteBatch, IMachineGroup group, Vector2 tile, Color color)
        {
            int   borderSize = 3;
            float screenX    = tile.X * Game1.tileSize - Game1.viewport.X;
            float screenY    = tile.Y * Game1.tileSize - Game1.viewport.Y;
            float tileSize   = Game1.tileSize;

            // top
            if (!group.Tiles.Contains(new Vector2(tile.X, tile.Y - 1)))
            {
                spriteBatch.DrawLine(screenX, screenY, new Vector2(tileSize, borderSize), color); // top
            }
            // bottom
            if (!group.Tiles.Contains(new Vector2(tile.X, tile.Y + 1)))
            {
                spriteBatch.DrawLine(screenX, screenY + tileSize, new Vector2(tileSize, borderSize), color); // bottom
            }
            // left
            if (!group.Tiles.Contains(new Vector2(tile.X - 1, tile.Y)))
            {
                spriteBatch.DrawLine(screenX, screenY, new Vector2(borderSize, tileSize), color); // left
            }
            // right
            if (!group.Tiles.Contains(new Vector2(tile.X + 1, tile.Y)))
            {
                spriteBatch.DrawLine(screenX + tileSize, screenY, new Vector2(borderSize, tileSize), color); // right
            }
        }
Example #3
0
        /*********
        ** Public methods
        *********/
        /// <summary>Construct an instance.</summary>
        /// <param name="machineGroup">The machine group to analyze.</param>
        public GroupStats(IMachineGroup machineGroup)
        {
            this.Name = machineGroup.IsJunimoGroup
                ? "Distributed group"
                : $"Group at ({machineGroup.Tiles[0].X}, {machineGroup.Tiles[0].Y})";

            this.IsJunimoGroup = machineGroup.IsJunimoGroup;

            this.Machines = machineGroup.Machines
                            .GroupBy(p => p.MachineTypeID)
                            .Select(p => new GroupMachineStats(p.Key, p))
                            .ToArray();

            this.Containers = machineGroup.Containers
                              .GroupBy(p => p.Name)
                              .Select(p => new GroupContainerStats(p.Key, p))
                              .ToArray();
        }