Skip to content

Instantly share code, notes, and snippets.

@emeeks
Last active May 8, 2017 10:15
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save emeeks/3d6e7b24d31533abd84f to your computer and use it in GitHub Desktop.
Save emeeks/3d6e7b24d31533abd84f to your computer and use it in GitHub Desktop.
Fog of War II

A simple implementation of fog of war using a grid (built from a voronoi diagram using a grid of data). Mouseover the darkened region to reveal the data (or lack of data) underneath.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Fog of War with Grid</title>
<style>
</style>
</head>
<body>
<svg width="500" height="500" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.16/d3.min.js" charset="utf-8" type="text/javascript"></script>
<script type="text/javascript">
vertices = [[162, 332], [182, 299], [141, 292], [158, 264], [141, 408], [160, 400], [177, 430], [151, 442], [155, 425], [134, 430], [126, 447], [139, 466], [160, 471], [167, 447], [182, 466], [192, 442], [187, 413], [173, 403], [168, 425], [153, 413], [179, 275], [163, 292], [134, 270], [143, 315], [177, 320], [163, 311], [162, 281], [182, 255], [141, 226], [156, 235], [173, 207], [187, 230], [204, 194], [165, 189], [145, 201], [158, 167], [190, 165], [206, 145], [179, 153], [204, 114], [221, 138], [243, 112], [248, 139], [177, 122], [179, 99], [196, 82], [219, 90], [240, 75], [218, 61], [228, 53], [211, 34], [197, 51], [179, 65], [155, 70], [165, 85], [134, 80], [124, 58], [153, 44], [173, 34], [192, 27], [156, 19], [119, 32], [128, 17], [138, 36], [100, 58], [112, 73], [100, 92], [78, 100], [83, 78], [61, 63], [80, 44], [100, 26], [60, 39], [43, 71], [34, 54], [32, 90], [53, 104], [60, 82], [66, 99], [247, 94], [187, 180], [221, 168]];
voronoi = d3.geom.voronoi()
.x(function (d) {return d[0]})
.y(function (d) {return d[1]})
.clipExtent([[0,0],[500,500]])
basemap = [];
d3.range(20).forEach(function (d) {
d3.range(20).forEach(function (p) {
basemap.push([d * 25, p * 25])
})
})
d3.select("svg").selectAll("circle")
.data(vertices)
.enter()
.append("circle")
.attr("cx", function (d) {return d[0]})
.attr("cy", function (d) {return d[1]})
.style("fill", "#001276")
.attr("r", 2);
d3.select("svg").selectAll("path")
.data(voronoi(basemap))
.enter()
.append("path")
.attr("d", function (d) {return "M" + d.join("L") + "Z"; })
.style("fill", "#001276")
.style("stroke", "#001276")
.on("mouseover", defog)
function defog(d) {
d3.select(this)
.transition()
.duration(1000)
.style("opacity", 0)
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment