Mark made great explanation of an OOP structure.
However, reading it only makes me nod, it doesn't make me shake my
head, or feel dizzy, and that was sort of my expectation, from all
the fuzz.
Maybe there's an important mental difference in calling a method
"handle" something, rather than "set", but it boils down to the same,
if you tell the movie to go to 60%, it does so, or it's not a
reliable object.
You have effectively "set" a state in the other object, and you did
so, by supplying flat data.
I still think, that there is some wisdom in the concepts about
sending objects over a network, and I'd like to use that with the
MultiUser Xtra. But somehow, we're already doing that when we use
Shockwave... we send and object - the movie, and it displays itself,
in the "window" provided by the plugin.
I think that is about actually moving your codeBase along with your
data, rather than flattening the data, and that can happen at
different levels, ranging from sending "media" data over a MU
channel, to send the complete OS to a NC, which then displays "the
object" into its "window"; the Monitor.
I think the only practical question left open by Mark's explanation,
is how the components of the "cluster", actually identifies each
other in the score.
Don't use globals, because then you can only have one cluster in the
runtime engine.
Usually I would use sendAllSprites, and I would let the "central
manager" object broadcast the "collect" message with a "collectList"
parameter. This would happen at prepareFrame, so that the manager can
be in a lower channel, and still find the other behaviors. Maybe the
propList approach is too brute-force for this purist exercise, and
maybe the manager should broadcast a message
"handleTheFactThatImHereAndIWouldLikeToTakeChargeOfAnyoneSoInclinedAccordingToMyIdentification".
Then the components could themselves decide to reply with a
"handleMe" message, and so register themselves for event messages
from the manager, and storing the reference to the manager, to use
when they're later fondled by the mouseHandler. This is a system with
mutual references, which should cleared when the cluster dissolves.
The most obvious way to setup the "cluster ID", would be by way of a
GPDL in the behaviors.
If the "slider" itself comprises a "sub-cluster" of base, buttons and
thumbs then that cluster would also have to be initialized before
getting "dodgeThis'" events from the manager, the subManager could
initialize on the "gather" message from the überManager, or on
prepareFrame, whichever comes first.
Nothing revolutionary, just plain exploitation of Directors framework... ;-)
Do you see a way to clean that up, according to the "antiAccessor declaration"?
But...
<confusion>
There's the situation where the slider moves the qtMovie... err,
politely informs the qtMovie to get its butt over to another
position. Then the manager broadcasts this event to all the
components, including the one who inflicted the event. Should this
object now readjust its state, or should it ignore the message, or
should it wait for the event to "bounce" in the manager, and then
adjust?
I think I like the "ignore" model most, but maybe that's just from an
optimization viewpoint.
If the component speaking to the manager provides it's own reference,
then the event broadcasted could also bear the component reference,
but this is where the interface becomes sort of "proprietary"...
And what if the message is asynchronously handled by the manager?
When should it broadcast the event, and what data should it actually
provide? Remember, we're not allowed to let the components "ask" for
the "state" relevant to them.
Hey, I'm being scrubbed by this guy and now my rate and time is this,
or maybe it was my soundLevel that was adjusted, so here it goes
too...
Should there be only one "somethingHappened" message loaded with
data, which would in fact occur at every iteration of the system,
when the movie is playing, or should there be specific messages for
specific events, and then why would the slider have to understand a
"soundLevelEvent" message?
Should the components register for only specific messages?
Or should the components register in prefab "slots"
Or should we just rely on Lingo's ability to "call" nonexistent
methods in a list of objects?
But where is the pure OOP in that? shouting gibberish at innocent
bystanders! ;-)
Suddenly it seems so cloudy again... can you wipe away the clouds?
Why don't we just allow for the manager to comprise a "system" with
data-services *accessible* by those who know its "abilities"?
Or a complete "custom" system where a qtObject knows that when it
stops, it should update the "stop" button, to indicate the new state
of "unstoppability".
Hopefully I just lost my way somewhere in the bush.
Regards, Jakob
</confusion>
[To remove yourself from this list, or to change to digest mode, go to
http://www.penworks.com/LUJ/lingo-l.cgi To post messages to the list,
email [EMAIL PROTECTED] (Problems, email [EMAIL PROTECTED])
Lingo-L is for learning and helping with programming Lingo. Thanks!]