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