69 lines
1.4 KiB
JavaScript
69 lines
1.4 KiB
JavaScript
|
d3.timer(pacman)
|
||
|
var a = 0
|
||
|
|
||
|
var p = {x: 0, y: 0}
|
||
|
var pm = vis.append("path")
|
||
|
.style("fill", "#ff0")
|
||
|
.style("stroke", "#000")
|
||
|
.style("stroke-width", 2.5)
|
||
|
.style("stroke-linejoin", "round")
|
||
|
|
||
|
function pacman() {
|
||
|
var size = force.size()
|
||
|
var nodes = force.nodes()
|
||
|
var n = nodes.length
|
||
|
if (n == 0)
|
||
|
return
|
||
|
|
||
|
a = (a + 0.10)%2
|
||
|
|
||
|
pm.attr("d", d3.svg.arc().innerRadius(0)
|
||
|
.outerRadius(24).endAngle(-angle(a) + Math.PI/2 + 2*Math.PI).startAngle(angle(a) + Math.PI/2))
|
||
|
|
||
|
var closest = null
|
||
|
var dd = Infinity;
|
||
|
for (i = 0; i < n; i++) {
|
||
|
var o = nodes[i]
|
||
|
|
||
|
var d = Math.pow((o.x - p.x),2) + Math.pow( o.y - p.y, 2)
|
||
|
if (d < dd) {
|
||
|
dd = d
|
||
|
closest = o
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var dx = closest.x - p.x
|
||
|
var dy = closest.y - p.y
|
||
|
|
||
|
var d = Math.sqrt(Math.pow(dx,2) + Math.pow(dy,2))
|
||
|
|
||
|
dx = dx/d
|
||
|
dy = dy/d
|
||
|
|
||
|
if (d>1) {
|
||
|
|
||
|
p.x += dx
|
||
|
p.y += dy
|
||
|
} else {
|
||
|
var snd;
|
||
|
if (closest.flags.client) {
|
||
|
snd = new Audio("pacman_eatfruit.wav")
|
||
|
} else {
|
||
|
snd = new Audio("pacman_eatghost.wav")
|
||
|
}
|
||
|
snd.play()
|
||
|
|
||
|
data.nodes = data.nodes.filter(function (d) {
|
||
|
return d.id != closest.id
|
||
|
})
|
||
|
|
||
|
data.links = data.links.filter(function (d) {
|
||
|
return d.target.id != closest.id && d.source.id != closest.id
|
||
|
})
|
||
|
update()
|
||
|
}
|
||
|
|
||
|
pm.attr("transform", "matrix(" + [dx, dy, -dy, dx, p.x, p.y].join(",") + ")")
|
||
|
}
|
||
|
|