On Nov 13, 2006, at 10:18 AM, Offray Vladimir Luna Cárdenas wrote:
Hi Scott :),
Thanks for your help again. What you're providing me is pretty close to what me and my students are looking for. Because my lack of knowledge of the Smalltalk code I'm trying to understand the textual script. I see that in that script, there is not switch from tile mode to code/text mode, only the last one is enabled. There is some special way to add this scripts? If I try, for example to use the visor of a Star I always can switch from tile to code modes, but coming back to tile, always makes the changes in text mode to get loosed (not saved).
Hi, Offray!
Once you have typed in textual code for a script, you cannot return to tile mode without losing the textual code you typed. There is no automatic translation from user-entered textual code back into etoy tiles. Indeed, the constructs supported by etoy tiles represent but a tiny fraction of what can be expressed in textual Smalltalk code.
Some people are quite disappointed, and even offended, when they first learn this brutal fact. But "etoys" is a tile-scripting system, with severe and intentional limits to vocabulary, sentence structure, expression structure, and control structures. The textual- scripting alternative provides nothing more than a "keyhole" which allows some people to "escape" from tiles, into textual Smalltalk programming, specifically to program things that cannot be expressed with tiles.
Because reverting from a textually-entered script back to tiles is destructive, the user is presented with a warning if he tries to do it -- a stern warning that any code he has manually entered via the keyboard for this script will be lost.
The reason why this warning was not presented when you tried to click the text/tiles checkbox of the #chooseMessageTarget script to revert to tiles is because of a bug that appears when you attempt to toggle a textually-coded script which has never had any non-empty tile code. (I have a fix for that bug, which I'm about to publish to the Squeakland alpha update stream.)
However, even if had been allowed, you would not have wanted to revert that script to its last-known tile form, because in so doing you would have lost the textual code which is the whole point of the script.
chooseMessageTarget "the name of the script"
"Choose a player as target for a message" "<- comment with the explanation" | aMorph | "<- some kind of local variable" aMorph := self costume chooseClickTarget. "<- this part changes the mouse pointer of the world from arrow to cross-hair"
"The following part gives a message to self to set message target, if a not nil morph is chosen then the selected morph is assigned to aMorph variable, if is Nil, I'm not pretty sure what's happening"
self setMessageTarget: (aMorph ifNil: [ActiveWorld presenter standardPlayer] ifNotNil: [aMorph assuredPlayer])
I'm seeing that the world is "holding its breath" until a morph is chosen, and everything stops for a while until the target of the message has been choose. I image that this is related with the code "ifNil: [ActiveWorld presenter standardPlayer] ...". There is a way to keep the objects in the world moving, even with the message target still to be selected?
Actually, it's the "chooseClickTarget" which does all the work, and which causes the system to "hold its breath".
This breath-holding is not absolutely necessary, it's just that that's how the underlying support for morph-picking has always worked in Squeak -- i.e. totally modally.
To explore the possibility of relaxing this limitation, I've made a suggested fix and included it in the attached revised version #5 of the StarLemmings project; in this version, things will continue to breathe during target selection. Please try it out and let me know what you think.
Cheers,
-- Scott
PS: Just as an aside, I think that perhaps better than trying to learn Smalltalk by puzzling over little oddball textual snippets such as the one I provided for this project would be to download some of the great and free Smalltalk books (including a nice one in Spanish by Diego) from Stephane Ducasse's wonderful web site, which you probably already know about:
http://www.iam.unibe.ch/~ducasse/FreeBooks.html
ATTACHED: StarLemmings.5.pr, revised version of the StarLemmings project which allows breathing during morph-picking.