// Read a LightGen text file // by Arnie Cachelin, NewTek, Inc. // Version 1.00 9/9/01 @version 2.1 @warnings @script generic curScene; generic { objDir = getdir("Content"); lightFileName = getfile("Load LightGen Text File","*.txt",objDir,true); if(lightFileName == nil) return; ltFile = File(lightFileName,"r"); if(ltFile == nil) { error("Cannot open LightGen text file \"",lightFileName,"\""); return; } var infostr, lites, lineCount = ltFile.linecount(); ltFile.line(1); var tokens = ltFile.parse(" "); if(tokens[1] != "Light0001:") { error("Not a valid LightGen text file \"",lightFileName,"\""); return; } lites = lineCount/4; prefix = "Environment"; type = 1; dist = 100; intenScale = 1.0; spec = 0; gl = 0; infostr = string(lites," Lights"); reqbegin("LightGen to LightWave"); reqsize(332,210); c0 = ctltext("LightGen File: "+lightFileName, infostr,""); ctlposition(c0,48,2,262,19); c1 = ctlstring("Light Name Prefix",prefix); ctlposition(c1,35,34,266,19); c2 = ctlpopup("Light Type",type,@"Distant","Point","Spot"@); ctlposition(c2,67,63,232,19); c3 = ctldistance("Distance",dist); ctlposition(c3,75,92,225,19); c4 = ctlpercent("Intensity Scale",intenScale); ctlposition(c4,48,121,252,19); c6 = ctlcheckbox("Affect OpenGL",gl); ctlposition(c6,44,150,100,19); c5 = ctlcheckbox("Affect Specularity",spec); ctlposition(c5,168,150,110,19); return if !reqpost(); prefix = getvalue(c1); type = getvalue(c2); dist = getvalue(c3); intenScale = getvalue(c4); spec = getvalue(c5); gl = getvalue(c6); reqend(); var lname, parNull, parId, i, lin=1; var red, green, blue, mx, intens, x, y, z; AddNull(string(prefix,"_Null")); curScene = Scene(); (parNull) = curScene.getSelect(); for(i=1; i<=lites; i += 1) { ltFile.line(lin); // name: lin++; lname = string(prefix,i); ltFile.line(lin); // color lin++; var tokens = ltFile.parse(" "); red = number(tokens[2]); green = number(tokens[3]); blue = number(tokens[4]); ltFile.line(lin); // direction lin++; var tokens = ltFile.parse(" "); x = number(tokens[2]); y = number(tokens[3]); z = number(tokens[4]); ltFile.line(lin); // blank lin++; if(type==1) AddDistantLight(lname); else if(type==3) AddSpotlight(lname); else AddPointLight(lname); parId = parNull.id; ParentItem(parId); TargetItem(parId); Position(-dist*x,-dist*y,-dist*z); if(spec==0) AffectSpecular(); // toggle to off if(gl==0) AffectOpenGL(); intens = max(red, green); mx = max(intens,blue); intens = mx*intenScale; red /= mx; green /= mx; blue /= mx; LightColor(red, green, blue); LightIntensity(intens); } }