Hier sind:
Inhalt new werde nenn getmyid init verpuppe demolish wrap unwrap getpermits setpermits execmsg passmsg domsg tellmsg nochild makechild stepframe setdarst execute
Inhalt von BaumObj vom. 28.03.98
Übersicht
-- BaumObj - Objekt
-- Messaging in einer verzweigten Objekt-Struktur
-- Aufruf:
-- new script "BaumObj", Ahn,1
-- makeChild (dObj,?Scriptname) -- default = nenn(me)
-- passMsg me,dMsg
-- tellMsg me,dMsg
-------------
property ancestor, myLKids,mySelf,myInitMsg,myLMsgan, myMsgActive
property myID
property myLpPermits,myLKanale
on new me,eins,zwei,drei,vier,funf,sechs
on werde me,art
on nenn me
on getmyId me
on init me
on verpuppe me
on demolish me
--ListenVersion
on wrap me
-- wickel meine Properties in eine Lp
-- Problem sind hier noch die ObjReferenzen,
-- wenn es Kinder gibt, müssen sie sich erst alle in einen
-- machMyId - Handler mit dem Code
-- new(script....
-- unwrap getLpMyId()
-- verwandelt haben
on unwrap me, dLp
on getPermits me
on setPermits me,permits
on execMsg me,dMsg
-- hier passiert es
-- war ich selbst Initiator? dann nur Flag zuruecksetzen
on passMsg me,dMsg
-- die Nachricht wird bis ans Ende der Familie weitergegeben und
-- erst dort in execMsg me übersetzt
-- für Liste von Kindern
on doMsg me,dMsg
-- Format der Msg??
on tellMsg me,dMsg
on noChild me
on makeChild me,dScript
-- erzeugt einen neuen Ast
-- gibt ObjRef des Kindes zurück
-- makeChild (dObj,?Scriptname) -- default = nenn(me)
on stepframe me
--
on setDarst me,dDarst
on execute me,exec
Inhalt top Callers
on new me,eins,zwei,drei,vier,funf,sechs
set ahn=eins
set myID = zwei
set myLKids=[]
set myLMsgAn = []
set myLpPermits=[:]
set mySelf="BaumObj"
set myInitKill=FALSE
if objectP(ahn) then set the ancestor of me to ahn
else werde me,ahn
if not voidP(myLkanale) then verpuppe me
init me
wake me
return me
end
Inhalt top Callers
on werde me,art
set the ancestor of me to new (script art)
end
Inhalt top Callers
on nenn me
return mySelf
end
Inhalt top Callers
on getmyId me
return myId
end
-------------------------
Inhalt top Callers
on init me
end
Inhalt top Callers
on verpuppe me
repeat with kanal in myLkanale
puppetsprite kanal,true
end repeat
end
Inhalt top Callers
on demolish me
--ListenVersion
sleep me
repeat with kanal in myLKanale
if the puppet of sprite kanal then
set the loc of sprite Kanal to point(-2000,-2000)
puppetsprite Kanal,false
end if
end repeat
if objectP(ancestor) then
if not (nenn(ancestor) = "BasisObj") then
noChild(ancestor)
else
-- letzter der Reihe, puppettempo
--puppettempo 6
end if
end if
end
Inhalt top Callers
on wrap me
-- wickel meine Properties in eine Lp
-- Problem sind hier noch die ObjReferenzen,
-- wenn es Kinder gibt, müssen sie sich erst alle in einen
-- machMyId - Handler mit dem Code
-- new(script....
-- unwrap getLpMyId()
-- verwandelt haben
set LpErg=[:]
if objectP(me) then
--put me & RETURN into erg
repeat with i=1 to count(me)
set dProp to getPropat (me,i)
set dVal to getaprop(me, dProp)
setaprop LpErg,dProp,dVal
end repeat
return LpErg
end if
end
Inhalt top Callers
on unwrap me, dLp
set viel = count(dLp)
repeat with rum = 1 to viel
set dProp = getpropAt(dlp,rum)
set dVal=getat(dLp,rum)
end repeat
end
------------------------
Inhalt top Callers
on getPermits me
return myLpPermits
end
Inhalt top Callers
on setPermits me,permits
set myLpPermits=permits
end
------------------------------
-- Messaging von oben nach unten, Ausfuehrung von unten nach oben
-- das muss jetzt von der Mord-Metapher weg
-- braucht Parameter fuer die Msg
Inhalt top Callers
on execMsg me,dMsg
-- hier passiert es
-- war ich selbst Initiator? dann nur Flag zuruecksetzen
if myInitMsg then
set myInitMsg=FALSE
exit
end if
-- tu es selbst
doMsg me,dMsg
-- jetzt bin ich Msgmaessig nicht mehr aktiv
set myMsgActive = FALSE
-- und den Ball nach oben zurueckgeben
-- BasisObj bleibt verschont
if objectP(ancestor) then
if not (nenn(ancestor) = "BasisObj") then
passMsg (ancestor,dMsg)
else
--nothing
end if
end if
end
Inhalt top Callers
on passMsg me,dMsg
-- die Nachricht wird bis ans Ende der Familie weitergegeben und
-- erst dort in execMsg me übersetzt
-- für Liste von Kindern
if Count(myLMsgan) = 0 then
if Count(myLKids) > 0 and not myMsgActive then
set myLMsgAn = duplicate (myLKids)
set myMsgActive = TRUE
end if
end if
set Anz = count(myLMsgAn)
if Anz > 0 then
set dChild = getLast(myLMsgAn)
deleteAt (myLMsgAn,Anz)
if objectP(dChild) then
passMsg (dChild,dMsg)
end if
else
execMsg me,dMsg
end if
end
Inhalt top Callers
on doMsg me,dMsg
-- Format der Msg??
if stringP(dMsg) then do (dmsg)
-- put myId && dMsg
end
Inhalt top Callers
on tellMsg me,dMsg
set myInitMsg=TRUE
passMsg me,dMsg
end
----------------------------------------------------------------------------------
Inhalt top Callers
on noChild me
set myChild =value(VOID)
end
Inhalt top Callers
on makeChild me,dScript
-- erzeugt einen neuen Ast
-- gibt ObjRef des Kindes zurück
-- makeChild (dObj,?Scriptname) -- default = nenn(me)
if voidP(dScript) then set dScript=nenn(me)
set dId = myID & "_" & String(Count (myLKids) + 1)
if the number of member dScript > 0 then
set dMember = member dScript
if the type of dMember = #script then
if the scripttype of dMember = #parent then
set dChild = new (script dScript,me,dId)
append myLKids,dChild
return dChild
end if
end if
end if
end
---------------
Inhalt top Callers
on stepframe me
--
end
Inhalt top Callers
on setDarst me,dDarst
-- if myDarst=dDarst then exit
-- set myDarst=dDarst
-- set kanal=getat(myLKanale,1)
-- set the member of sprite kanal=member dDarst
end
Inhalt top Callers
on execute me,exec
popAction exec
if the runmode="AUTHOR" then put exec
end
-- /IHV
HTML created by dp tiny script documenting xtra v0.2 28.03.98 pageID=MessaageObj