コード例 #1
0
ファイル: HexMap.cs プロジェクト: ericrrichards/HexGame
        public void Rebuild(GraphicsDevice gd, bool force = false)
        {
            switch (MeshType)
            {
            case MeshType.Smooth:
                Meshes = new List <HexMapMesh> {
                    new HexMapMeshSmooth(gd, Hexes, Texture)
                };
                break;

            case MeshType.Flat:
                if (force)
                {
                    Meshes = new List <HexMapMesh>();
                    for (var xp = 0; xp < Width; xp += PatchSize)
                    {
                        for (var yp = 0; yp < Height; yp += PatchSize)
                        {
                            var patchHexes = new List <Hexagon>();
                            for (var x = xp; x < xp + PatchSize; x++)
                            {
                                for (var y = yp; y < yp + PatchSize; y++)
                                {
                                    var hex = GetHex(x, y);
                                    if (hex != null)
                                    {
                                        patchHexes.Add(hex);
                                    }
                                }
                            }
                            Meshes.Add(new HexMapMeshFlat(gd, patchHexes, Texture));
                        }
                    }
                }
                else
                {
                    foreach (var dirtyPatch in DirtyPatches)
                    {
                        var mesh = Meshes.FirstOrDefault(m => m.PatchID == dirtyPatch);
                        if (mesh == null)
                        {
                            continue;
                        }
                        Meshes.Remove(mesh);
                        Meshes.Add(new HexMapMeshFlat(gd, mesh.Hexes, Texture));
                    }
                }
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            DirtyPatches.Clear();
        }
コード例 #2
0
ファイル: HexMap.cs プロジェクト: ericrrichards/HexGame
        private void RaiseVertex(Vector3 vertex, int dy)
        {
            var comparer      = new Vector3Comparer();
            var affectedHexes = Hexes.Where(h => h.Geometry.Points.Values.Any(v => comparer.Equals(v, vertex)))
                                .Select(h => new {
                hex   = h,
                point = h.Geometry.Points.First(p => comparer.Equals(p.Value, vertex)).Key
            }).ToList();

            if (!affectedHexes.All(h => h.hex.CanRaisePoint(h.point, dy)))
            {
                return;
            }
            foreach (var affectedHex in affectedHexes)
            {
                if (dy > 0)
                {
                    affectedHex.hex.Raise(affectedHex.point);
                }
                else if (dy < 0)
                {
                    affectedHex.hex.Lower(affectedHex.point);
                }
                else
                {
                    return;
                }
            }
            affectedHexes.Select(h => h.hex.PatchID).Distinct().ToList().ForEach(i => DirtyPatches.Add(i));
        }