/* plugin par iri - http://www.irizone.net date : may 2005 name : iriparticles - part EDITOR name : dynparticles - part EDITOR date : february 2007 author : iri pour I-Maginer (http://www.i-maginer.fr) comment : see 'cdynpart.pkg' : "édition en ligne" */ typeof plugin = S;; typeof class = S;; typeof bmpcolor = ObjBitmap;; typeof winColor = ObjWin;; typeof font = ObjFont;; typeof sliColorAlpha = ObjSlider;; typeof txtAlphaValue = ObjText;; typeof cColorCycle = ObjCheck;; typeof txtSizeMax = ObjText;; typeof cSizeConst = ObjCheck;; typeof winSize = ObjWin;; typeof txtExpertInfinit = ObjText;; typeof cmExpertVolume = ObjBox;; typeof txtExpertVolumeSphereRadiusMsg = ObjText;; typeof txtExpertVolumeSphereRadius = ObjText;; typeof txtExpertVolumeConeMsg = ObjText;; typeof txtExpertVolumeConeLong = ObjText;; typeof txtExpertVolumeConeLarg = ObjText;; typeof txtExpertVolumeConeHaut = ObjText;; typeof txtExpertVolumePlanMsg = ObjText;; typeof txtExpertVolumePlanLong = ObjText;; typeof txtExpertVolumePlanLarg = ObjText;; typeof txtExpertVolumeLineMsg = ObjText;; typeof txtExpertVolumeLineLong = ObjText;; typeof cmExpertEffect = ObjBox;; typeof txtExpertEffectConstantMsg = ObjText;; typeof txtExpertEffectConstantX = ObjText;; typeof txtExpertEffectConstantY = ObjText;; typeof txtExpertEffectConstantZ = ObjText;; typeof txtExpertEffectElectricMsg = ObjText;; typeof txtExpertEffectElectricAX = ObjText;; typeof txtExpertEffectElectricAY = ObjText;; typeof txtExpertEffectElectricAZ = ObjText;; typeof txtExpertEffectElectricBX = ObjText;; typeof txtExpertEffectMagneticMsg = ObjText;; typeof txtExpertEffectMagneticAX = ObjText;; typeof txtExpertEffectMagneticAY = ObjText;; typeof txtExpertEffectMagneticAZ = ObjText;; typeof txtExpertEffectMagneticBX = ObjText;; typeof txtExpertEffectChaotic0Msg = ObjText;; typeof txtExpertEffectChaotic0AX = ObjText;; typeof txtExpertEffectChaotic0AY = ObjText;; typeof txtExpertEffectChaotic0AZ = ObjText;; typeof txtExpertEffectChaotic0BX = ObjText;; typeof txtExpertEffectChaotic0BY = ObjText;; typeof txtExpertEffectChaotic0BZ = ObjText;; typeof txtExpertEffectChaotic1Msg = ObjText;; typeof txtExpertEffectChaotic1AX = ObjText;; typeof txtExpertEffectChaotic1AY = ObjText;; typeof txtExpertEffectChaotic1AZ = ObjText;; typeof txtExpertEffectChaotic1BX = ObjText;; typeof txtExpertEffectChaotic1BY = ObjText;; typeof txtExpertEffectChaotic1BZ = ObjText;; typeof txtExpertEffectHelicoidMsg = ObjText;; typeof txtExpertEffectHelicoidAX = ObjText;; typeof txtExpertEffectHelicoidAY = ObjText;; typeof txtExpertEffectHelicoidAZ = ObjText;; typeof txtExpertEffectHelicoidBX = ObjText;; typeof txtExpertEffectHelicoidBY = ObjText;; typeof txtExpertEffectHelicoidBZ = ObjText;; typeof txtExpertEffectPlancollMsg = ObjText;; typeof txtExpertEffectPlancollAX = ObjText;; typeof txtExpertEffectPlancollAY = ObjText;; typeof txtExpertEffectPlancollAZ = ObjText;; typeof txtExpertEffectPlancollBX = ObjText;; typeof txtExpertEffectPlancollBY = ObjText;; typeof txtExpertEffectPlancollBZ = ObjText;; typeof cExpertBillboard = ObjCheck;; typeof cExpertRainbow = ObjCheck;; typeof txtExpertMasse = ObjText;; typeof cTxtRate = ObjText;; typeof cExpertInitON = ObjCheck;; typeof ftxtPNG = ObjText;; // sur la fenêtre principale typeof ftxtTransMsg = ObjText;; // sur la fenêtre principale typeof fsliTrans = ObjSlider;; // sur la fenêtre principale typeof fm3dfile = ObjText;; // sur la fenêtre principale typeof fm3dname = ObjText;; // sur la fenêtre principale typeof fAv = ObjCheck;; // sur la fenêtre principale typeof fAvPosX = ObjText;; // sur la fenêtre principale typeof fAvPosY = ObjText;; // sur la fenêtre principale typeof fAvPosZ = ObjText;; // sur la fenêtre principale typeof listSizes = [[F F] r1];; typeof listSizesOld = [[F F] r1];; typeof colorInit = S;; typeof colorInitClick = I;; typeof initColor = I;; typeof alphaInit = I;; proto save=fun [ [Inst r1] ] [[S r1] [S r1] [[S r1]r1] [[S r1]r1]];; fun getLifeByX(l, w, x, m)= if l == nil then nil else let hd l -> [_ vie] in let 25+((ftoi vie)*((w-30)/100)) -> v in if x >= (v-m) && x < (v+m) then ftoi vie else getLifeByX tl l w x m;; fun replaceTailleInListSizes(l, vie, taille)= if l == nil then nil else let hd l -> [t v] in if v == vie then [taille vie] :: (tl l) else (hd l) :: replaceTailleInListSizes tl l vie taille;; // SIZE fun size_initList(l, out, i)= if i >. 100.0 then out else ( set out = [(atof (hd l)) i] :: out; size_initList tl l out i+.10.0 );; fun size_initList2(m)= let itof m -> m in set listSizes = [m 0.0] :: [m 10.0] :: [m 20.0] :: [m 30.0] :: [m 40.0] :: [m 50.0] :: [m 60.0] :: [m 70.0] :: [m 80.0] :: [m 90.0] :: [m 100.0] :: nil;; fun size_winCrGraph(w, h, m, l)= if l == nil then 0 else let hd l -> [taille vie] in let hd tl l -> [taille2 vie2] in let ftoi vie -> vie in let ftoi taille -> taille in let ftoi vie2 -> vie2 in let ftoi taille2 -> taille2 in let 25+(m-taille)*(h-20-25)/m -> y in let 25+(m-taille2)*(h-20-25)/m -> y2 in let 25+(vie*((w-30)/100)) -> x in let 25+(vie2*((w-30)/100)) -> x2 in ( _PAINTcircle winSize x y 4 DRAW_INVISIBLE 0 0 DRAW_SOLID 0x00ff00; if vie2 != nil then _PAINTline winSize x y x2 y2 DRAW_SOLID 1 0x00ff00 else nil; size_winCrGraph w h m tl l );; fun size_winCrAxes()= let _GETwindowSizePosition winSize -> [w h _ _] in let atoi _GETtext txtSizeMax -> m in ( _CLRwindow winSize; _PAINTline winSize 25 20 25 h-15 DRAW_SOLID 1 0; _PAINTline winSize 20 h-20 w-50 h-20 DRAW_SOLID 1 0; _TXTout winSize font 200 5 TD_LEFT|TD_TOP 0 "Taille des particules en fonction de leurs durées de vie"; _TXTout winSize font 1 25 TD_LEFT|TD_BASELINE 0 "100%"; _TXTout winSize font 10 h-5 TD_LEFT|TD_BASELINE 0 "0"; _TXTout winSize font w-70 h-5 TD_LEFT|TD_BASELINE 0 "100%"; _TXTout winSize font 10 3 TD_LEFT|TD_TOP 0 "taille"; _TXTout winSize font (w/2) h-5 TD_CENTER|TD_BASELINE 0 "durée"; _TXTout winSize font w-2 h-60 TD_RIGHT|TD_BASELINE 0xff0000 "UNDO"; _TXTout winSize font w-2 h-40 TD_RIGHT|TD_BASELINE 0xff0000 "REDO"; _TXTout winSize font w-2 h-20 TD_RIGHT|TD_BASELINE 0xff0000 "RESET"; if (_GETcheck cSizeConst) then nil else _TXTout winSize font w/2 h/2 TD_CENTER|TD_BASELINE 0xff0000 "Taille fixe sélectionnée, graph désactivé"; size_winCrGraph w h m listSizes; );; fun size_winPaint(obj, u)= size_winCrAxes;; fun size_sizeConst(obj, u, state)= size_winCrAxes; _ENwindow winSize state;; fun size_winClick(obj, u, x, y, btn)= let _GETwindowSizePosition winSize -> [w h _ _] in let atoi _GETtext txtSizeMax -> m in let getLifeByX listSizes w x (w-70)/10 -> vie in if x > (w-35) && y > (h-68) && y < (h-52) then // undo let listSizes -> old in ( set listSizes = listSizesOld; set listSizesOld = old; size_winCrAxes ) else if x > (w-35) && y > (h-48) && y < (h-32) then // redo let listSizesOld -> new in ( set listSizesOld = listSizes; set listSizes = new; size_winCrAxes ) else if x > (w-35) && y > (h-28) && y < (h-12) then // reset let listSizes -> old in ( set listSizes = size_initList2 m; set listSizesOld = old; size_winCrAxes ) else if y > 25 && y < (h-20) && vie != nil then // graph let m-ftoi(((itof(y-25))/.100.0)*.(itof m)) -> taille in let if taille > m then m else taille -> taille in ( set listSizesOld = listSizes; set listSizes = replaceTailleInListSizes listSizes itof vie itof taille; size_winCrAxes; ) else 0;; // COLOR fun color_winClick(obj, win, x, y, btn)= set colorInitClick = _GETpixel24 bmpcolor x y; _PAINTwindow win;; fun color_winPaint(obj, u)= _BLTbitmap winColor bmpcolor 0 0;; fun color_winEnd(obj, u)= _DSbitmap bmpcolor;; fun color_alphaClick(obj, l, r)= _SETtext txtAlphaValue ftoa l; set alphaInit = ftoi l; 0;; // EXPERT fun expert_volumeChoice(obj, u, i, s)= _SHOWtext txtExpertVolumeSphereRadius WINDOW_HIDDEN; _SHOWtext txtExpertVolumeSphereRadiusMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeLong WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeLarg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeHaut WINDOW_HIDDEN; _SHOWtext txtExpertVolumePlanMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumePlanLong WINDOW_HIDDEN; _SHOWtext txtExpertVolumePlanLarg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeLineMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeLineLong WINDOW_HIDDEN; if !strcmp s "VOLUME_CONE" then ( _SHOWtext txtExpertVolumeConeMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumeConeLong WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumeConeLarg WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumeConeHaut WINDOW_UNHIDDEN; 0 ) else if !strcmp s "VOLUME_PLAN" then ( _SHOWtext txtExpertVolumePlanMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumePlanLong WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumePlanLarg WINDOW_UNHIDDEN; 0 ) else if !strcmp s "VOLUME_LINE" then ( _SHOWtext txtExpertVolumeLineMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumeLineLong WINDOW_UNHIDDEN; 0 ) else ( _SHOWtext txtExpertVolumeSphereRadius WINDOW_UNHIDDEN; _SHOWtext txtExpertVolumeSphereRadiusMsg WINDOW_UNHIDDEN; 0 );; fun expert_effectChoice(obj, u, i, s)= _SHOWtext txtExpertEffectConstantMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectConstantX WINDOW_HIDDEN; _SHOWtext txtExpertEffectConstantY WINDOW_HIDDEN; _SHOWtext txtExpertEffectConstantZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricBX WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticBX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0Msg WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0AX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0AY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0AZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0BX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0BY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0BZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1Msg WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1AX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1AY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1AZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1BX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1BY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1BZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidBX WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidBY WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidBZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectPlancollMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectPlancollAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectPlancollAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectPlancollAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectPlancollBX WINDOW_HIDDEN; _SHOWtext txtExpertEffectPlancollBY WINDOW_HIDDEN; _SHOWtext txtExpertEffectPlancollBZ WINDOW_HIDDEN; if !strcmp s "EFFECT_CONSTANT" then ( _SHOWtext txtExpertEffectConstantMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectConstantX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectConstantY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectConstantZ WINDOW_UNHIDDEN; 0 ) else if !strcmp s "EFFECT_ELECTRIC" then ( _SHOWtext txtExpertEffectElectricMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectElectricAX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectElectricAY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectElectricAZ WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectElectricBX WINDOW_UNHIDDEN; 0 ) else if !strcmp s "EFFECT_MAGNETIC" then ( _SHOWtext txtExpertEffectMagneticMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectMagneticAX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectMagneticAY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectMagneticAZ WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectMagneticBX WINDOW_UNHIDDEN; 0 ) else if !strcmp s "EFFECT_CHAOTIC0" then ( _SHOWtext txtExpertEffectChaotic0Msg WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic0AX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic0AY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic0AZ WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic0BX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic0BY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic0BZ WINDOW_UNHIDDEN; 0 ) else if !strcmp s "EFFECT_CHAOTIC1" then ( _SHOWtext txtExpertEffectChaotic1Msg WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic1AX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic1AY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic1AZ WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic1BX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic1BY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectChaotic1BZ WINDOW_UNHIDDEN; 0 ) else if !strcmp s "EFFECT_HELICOID" then ( _SHOWtext txtExpertEffectHelicoidMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectHelicoidAX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectHelicoidAY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectHelicoidAZ WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectHelicoidBX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectHelicoidBY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectHelicoidBZ WINDOW_UNHIDDEN; 0 ) else if !strcmp s "EFFECT_PLANCOLL" then ( _SHOWtext txtExpertEffectPlancollMsg WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectPlancollAX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectPlancollAY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectPlancollAZ WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectPlancollBX WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectPlancollBY WINDOW_UNHIDDEN; _SHOWtext txtExpertEffectPlancollBZ WINDOW_UNHIDDEN; 0 ) else 0;; // FATHER fun f_cbPNG(obj, u, p)= if p == nil then nil else _SETtext ftxtPNG _PtoScol p;; fun f_PNG(obj, father)= _DLGrflopen _DLGOpenFile _channel father _GETtext ftxtPNG nil "PNG\0*.png\0\0" @f_cbPNG 0;; fun f_cbM3D(obj, u, p)= if p == nil then nil else _SETtext fm3dfile _PtoScol p;; fun f_M3D(obj, father)= _DLGrflopen _DLGOpenFile _channel father _GETtext ftxtPNG nil "M3D\0*.m3d\0\0" @f_cbM3D 0;; fun f_Trans(obj, l, r)= _SETtext ftxtTransMsg strcat "Texture transparency (0-100 %) : " ftoa1d l; 0;; fun fAvCheck(obj, u, state)= _ENtext fAvPosX state; _ENtext fAvPosY state; _ENtext fAvPosZ state;; fun win_paint(obj, u)= _PAINTrectangle obj 155 30 20 20 DRAW_SOLID 1 0 DRAW_SOLID colorInitClick;; fun openedit(father, param) = // not standard function let strextr param -> l in let _GETwindowSizePosition father -> [wf hf x y] in let [500 785] -> [w h] in let _CRwindow _channel father x+150 y w h WN_MENU|WN_MINBOX "Instance particules" -> win in ( // misc. _CLRwindow win; _CBwinPaint win @win_paint 0; set bmpcolor = _LDbitmap _channel _checkpack "dms/3d/plugins/dynparticles/_colormap.bmp"; set font = _CRfont _channel 14 0 0 "Arial"; let htoi getInfo l "initColor" -> tmp in let get_rgba if tmp == nil then 126 else tmp -> [r g b a] in ( set colorInitClick = make_rgb r g b; set alphaInit = a; set initColor = tmp; ); // Main window _CRtext _channel father 5 5 wf-10 20 0 "Texture (png only) :"; set ftxtPNG = _CReditLine _channel father 5 30 wf-65 20 ET_DOWN|ET_ALIGN_LEFT|ET_AHSCROLL getInfo l "png"; _CBbutton _CRbutton _channel father wf-55 30 50 20 0 "Change" @f_PNG father; let atof getInfo l "ftrans" -> t in let if t == nil then 50.0 else t -> t in ( set ftxtTransMsg = _CRtext _channel father 5 55 wf-10 20 0 strcat "Texture transparency (0-100 %) : " ftoa1d t; set fsliTrans = _CRslider _channel father _GETdefaultFont (w/2)+5 80 (w/2)-10 20 10 0.0 100.0 t t @f_Trans SLIDER_INTER_FIXED|SLIDER_BUTTON; _SETsliderBackColor fsliTrans 0xffffff; _SETsliderPrecisionStep fsliTrans 1.0; _SETsliderColor fsliTrans 0x00ff00; _SETsliderCursorColor fsliTrans 0xff0000; _SETsliderPrecisionMark fsliTrans 0; ); _CRtext _channel father 5 105 wf-10 20 0 "File to use (*.m3d)"; set fm3dfile = _CReditLine _channel father 5 130 wf-65 20 ET_DOWN|ET_ALIGN_LEFT|ET_AHSCROLL getInfo l "m3d"; _CBbutton _CRbutton _channel father wf-55 130 50 20 0 "Change" @f_M3D father; _CRtext _channel father 5 155 wf-10 20 0 "Name of mesh (in this m3d) ?"; set fm3dname = _CReditLine _channel father 5 180 wf-10 20 ET_DOWN|ET_ALIGN_LEFT|ET_AHSCROLL getInfo l "fm3dname"; set fAv = _SETcheck _CRcheck _channel father 5 205 wf-10 20 CH_LEFT "Link particles to avatars ?" atoi getInfo l "m3d_fAv"; _CBcheck fAv @fAvCheck 0; _CRtext _channel father 5 230 wf-145 20 0 "Position x y z (/ avatar)"; let switchstr l "m3d_fAvPos" -> [x [y [z _]]] in let atoi getInfo l "m3d_fAv" -> state in ( set fAvPosX = _ENtext _CReditLine _channel father wf-135 230 40 20 ET_DOWN x state; set fAvPosY = _ENtext _CReditLine _channel father wf-90 230 40 20 ET_DOWN y state; set fAvPosZ = _ENtext _CReditLine _channel father wf-45 230 40 20 ET_DOWN z state ); // Couleurs _CRtext _channel win 5 5 w-10 20 ET_BORDER "!! COLOR !!"; _CRtext _channel win 5 30 145 20 0 "Initiale color :"; set winColor = _CRwindow _channel win 5 55 170 78 WN_CHILDINSIDE|WN_NOCAPTION nil; _CBwinPaint winColor @color_winPaint 0; _CBwinDestroy winColor @color_winEnd 0; _CBwinClick winColor @color_winClick win; _CRtext _channel win (w/2)+5 30 (w/2)-40 20 0 "Mask alpha :"; set txtAlphaValue = _CRtext _channel win w-30 30 25 20 ET_ALIGN_RIGHT ftoa ((itof alphaInit) /. 1.26); set sliColorAlpha = _CRslider _channel win _GETdefaultFont (w/2)+5 55 (w/2)-10 20 10 0.0 100.0 itof alphaInit itof alphaInit @color_alphaClick SLIDER_INTER_FIXED|SLIDER_BUTTON; _SETsliderBackColor sliColorAlpha 0xffffff; _SETsliderPrecisionStep sliColorAlpha 1.0; _SETsliderColor sliColorAlpha 0x00ff00; _SETsliderCursorColor sliColorAlpha 0xff0000; _SETsliderPrecisionMark sliColorAlpha 0; set cColorCycle = _CRcheck _channel win (w/2)+5 90 (w/2)-10 20 CH_LEFT "Enable color cycle ?"; _SETcheck cColorCycle if !strcmpi getInfo l "colorCycle" "on" then 1 else 0; _CRtext _channel win (w/2)+5 110 (w/2)-10 25 0 "TITLE_COLOR_CYCLEMSG"; // Tailles _CRtext _channel win 5 140 w-10 20 ET_BORDER "!! SIZE !!"; _CRtext _channel win 5 165 (w/2)-55 20 0 "Max size :"; set txtSizeMax = _CReditLine _channel win (w/2)-45 165 40 20 ET_DOWN|ET_NUMBER getInfo l "maxSize"; set cSizeConst = _CRcheck _channel win (w/2)+5 165 (w/2)-10 20 CH_LEFT "Enable taille cycle?"; _SETcheck cSizeConst if !strcmpi getInfo l "sizeCycle" "on" then 1 else 0; _CBcheck cSizeConst @size_sizeConst 0; // let atoi _GETtext txtSizeMax -> m in set listSizes = size_initList switchstr l "initSizes" nil 0.0; set listSizesOld = listSizes; set winSize = _CRwindow _channel win 5 190 w-10 145 WN_CHILDINSIDE|WN_NOCAPTION|WN_DOWN nil; _ENwindow winSize _GETcheck cSizeConst; _CBwinPaint winSize @size_winPaint 0; _CBwinClick winSize @size_winClick 0; size_winCrAxes; // Paramètres avancés _CRtext _channel win 5 340 w-10 20 ET_BORDER "!! EXPERT !!"; // PCL_INFINIT _CRtext _channel win 5 365 w-60 20 0 "Life :"; set txtExpertInfinit = _CReditLine _channel win w-50 365 45 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER getInfo l "life"; // VOLUME _CRtext _channel win 5 390 w-120 20 0 "Volume :"; set cmExpertVolume = _CRcombo _channel win w-110 390 105 90 CB_NOEDIT|ET_ALIGN_RIGHT nil; _ADDcombo cmExpertVolume 0 "VOLUME_CONE"; _ADDcombo cmExpertVolume 1 "VOLUME_SPHERE"; _ADDcombo cmExpertVolume 2 "VOLUME_PLAN"; _ADDcombo cmExpertVolume 3 "VOLUME_LINE"; _SSELcombo cmExpertVolume getInfo l "typeVolEmitter"; _CBcombo cmExpertVolume @expert_volumeChoice 0; expert_volumeChoice nil nil nil getInfo l "typeMaskEmitter"; // VOLUME SPHERE set txtExpertVolumeSphereRadiusMsg = _CRtext _channel win 5 415 w-120 20 0 "Sphère : radius :"; let hd strextr getInfo l "vectorA" -> [a [b [c _]]] in set txtExpertVolumeSphereRadius = _CReditLine _channel win w-110 415 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER a; // VOLUME CÔNE set txtExpertVolumeConeMsg = _CRtext _channel win 5 415 w-120 40 0 "Cone : (L x l) x h :"; let switchstr l "vectorA" -> [a [b [c _]]] in ( set txtExpertVolumeConeLong = _CReditLine _channel win w-110 415 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER a; set txtExpertVolumeConeLarg = _CReditLine _channel win w-110 440 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER b; set txtExpertVolumeConeHaut = _CReditLine _channel win w-110 465 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER c; ); _SHOWtext txtExpertVolumeConeMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeLong WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeLarg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeConeHaut WINDOW_HIDDEN; // VOLUME PLAN set txtExpertVolumePlanMsg = _CRtext _channel win 5 415 w-120 40 0 "Volume Plan (L x l) :"; let switchstr l "vectorA" -> [a [b [c _]]] in ( set txtExpertVolumePlanLong = _CReditLine _channel win w-110 415 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER a; set txtExpertVolumePlanLarg = _CReditLine _channel win w-110 440 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER b; ); _SHOWtext txtExpertVolumePlanMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumePlanLong WINDOW_HIDDEN; _SHOWtext txtExpertVolumePlanLarg WINDOW_HIDDEN; // VOLUME LIGNE set txtExpertVolumeLineMsg = _CRtext _channel win 5 415 w-120 20 0 "Volume line (L) :"; let switchstr l "vectorA" -> [a [b [c _]]] in set txtExpertVolumeLineLong = _CReditLine _channel win w-110 415 105 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER a; _SHOWtext txtExpertVolumeLineMsg WINDOW_HIDDEN; _SHOWtext txtExpertVolumeLineLong WINDOW_HIDDEN; // EFFETS _CRtext _channel win 5 490 w-160 20 0 "!! EFFECT !!"; set cmExpertEffect = _CRcombo _channel win w-140 490 105 150 CB_NOEDIT|ET_ALIGN_RIGHT nil; _ADDcombo cmExpertEffect 0 "EFFECT_NONE"; _ADDcombo cmExpertEffect 1 "EFFECT_CONSTANT"; _ADDcombo cmExpertEffect 2 "EFFECT_ELECTRIC"; _ADDcombo cmExpertEffect 3 "EFFECT_MAGNETIC"; _ADDcombo cmExpertEffect 4 "EFFECT_HELICOID"; _ADDcombo cmExpertEffect 5 "EFFECT_CHAOTIC0"; _ADDcombo cmExpertEffect 6 "EFFECT_PLANCOLL"; _ADDcombo cmExpertEffect 7 "EFFECT_CHAOTIC1"; let if (getInfo l "typeFX") == nil then "EFFECT_NONE" else getInfo l "typeFX" -> s in _SSELcombo cmExpertEffect s; _CBcombo cmExpertEffect @expert_effectChoice 0; expert_effectChoice nil nil nil getInfo l "typeFX"; // EFFET CONSTANT set txtExpertEffectConstantMsg = _CRtext _channel win 5 515 w-10 20 0 "MSG EFFECT_CONSTANT"; let switchstr l "vectorFxA" -> [a [b [c _]]] in ( set txtExpertEffectConstantX = _CReditLine _channel win w-295 540 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER a; set txtExpertEffectConstantY = _CReditLine _channel win w-195 540 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER b; set txtExpertEffectConstantZ = _CReditLine _channel win w-95 540 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER c; ); // EFFET ELECTRIQUE set txtExpertEffectElectricMsg = _CRtext _channel win 5 515 w-10 40 0 "MSG EFFECT_ELECTRIC"; let switchstr l "vectorFxA" -> [a [b [c _]]] in let switchstr l "vectorFxB" -> [d [e [f _]]] in ( set txtExpertEffectElectricAX = _CReditLine _channel win w-295 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER a; set txtExpertEffectElectricAY = _CReditLine _channel win w-195 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER b; set txtExpertEffectElectricAZ = _CReditLine _channel win w-95 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER c; set txtExpertEffectElectricBX = _CReditLine _channel win w-95 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER d; ); _SHOWtext txtExpertEffectElectricMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectElectricBX WINDOW_HIDDEN; // EFFET MAGNETIQUE set txtExpertEffectMagneticMsg = _CRtext _channel win 5 515 w-10 40 0 "MSG EFFECT_MAGNETIC"; let switchstr l "vectorFxA" -> [a [b [c _]]] in let switchstr l "vectorFxB" -> [d [e [f _]]] in ( set txtExpertEffectMagneticAX = _CReditLine _channel win w-295 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER a; set txtExpertEffectMagneticAY = _CReditLine _channel win w-195 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER b; set txtExpertEffectMagneticAZ = _CReditLine _channel win w-95 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER c; set txtExpertEffectMagneticBX = _CReditLine _channel win w-95 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER d; ); _SHOWtext txtExpertEffectMagneticMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectMagneticBX WINDOW_HIDDEN; // EFFET CHAOTIQUE 0 set txtExpertEffectChaotic0Msg = _CRtext _channel win 5 515 w-10 40 0 "MSG EFFECT_CHAOTIC0"; let switchstr l "vectorFxA" -> [a [b [c _]]] in let switchstr l "vectorFxB" -> [d [e [f _]]] in ( set txtExpertEffectChaotic0AX = _CReditLine _channel win w-295 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER a; set txtExpertEffectChaotic0AY = _CReditLine _channel win w-195 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER b; set txtExpertEffectChaotic0AZ = _CReditLine _channel win w-95 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER c; set txtExpertEffectChaotic0BX = _CReditLine _channel win w-295 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER d; set txtExpertEffectChaotic0BY = _CReditLine _channel win w-195 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER e; set txtExpertEffectChaotic0BZ = _CReditLine _channel win w-95 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER f; ); _SHOWtext txtExpertEffectChaotic0Msg WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0AX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0AY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0AZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0BX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0BY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic0BZ WINDOW_HIDDEN; // EFFET CHAOTIQUE 1 set txtExpertEffectChaotic1Msg = _CRtext _channel win 5 515 w-10 40 0 "MSG EFFECT_CHAOTIC1"; let switchstr l "vectorFxA" -> [a [b [c _]]] in let switchstr l "vectorFxB" -> [d [e [f _]]] in ( set txtExpertEffectChaotic1AX = _CReditLine _channel win w-295 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER a; set txtExpertEffectChaotic1AY = _CReditLine _channel win w-195 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER b; set txtExpertEffectChaotic1AZ = _CReditLine _channel win w-95 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER c; set txtExpertEffectChaotic1BX = _CReditLine _channel win w-295 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER d; set txtExpertEffectChaotic1BY = _CReditLine _channel win w-195 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER e; set txtExpertEffectChaotic1BZ = _CReditLine _channel win w-95 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER f; ); _SHOWtext txtExpertEffectChaotic1Msg WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1AX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1AY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1AZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1BX WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1BY WINDOW_HIDDEN; _SHOWtext txtExpertEffectChaotic1BZ WINDOW_HIDDEN; // EFFET HELICOÃDAL set txtExpertEffectHelicoidMsg = _CRtext _channel win 5 515 w-10 40 0 "MSG_EFFECT_HELICOID"; let switchstr l "vectorFxA" -> [a [b [c _]]] in let switchstr l "vectorFxB" -> [d [e [f _]]] in ( set txtExpertEffectHelicoidAX = _CReditLine _channel win w-295 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER a; set txtExpertEffectHelicoidAY = _CReditLine _channel win w-195 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER b; set txtExpertEffectHelicoidAZ = _CReditLine _channel win w-95 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER c; set txtExpertEffectHelicoidBX = _CReditLine _channel win w-295 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER d; set txtExpertEffectHelicoidBY = _CReditLine _channel win w-195 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER e; set txtExpertEffectHelicoidBZ = _CReditLine _channel win w-95 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER f; ); _SHOWtext txtExpertEffectHelicoidMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidBX WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidBY WINDOW_HIDDEN; _SHOWtext txtExpertEffectHelicoidBZ WINDOW_HIDDEN; // EFFET PLANCOLL set txtExpertEffectPlancollMsg = _CRtext _channel win 5 515 w-10 40 0 "MSG EFFECT_PLANCOLL"; let switchstr l "vectorFxA" -> [a [b [c _]]] in let switchstr l "vectorFxB" -> [d [e [f _]]] in ( set txtExpertEffectPlancollAX = _CReditLine _channel win w-295 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER a; set txtExpertEffectPlancollAY = _CReditLine _channel win w-195 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER b; set txtExpertEffectPlancollAZ = _CReditLine _channel win w-95 560 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER c; set txtExpertEffectPlancollBX = _CReditLine _channel win w-295 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER d; set txtExpertEffectPlancollBY = _CReditLine _channel win w-195 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER e; set txtExpertEffectPlancollBZ = _CReditLine _channel win w-95 585 90 20 ET_DOWN|ET_ALIGN_RIGHT|ET_NUMBER f; ); _SHOWtext txtExpertEffectPlancollMsg WINDOW_HIDDEN; _SHOWtext txtExpertEffectPlancollAX WINDOW_HIDDEN; _SHOWtext txtExpertEffectPlancollAY WINDOW_HIDDEN; _SHOWtext txtExpertEffectPlancollAZ WINDOW_HIDDEN; _SHOWtext txtExpertEffectPlancollBX WINDOW_HIDDEN; _SHOWtext txtExpertEffectPlancollBY WINDOW_HIDDEN; _SHOWtext txtExpertEffectPlancollBZ WINDOW_HIDDEN; // PCL_BILLBOARD & PCL_RAINBOW set cExpertBillboard = _CRcheck _channel win 5 610 w-10 20 CH_LEFT "EXPERT_BILLBOARD :"; set cExpertRainbow = _CRcheck _channel win 5 635 w-10 20 CH_LEFT "EXPERT_RAINBOW :"; // MASSE _CRtext _channel win 5 660 w-60 20 0 "MASS :"; set txtExpertMasse = _CReditLine _channel win w-50 660 45 20 ET_DOWN|ET_ALIGN_RIGHT getInfo l "mass"; // Nombre de particules émises toutes les 100 frames ? _CRtext _channel win 5 685 w-60 20 0 "EXPERT_FRAMERATE :"; set cTxtRate = _CReditLine _channel win w-50 685 45 20 ET_DOWN|ET_ALIGN_RIGHT getInfo l "framerate"; // Affecter à tous les clients enregistrés ? set cExpertInitON = _CRcheck _channel win 5 710 w-10 20 CH_LEFT "New client is directly registered"; _SETcheck cExpertInitON if !strcmpi getInfo l "init" "on" then 1 else 0; _CRtext _channel win 5 735 w-10 40 ET_ALIGN_CENTER "Validate your configuration with appropriate button on main window before to close here"; win_paint win nil; 0 );; fun getSizes(l, out)= if l == nil then out else let hd l -> [taille _] in ( set out = (ftoa taille) :: out; getSizes tl l out );; fun closeedit() = let itoh colorInitClick -> hexcol in let htoi substr hexcol 0 2 -> r in let htoi substr hexcol 2 4 -> g in let htoi substr hexcol 4 6 -> b in let make_rgba r g b alphaInit -> col in let _GETcombo cmExpertEffect -> [ifx fx] in let _GETcombo cmExpertVolume -> [ivol vol] in let itoa _GETcheck cExpertBillboard -> billboard in let itoa _GETcheck cExpertRainbow -> rainbow in let if ivol == 0 then (_GETtext txtExpertVolumeConeLong) :: (_GETtext txtExpertVolumeConeLarg) :: (_GETtext txtExpertVolumeConeHaut) :: nil else if ivol == 1 then (_GETtext txtExpertVolumeSphereRadius) :: "0" :: "0" :: nil else if ivol == 2 then (_GETtext txtExpertVolumePlanLong) :: (_GETtext txtExpertVolumePlanLarg) :: "0" :: nil else if ivol == 3 then (_GETtext txtExpertVolumeLineLong) :: "0" :: "0" :: nil else nil -> vectorA in let if ifx == 0 then "0" :: "0" :: "0" :: nil else if ifx == 1 then (_GETtext txtExpertEffectConstantX) :: (_GETtext txtExpertEffectConstantY) :: (_GETtext txtExpertEffectConstantZ) :: nil else if ifx == 2 then (_GETtext txtExpertEffectElectricAX) :: (_GETtext txtExpertEffectElectricAY) :: (_GETtext txtExpertEffectElectricAZ) :: nil else if ifx == 3 then (_GETtext txtExpertEffectMagneticAX) :: (_GETtext txtExpertEffectMagneticAY) :: (_GETtext txtExpertEffectMagneticAZ) :: nil else if ifx == 4 then (_GETtext txtExpertEffectHelicoidAX) :: (_GETtext txtExpertEffectHelicoidAY) :: (_GETtext txtExpertEffectHelicoidAZ) :: nil else if ifx == 5 then (_GETtext txtExpertEffectChaotic0AX) :: (_GETtext txtExpertEffectChaotic0AY) :: (_GETtext txtExpertEffectChaotic0AZ) :: nil else if ifx == 6 then (_GETtext txtExpertEffectPlancollAX) :: (_GETtext txtExpertEffectPlancollAY) :: (_GETtext txtExpertEffectPlancollAZ) :: nil else if ifx == 7 then (_GETtext txtExpertEffectChaotic1AX) :: (_GETtext txtExpertEffectChaotic1AY) :: (_GETtext txtExpertEffectChaotic1AZ) :: nil else "0" :: "0" :: "0" :: nil -> vectorFxA in let if ifx == 0 then "0" :: "0" :: "0" :: nil else if ifx == 1 then "0" :: "0" :: "0" :: nil else if ifx == 2 then (_GETtext txtExpertEffectElectricBX) :: "0" :: "0" :: nil else if ifx == 3 then (_GETtext txtExpertEffectMagneticBX) :: "0" :: "0" :: nil else if ifx == 4 then (_GETtext txtExpertEffectHelicoidBX) :: (_GETtext txtExpertEffectHelicoidBY) :: (_GETtext txtExpertEffectHelicoidBZ) :: nil else if ifx == 5 then (_GETtext txtExpertEffectChaotic0BX) :: (_GETtext txtExpertEffectChaotic0BY) :: (_GETtext txtExpertEffectChaotic0BZ) :: nil else if ifx == 6 then (_GETtext txtExpertEffectPlancollBX) :: (_GETtext txtExpertEffectPlancollBY) :: (_GETtext txtExpertEffectPlancollBZ) :: nil else if ifx == 7 then (_GETtext txtExpertEffectChaotic1BX) :: (_GETtext txtExpertEffectChaotic1BY) :: (_GETtext txtExpertEffectChaotic1BZ) :: nil else "0" :: "0" :: "0" :: nil -> vectorFxB in let "0" :: "0" :: "0" :: nil -> vectorFxC in let (_GETtext fAvPosX) :: (_GETtext fAvPosY) :: (_GETtext fAvPosZ) :: nil -> posAv in strbuild ( "init" :: (let _GETcheck cExpertInitON -> x in if x then "on" else "off")::nil):: ( "initColor" :: (itoh col)::nil):: ( "initSizes" :: ( getSizes listSizes nil ) ):: ( "maxSize" :: (_GETtext txtSizeMax)::nil):: ( "colorCycle" :: (let _GETcheck cColorCycle -> x in if x then "on" else "off")::nil):: ( "sizeCycle" :: (let _GETcheck cSizeConst -> x in if x then "on" else "off")::nil):: ( "typeFX" :: fx :: nil):: ( "typeVolEmitter" :: vol :: nil):: ( "life" :: (_GETtext txtExpertInfinit) :: nil):: ( "typeParticle" :: billboard :: rainbow ::nil):: ( "vectorA" :: vectorA ):: ( "vectorB" :: "0":: "0" :: "0" :: nil ):: ( "vectorFxA" :: vectorFxA ) :: ( "vectorFxB" :: vectorFxB ) :: ( "vectorFxC" :: vectorFxC ) :: ( "mass" :: (_GETtext txtExpertMasse) :: nil ) :: ( "framerate" :: (_GETtext cTxtRate) :: nil ) :: ( "target" :: (itoa _GETcheck cExpertBillboard) :: nil ) :: ( "rainbow" :: (itoa _GETcheck cExpertRainbow) :: nil ) :: ( "png" :: (_GETtext ftxtPNG) :: nil ) :: ( "ftrans" :: ( ftoa (2.55 *. _GETsliderLeft fsliTrans )) :: nil ) :: ( "m3d" :: (_GETtext fm3dfile) :: nil ) :: ( "fm3dname" :: (_GETtext fm3dname) :: nil ) :: ( "m3d_fAv" :: (itoa _GETcheck fAv) :: nil ) :: ( "m3d_fAvPos" :: posAv ) :: nil ;; fun savesuppdmi(l) = if l==nil then nil else let l->[a n] in ("actionC"::(strcat a.nameInst ".edit")::nil):: ("actionC"::(strcat a.nameInst ".register")::nil):: ("actionC"::(strcat a.nameInst ".unregister")::nil):: ("eventC"::(strcat a.nameInst ".registered")::nil):: ("eventC"::(strcat a.nameInst ".unregistered")::nil):: savesuppdmi n ;; fun save(l)= [ nil /* registerF */ nil /* register */ ("plugin"::plugin::nil)::nil /* supplemental Dat */ savesuppdmi l /* supplemental Dmi */ ];; fun IniPlug(file) = set plugin=file; set class=getInfo strextr _getpack _checkpack file "name"; PlugRegister class @save nil @openedit @closeedit;;