REFSKRIPT
; -----------------------------------------------------------------------------
; Skript:       FLACKER.AFX
; Autor:        ©REFTools!-Team/Klaus-Peter Schreiner 
;                               @mail: kpeter.schreiner@trans-it.de
;               http://REFTools.home.pages.de
;               @mail: REFTools@gmx.net
; Version:      V1.1 vom 23.12.1997
; Skript-Typ:   AnimFX für Lichtquellen
; Bezeichnung:  Flacker
; Aufruf:       Die Dateien FLACKER.AFX und FLACKER.DOC müssen im Reflections
;               \Skripts\Anim_FX-Verzeichnis abgelegt werden. Der Effekt steht
;               dann in Reflections unter dem FX-Symbol im Sequenz-Editor zur
;               Verfügung.
; Anwendung:    siehe FLACKER.DOC
; Refelections: V4.1
; -----------------------------------------------------------------------------

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:
; Licht-Objekt auswählen
ADD_STR1 Welchen Lichttyp animieren?
GET_RESULT Text
GET_AUSWAHL Text Punkt/Spot/Lokal/Lokalspot Verteilt
RETURN_IF_ABBRUCH AB
GET_RESULT Licht_typ
IF_STR_EQUAL_GOTO Licht_typ Verteilt Verteilt

>Normal:
ADD_STR1 Welche Lichtquelle?
GET_RESULT Text
GET_OBJEKT Text 12
RETURN_IF_ABBRUCH AB
GET_RESULT Flacker_obj
GOTO weiter

>Verteilt:
ADD_STR1 Welche verteilte Lichtquelle?
GET_RESULT Text
GET_OBJEKT Text 26
RETURN_IF_ABBRUCH AB
GET_Result Flacker_obj

>weiter:
; umbenennen in Flacker-<name>
ADD_STR ich - Flacker_obj
GET_RESULT ich1
OBJ_SET_NAME ich ich1
GET_RESULT ich
goto Init1

>Init_Read:
; Hier wird das AnimFX-Objekt beim einlesen aufgerufen.
; variablen Flacker_obj u. Licht_ID initialisieren, damit sie 
; in >Init: benutzt werden können
SET_VAR Flacker_obj ----
SET_VAR Licht_ID ----

>Init1:
; ich brauche interne-variablen
;  3 Integers um Lichtquellen-Farbewerte zu speichern
;  1 obj-pointer um flackernde Licht-Obj zu speichern

AFX_ALLOK_INTERN_VARS ich 3 1 1
; Real-Variablen:
; ==================
; 0 = Lichtfarbe Rotanteil
; 1 = Lichtfarbe Grünanteil
; 2 = Lichtfarbe Blauanteil
;
; Integer-Variablen:
; ==================
; 0 = Licht-ID (12=Punkt/Spot/Lokal/LokalSpot, 26=Verteilt)
;
; Pointer-Variablen:
; ==================
; 0 = Licht-Objekt das flackern soll

AFX_SET_OBJ ich 0 Flacker_obj

; jetzt eine animierbare Variable für die 
; Intensität des flackerns definieren.
; Name ist Intensität und Wertebereich geht von 0 bis 1
AFX_SET_N_OBJ_VARS ich 1
AFX_DEFINE_OBJ_VAR ich 0 1 Intensität 0 1

RETURN OK

; -----------------------------------------------------------------------------
>Start:
; Lichart von animierter Lichtquelle feststellen und speichern
AFX_GET_OBJ ich 0
GET_RESULT Flacker_obj
OBJ_GET_ID Flacker_obj
GET_RESULT Licht_ID
AFX_SET_INT ich 0 Licht_ID

RETURN OK

; -----------------------------------------------------------------------------
>Prerender:
; RGB-Farbwerte gleichmäßig, abhängig von eingestellter
; Intensität ändern - und damit auch die Helligkeit!
; falls Intensität=0, dann nichts tun
OBJ_GET_VAR ich 0
GET_RESULT rIntens
RETURN_IF_EQUAL rIntens 0 OK

