/********* ** 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; IReadOnlySet <Vector2> tiles = group.GetTiles(this.LocationKey); // top if (!tiles.Contains(new Vector2(tile.X, tile.Y - 1))) { spriteBatch.DrawLine(screenX, screenY, new Vector2(tileSize, borderSize), color); // top } // bottom if (!tiles.Contains(new Vector2(tile.X, tile.Y + 1))) { spriteBatch.DrawLine(screenX, screenY + tileSize, new Vector2(tileSize, borderSize), color); // bottom } // left if (!tiles.Contains(new Vector2(tile.X - 1, tile.Y))) { spriteBatch.DrawLine(screenX, screenY, new Vector2(borderSize, tileSize), color); // left } // right if (!tiles.Contains(new Vector2(tile.X + 1, tile.Y))) { spriteBatch.DrawLine(screenX + tileSize, screenY, new Vector2(borderSize, tileSize), color); // right } }