private void DrawPort(Graphics gfx, HexEdge edge, Port port) { var linePoints = HexEdgeToAbsolutePoints(edge); if (linePoints != null) { Color c = port.Resource == ResourceTypes.None ? Color.Black : ResourceColorMap[port.Resource]; Brush hb = new HatchBrush(HatchStyle.Wave, c, BoardColors.Water); Pen p = new Pen(c, 2f); Pen bp = new Pen(Color.Black, 1f); var box = linePoints.GetBoundingBox(); gfx.DrawEllipse(bp, box.OffsetSize(2, 2)); gfx.DrawEllipse(p, box); gfx.FillEllipse(hb, box); bp.Dispose(); hb.Dispose(); p.Dispose(); } }
private void SetupPorts() { _ports.Clear(); // There are 4 three-to-one ports, and one two-to-one for each resource type. // Sort the water edges into a ring, so we can walk around the outside var waterRing = new List<HexEdge>(); var remainingWaterEdges = new List<HexEdge>(_borderEdges); waterRing.Add(remainingWaterEdges.RemoveRandom()); while (remainingWaterEdges.Count > 0) { var currentEdge = waterRing.Last(); var nextEdge = remainingWaterEdges.First(e => e.IsTouching(currentEdge)); remainingWaterEdges.Remove(nextEdge); waterRing.Add(nextEdge); } var portsToAdd = new List<ResourceTypes>(); portsToAdd.Add(ResourceTypes.None, 4); portsToAdd.Add(ResourceTypes.Brick); portsToAdd.Add(ResourceTypes.Ore); portsToAdd.Add(ResourceTypes.Sheep); portsToAdd.Add(ResourceTypes.Wheat); portsToAdd.Add(ResourceTypes.Wood); int ringIndex = 0; for (int i = 0; portsToAdd.Any(); i++) { var resource = portsToAdd.RemoveRandom(); _ports[waterRing[ringIndex]] = new Port(resource); // Every third add, skip 4 edges instead of 3. ringIndex += (i % 3 == 0) ? 4 : 3; } }