; Zu animierendes Objekt holen...
AFX_GET_OBJ ich 0
GET_RESULT Flacker_obj

; vorher gewählten Licht-Typ feststellen...
AFX_GET_INT ich 0
GET_RESULT Licht_ID
;
; Farbwerte der Lichtquelle holen...
IF_NOT_EQUAL_GOTO Licht_ID 26 GetFarben
; ...falls verteiltes Licht
OBJ_GET_VAR Flacker_obj 7
GET_RESULT aktr
OBJ_GET_VAR Flacker_obj 8
GET_RESULT aktg
OBJ_GET_VAr Flacker_obj 9
GET_RESULT aktb
GOTO Animate

; ...falls Punkt/Spot/Lokal/Lokalspot-Licht
>GetFarben:
LIGHT_GET_COLOR Flacker_obj
GET_RESULT aktRGB

COPY_WORD aktRGB 1
GET_RESULT aktr
COPY_WORD aktRGB 2
GET_RESULT aktg
COPY_WORD aktRGB 3
GET_RESULT aktb

>Animate:
; aktuellen Farbeinstellungen der Lichtquelle
; speichern, um sie in >Prerender: wieder einzustellen...
AFX_SET_REAL ich 0 aktr
AFX_SET_REAL ich 1 aktg
AFX_SET_REAL ich 2 aktb

; zufällige Helligkeit berechnen
RAND
GET_RESULT zzahl

FUNCTION (aktr-(aktr*zzahl*rIntens))
GET_RESULT aktr

FUNCTION (aktg-(aktg*zzahl*rIntens))
GET_RESULT aktg

FUNCTION (aktb-(aktb*zzahl*rIntens))
GET_RESULT aktb

; neue Farb-Werte setzen...
IF_NOT_EQUAL_GOTO Licht_ID 26 SetFarben
; ...falls Verteiltes Licht
OBJ_SET_VAR Flacker_obj 7 aktr
OBJ_SET_VAR Flacker_obj 8 aktg
OBJ_SET_VAR Flacker_obj 9 aktb
GOTO Preret

; ...falls Punkt/Spot/Lokal/Lokalspot-Licht
>SetFarben:
LIGHT_SET_COLOR Flacker_obj aktr aktg aktb

>Preret:
RETURN OK

; -----------------------------------------------------------------------------
>Afterrender:
; ich setze die Helligkeit von Flacker-obj 
; wieder auf Orignal-Werte zurück...
AFX_GET_OBJ ich 0 
GET_RESULT Flacker_obj
AFX_GET_INT ich 0
GET_RESULT Licht_ID

AFX_GET_REAL ich 0
GET_RESULT aktr
AFX_GET_REAL ich 1
GET_RESULT aktg
AFX_GET_REAL ich 2
GET_RESULT aktb

; Farben auf Orgianlwerte zurücksetzen...
IF_NOT_EQUAL_GOTO Licht_ID 26 ResetFarben
; ...falls verteiltes Licht
OBJ_SET_VAR Flacker_obj 7 aktr
OBJ_SET_VAR Flacker_obj 8 aktg
OBJ_SET_VAR Flacker_obj 9 aktb
GOTO Afterret

; ...falls Punkt/Spot/Lokal/Lokalspot-Licht
>ResetFarben:
LIGHT_SET_COLOR Flacker_obj aktr aktg aktb

>Afterret: 
RETURN OK

; -----------------------------------------------------------------------------
>Finish:
; nichts zu tun
RETURN OK

; -----------------------------------------------------------------------------
>Get_objs:
; ich brauche kein objekt, also returne ich -
RETURN OK-

; -----------------------------------------------------------------------------
>Set_objs:
; nichts zu tun
RETURN OK

; -----------------------------------------------------------------------------
>Get_info:
; ich brauche keine Objekte also returne ich 0
RETURN OK0
