[squeak-dev] The Inbox: EToys-ct.402.mcz
commits at source.squeak.org
commits at source.squeak.org
Mon Aug 24 18:22:33 UTC 2020
Christoph Thiede uploaded a new version of EToys to project The Inbox:
http://source.squeak.org/inbox/EToys-ct.402.mcz
==================== Summary ====================
Name: EToys-ct.402
Author: ct
Time: 24 August 2020, 8:22:21.479269 pm
UUID: 8b6598bf-158f-a74f-a399-f82c39269bdc
Ancestors: EToys-eem.400
Fixes EToys fences for players within flexshells by subtracting transformations.
=============== Diff against EToys-eem.400 ===============
Item was changed:
----- Method: Player>>forward: (in category 'scripts-standard') -----
forward: dist
"Move forward (viz. in the direction of my heading) by the given amount"
| rho radians delta didStray p aCostume aPlayfield |
(aCostume := self costume) isInWorld ifFalse: [^ self].
aCostume isWorldOrHandMorph ifTrue: [^ self].
aCostume owner isHandMorph ifTrue: [^ self].
+
-
rho := (aCostume asNumber: dist) asFloat.
+ radians := (self getHeadingUnrounded asFloat - 90) degreesToRadians.
- radians := (self getHeadingUnrounded asFloat - 90.0) degreesToRadians.
delta := (radians cos @ radians sin) * rho.
+
+ (aPlayfield := aCostume pasteUpMorph) fenceEnabled ifTrue: [
+ | playfieldBounds costumeBounds |
+ playfieldBounds := aPlayfield boundsInWorld.
+ costumeBounds := aCostume boundsInWorld.
+ (playfieldBounds containsRect: costumeBounds) ifFalse: [
+ "If I stray out of the bounds of my playfield, pull me back, but without changing my heading as bounce would. Do nothing if bounce has already corrected the direction."
-
- (aPlayfield := aCostume pasteUpMorph) fenceEnabled ifTrue:
- [(aPlayfield bounds containsRect: aCostume bounds) ifFalse:
- ["If I stray out of the bounds of my playfield, pull me back, but
- without changing my heading as bounce would. Do nothing if
- bounce has already corrected the direction."
didStray := false.
+ ((costumeBounds left < playfieldBounds left and: [delta x < 0])
+ or: [costumeBounds right > playfieldBounds right and: [delta x > 0]])
+ ifTrue: [
+ delta := delta x negated @ delta y.
+ didStray := true].
+ ((costumeBounds top < playfieldBounds top and: [delta y < 0])
+ or: [costumeBounds bottom > playfieldBounds bottom and: [delta y > 0]])
+ ifTrue: [
+ delta := delta x @ delta y negated.
+ didStray := true].
+ (didStray and: [Preferences fenceSoundEnabled]) ifTrue: [
+ aCostume makeFenceSound]]].
+
- ((aCostume left < aPlayfield left and: [delta x < 0]) or:
- [aCostume right > aPlayfield right and: [delta x > 0]]) ifTrue:
- [delta := delta x negated @ delta y.
- didStray := true].
- ((aCostume top < aPlayfield top and: [delta y < 0]) or:
- [aCostume bottom > aPlayfield bottom and: [delta y > 0]]) ifTrue:
- [delta := delta x @ delta y negated.
- didStray := true].
- (didStray and: [Preferences fenceSoundEnabled]) ifTrue: [aCostume makeFenceSound]]].
-
"use and record the fractional position"
p := aCostume referencePosition + delta.
+ aCostume referencePosition: p.!
- aCostume referencePosition: p!
More information about the Squeak-dev
mailing list
|