REFSKRIPT
GET_N_PARAMS
GET_RESULT np
RETURN_IF_EQUAL np 0 ANIM_FX
GET_PARAM_NR 1
GET_RESULT modus
GET_PARAM_NR 2
GET_RESULT ich

IF_STR_EQUAL_GOTO modus INIT init
IF_STR_EQUAL_GOTO modus INIT_READ init_read
IF_STR_EQUAL_GOTO modus START start
IF_STR_EQUAL_GOTO modus PRE_RENDER prerender
IF_STR_EQUAL_GOTO modus AFTER_RENDER afterrender
IF_STR_EQUAL_GOTO modus FINISH finish
IF_STR_EQUAL_GOTO modus GET_OBJS get_objs
IF_STR_EQUAL_GOTO modus SET_OBJS set_objs
IF_STR_EQUAL_GOTO modus GET_INFO get_info

MELDUNG Falscher Aufruf

RETURN 0
;*****************************************************

>init:
; Ergebnis:
; OK alles geklapp
; ER fehler
; AB abbruch
;
; ich braucPhe 1 objekt-variable.
; die enthält den prozentsatz des rüttels
; bei 0 wird gar nicht gerüttelt
; bei 1 wird maximal soviel gerüttelt wie das Objekt 
; maximal in x,y,z-richtung ausgedehnt ist

; Objekt abfragen 
GET_GEO_OBJ Welches_Geo-objekt_rütteln 1
RETURN_IF_ABBRUCH AB
GET_RESULT ruettel_obj

; sich selbst umbenennen in rüttel-<objname>
ADD_STR ich - ruettel_obj
GET_RESULT ich1
OBJ_SET_NAME ich ich1
GET_RESULT ich
goto init1

>init_read:
; Hier wird das animfx-objekt beim einlesen aufgerufen.
; wir init. die variable ruettel_obj auf - damit sie 
; vorne benutzt werden kann 
SET_VAR ruettel_obj ----

>init1:
; ich brauche interne-variablen
;  3 reals  um koordinate zwischenzuspeichern
;  1 pointer-obj um ruettel-objekt zu speichern

AFX_ALLOK_INTERN_VARS ich 3 0 1
; objekt 0 = rüttel-objekt

AFX_SET_OBJ ich 0 ruettel_obj

; jetzt eine Objektvariable für den
; rüttelfaktor vereinbaren
; heißt faktor und geht von 0 bis 1
AFX_SET_N_OBJ_VARS ich 1
AFX_DEFINE_OBJ_VAR ich 0 1 Faktor 0 1

RETURN OK
;********************************************************

>start:
; hier mach ich noch nichts
RETURN OK


;*******************************************************
>prerender:
; hier das ruettel_objekt um faktor mal zufall ändern

; falls faktor=0, dann nichts machen
OBJ_GET_VAR ich 0
GET_RESULT rfaktor
RETURN_IF_EQUAL rfaktor 0 OK


AFX_GET_OBJ ich 0
GET_RESULT ruettel_obj
; die ausdehnung des objektes abfragen
GEO_GET_BBOX ruettel_obj
GET_RESULT bbox
PRINT BBOX 
wait_secs 0.1
; size abfragen, und dann dx,dy dz durch size teilen
OBJ_GET_VAR ruettel_obj 6
GET_RESULT objsize
; dx,dy,dz herausholen
COPY_WORD bbox 1 
GET_RESULT x1
COPY_WORD bbox 2
GET_RESULT y1
COPY_WORD bbox 3
GET_RESULT z1
; dx,dy,dz herausholen
COPY_WORD bbox 4 
GET_RESULT dx
COPY_WORD bbox 5
GET_RESULT dy
COPY_WORD bbox 6
GET_RESULT dz
SUB dx x1
GET_RESULT dx
SUB dy y1
GET_RESULT dy
SUB dz z1
GET_RESULT dz

MUL dx objsize
GET_RESULT dx
MUL dy objsize
GET_RESULT dy
MUL dz objsize
GET_RESULT dz

; jetzt koordinaten abfragen und um maximal size in jeder
; richtung bewegen (per zufall gesteuert )
GEO_GET_POS ruettel_obj 1
GET_RESULT pos
COPY_WORD pos 1
GET_RESULT x
COPY_WORD pos 2
GET_RESULT y
COPY_WORD pos 3
GET_RESULT z
; ich speichere die aktuelle position um bei afterrender
; die wieder zu setzen
AFX_SET_REAL ich 0 x
AFX_SET_REAL ich 1 y
AFX_SET_REAL ich 2 z


; zufälliger bewegungsvektor berechnen

RAND 
GET_RESULT fak
FUNCTION (rfaktor*dx*(fak-0.5))
GET_RESULT dx

RAND 
GET_RESULT fak
FUNCTION (rfaktor*dy*(fak-0.5))
GET_RESULT dy

RAND 
GET_RESULT fak
FUNCTION (rfaktor*dz*(fak-0.5))
GET_RESULT dz

PRINT Rüttel-delta: dx dy dz
WAIT_SECS 0.2
; zur position addieren
ADD x dx
GET_RESULT x1
ADD y dy
GET_RESULT y1
ADD z dz
GET_RESULT z1

; und position setzen
GEO_SET ruettel_obj x1 y1 z1 1

RETURN OK
;*********************************************************************
>afterrender:
; ich setze das ruettel-obj wieder auf gespeicherte
; position zurück
AFX_GET_OBJ ich 0 
GET_RESULT ruettel_obj

AFX_GET_REAL ich 0
GET_RESULT x
AFX_GET_REAL ich 1
GET_RESULT y
AFX_GET_REAL ich 2
GET_RESULT z

GEO_SET ruettel_obj x y z 1

 
RETURN OK
;*********************************************************

>finish:
; nichts zu tun
RETURN OK
;**********************************************************
>get_objs:
; ich brauche kein objekt, also returne ich -

RETURN OK-
;*********************************************************
>set_objs:
RETURN OK
;*********************************************************
>get_info:
;
; ich brauche keine Objekte also returne ich 0
RETURN OK0
;*********************************************************



