Improve edge-collision detection of default sprite “arrow” shape

pull/3/merge
jmoenig 2014-12-03 12:48:31 +01:00
rodzic d94d9ff4e8
commit 17b6ae839b
3 zmienionych plików z 21 dodań i 7 usunięć

Wyświetl plik

@ -2372,3 +2372,8 @@ ______
141202
------
* New Kannada translation. Yay!! Thanks, Vinayakumar R!!
141203
------
* Morphic: Cache actual bounding box of the Pen arrow shape
* Threads, Objects: Improve edge-collision detection of default sprite “arrow” shape

Wyświetl plik

@ -125,7 +125,7 @@ PrototypeHatBlockMorph*/
// Global stuff ////////////////////////////////////////////////////////
modules.objects = '2014-December-01';
modules.objects = '2014-December-03';
var SpriteMorph;
var StageMorph;
@ -3238,8 +3238,11 @@ SpriteMorph.prototype.setCenter = function (aPoint, justMe) {
SpriteMorph.prototype.nestingBounds = function () {
// same as fullBounds(), except that it uses "parts" instead of children
var result;
result = this.bounds;
// and special cases the costume-less "arrow" shape's bounding box
var result = this.bounds;
if (!this.costume && this.penBounds) {
result = this.penBounds.translateBy(this.position());
}
this.parts.forEach(function (part) {
if (part.isVisible) {
result = result.merge(part.nestingBounds());

Wyświetl plik

@ -83,7 +83,7 @@ ArgLabelMorph, localize, XML_Element, hex_sha512*/
// Global stuff ////////////////////////////////////////////////////////
modules.threads = '2014-November-26';
modules.threads = '2014-December-03';
var ThreadManager;
var Process;
@ -2368,6 +2368,7 @@ Process.prototype.objectTouchingObject = function (thisObj, name) {
var myself = this,
those,
stage,
box,
mouse;
if (this.inputOption(name) === 'mouse-pointer') {
@ -2379,9 +2380,14 @@ Process.prototype.objectTouchingObject = function (thisObj, name) {
} else {
stage = thisObj.parentThatIsA(StageMorph);
if (stage) {
if (this.inputOption(name) === 'edge' &&
!stage.bounds.containsRectangle(thisObj.bounds)) {
return true;
if (this.inputOption(name) === 'edge') {
box = thisObj.bounds;
if (!thisObj.costume && thisObj.penBounds) {
box = thisObj.penBounds.translateBy(thisObj.position());
}
if (!stage.bounds.containsRectangle(box)) {
return true;
}
}
if (this.inputOption(name) === 'pen trails' &&
thisObj.isTouching(stage.penTrailsMorph())) {