/* ----------------------------------------------------------------------------- This source file is part of OpenSpace3D For the latest info, see http://www.openspace3d.com Copyright (c) 2012 I-maginer This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, or go to http://www.gnu.org/copyleft/lesser.txt ----------------------------------------------------------------------------- */ var SENV_SETTING_HELP_URL = "http://www.openspace3d.com/documentation/en/environementsetting.html";; typeof winEnvSetup = [EdWindow EdToolBar CompCheck];; fun environmentLoadEnv(envstr, targetenvironmentstr, sessionstr)= let XMLgetMarkByValueFromMarkSons envstr "dynamicEnv" -> dynenvstr in let XMLgetBoolParam dynenvstr "enable" -> envenable in let XMLgetMarkByValueFromMarkSons dynenvstr "date" -> datestr in let XMLgetBoolParam datestr "current" -> datecurrent in let atoi XMLgetParam datestr "year" -> dateyear in let atoi XMLgetParam datestr "month" -> datemonth in let atoi XMLgetParam datestr "day" -> dateday in let atoi XMLgetParam datestr "hours" -> datehours in let atoi XMLgetParam datestr "minutes" -> dateminutes in let atof XMLgetParam datestr "timeSpeed" -> datetimespeed in let XMLgetMarkByValueFromMarkSons dynenvstr "location" -> locationstr in let XMLgetParam locationstr "country" -> loccountry in let XMLgetParam locationstr "city" -> loccity in let atof XMLgetParam locationstr "longitude" -> loclongitude in let atof XMLgetParam locationstr "latitude" -> loclatitude in let XMLgetMarkByValueFromMarkSons dynenvstr "sun" -> sunstr in let XMLgetBoolParam sunstr "enable" -> sunenable in let XMLgetMarkByValueFromMarkSons sunstr "lightColour" -> suncolorstr in let make_rgba (ftoi ((atof XMLgetParam suncolorstr "r") *. 255.0)) (ftoi ((atof XMLgetParam suncolorstr "g") *. 255.0)) (ftoi ((atof XMLgetParam suncolorstr "b") *. 255.0)) 0 -> suncolor in let XMLgetMarkByValueFromMarkSons dynenvstr "moon" -> moonstr in let XMLgetBoolParam moonstr "enable" -> moonenable in let XMLgetParam moonstr "texture" -> moontexture in let XMLgetMarkByValueFromMarkSons moonstr "lightColour" -> mooncolorstr in let make_rgba (ftoi ((atof XMLgetParam mooncolorstr "r") *. 255.0)) (ftoi ((atof XMLgetParam mooncolorstr "g") *. 255.0)) (ftoi ((atof XMLgetParam mooncolorstr "b") *. 255.0)) 0 -> mooncolor in let XMLgetMarkByValueFromMarkSons dynenvstr "weather" -> weatherstr in let atof XMLgetParam weatherstr "humidity" -> weatherhumidity in let XMLgetMarkByValueFromMarkSons weatherstr "wind" -> windstr in let atof XMLgetParam windstr "xDirection" -> windxdirection in let atof XMLgetParam windstr "yDirection" -> windydirection in let atof XMLgetParam windstr "speed" -> windspeed in let XMLgetMarkByValueFromMarkSons dynenvstr "sky" -> skystr in let XMLgetBoolParam skystr "enable" -> skyenable in let XMLgetBoolParam skystr "hdr" -> skyhdr in let if ((XMLgetParam skystr "3dclouds") == nil) then XMLgetBoolParam skystr "clouds3d" else XMLgetBoolParam skystr "3dclouds" -> sky3dclouds in let XMLgetBoolParam skystr "lightning" -> skylightning in let atof XMLgetParam skystr "cloudsCeiling" -> skyceiling in let XMLgetParam skystr "starsTexture" -> skystarstexture in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in let XMLgetBoolParam waterstr "enable" -> waterenable in let XMLgetBoolParam waterstr "underWater" -> waterunder in let XMLgetBoolParam waterstr "foam" -> waterfoam in let XMLgetBoolParam waterstr "caustics" -> watercaustics in let atof XMLgetParam waterstr "causticsPower" -> watercausticspower in let if watercausticspower == nil then 10.0 else watercausticspower -> watercausticspower in let atof XMLgetParam waterstr "waveStrength" -> waterstrength in let if waterstrength == nil then 0.35000 else waterstrength -> waterstrength in let atof XMLgetParam waterstr "choppyStrength" -> waterchoppy in let if waterchoppy == nil then 0.03750 else waterchoppy -> waterchoppy in let atof XMLgetParam waterstr "waveScale" -> waterscale in let if waterscale == nil then 0.85000 else waterscale -> waterscale in let atoi XMLgetParam waterstr "waveComplexity" -> watercomplexity in let if watercomplexity == nil then 256 else watercomplexity -> watercomplexity in let atof XMLgetParam waterstr "level" -> waterlevel in let if waterlevel == nil then 0.0 else waterlevel -> waterlevel in let atof XMLgetParam waterstr "depth" -> waterdepth in let if waterdepth == nil then 9.0 else waterdepth -> waterdepth in let XMLgetMarkByValueFromMarkSons waterstr "waterColour" -> watercolorstr in let make_rgba (ftoi ((atof XMLgetParam watercolorstr "r") *. 255.0)) (ftoi ((atof XMLgetParam watercolorstr "g") *. 255.0)) (ftoi ((atof XMLgetParam watercolorstr "b") *. 255.0)) 0 -> watercolor in ( if (dynenvstr == nil) then nil else let XMLgetMarkByValueFromMarkSons targetenvironmentstr "dynamicEnv" -> targetdynenvstr in let if targetdynenvstr != nil then targetdynenvstr else XMLaddMark xmlEditSceneFile "dynamicEnv" targetenvironmentstr nil nil -> targetdynenvstr in let XMLgetMarkByValueFromMarkSons targetdynenvstr "date" -> targetdatestr in let if targetdatestr != nil then targetdatestr else XMLaddMark xmlEditSceneFile "date" targetdynenvstr nil nil -> targetdatestr in let XMLgetMarkByValueFromMarkSons targetdynenvstr "location" -> targetlocationstr in let if targetlocationstr != nil then targetlocationstr else XMLaddMark xmlEditSceneFile "location" targetdynenvstr nil nil -> targetlocationstr in let XMLgetMarkByValueFromMarkSons targetdynenvstr "sun" -> targetsunstr in let if targetsunstr != nil then targetsunstr else XMLaddMark xmlEditSceneFile "sun" targetdynenvstr nil nil -> targetsunstr in let XMLgetMarkByValueFromMarkSons targetsunstr "lightColour" -> targetsuncolorstr in let if targetsuncolorstr != nil then targetsuncolorstr else XMLaddMark xmlEditSceneFile "lightColour" targetsunstr nil nil -> targetsuncolorstr in let XMLgetMarkByValueFromMarkSons targetdynenvstr "moon" -> targetmoonstr in let if targetmoonstr != nil then targetmoonstr else XMLaddMark xmlEditSceneFile "moon" targetdynenvstr nil nil -> targetmoonstr in let XMLgetMarkByValueFromMarkSons targetmoonstr "lightColour" -> targetmooncolorstr in let if targetmooncolorstr != nil then targetmooncolorstr else XMLaddMark xmlEditSceneFile "lightColour" targetmoonstr nil nil -> targetmooncolorstr in let XMLgetMarkByValueFromMarkSons targetdynenvstr "weather" -> targetweatherstr in let if targetweatherstr != nil then targetweatherstr else XMLaddMark xmlEditSceneFile "weather" targetdynenvstr nil nil -> targetweatherstr in let XMLgetMarkByValueFromMarkSons targetweatherstr "wind" -> targetwindstr in let if targetwindstr != nil then targetwindstr else XMLaddMark xmlEditSceneFile "wind" targetweatherstr nil nil -> targetwindstr in let XMLgetMarkByValueFromMarkSons targetdynenvstr "sky" -> targetskystr in let if targetskystr != nil then targetskystr else XMLaddMark xmlEditSceneFile "sky" targetdynenvstr nil nil -> targetskystr in let XMLgetMarkByValueFromMarkSons targetdynenvstr "water" -> targetwaterstr in let if targetwaterstr != nil then targetwaterstr else XMLaddMark xmlEditSceneFile "water" targetdynenvstr nil nil -> targetwaterstr in let XMLgetMarkByValueFromMarkSons targetwaterstr "waterColour" -> targetwatercolorstr in let if targetwatercolorstr != nil then targetwatercolorstr else XMLaddMark xmlEditSceneFile "waterColour" targetwaterstr nil nil -> targetwatercolorstr in ( XMLsetParam targetdynenvstr "enable" (XMLgetBoolString envenable); XMLsetParam targetdatestr "current" (XMLgetBoolString datecurrent); XMLsetParam targetdatestr "year" (itoa dateyear); XMLsetParam targetdatestr "month" (itoa datemonth); XMLsetParam targetdatestr "day" (itoa dateday); XMLsetParam targetdatestr "hours" (itoa datehours); XMLsetParam targetdatestr "minutes" (itoa dateminutes); XMLsetParam targetdatestr "timeSpeed" (XMLgetShortFloatToString datetimespeed); SO3EnvironmentSetPaused (V3DgetSession sessionstr) 1; SO3EnvironmentSetTimeSpeedFactor (V3DgetSession sessionstr) datetimespeed; SO3EnvironmentSetDateTime (V3DgetSession sessionstr) dateyear datemonth dateday datehours dateminutes 0; XMLsetParam targetlocationstr "country" loccountry; XMLsetParam targetlocationstr "city" loccity; XMLsetParam targetlocationstr "longitude" (XMLgetShortFloatToString loclongitude); XMLsetParam targetlocationstr "latitude" (XMLgetShortFloatToString loclatitude); SO3EnvironmentSetLongitude (V3DgetSession sessionstr) loclongitude; SO3EnvironmentSetLatitude (V3DgetSession sessionstr) loclatitude; XMLsetParam targetsunstr "enable" (XMLgetBoolString sunenable); XMLsetParam targetsuncolorstr "r" (XMLgetParam suncolorstr "r"); XMLsetParam targetsuncolorstr "g" (XMLgetParam suncolorstr "g"); XMLsetParam targetsuncolorstr "b" (XMLgetParam suncolorstr "b"); //TODO enable sun SO3SunSetLightColor (V3DgetSession sessionstr) suncolor; XMLsetParam targetmoonstr "enable" (XMLgetBoolString moonenable); XMLsetParam targetmoonstr "texture" moontexture; XMLsetParam targetmooncolorstr "r" (XMLgetParam mooncolorstr "r"); XMLsetParam targetmooncolorstr "g" (XMLgetParam mooncolorstr "g"); XMLsetParam targetmooncolorstr "b" (XMLgetParam mooncolorstr "b"); //TODO enable moon SO3MoonSetLightColor (V3DgetSession sessionstr) mooncolor; XMLsetParam targetweatherstr "humidity" (XMLgetShortFloatToString weatherhumidity); XMLsetParam targetwindstr "xDirection" (XMLgetShortFloatToString windxdirection); XMLsetParam targetwindstr "yDirection" (XMLgetShortFloatToString windydirection); XMLsetParam targetwindstr "speed" (XMLgetShortFloatToString windspeed); SO3EnvironmentSetHumidity (V3DgetSession sessionstr) weatherhumidity; SO3EnvironmentSetWindDirection (V3DgetSession sessionstr) windxdirection windydirection; SO3EnvironmentSetWindSpeed (V3DgetSession sessionstr) windspeed; XMLsetParam targetskystr "enable" (XMLgetBoolString skyenable); XMLsetParam targetskystr "hdr" (XMLgetBoolString skyhdr); XMLsetParam targetskystr "clouds3d" (XMLgetBoolString sky3dclouds); XMLsetParam targetskystr "lightning" (XMLgetBoolString skylightning); XMLsetParam targetskystr "cloudsCeiling" (XMLgetShortFloatToString skyceiling); XMLsetParam targetskystr "starsTexture" skystarstexture; SO3SkySetEnable (V3DgetSession sessionstr) skyenable; SO3SkySetHdrEnable (V3DgetSession sessionstr) skyhdr; SO3SkySetCloudCeiling (V3DgetSession sessionstr) skyceiling; if (sky3dclouds) then ( SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_LAYERER_CLOUD 1; SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_VOLUMETRIC_CLOUD 1; SO3SkySetLightningEnable (V3DgetSession sessionstr) skylightning; if ((sizelist SO3SkyGetLayeredCloudIndexes (V3DgetSession sessionstr)) > 0) then nil else SO3SkyAddLayeredCloud (V3DgetSession sessionstr); 0; ) else ( SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_LAYERER_CLOUD 1; if ((sizelist SO3SkyGetLayeredCloudIndexes (V3DgetSession sessionstr)) > 0) then nil else SO3SkyAddLayeredCloud (V3DgetSession sessionstr); 0; ); //TODO stars texture XMLsetParam targetwaterstr "enable" (XMLgetBoolString waterenable); XMLsetParam targetwaterstr "underWater" (XMLgetBoolString waterunder); XMLsetParam targetwaterstr "foam" (XMLgetBoolString waterfoam); XMLsetParam targetwaterstr "caustics" (XMLgetBoolString watercaustics); XMLsetParam targetwaterstr "causticsPower" (XMLgetShortFloatToString watercausticspower); XMLsetParam targetwaterstr "waveStrength" (XMLgetShortFloatToString waterstrength); XMLsetParam targetwaterstr "choppyStrength" (XMLgetShortFloatToString waterchoppy); XMLsetParam targetwaterstr "waveScale" (XMLgetShortFloatToString waterscale); XMLsetParam targetwaterstr "waveComplexity" (itoa watercomplexity); XMLsetParam targetwaterstr "level" (XMLgetShortFloatToString waterlevel); XMLsetParam targetwaterstr "depth" (XMLgetShortFloatToString waterdepth); XMLsetParam targetwatercolorstr "r" (XMLgetParam watercolorstr "r"); XMLsetParam targetwatercolorstr "g" (XMLgetParam watercolorstr "g"); XMLsetParam targetwatercolorstr "b" (XMLgetParam watercolorstr "b"); SO3WaterComponentSetEnabled (V3DgetSession sessionstr) SO3_WATER_COMPONENT_UNDERWATER waterunder; SO3WaterComponentSetEnabled (V3DgetSession sessionstr) SO3_WATER_COMPONENT_FOAM waterfoam; SO3WaterComponentSetEnabled (V3DgetSession sessionstr) SO3_WATER_COMPONENT_CAUSTICS watercaustics; SO3WaterSetCausticsParameters (V3DgetSession sessionstr) 100.0 /. (if waterscale >. 0.0 then waterscale else 1.0) watercausticspower nil; SO3WaterSetPerlinNoiseParameters (V3DgetSession sessionstr) waterscale nil nil nil nil nil nil; SO3WaterSetGeometryComplexity (V3DgetSession sessionstr) watercomplexity; SO3WaterSetWaveParameters (V3DgetSession sessionstr) waterstrength nil waterchoppy; SO3WaterSetPosition (V3DgetSession sessionstr) [0.0 waterlevel 0.0]; SO3WaterSetDepthParameters (V3DgetSession sessionstr) (waterdepth /. 2.0) waterdepth; SO3WaterSetColor (V3DgetSession sessionstr) watercolor; SO3WaterSetEnable (V3DgetSession sessionstr) waterenable; ); ); 0;; fun environmentRefreshSceneGraph(sessionstr, defaultviewportstr)= let SO3SkyGetLayeredCloudIndexes (V3DgetSession sessionstr) -> lclayer in while (lclayer != nil) do ( SO3SkyRemoveLayeredCloud (V3DgetSession sessionstr) hd lclayer; set lclayer = tl lclayer; ); SO3EnvironmentUnregisterViewport (V3DgetSession sessionstr) defaultviewportstr.V3D_viewport; SO3EnvironmentSetEnable (V3DgetSession sessionstr) 0; 0;; fun environmentDestroySetting()= let winEnvSetup -> [winstr _ _] in dsEdWindow winstr; set winEnvSetup = nil; 0;; fun environmentPlaySceneGraph(envstr, defaultviewportstr, sessionstr)= let XMLgetMarkByValueFromMarkSons envstr "dynamicEnv" -> dynenvstr in if dynenvstr == nil then nil else ( // Apply dynamic env let XMLgetBoolParam dynenvstr "enable" -> envenable in let XMLgetMarkByValueFromMarkSons dynenvstr "date" -> datestr in let XMLgetBoolParam datestr "current" -> datecurrent in let atoi XMLgetParam datestr "year" -> dateyear in let atoi XMLgetParam datestr "month" -> datemonth in let atoi XMLgetParam datestr "day" -> dateday in let atoi XMLgetParam datestr "hours" -> datehours in let atoi XMLgetParam datestr "minutes" -> dateminutes in let atof XMLgetParam datestr "timeSpeed" -> datetimespeed in let XMLgetMarkByValueFromMarkSons dynenvstr "location" -> locationstr in let atof XMLgetParam locationstr "longitude" -> loclongitude in let atof XMLgetParam locationstr "latitude" -> loclatitude in let XMLgetMarkByValueFromMarkSons dynenvstr "sun" -> sunstr in let XMLgetBoolParam sunstr "enable" -> sunenable in let XMLgetMarkByValueFromMarkSons sunstr "lightColour" -> suncolorstr in let make_rgba (ftoi ((atof XMLgetParam suncolorstr "r") *. 255.0)) (ftoi ((atof XMLgetParam suncolorstr "g") *. 255.0)) (ftoi ((atof XMLgetParam suncolorstr "b") *. 255.0)) 0 -> suncolor in let XMLgetMarkByValueFromMarkSons dynenvstr "moon" -> moonstr in let XMLgetBoolParam moonstr "enable" -> moonenable in let XMLgetParam moonstr "texture" -> moontexture in let XMLgetMarkByValueFromMarkSons moonstr "lightColour" -> mooncolorstr in let make_rgba (ftoi ((atof XMLgetParam mooncolorstr "r") *. 255.0)) (ftoi ((atof XMLgetParam mooncolorstr "g") *. 255.0)) (ftoi ((atof XMLgetParam mooncolorstr "b") *. 255.0)) 0 -> mooncolor in let XMLgetMarkByValueFromMarkSons dynenvstr "weather" -> weatherstr in let atof XMLgetParam weatherstr "humidity" -> weatherhumidity in let XMLgetMarkByValueFromMarkSons weatherstr "wind" -> windstr in let atof XMLgetParam windstr "xDirection" -> windxdirection in let atof XMLgetParam windstr "yDirection" -> windydirection in let atof XMLgetParam windstr "speed" -> windspeed in let XMLgetMarkByValueFromMarkSons dynenvstr "sky" -> skystr in let XMLgetBoolParam skystr "enable" -> skyenable in let XMLgetBoolParam skystr "hdr" -> skyhdr in let XMLgetBoolParam skystr "clouds3d" -> sky3dclouds in let XMLgetBoolParam skystr "lightning" -> skylightning in let atof XMLgetParam skystr "cloudsCeiling" -> skyceiling in let XMLgetParam skystr "starsTexture" -> skystarstexture in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in let XMLgetBoolParam waterstr "enable" -> waterenable in let XMLgetBoolParam waterstr "underWater" -> waterunder in let XMLgetBoolParam waterstr "foam" -> waterfoam in let XMLgetBoolParam waterstr "caustics" -> watercaustics in let atof XMLgetParam waterstr "causticsPower" -> watercausticspower in let atof XMLgetParam waterstr "waveStrength" -> waterstrength in let atof XMLgetParam waterstr "choppyStrength" -> waterchoppy in let atof XMLgetParam waterstr "waveScale" -> waterscale in let atoi XMLgetParam waterstr "waveComplexity" -> watercomplexity in let atof XMLgetParam waterstr "level" -> waterlevel in let atof XMLgetParam waterstr "depth" -> waterdepth in let XMLgetMarkByValueFromMarkSons waterstr "waterColour" -> watercolorstr in let make_rgba (ftoi ((atof XMLgetParam watercolorstr "r") *. 255.0)) (ftoi ((atof XMLgetParam watercolorstr "g") *. 255.0)) (ftoi ((atof XMLgetParam watercolorstr "b") *. 255.0)) 0 -> watercolor in ( SO3EnvironmentRegisterViewport (V3DgetSession sessionstr) defaultviewportstr.V3D_viewport; if(!datecurrent) then ( SO3EnvironmentSetDateTime (V3DgetSession sessionstr) dateyear datemonth dateday datehours dateminutes 0; SO3EnvironmentSetTimeSpeedFactor (V3DgetSession sessionstr) datetimespeed; ) else ( let getCurrentDateTime 1 -> [day month year hours minutes seconds] in SO3EnvironmentSetDateTime (V3DgetSession sessionstr) year month day hours minutes seconds; SO3EnvironmentSetTimeSpeedFactor (V3DgetSession sessionstr) 1.0; 0; ); SO3EnvironmentSetLongitude (V3DgetSession sessionstr) loclongitude; SO3EnvironmentSetLatitude (V3DgetSession sessionstr) loclatitude; //TODO enable sun SO3SunSetLightColor (V3DgetSession sessionstr) suncolor; //TODO enable moon SO3MoonSetLightColor (V3DgetSession sessionstr) mooncolor; SO3EnvironmentSetHumidity (V3DgetSession sessionstr) weatherhumidity; SO3EnvironmentSetWindDirection (V3DgetSession sessionstr) windxdirection windydirection; SO3EnvironmentSetWindSpeed (V3DgetSession sessionstr) windspeed; SO3SkySetHdrEnable (V3DgetSession sessionstr) skyhdr; SO3SkySetCloudCeiling (V3DgetSession sessionstr) skyceiling; if (sky3dclouds) then ( SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_VOLUMETRIC_CLOUD 1; SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_LAYERER_CLOUD 1; SO3SkySetLightningEnable (V3DgetSession sessionstr) skylightning; if ((sizelist SO3SkyGetLayeredCloudIndexes (V3DgetSession sessionstr)) > 0) then nil else SO3SkyAddLayeredCloud (V3DgetSession sessionstr); 0; ) else ( SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_LAYERER_CLOUD 1; SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_VOLUMETRIC_CLOUD 0; if ((sizelist SO3SkyGetLayeredCloudIndexes (V3DgetSession sessionstr)) > 0) then nil else SO3SkyAddLayeredCloud (V3DgetSession sessionstr); 0; ); //TODO stars texture SO3WaterComponentSetEnabled (V3DgetSession sessionstr) SO3_WATER_COMPONENT_UNDERWATER waterunder; SO3WaterComponentSetEnabled (V3DgetSession sessionstr) SO3_WATER_COMPONENT_FOAM waterfoam; SO3WaterComponentSetEnabled (V3DgetSession sessionstr) SO3_WATER_COMPONENT_CAUSTICS watercaustics; SO3WaterSetPerlinNoiseParameters (V3DgetSession sessionstr) waterscale nil nil nil nil nil nil; SO3WaterSetGeometryComplexity (V3DgetSession sessionstr) watercomplexity; SO3WaterSetWaveParameters (V3DgetSession sessionstr) waterstrength nil waterchoppy; SO3WaterSetPosition (V3DgetSession sessionstr) [0.0 waterlevel 0.0]; SO3WaterSetDepthParameters (V3DgetSession sessionstr) (waterdepth /. 2.0) waterdepth; SO3WaterSetColor (V3DgetSession sessionstr) watercolor; SO3WaterSetCausticsParameters (V3DgetSession sessionstr) 100.0 /. (if waterscale >. 0.0 then waterscale else 1.0) watercausticspower nil; SO3EnvironmentSetEnable (V3DgetSession sessionstr) envenable; SO3EnvironmentSetPaused (V3DgetSession sessionstr) !envenable; if (!envenable) then nil else V3DuseDefaultLight sessionstr 0; ); ); 0;; /* ********************************************************************************************* / Environment / ********************************************************************************************* */ fun cbTbBtnEnvSettingHelp(tbstr, check, btn, mask)= _openbrowserhttp SENV_SETTING_HELP_URL; 0;; /** cbDestroyEnvSetupWin [EdWindow] I * callback on destroy environment window * * private * * return 0 **/ fun cbDestroyEnvSetupWin(winstr, viewstr)= set winEnvSetup = nil; let V3DgetDefaultSession viewstr -> sessionstr in let V3DgetDefaultViewport viewstr -> defaultviewportstr in ( let SO3SkyGetLayeredCloudIndexes (V3DgetSession sessionstr) -> lclayer in while (lclayer != nil) do ( SO3SkyRemoveLayeredCloud (V3DgetSession sessionstr) hd lclayer; set lclayer = tl lclayer; ); SO3EnvironmentUnregisterViewport (V3DgetSession sessionstr) defaultviewportstr.V3D_viewport; SO3EnvironmentSetTimeSpeedFactor (V3DgetSession sessionstr) 0.0; SO3EnvironmentSetEnable (V3DgetSession sessionstr) 0; V3DuseDefaultLight sessionstr bLastDefaultLightState; V3DshowObjectHelper viewstr sessionstr (V3DgetDefaultLight sessionstr) iTypeLight bLastDefaultLightState; ); 0;; fun cbEnvSetupCountry(ctrl, pos, elem, p)= let p -> [[viewstr val type markstr] rootmark ctrlcity ctrllatitude ctrllongitude] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "location" -> locationstr in ( resetEdCtrlSelect ctrlcity; let XMLgetMarkByParamValueFromMarkSons rootmark "name" elem -> cmark in ( let cmark.XMLsons -> lcities in while (lcities != nil) do ( let hd lcities -> citymark in let XMLgetParam citymark "name" -> cname in ( addEdCtrlSelect ctrlcity cname; ); set lcities = tl lcities; ); let hd cmark.XMLsons -> citymark in let atof XMLgetParam citymark "latitude" -> lat in let atof XMLgetParam citymark "longitude" -> long in ( setEdCtrlFloatValue ctrllatitude lat; setEdCtrlFloatValue ctrllongitude long; XMLsetParam locationstr "country" elem; XMLsetParam locationstr "city" (XMLgetParam citymark "name"); XMLsetParam locationstr "latitude" XMLgetShortFloatToString lat; XMLsetParam locationstr "longitude" XMLgetShortFloatToString long; SO3EnvironmentSetLatitude (V3DgetSession sessionstr) lat; SO3EnvironmentSetLongitude (V3DgetSession sessionstr) long; ); selectEdCtrlSelectByPos ctrlcity 0; ); ); 0;; fun cbEnvSetupCity(ctrl, pos, elem, p)= let p -> [[viewstr val type markstr] rootmark ctrlcountry ctrllatitude ctrllongitude] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "location" -> locationstr in let getSelectedEdCtrlSelect ctrlcountry -> country in ( let XMLgetMarkByParamValueFromMarkSons rootmark "name" country -> cmark in let XMLgetMarkByParamValueFromMarkSons cmark "name" elem -> citymark in let atof XMLgetParam citymark "latitude" -> lat in let atof XMLgetParam citymark "longitude" -> long in ( setEdCtrlFloatValue ctrllatitude lat; setEdCtrlFloatValue ctrllongitude long; XMLsetParam locationstr "city" elem; XMLsetParam locationstr "latitude" XMLgetShortFloatToString lat; XMLsetParam locationstr "longitude" XMLgetShortFloatToString long; SO3EnvironmentSetLatitude (V3DgetSession sessionstr) lat; SO3EnvironmentSetLongitude (V3DgetSession sessionstr) long; ); ); 0;; fun cbEnvSetupLatitude(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "location" -> locationstr in ( XMLsetParam locationstr "latitude" XMLgetShortFloatToString value; SO3EnvironmentSetLatitude (V3DgetSession sessionstr) value; ); 0;; fun cbEnvSetupLongitude(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "location" -> locationstr in ( XMLsetParam locationstr "longitude" XMLgetShortFloatToString value; SO3EnvironmentSetLongitude (V3DgetSession sessionstr) value; ); 0;; fun cbEnvSetupPlayPause(tbstr, check, btn, mask, state, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "date" -> datestr in let XMLgetBoolParam datestr "current" -> datecurrent in let atoi XMLgetParam datestr "year" -> dateyear in let atoi XMLgetParam datestr "month" -> datemonth in let atoi XMLgetParam datestr "day" -> dateday in let atoi XMLgetParam datestr "hours" -> datehours in let atoi XMLgetParam datestr "minutes" -> dateminutes in let if dateyear == nil then (getCurrentDateTime 1) else [dateday datemonth dateyear datehours dateminutes nil] -> [dateday datemonth dateyear datehours dateminutes _] in let atof XMLgetParam datestr "timeSpeed" -> datetimespeed in let XMLgetMarkByValueFromMarkSons dynenvstr "sky" -> skystr in let XMLgetBoolParam skystr "enable" -> skyenable in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in let XMLgetBoolParam waterstr "enable" -> waterenable in if (state) then ( SO3EnvironmentRegisterViewport (V3DgetSession sessionstr) viewportstr.V3D_viewport; if(datecurrent) then ( let getCurrentDateTime 1 -> [day month year hours minutes seconds] in SO3EnvironmentSetDateTime (V3DgetSession sessionstr) year month day hours minutes seconds; SO3EnvironmentSetTimeSpeedFactor (V3DgetSession sessionstr) 1.0; 0; ) else ( SO3EnvironmentSetDateTime (V3DgetSession sessionstr) dateyear datemonth dateday datehours dateminutes 0; 0; ); SO3EnvironmentSetEnable (V3DgetSession sessionstr) 1; SO3EnvironmentSetPaused (V3DgetSession sessionstr) 0; V3DshowObjectHelper viewstr sessionstr (V3DgetDefaultLight sessionstr) nil 0; V3DuseDefaultLight sessionstr 0; 0; ) else ( SO3EnvironmentSetPaused (V3DgetSession sessionstr) 1; 0; ); 0;; fun cbEnvSetupStop(tbstr, check, btn, mask, p)= let p -> [[viewstr val type markstr] chkplaypause] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in ( SO3EnvironmentUnregisterViewport (V3DgetSession sessionstr) viewportstr.V3D_viewport; SO3EnvironmentSetEnable (V3DgetSession sessionstr) 0; V3DuseDefaultLight sessionstr bLastDefaultLightState; V3DshowObjectHelper viewstr sessionstr (V3DgetDefaultLight sessionstr) iTypeLight !bLastDefaultLightState; setEdToolBarCheckState tbstr chkplaypause 0; ); 0;; fun cbEnvSetupEnable(ctrlstr, state, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in ( XMLsetParam dynenvstr "enable" XMLgetBoolString state; ); 0;; fun cbEnvSetupCurrentTime(ctrlstr, state, p)= let p -> [[viewstr val type markstr] ctrldate ctrlhours ctrlminutes ctrltimespeed] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "date" -> datestr in let atoi XMLgetParam datestr "year" -> dateyear in let atoi XMLgetParam datestr "month" -> datemonth in let atoi XMLgetParam datestr "day" -> dateday in let atoi XMLgetParam datestr "hours" -> datehours in let atoi XMLgetParam datestr "minutes" -> dateminutes in let if dateyear == nil then (getCurrentDateTime 1) else [dateday datemonth dateyear datehours dateminutes nil] -> [dateday datemonth dateyear datehours dateminutes _] in let atof XMLgetParam datestr "timeSpeed" -> datetimespeed in ( XMLsetParam datestr "current" XMLgetBoolString state; if(state) then ( let getCurrentDateTime 1 -> [day month year hours minutes seconds] in SO3EnvironmentSetDateTime (V3DgetSession sessionstr) year month day hours minutes seconds; SO3EnvironmentSetTimeSpeedFactor (V3DgetSession sessionstr) 1.0; setEdCtrlDateEnable ctrldate 0; setEdCtrlFloatEnable ctrlhours 0; setEdCtrlFloatEnable ctrlminutes 0; setEdCtrlFloatEnable ctrltimespeed 0; 0; ) else ( SO3EnvironmentSetDateTime (V3DgetSession sessionstr) dateyear datemonth dateday datehours dateminutes 0; SO3EnvironmentSetTimeSpeedFactor (V3DgetSession sessionstr) datetimespeed; setEdCtrlDateEnable ctrldate 1; setEdCtrlFloatEnable ctrlhours 1; setEdCtrlFloatEnable ctrlminutes 1; setEdCtrlFloatEnable ctrltimespeed 1; 0; ); ); 0;; fun cbEnvSetupDate(ctrlstr, day, month, year, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "date" -> datestr in let atoi XMLgetParam datestr "hours" -> datehours in let atoi XMLgetParam datestr "minutes" -> dateminutes in ( XMLsetParam datestr "year" itoa year; XMLsetParam datestr "month" itoa month; XMLsetParam datestr "day" itoa day; SO3EnvironmentSetDateTime (V3DgetSession sessionstr) year month day datehours dateminutes 0; ); 0;; fun cbEnvSetupDateHours(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "date" -> datestr in let atoi XMLgetParam datestr "year" -> dateyear in let atoi XMLgetParam datestr "month" -> datemonth in let atoi XMLgetParam datestr "day" -> dateday in let atoi XMLgetParam datestr "minutes" -> dateminutes in let ftoi value -> hours in ( XMLsetParam datestr "hours" itoa hours; SO3EnvironmentSetDateTime (V3DgetSession sessionstr) dateyear datemonth dateday hours dateminutes 0; ); 0;; fun cbEnvSetupDateMinutes(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "date" -> datestr in let atoi XMLgetParam datestr "year" -> dateyear in let atoi XMLgetParam datestr "month" -> datemonth in let atoi XMLgetParam datestr "day" -> dateday in let atoi XMLgetParam datestr "hours" -> datehours in let ftoi value -> minutes in ( XMLsetParam datestr "minutes" itoa minutes; SO3EnvironmentSetDateTime (V3DgetSession sessionstr) dateyear datemonth dateday datehours minutes 0; ); 0;; fun cbEnvSetupTimeSpeed(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "date" -> datestr in ( XMLsetParam datestr "timeSpeed" XMLgetShortFloatToString value; SO3EnvironmentSetTimeSpeedFactor (V3DgetSession sessionstr) value; ); 0;; fun cbEnvSetupSunLightColor(ctrlstr, color, p)= if color == nil then nil else let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "sun" -> sunstr in let XMLgetMarkByValueFromMarkSons sunstr "lightColour" -> suncolorstr in let G2Dgetrgb color -> [r g b] in let ftoa ((itof r) /. 255.0) -> fr in let ftoa ((itof g) /. 255.0) -> fg in let ftoa ((itof b) /. 255.0) -> fb in ( XMLsetParam suncolorstr "r" fr; XMLsetParam suncolorstr "g" fg; XMLsetParam suncolorstr "b" fb; SO3SunSetLightColor (V3DgetSession sessionstr) G2Drgb2rgba color 0; ); 0;; fun cbEnvSetupMoonLightColor(ctrlstr, color, p)= if color == nil then nil else let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "moon" -> moonstr in let XMLgetMarkByValueFromMarkSons moonstr "lightColour" -> suncolorstr in let G2Dgetrgb color -> [r g b] in let ftoa ((itof r) /. 255.0) -> fr in let ftoa ((itof g) /. 255.0) -> fg in let ftoa ((itof b) /. 255.0) -> fb in ( XMLsetParam suncolorstr "r" fr; XMLsetParam suncolorstr "g" fg; XMLsetParam suncolorstr "b" fb; SO3MoonSetLightColor (V3DgetSession sessionstr) G2Drgb2rgba color 0; ); 0;; fun cbEnvSetupWindDirX(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "weather" -> weatherstr in let XMLgetMarkByValueFromMarkSons weatherstr "wind" -> windstr in let atof XMLgetParam windstr "yDirection" -> windydirection in ( XMLsetParam windstr "xDirection" XMLgetShortFloatToString value; SO3EnvironmentSetWindDirection (V3DgetSession sessionstr) value windydirection; ); 0;; fun cbEnvSetupWindDirY(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "weather" -> weatherstr in let XMLgetMarkByValueFromMarkSons weatherstr "wind" -> windstr in let atof XMLgetParam windstr "xDirection" -> windxdirection in let atof XMLgetParam windstr "speed" -> windspeed in ( XMLsetParam windstr "yDirection" XMLgetShortFloatToString value; SO3EnvironmentSetWindDirection (V3DgetSession sessionstr) windxdirection value; ); 0;; fun cbEnvSetupWindForce(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "weather" -> weatherstr in let XMLgetMarkByValueFromMarkSons weatherstr "wind" -> windstr in ( XMLsetParam windstr "speed" XMLgetShortFloatToString value; SO3EnvironmentSetWindSpeed (V3DgetSession sessionstr) value; ); 0;; fun cbEnvSetupHumidity(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "weather" -> weatherstr in ( XMLsetParam weatherstr "humidity" XMLgetShortFloatToString value; SO3EnvironmentSetHumidity (V3DgetSession sessionstr) value; ); 0;; fun cbEnvSetupSkyEnable(ctrlstr, state, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "sky" -> skystr in ( XMLsetParam skystr "enable" XMLgetBoolString state; SO3SkySetEnable (V3DgetSession sessionstr) state; ); 0;; fun cbEnvSetupSkyHdr(ctrlstr, state, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "sky" -> skystr in ( XMLsetParam skystr "hdr" XMLgetBoolString state; SO3SkySetHdrEnable (V3DgetSession sessionstr) state; ); 0;; fun cbEnvSetupSky3d(ctrlstr, state, p)= let p -> [[viewstr val type markstr] ctrllightning] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "sky" -> skystr in ( XMLsetParam skystr "clouds3d" XMLgetBoolString state; if (state) then ( SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_VOLUMETRIC_CLOUD 1; SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_LAYERER_CLOUD 1; if ((sizelist SO3SkyGetLayeredCloudIndexes (V3DgetSession sessionstr)) > 0) then nil else SO3SkyAddLayeredCloud (V3DgetSession sessionstr); 0; ) else ( SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_LAYERER_CLOUD 1; SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_VOLUMETRIC_CLOUD 0; if ((sizelist SO3SkyGetLayeredCloudIndexes (V3DgetSession sessionstr)) > 0) then nil else SO3SkyAddLayeredCloud (V3DgetSession sessionstr); 0; ); setEdCtrlCheckEnable ctrllightning state; ); 0;; fun cbEnvSetupSkyLightning(ctrlstr, state, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "sky" -> skystr in ( XMLsetParam skystr "lightning" XMLgetBoolString state; SO3SkySetLightningEnable (V3DgetSession sessionstr) state; ); 0;; fun cbEnvSetupCloudsCeiling(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "sky" -> skystr in ( XMLsetParam skystr "cloudsCeiling" XMLgetShortFloatToString value; SO3SkySetCloudCeiling (V3DgetSession sessionstr) value; ); 0;; fun cbEnvSetupWaterEnable(ctrlstr, state, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in ( XMLsetParam waterstr "enable" XMLgetBoolString state; SO3WaterSetEnable (V3DgetSession sessionstr) state; ); 0;; fun cbEnvSetupWaterUnder(ctrlstr, state, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in ( XMLsetParam waterstr "underWater" XMLgetBoolString state; SO3WaterComponentSetEnabled (V3DgetSession sessionstr) SO3_WATER_COMPONENT_UNDERWATER state; ); 0;; fun cbEnvSetupWaterPreset(ctrl, pos, elem, p)= let p -> [[viewstr val type markstr] ctrlwaterstrength ctrlwaterchoppy ctrlwaterscale] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in let 0.0 -> strength in let 0.0 -> choppy in let 0.0 -> scale in if pos == 0 then nil else ( if (pos == 1) then //Ocean ( set strength = 3.0; set choppy = 3.0; set scale = 0.5; ) else if (pos == 2) then //Deep Ocean ( set strength = 20.0; set choppy = 0.5; set scale = 0.3; ) else if (pos == 3) then //Calm water ( set strength = 0.25; set choppy = 5.0; set scale = 10.0; ) else if (pos == 4) then //Smooth water ( set strength = 0.4; set choppy = 0.1; set scale = 8.0; ) else nil; setEdCtrlFloatValue ctrlwaterstrength strength; setEdCtrlFloatValue ctrlwaterchoppy choppy; setEdCtrlFloatValue ctrlwaterscale scale; XMLsetParam waterstr "waveStrength" XMLgetShortFloatToString strength; XMLsetParam waterstr "choppyStrength" XMLgetShortFloatToString choppy; XMLsetParam waterstr "waveScale" XMLgetShortFloatToString scale; SO3WaterSetWaveParameters (V3DgetSession sessionstr) strength nil choppy; SO3WaterSetPerlinNoiseParameters (V3DgetSession sessionstr) scale nil nil nil nil nil nil; SO3WaterSetCausticsParameters (V3DgetSession sessionstr) 100.0 /. (if scale >. 0.0 then scale else 1.0) nil nil; ); 0;; fun cbEnvSetupWaterCaustics(ctrlstr, state, p)= let p -> [[viewstr val type markstr] ctrlwatercausticpower] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in ( XMLsetParam waterstr "caustics" XMLgetBoolString state; SO3WaterComponentSetEnabled (V3DgetSession sessionstr) SO3_WATER_COMPONENT_CAUSTICS state; setEdCtrlFloatEnable ctrlwatercausticpower state; ); 0;; fun cbEnvSetupWaterCausticPower(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in ( XMLsetParam waterstr "causticsPower" XMLgetShortFloatToString value; SO3WaterSetCausticsParameters (V3DgetSession sessionstr) nil value nil; ); 0;; fun cbEnvSetupWaterFoam(ctrlstr, state, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in ( XMLsetParam waterstr "foam" XMLgetBoolString state; SO3WaterComponentSetEnabled (V3DgetSession sessionstr) SO3_WATER_COMPONENT_FOAM state; ); 0;; fun cbEnvSetupWaterStrength(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in ( XMLsetParam waterstr "waveStrength" XMLgetShortFloatToString value; SO3WaterSetWaveParameters (V3DgetSession sessionstr) value nil nil; ); 0;; fun cbEnvSetupWaterChoppyStrength(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in ( XMLsetParam waterstr "choppyStrength" XMLgetShortFloatToString value; SO3WaterSetWaveParameters (V3DgetSession sessionstr) nil nil value; ); 0;; fun cbEnvSetupWaterScale(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in ( XMLsetParam waterstr "waveScale" XMLgetShortFloatToString value; SO3WaterSetPerlinNoiseParameters (V3DgetSession sessionstr) value nil nil nil nil nil nil; SO3WaterSetCausticsParameters (V3DgetSession sessionstr) 100.0 /. (if value >. 0.0 then value else 1.0) nil nil; ); 0;; fun cbEnvSetupWaterComplexity(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in ( XMLsetParam waterstr "waveComplexity" itoa (ftoi value); SO3WaterSetGeometryComplexity (V3DgetSession sessionstr) ftoi value; ); 0;; fun cbEnvSetupWaterLevel(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in ( XMLsetParam waterstr "level" XMLgetShortFloatToString value; SO3WaterSetPosition (V3DgetSession sessionstr) [0.0 value 0.0]; ); 0;; fun cbEnvSetupWaterDepth(ctrlstr, value, p)= let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in ( XMLsetParam waterstr "depth" XMLgetShortFloatToString value; SO3WaterSetDepthParameters (V3DgetSession sessionstr) (value /. 2.0) value; ); 0;; fun cbEnvSetupWaterColor(ctrlstr, color, p)= if color == nil then nil else let p -> [viewstr val type markstr] in let V3DgetDefaultSession viewstr -> sessionstr in let (V3DgetDefaultViewport viewstr) -> viewportstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in let XMLgetMarkByValueFromMarkSons waterstr "waterColour" -> watercolorstr in let G2Dgetrgb color -> [r g b] in let ftoa ((itof r) /. 255.0) -> fr in let ftoa ((itof g) /. 255.0) -> fg in let ftoa ((itof b) /. 255.0) -> fb in ( XMLsetParam watercolorstr "r" fr; XMLsetParam watercolorstr "g" fg; XMLsetParam watercolorstr "b" fb; SO3WaterSetColor (V3DgetSession sessionstr) G2Drgb2rgba color 0; ); 0;; fun cbTreeMenuSetEnvSetup(mnuitem, p)= if winEnvSetup == nil then nil else ( let winEnvSetup -> [winstr _ _] in dsEdWindow winstr; set winEnvSetup = nil; ); let p -> [viewstr val type markstr] in let [400 705] -> [iw ih] in let 10 -> ypos in let _GETWorkingAreaSize -> [sw sh] in let _GETscreenPos -> [mx my] in let [(if ((mx + iw) > sw) then (sw - iw) else mx) (if ((my + ih) > sh) then (sh - ih) else my)] -> [x y] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "dynamicEnv" -> dynenvstr in let if dynenvstr == nil then XMLaddMark xmlEditSceneFile "dynamicEnv" envmark ["enable" XMLgetBoolString 0]::nil nil else dynenvstr -> dynenvstr in let XMLgetBoolParam dynenvstr "enable" -> envenable in let getCurrentDateTime 1 -> [dateday datemonth dateyear datehours dateminutes _] in let XMLgetMarkByValueFromMarkSons dynenvstr "date" -> datestr in let if datestr == nil then XMLaddMark xmlEditSceneFile "date" dynenvstr ["current" XMLgetBoolString 0]::["year" itoa dateyear]::["month" itoa datemonth]::["day" itoa dateday]::["hours" itoa datehours]::["minutes" itoa dateminutes]::["timeSpeed" "1"]::nil nil else datestr -> datestr in let XMLgetBoolParam datestr "current" -> datecurrent in let atoi XMLgetParam datestr "year" -> dateyear in let atoi XMLgetParam datestr "month" -> datemonth in let atoi XMLgetParam datestr "day" -> dateday in let atoi XMLgetParam datestr "hours" -> datehours in let atoi XMLgetParam datestr "minutes" -> dateminutes in let atof XMLgetParam datestr "timeSpeed" -> datetimespeed in let XMLgetMarkByValueFromMarkSons dynenvstr "location" -> locationstr in let if locationstr == nil then XMLaddMark xmlEditSceneFile "location" dynenvstr nil nil else locationstr -> locationstr in let XMLgetParam locationstr "country" -> loccountry in let XMLgetParam locationstr "city" -> loccity in let atof XMLgetParam locationstr "longitude" -> loclongitude in let atof XMLgetParam locationstr "latitude" -> loclatitude in let XMLgetMarkByValueFromMarkSons dynenvstr "sun" -> sunstr in let if sunstr == nil then XMLaddMark xmlEditSceneFile "sun" dynenvstr ["enable" XMLgetBoolString 1]::nil nil else sunstr -> sunstr in let XMLgetBoolParam sunstr "enable" -> sunenable in let XMLgetMarkByValueFromMarkSons sunstr "lightColour" -> suncolorstr in let G2Drgba2rgb SO3SunGetLightColor (V3DgetSession sessionstr) -> suncolor in let if suncolorstr == nil then let G2Dgetrgb suncolor -> [r g b] in let ftoa ((itof r) /. 255.0) -> fr in let ftoa ((itof g) /. 255.0) -> fg in let ftoa ((itof b) /. 255.0) -> fb in XMLaddMark xmlEditSceneFile "lightColour" sunstr ["r" fr]::["g" fg]::["b" fb]::nil nil else suncolorstr -> suncolorstr in let make_rgb (ftoi ((atof XMLgetParam suncolorstr "r") *. 255.0)) (ftoi ((atof XMLgetParam suncolorstr "g") *. 255.0)) (ftoi ((atof XMLgetParam suncolorstr "b") *. 255.0)) -> suncolor in let XMLgetMarkByValueFromMarkSons dynenvstr "moon" -> moonstr in let if moonstr == nil then XMLaddMark xmlEditSceneFile "moon" dynenvstr ["enable" XMLgetBoolString 1]::nil nil else moonstr -> moonstr in let XMLgetBoolParam moonstr "enable" -> moonenable in let XMLgetParam moonstr "texture" -> moontexture in let XMLgetMarkByValueFromMarkSons moonstr "lightColour" -> mooncolorstr in let G2Drgba2rgb SO3MoonGetLightColor (V3DgetSession sessionstr) -> mooncolor in let if mooncolorstr == nil then let G2Dgetrgb mooncolor -> [r g b] in let ftoa ((itof r) /. 255.0) -> fr in let ftoa ((itof g) /. 255.0) -> fg in let ftoa ((itof b) /. 255.0) -> fb in XMLaddMark xmlEditSceneFile "lightColour" moonstr ["r" fr]::["g" fg]::["b" fb]::nil nil else mooncolorstr -> mooncolorstr in let make_rgb (ftoi ((atof XMLgetParam mooncolorstr "r") *. 255.0)) (ftoi ((atof XMLgetParam mooncolorstr "g") *. 255.0)) (ftoi ((atof XMLgetParam mooncolorstr "b") *. 255.0)) -> mooncolor in let XMLgetMarkByValueFromMarkSons dynenvstr "weather" -> weatherstr in let if weatherstr == nil then XMLaddMark xmlEditSceneFile "weather" dynenvstr ["humidity" XMLgetShortFloatToString (SO3EnvironmentGetHumidity (V3DgetSession sessionstr))]::nil nil else weatherstr -> weatherstr in let atof XMLgetParam weatherstr "humidity" -> weatherhumidity in let XMLgetMarkByValueFromMarkSons weatherstr "wind" -> windstr in let SO3EnvironmentGetWindDirection (V3DgetSession sessionstr) -> [wdx wdy] in let if windstr == nil then XMLaddMark xmlEditSceneFile "wind" weatherstr ["xDirection" XMLgetShortFloatToString wdx]::["yDirection" XMLgetShortFloatToString wdy]::["speed" XMLgetShortFloatToString (SO3EnvironmentGetWindSpeed (V3DgetSession sessionstr))]::nil nil else windstr -> windstr in let atof XMLgetParam windstr "xDirection" -> windxdirection in let atof XMLgetParam windstr "yDirection" -> windydirection in let atof XMLgetParam windstr "speed" -> windspeed in let XMLgetMarkByValueFromMarkSons dynenvstr "sky" -> skystr in let if skystr == nil then XMLaddMark xmlEditSceneFile "sky" dynenvstr ["enable" XMLgetBoolString 1]::["clouds3d" XMLgetBoolString 0]::["lightning" XMLgetBoolString 0]::["hdr" XMLgetBoolString 0]::["cloudsCeiling" XMLgetShortFloatToString (SO3SkyGetCloudCeiling (V3DgetSession sessionstr))]::nil nil else skystr -> skystr in let XMLgetBoolParam skystr "enable" -> skyenable in let XMLgetBoolParam skystr "hdr" -> skyhdr in let XMLgetBoolParam skystr "clouds3d" -> sky3dclouds in let XMLgetBoolParam skystr "lightning" -> skylightning in let atof XMLgetParam skystr "cloudsCeiling" -> skyceiling in let if skyceiling == nil then SO3SkyGetCloudCeiling (V3DgetSession sessionstr) else skyceiling -> skyceiling in let XMLgetParam skystr "starsTexture" -> skystarstexture in let XMLgetMarkByValueFromMarkSons dynenvstr "water" -> waterstr in let SO3WaterGetPosition (V3DgetSession sessionstr) -> [_ waterlevel _] in let SO3WaterGetWaveParameters (V3DgetSession sessionstr) -> [waterstrength _ waterchoppy] in let SO3WaterGetPerlinNoiseParameters (V3DgetSession sessionstr) -> [waterscale _ _ _ _ _ _] in let SO3WaterGetGeometryComplexity (V3DgetSession sessionstr) -> watercomplexity in let if waterstr == nil then XMLaddMark xmlEditSceneFile "water" dynenvstr ["enable" XMLgetBoolString 1]::["underWater" XMLgetBoolString 1]::["foam" XMLgetBoolString 1]::["caustics" XMLgetBoolString 1]::["causticsPower" XMLgetShortFloatToString 1.0]::["level" XMLgetShortFloatToString waterlevel]::["depth" "9"]::["waveStrength" XMLgetShortFloatToString waterstrength]::["choppyStrength" XMLgetShortFloatToString waterchoppy]::["waveScale" XMLgetShortFloatToString waterscale]::["waveComplexity" itoa watercomplexity]::nil nil else waterstr -> waterstr in let XMLgetBoolParam waterstr "enable" -> waterenable in let XMLgetBoolParam waterstr "underWater" -> waterunder in let XMLgetBoolParam waterstr "foam" -> waterfoam in let XMLgetBoolParam waterstr "caustics" -> watercaustics in let atof XMLgetParam waterstr "causticsPower" -> watercausticspower in let atof XMLgetParam waterstr "waveStrength" -> waterstrength in let atof XMLgetParam waterstr "choppyStrength" -> waterchoppy in let atof XMLgetParam waterstr "waveScale" -> waterscale in let if ((XMLgetParam waterstr "waveComplexity") == nil) then ((XMLsetParam waterstr "waveComplexity" "256"); 256) else atoi (XMLgetParam waterstr "waveComplexity") -> watercomplexity in let atof XMLgetParam waterstr "level" -> waterlevel in let atof XMLgetParam waterstr "depth" -> waterdepth in let XMLgetMarkByValueFromMarkSons waterstr "waterColour" -> watercolorstr in let G2Drgba2rgb SO3WaterGetColor (V3DgetSession sessionstr) -> watercolor in let if watercolorstr == nil then let G2Dgetrgb watercolor -> [r g b] in let ftoa ((itof r) /. 255.0) -> fr in let ftoa ((itof g) /. 255.0) -> fg in let ftoa ((itof b) /. 255.0) -> fb in XMLaddMark xmlEditSceneFile "waterColour" waterstr ["r" fr]::["g" fg]::["b" fb]::nil nil else watercolorstr -> watercolorstr in let make_rgb (ftoi ((atof XMLgetParam watercolorstr "r") *. 255.0)) (ftoi ((atof XMLgetParam watercolorstr "g") *. 255.0)) (ftoi ((atof XMLgetParam watercolorstr "b") *. 255.0)) -> watercolor in let setEdWindowIcon (crEdWindow _channel mainInterf.MINT_winMain x y iw ih WN_MENU|WN_SIZEBOX|WN_HIDDEN nil nil (loc "OS3D_0142")) sWinDlgIcon -> ewinstr in let crEdWindowToolBar ewinstr 0 0 iw 28 5 1 EdDefaultTheme.EDT_iToolBarColor ETB_HORIZONTAL -> tbstrhelp in let _LDalphaBitmap _channel _checkpack strcat APPBASEDIR "os3deditor/res/tb_help.png" -> apng in let crEdToolBarButton tbstrhelp apng ETB_ALIGN_RIGHT (loc "OS3D_0186") @cbTbBtnEnvSettingHelp -> tbhelp in let crEdScrollWindow _channel ewinstr 0 28 iw ih-58 WN_CHILDINSIDE|WN_VSCROLL EDWIN_RESIZE_MW|EDWIN_RESIZE_MH EDWIN_GROUP nil -> gwinstr in let crEdFrameWindow _channel gwinstr 0 0 (iw-20) 60 EDWIN_RESIZE_MW nil (loc "OS3D_0177") (loc "OS3D_0250") -> winfrm in let crEdWindow _channel winfrm 0 18 (iw-20) 40 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlCheck winstr 10 (set ypos = 10) 280 20 (loc "OS3D_0137") nil -> ctrlenvenable in let crEdFrameWindow _channel gwinstr 0 0 (iw-20) 135 EDWIN_RESIZE_MW nil (loc "OS3D_0110") (loc "OS3D_0250") -> winfrm in let crEdWindow _channel winfrm 0 18 (iw-20) 115 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlCheck winstr 10 (set ypos = 10) 280 20 (loc "OS3D_0446") nil -> ctrlrealtime in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0109") nil -> labeldate in let crEdCtrlDate winstr 180 ypos 280 20 dateday datemonth dateyear nil nil -> ctrldate in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0432") nil -> labeltime in let crEdCtrlFloat winstr 180 ypos 30 20 (itof datehours) 0.0 23.0 1.0 0 nil nil -> ctrlhours in let crEdCtrlLabel winstr 214 (ypos + 2) 8 20 ":" nil -> ctrltimesep in let crEdCtrlFloat winstr 222 ypos 30 20 (itof dateminutes) 0.0 59.0 1.0 0 nil nil -> ctrlminutes in let crEdCtrlLabel winstr 257 (ypos + 2) 30 20 "GMT" nil -> labeltime2 in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0431") nil -> labeltimeshift in let crEdCtrlFloat winstr 180 ypos 90 20 datetimespeed (-.100000.0) 100000.0 0.1 5 nil nil -> ctrltimespeed in let crEdFrameWindow _channel gwinstr 0 0 (iw-20) 110 EDWIN_RESIZE_MW nil (loc "OS3D_0232") (loc "OS3D_0250") -> winfrm in let crEdWindow _channel winfrm 0 18 (iw-20) 90 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlLabel winstr 10 ((set ypos = 10) + 2) 160 20 (loc "OS3D_0104") nil -> labelcountry in let crEdCtrlSelect winstr 180 ypos 190 120 nil -> ctrlcountry in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0091") nil -> labelcity in let crEdCtrlSelect winstr 180 ypos 190 120 nil -> ctrlcity in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 80 20 (loc "OS3D_0216") nil -> labellat in let crEdCtrlFloat winstr 100 ypos 70 20 loclatitude (-.90.0) 90.0 0.1 5 nil nil -> ctrllatitude in let crEdCtrlLabel winstr 180 (ypos + 2) 90 20 (loc "OS3D_0235") nil -> labellong in let crEdCtrlFloat winstr 280 ypos 70 20 loclongitude (-.180.0) 180.0 0.1 5 nil nil -> ctrllongitude in let crEdFrameWindow _channel gwinstr 0 0 (iw-20) 60 EDWIN_RESIZE_MW nil (loc "OS3D_0413") (loc "OS3D_0250") -> winfrm in let crEdWindow _channel winfrm 0 18 (iw-20) 40 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlLabel winstr 10 ((set ypos = 10) + 2) (iw - 20 - 80) 20 (loc "OS3D_0412") nil -> labelsuncolor in let crEdCtrlColorButton winstr (iw - 20 - 70) ypos 60 20 suncolor 0 nil nil -> ctrlsuncolor in let crEdFrameWindow _channel gwinstr 0 0 (iw-20) 60 EDWIN_RESIZE_MW nil (loc "OS3D_0252") (loc "OS3D_0250") -> winfrm in let crEdWindow _channel winfrm 0 18 (iw-20) 40 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlLabel winstr 10 ((set ypos = 10) + 2) (iw - 20 - 80) 20 (loc "OS3D_0251") nil -> labelmooncolor in let crEdCtrlColorButton winstr (iw - 20 - 70) ypos 60 20 mooncolor 0 nil nil -> ctrlmooncolor in //let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0253") nil -> labelmoontex in let crEdFrameWindow _channel gwinstr 0 0 (iw-20) 110 EDWIN_RESIZE_MW nil (loc "OS3D_0459") (loc "OS3D_0250") -> winfrm in let crEdWindow _channel winfrm 0 18 (iw-20) 90 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlLabel winstr 10 ((set ypos = 10) + 2) 160 20 (loc "OS3D_0462") nil -> labelwinddir in let crEdCtrlFloat winstr 180 ypos 60 20 windxdirection (-.1.0) 1.0 0.1 4 nil nil -> ctrlwindxdir in let crEdCtrlFloat winstr 245 ypos 60 20 windydirection (-.1.0) 1.0 0.1 4 nil nil -> ctrlwindydir in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0463") nil -> labelwindforce in let crEdCtrlFloat winstr 180 ypos 90 20 windspeed 0.0 10000.0 0.1 4 nil nil -> ctrlwindforce in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0189") nil -> labelhumidity in let crEdCtrlFloat winstr 180 ypos 65 20 weatherhumidity 0.0 100.0 0.1 4 nil nil -> ctrlhumidity in let crEdCtrlLabel winstr 245 (ypos + 2) 20 20 "%" nil -> labelhumidity2 in let crEdFrameWindow _channel gwinstr 0 0 (iw-20) 160 EDWIN_RESIZE_MW nil (loc "OS3D_0400") (loc "OS3D_0250") -> winfrm in let crEdWindow _channel winfrm 0 18 (iw-20) 140 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlCheck winstr 10 (set ypos = 10) 280 20 (loc "OS3D_0139") nil -> ctrlskyenable in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3D_0445") nil -> ctrlskyhdr in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3D_0444") nil -> ctrlsky3dclouds in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3D_0174") nil -> ctrllightning in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0094") nil -> labelceiling in let crEdCtrlFloat winstr 180 ypos 90 20 skyceiling 0.0 100000.0 0.1 4 nil nil -> ctrlskyceiling in //let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0409") nil -> labelstarstex in let crEdFrameWindow _channel gwinstr 0 0 (iw-20) 360 EDWIN_RESIZE_MW nil (loc "OS3D_0454") (loc "OS3D_0250") -> winfrm in let crEdWindow _channel winfrm 0 18 (iw-20) 340 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlCheck winstr 10 (set ypos = 10) 280 20 (loc "OS3D_0139") nil -> ctrlwaterenable in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3D_0337") nil -> ctrlwaterunder in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) 280 20 (loc "OS3D_0335") nil -> ctrlwaterfoam in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) 160 20 (loc "OS3D_0334") nil -> ctrlwatercaustics in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0086") nil -> labelcpower in let crEdCtrlFloat winstr 180 ypos 90 20 watercausticspower 0.0 100.0 0.01 5 nil nil -> ctrlwatercausticpower in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0458") nil -> labelwpreset in let crEdCtrlSelect winstr 180 ypos (iw - 200) 120 nil -> ctrlwaterpreset in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0457") nil -> labelwstrength in let crEdCtrlFloat winstr 180 ypos 90 20 waterstrength 0.0 1000.0 0.001 5 nil nil -> ctrlwaterstrength in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0088") nil -> labelwchoppy in let crEdCtrlFloat winstr 180 ypos 90 20 waterchoppy 0.0 1000.0 0.001 5 nil nil -> ctrlwaterchoppy in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0456") nil -> labelwscale in let crEdCtrlFloat winstr 180 ypos 90 20 waterscale 0.0 1000.0 0.001 5 nil nil -> ctrlwaterscale in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 30) + 2) 160 20 (loc "OS3D_0097") nil -> labelcomplexity in let crEdCtrlFloat winstr 180 ypos 90 20 itof watercomplexity 2.0 1000.0 1.0 0 nil nil -> ctrlwatercomplexity in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0221") nil -> labelwlevel in let crEdCtrlFloat winstr 180 ypos 90 20 waterlevel (-.100000.0) 100000.0 0.1 4 nil nil -> ctrlwaterlevel in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0116") nil -> labelwdepth in let crEdCtrlFloat winstr 180 ypos 90 20 waterdepth (-.100000.0) 100000.0 0.1 4 nil nil -> ctrlwaterdepth in let crEdCtrlLabel winstr 10 ((set ypos = ypos + 25) + 2) 160 20 (loc "OS3D_0453") nil -> labelwatercolor in let crEdCtrlColorButton winstr 180 ypos 60 20 watercolor 0 nil nil -> ctrlwatercolor in let crEdWindowToolBar ewinstr 0 (ih-28) iw 28 5 1 EdDefaultTheme.EDT_iToolBarColor ETB_HORIZONTAL|ETB_BOTTOM -> tbstr in let _LDalphaBitmap _channel _checkpack strcat APPBASEDIR "os3deditor/res/tb_playpause.png" -> aplaypause in let crEdToolBarCheck tbstr aplaypause ETB_ALIGN_LEFT (loc "OS3D_0303") nil -> chkplaypause in let _LDalphaBitmap _channel _checkpack strcat APPBASEDIR "os3deditor/res/tb_stop.png" -> astop in let crEdToolBarButton tbstr astop ETB_ALIGN_LEFT (loc "OS3D_0411") nil -> chkstop in ( setEdWindowMinimumSize ewinstr iw 90; setEdWindowMaximumSize ewinstr iw nil; set winEnvSetup = [ewinstr tbstr chkplaypause]; setEdToolBarVisible tbstr 1; setEdToolBarVisible tbstrhelp 1; setEdToolBarCheckCbClick tbstr chkplaypause mkfun6 @cbEnvSetupPlayPause p; setEdToolBarButtonCbClick tbstr chkstop mkfun5 @cbEnvSetupStop [p chkplaypause]; // global setEdCtrlCheckState ctrlenvenable envenable; setEdCtrlCheckCbState ctrlenvenable mkfun3 @cbEnvSetupEnable p; // Date setting setEdCtrlCheckState ctrlrealtime datecurrent; setEdCtrlCheckCbState ctrlrealtime mkfun3 @cbEnvSetupCurrentTime [p ctrldate ctrlhours ctrlminutes ctrltimespeed]; setEdCtrlDateCbChange ctrldate mkfun5 @cbEnvSetupDate p; setEdCtrlFloatCbChange ctrlhours mkfun3 @cbEnvSetupDateHours p; setEdCtrlFloatCbChange ctrlminutes mkfun3 @cbEnvSetupDateMinutes p; setEdCtrlFloatCbChange ctrltimespeed mkfun3 @cbEnvSetupTimeSpeed p; if (!datecurrent) then nil else ( setEdCtrlDateEnable ctrldate 0; setEdCtrlFloatEnable ctrlhours 0; setEdCtrlFloatEnable ctrlminutes 0; setEdCtrlFloatEnable ctrltimespeed 0; ); // Fill locations and default values let XMLload strcat APPBASEDIR "os3dlib/res/def/countries.xml" -> countiesstr in let XMLgetMarkByValue countiesstr "countries" -> rootmark in let rootmark.XMLsons -> lcountries in ( while (lcountries != nil) do ( let hd lcountries -> countrystr in let XMLgetParam countrystr "name" -> cname in addEdCtrlSelect ctrlcountry cname; set lcountries = tl lcountries; ); setEdCtrlSelectCb ctrlcountry mkfun4 @cbEnvSetupCountry [p rootmark ctrlcity ctrllatitude ctrllongitude]; setEdCtrlSelectCb ctrlcity mkfun4 @cbEnvSetupCity [p rootmark ctrlcountry ctrllatitude ctrllongitude]; setEdCtrlFloatCbChange ctrllatitude mkfun3 @cbEnvSetupLatitude p; setEdCtrlFloatCbChange ctrllongitude mkfun3 @cbEnvSetupLongitude p; let if (loccountry == nil) then hd rootmark.XMLsons else XMLgetMarkByParamValueFromMarkSons rootmark "name" loccountry -> cmark in let if (loccity == nil) then hd cmark.XMLsons else XMLgetMarkByParamValueFromMarkSons cmark "name" loccity -> citymark in ( let cmark.XMLsons -> lcities in while (lcities != nil) do ( let hd lcities -> citymark in let XMLgetParam citymark "name" -> cname in ( addEdCtrlSelect ctrlcity cname; ); set lcities = tl lcities; ); if (loccountry != nil) then nil else set loccountry = XMLgetParam cmark "name"; selectEdCtrlSelect ctrlcountry loccountry; if (loccity != nil) then nil else set loccity = XMLgetParam citymark "name"; selectEdCtrlSelect ctrlcity loccity; if ((loclongitude != nil) && (loclatitude != nil)) then nil else ( let atof XMLgetParam citymark "latitude" -> lat in let atof XMLgetParam citymark "longitude" -> long in ( setEdCtrlFloatValue ctrllatitude lat; setEdCtrlFloatValue ctrllongitude long; XMLsetParam locationstr "latitude" XMLgetShortFloatToString lat; XMLsetParam locationstr "longitude" XMLgetShortFloatToString long; XMLsetParam locationstr "country" loccountry; XMLsetParam locationstr "city" loccity; SO3EnvironmentSetLatitude (V3DgetSession sessionstr) lat; SO3EnvironmentSetLongitude (V3DgetSession sessionstr) long; ); ); ); XMLclose countiesstr; ); setEdCtrlColorButtonCb ctrlsuncolor mkfun3 @cbEnvSetupSunLightColor p; setEdCtrlColorButtonCb ctrlmooncolor mkfun3 @cbEnvSetupMoonLightColor p; // Weather setEdCtrlFloatCbChange ctrlwindxdir mkfun3 @cbEnvSetupWindDirX p; setEdCtrlFloatCbChange ctrlwindydir mkfun3 @cbEnvSetupWindDirY p; setEdCtrlFloatCbChange ctrlwindforce mkfun3 @cbEnvSetupWindForce p; setEdCtrlFloatCbChange ctrlhumidity mkfun3 @cbEnvSetupHumidity p; // Sky setEdCtrlCheckState ctrlskyenable skyenable; setEdCtrlCheckState ctrlskyhdr skyhdr; setEdCtrlCheckState ctrlsky3dclouds sky3dclouds; setEdCtrlCheckState ctrllightning skylightning; setEdCtrlCheckCbState ctrlskyenable mkfun3 @cbEnvSetupSkyEnable p; setEdCtrlCheckCbState ctrlskyhdr mkfun3 @cbEnvSetupSkyHdr p; setEdCtrlCheckCbState ctrlsky3dclouds mkfun3 @cbEnvSetupSky3d [p ctrllightning]; setEdCtrlCheckCbState ctrllightning mkfun3 @cbEnvSetupSkyLightning p; setEdCtrlCheckEnable ctrllightning sky3dclouds; if (sky3dclouds) then ( SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_LAYERER_CLOUD 1; SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_VOLUMETRIC_CLOUD 1; SO3SkySetLightningEnable (V3DgetSession sessionstr) skylightning; if ((sizelist SO3SkyGetLayeredCloudIndexes (V3DgetSession sessionstr)) > 0) then nil else SO3SkyAddLayeredCloud (V3DgetSession sessionstr); ) else ( SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_VOLUMETRIC_CLOUD 0; SO3SkyComponentSetEnabled (V3DgetSession sessionstr) SO3_SKY_COMPONENT_LAYERER_CLOUD 1; if ((sizelist SO3SkyGetLayeredCloudIndexes (V3DgetSession sessionstr)) > 0) then nil else SO3SkyAddLayeredCloud (V3DgetSession sessionstr); ); SO3SkySetEnable (V3DgetSession sessionstr) skyenable; setEdCtrlFloatCbChange ctrlskyceiling mkfun3 @cbEnvSetupCloudsCeiling p; // Water setEdCtrlCheckState ctrlwaterenable waterenable; setEdCtrlCheckState ctrlwaterunder waterunder; setEdCtrlCheckState ctrlwatercaustics watercaustics; setEdCtrlFloatEnable ctrlwatercausticpower watercaustics; setEdCtrlCheckState ctrlwaterfoam waterfoam; setEdCtrlCheckCbState ctrlwaterenable mkfun3 @cbEnvSetupWaterEnable p; setEdCtrlCheckCbState ctrlwaterunder mkfun3 @cbEnvSetupWaterUnder p; setEdCtrlCheckCbState ctrlwatercaustics mkfun3 @cbEnvSetupWaterCaustics [p ctrlwatercausticpower]; setEdCtrlCheckCbState ctrlwaterfoam mkfun3 @cbEnvSetupWaterFoam p; setEdCtrlFloatCbChange ctrlwatercausticpower mkfun3 @cbEnvSetupWaterCausticPower p; fillEdCtrlSelect ctrlwaterpreset (loc "OS3D_0496")::(loc "OS3D_0495")::(loc "OS3D_0112")::(loc "OS3D_0081")::(loc "OS3D_0402")::nil; setEdCtrlSelectCb ctrlwaterpreset mkfun4 @cbEnvSetupWaterPreset [p ctrlwaterstrength ctrlwaterchoppy ctrlwaterscale]; setEdCtrlFloatCbChange ctrlwaterstrength mkfun3 @cbEnvSetupWaterStrength p; setEdCtrlFloatCbChange ctrlwaterchoppy mkfun3 @cbEnvSetupWaterChoppyStrength p; setEdCtrlFloatCbChange ctrlwaterscale mkfun3 @cbEnvSetupWaterScale p; setEdCtrlFloatCbChange ctrlwatercomplexity mkfun3 @cbEnvSetupWaterComplexity p; setEdCtrlFloatCbChange ctrlwaterlevel mkfun3 @cbEnvSetupWaterLevel p; setEdCtrlFloatCbChange ctrlwaterdepth mkfun3 @cbEnvSetupWaterDepth p; setEdCtrlColorButtonCb ctrlwatercolor mkfun3 @cbEnvSetupWaterColor p; SO3WaterSetEnable (V3DgetSession sessionstr) waterenable; setEdwindowCbDestroy ewinstr mkfun2 @cbDestroyEnvSetupWin viewstr; paintEdToolBar tbstr; paintEdToolBar tbstrhelp; setEdWindowVisible ewinstr 1; 0; ); 0;;