Game Development Community

Sky value script assistance please

by Ronald J Nelson · in Torque Game Engine Advanced · 05/31/2008 (11:33 am) · 4 replies

I am trying to make a weather system that changes the sky but I want it to be able to restore the original map sky values as well. Here are my functions:

function SaveSkyValues()
{
   $OldSkyMaterialList = Sky.getFieldValue(materialList);
   $OldSkySunsetList = Sky.getFieldValue(sunsetList);
   $OldSkyNightList = Sky.getFieldValue(nightList);
   $OldSkyFogDistance = Sky.getFieldValue(fogDistance);
   $OldSkyFogColor = Sky.getFieldValue(fogColor);
   $OldSkyFogStorm1 = Sky.getFieldValue(fogStorm1);
   $OldSkyFogVolume1 = Sky.getFieldValue(fogVolume1);
   $OldSkyFogVolumeColor1 = Sky.getFieldValue(fogVolumeColor1);
   $OldSkyFogVolumeColor2 = Sky.getFieldValue(fogVolumeColor2);
   $OldSkyFogVolumeColor3 = Sky.getFieldValue(fogVolumeColor3);
   $OldSkyUseSkyTextures = Sky.getFieldValue(useSkyTextures);
   $OldSkySkySolidColor = Sky.getFieldValue(SkySolidColor);
   $OldSkyWindVelocity = Sky.getFieldValue(WindVelocity);
   $OldSkyVisibleDistance = Sky.getFieldValue(VisibleDistance);
}

function RestoreSkyValues()
{
   eval("Sky.setFieldValue(materialList, " @ $OldSkyMaterial @ ");");
   eval("Sky.setFieldValue(sunsetList, " @ $OldSkySunsetList @ ");");
   eval("Sky.setFieldValue(nightList, " @ $OldSkyNightList @ ");");
   eval("Sky.setFieldValue(fogDistance, " @ $OldSkyFogDistance @ ");");
   eval("Sky.setFieldValue(fogColor, " @ $OldSkyFogColor @ ");");
   eval("Sky.setFieldValue(fogStorm1, " @ $OldSkyFogStorm1 @ ");");
   eval("Sky.setFieldValue(fogVolume1, " @ $OldSkyFogVolume1 @ ");");
   eval("Sky.setFieldValue(fogVolumeColor1, " @ $OldSkyFogVolumeColor1 @ ");");
   eval("Sky.setFieldValue(fogVolumeColor2, " @ $OldSkyFogVolumeColor2 @ ");");
   eval("Sky.setFieldValue(fogVolumeColor3, " @ $OldSkyFogVolumeColor3 @ ");");
   eval("Sky.setFieldValue(useSkyTextures, " @ $OldSkyUseSkyTextures @ ");");
   eval("Sky.setFieldValue(SkySolidColor, " @ $OldSkySkySolidColor @ ");");
   eval("Sky.setFieldValue(WindVelocity, " @ $OldSkyWindVelocity @ ");");
   eval("Sky.setFieldValue(VisibleDistance, " @ $OldSkyVisibleDistance @ ");");
   Sky.applySkyChanges();
}

I have tried without the eval and I get the same results, parse errors and no restoration of values. Can someone tell me what I am doing wrong here?

#1
05/31/2008 (6:56 pm)
Well this gets rid of the parse errors and almost works, it won't restor the material lists though.

function SaveSkyValues()
{
   $OldSkyMaterialList = Sky.materialList;
   $OldSkySunsetList = Sky.sunsetList;
   $OldSkyNightList = Sky.nightList;
   $OldSkyFogDistance = Sky.fogDistance;
   $OldSkyFogColor = Sky.fogColor;
   $OldSkyFogStorm1 = Sky.fogStorm1;
   $OldSkyFogVolume1 = Sky.fogVolume1;
   $OldSkyFogVolumeColor1 = Sky.fogVolumeColor1;
   $OldSkyFogVolumeColor2 = Sky.fogVolumeColor2;
   $OldSkyFogVolumeColor3 = Sky.fogVolumeColor3;
   $OldSkyUseSkyTextures = Sky.useSkyTextures;
   $OldSkySkySolidColor = Sky.SkySolidColor;
   $OldSkyWindVelocity = Sky.WindVelocity;
   $OldSkyVisibleDistance = Sky.VisibleDistance;
}

function RestoreSkyValues()
{
   Sky.materialList = $OldSkyMaterial;
   Sky.sunsetList = $OldSkySunsetList;
   Sky.nightList = $OldSkyNightList;
   Sky.fogDistance = $OldSkyFogDistance;
   Sky.fogColor = $OldSkyFogColor;
   Sky.fogStorm1 = $OldSkyFogStorm1;
   Sky.fogVolume1 = $OldSkyFogVolume1;
   Sky.fogVolumeColor1 = $OldSkyFogVolumeColor1;
   Sky.fogVolumeColor2 = $OldSkyFogVolumeColor2;
   Sky.fogVolumeColor3 = $OldSkyFogVolumeColor3;
   Sky.useSkyTextures = $OldSkyUseSkyTextures;
   Sky.SkySolidColor = $OldSkySkySolidColor;
   Sky.WindVelocity = $OldSkyWindVelocity;
   Sky.VisibleDistance = $OldSkyVisibleDistance;
   Sky.applySkyChanges();
}

Can someone explain why?
#2
05/31/2008 (9:23 pm)
Nevermind I mispelled the first value for materialList in restoreskyvalues. It was $OldSkyMaterial and should have been $OldSkyMaterialList.
#3
06/02/2008 (3:09 pm)
I was reading through this, please be kind i have opted to ignore Torque script until ihave a better grasp on C++, so i don't confuse myself like I did with C#....Does this change the sky's skybox? That is what id like to do is do a fade between them. i tried a resource around here that had a shader, but it wouldn't work right , but everything seemed in order code wise. So lost..., i was trying to find a solution that would be beter to work with, and it had always seemed to me that you should be able to control the DML(sky file) through Tscript...or am I off base?
#4
06/02/2008 (3:26 pm)
No I am just backing up the original settings with this. I actually change my settings for a random weather system I put together. It could use a smoother transition between weather modes but it works for me.