kopia lustrzana https://github.com/backface/turtlestitch
caching raycasting raw data
rodzic
f3029be0dc
commit
816186f17d
|
@ -2104,12 +2104,19 @@ SpriteMorph.prototype.getImageData = function () {
|
||||||
).data;
|
).data;
|
||||||
this.imageData = {
|
this.imageData = {
|
||||||
version : this.version,
|
version : this.version,
|
||||||
pixels : new Uint32Array(imageData.buffer.slice(0))
|
pixels : new Uint32Array(imageData.buffer.slice(0)),
|
||||||
|
full : imageData // +++ get rid of this
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return this.imageData.pixels;
|
return this.imageData.pixels;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SpriteMorph.prototype.getFullImageData = function () {
|
||||||
|
// temporary hack for raycasting. // +++
|
||||||
|
this.getImageData();
|
||||||
|
return this.imageData.full;
|
||||||
|
};
|
||||||
|
|
||||||
SpriteMorph.prototype.projectionSnap = function() {
|
SpriteMorph.prototype.projectionSnap = function() {
|
||||||
var stage = this.parentThatIsA(StageMorph),
|
var stage = this.parentThatIsA(StageMorph),
|
||||||
center = this.center().subtract(stage.position())
|
center = this.center().subtract(stage.position())
|
||||||
|
|
|
@ -4907,11 +4907,18 @@ Process.prototype.reportDistanceFacing = function (name) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// convert intersections to local bitmap coordinates of the target
|
// convert intersections to local bitmap coordinates of the target
|
||||||
|
/*
|
||||||
intersections = intersections.map(point =>
|
intersections = intersections.map(point =>
|
||||||
point.subtract(targetBounds.origin).floor()
|
point.subtract(targetBounds.origin).floor()
|
||||||
);
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
|
intersections = intersections.map(point =>
|
||||||
|
point.subtract(targetBounds.origin).floorDivideBy(stage.scale) // +++
|
||||||
|
);
|
||||||
|
|
||||||
// get image data
|
// get image data
|
||||||
|
/*
|
||||||
canvas = thatObj.getImage();
|
canvas = thatObj.getImage();
|
||||||
if (canvas.isRetinaEnabled) { // for the "turtle" costume
|
if (canvas.isRetinaEnabled) { // for the "turtle" costume
|
||||||
canvas = normalizeCanvas(canvas, true); // copy it
|
canvas = normalizeCanvas(canvas, true); // copy it
|
||||||
|
@ -4923,6 +4930,10 @@ Process.prototype.reportDistanceFacing = function (name) {
|
||||||
width,
|
width,
|
||||||
canvas.height
|
canvas.height
|
||||||
).data;
|
).data;
|
||||||
|
*/
|
||||||
|
|
||||||
|
width = Math.floor(targetBounds.width() / stage.scale); // +++
|
||||||
|
imageData = thatObj.getFullImageData(); // +++
|
||||||
|
|
||||||
// scan the ray along the coordinates of a Bresenham line
|
// scan the ray along the coordinates of a Bresenham line
|
||||||
// for the first opaque pixel
|
// for the first opaque pixel
|
||||||
|
@ -4946,7 +4957,7 @@ Process.prototype.reportDistanceFacing = function (name) {
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (testFunc(x0, y0)) {
|
if (testFunc(x0, y0)) {
|
||||||
return new Point(x0, y0);
|
return new Point(x0 * stage.scale, y0 * stage.scale); // +++
|
||||||
}
|
}
|
||||||
if (x0 === x1 && y0 === y1) {
|
if (x0 === x1 && y0 === y1) {
|
||||||
return -1; // not found
|
return -1; // not found
|
||||||
|
|
Ładowanie…
Reference in New Issue