Skip to content

Instantly share code, notes, and snippets.

@TheBlackParrot
Created January 20, 2020 09:40
Show Gist options
  • Save TheBlackParrot/9293347a1b0b5470cb9b8ae4aa3b1d59 to your computer and use it in GitHub Desktop.
Save TheBlackParrot/9293347a1b0b5470cb9b8ae4aa3b1d59 to your computer and use it in GitHub Desktop.
// http://forum.blockland.us/index.php?topic=276074.0
function loadEnvironment(%file)
{
%res = GameModeGuiServer::parseGameModeFile(%file, 1);
EnvGuiServer::getIdxFromFilenames();
EnvGuiServer::setSimpleMode();
if (!$EnvGuiServer::SimpleMode)
{
EnvGuiServer::fillAdvancedVarsFromSimple();
EnvGuiServer::setAdvancedMode();
}
}
function setEnvironment(%varName, %value)
{
if ($EnvGuiServer["::" @ %varName] $= %value)
return;
switch$ (%varName)
{
case "SimpleMode":
$EnvGuiServer::SimpleMode = mClamp(%value, 0, 1);
EnvGuiServer::setSimpleMode();
if (!$EnvGuiServer::SimpleMode)
{
if (!$EnvGuiServer::HasSetAdvancedOnce)
EnvGuiServer::readAdvancedVarsFromSimple();
EnvGuiServer::setAdvancedMode();
}
case "SkyIdx":
$EnvGuiServer::SkyIdx = mClamp(%value, 0, $EnvGuiServer::SkyCount);
setSkyBox($EnvGuiServer::Sky[$EnvGuiServer::SkyIdx]);
case "WaterIdx":
$EnvGuiServer::WaterIdx = mClamp(%value, 0, $EnvGuiServer::WaterCount);
setWater($EnvGuiServer::Water[$EnvGuiServer::WaterIdx]);
case "GroundIdx":
$EnvGuiServer::GroundIdx = mClamp(%value, 0, $EnvGuiServer::GroundCount);
setGround($EnvGuiServer::Ground[$EnvGuiServer::GroundIdx]);
case "SunFlareTopIdx":
$EnvGuiServer::SunFlareTopIdx = mClamp(%value, 0, $EnvGuiServer::SunFlareCount);
%top = $EnvGuiServer::SunFlareTop[$EnvGuiServer::SunFlareTopIdx];
%bottom = $EnvGuiServer::SunFlareBottom[$EnvGuiServer::SunFlareBottomIdx];
SunLight.setFlareBitmaps(%top, %bottom);
case "SunFlareBottomIdx":
$EnvGuiServer::SunFlareBottomIdx = mClamp(%value, 0, $EnvGuiServer::SunFlareCount);
%top = $EnvGuiServer::SunFlareTop[$EnvGuiServer::SunFlareTopIdx];
%bottom = $EnvGuiServer::SunFlareBottom[$EnvGuiServer::SunFlareBottomIdx];
SunLight.setFlareBitmaps(%top, %bottom);
case "DayOffset":
$EnvGuiServer::DayOffset = mClampF(%value, 0, 1);
DayCycle.setDayOffset($EnvGuiServer::DayOffset);
case "DayLength":
$EnvGuiServer::DayLength = mClamp(%value, 0, 86400);
DayCycle.setDayLength($EnvGuiServer::DayLength);
case "DayCycleEnabled":
$EnvGuiServer::DayCycleEnabled = mClamp(%value, 0, 1);
DayCycle.setEnabled($EnvGuiServer::DayCycleEnabled);
case "DayCycleIdx":
$EnvGuiServer::DayCycleIdx = mClamp(%value, 0, $EnvGuiServer::DayCycleCount);
%dayCycle = $EnvGuiServer::DayCycle[$EnvGuiServer::DayCycleIdx];
echo("server setting daycycle to " @ %dayCycle);
loadDayCycle(%dayCycle);
case "SunAzimuth":
$EnvGuiServer::SunAzimuth = mClampF(%value, 0, 360);
Sun.azimuth = $EnvGuiServer::SunAzimuth;
Sun.sendUpdate();
case "SunElevation":
$EnvGuiServer::SunElevation = mClampF(%value, -10, 190);
Sun.elevation = $EnvGuiServer::SunElevation;
Sun.sendUpdate();
case "DirectLightColor":
$EnvGuiServer::DirectLightColor = getColorF(%value);
Sun.color = $EnvGuiServer::DirectLightColor;
Sun.sendUpdate();
case "AmbientLightColor":
$EnvGuiServer::AmbientLightColor = getColorF(%value);
Sun.ambient = $EnvGuiServer::AmbientLightColor;
Sun.sendUpdate();
case "ShadowColor":
$EnvGuiServer::ShadowColor = getColorF(%value);
Sun.shadowColor = $EnvGuiServer::ShadowColor;
Sun.sendUpdate();
case "SunFlareColor":
$EnvGuiServer::SunFlareColor = getColorF(%value);
SunLight.color = $EnvGuiServer::SunFlareColor;
SunLight.sendUpdate();
case "SunFlareSize":
$EnvGuiServer::SunFlareSize = mClampF(%value, 0, 10);
// Badspot, why not just SunLight.setFlareSize(...);?
SunLight.flareSize = $EnvGuiServer::SunFlareSize;
SunLight.sendUpdate();
case "SunFlareIdx":
$EnvGuiServer::SunFlareIdx = mClamp(%value, 0, $EnvGuiServer::SunFlareCount);
// ... what? Why does this exist? There is no "SunFlareIdx" system.
// Get outta' here.
case "VisibleDistance":
$EnvGuiServer::VisibleDistance = mClampF(%value, 0, 1000);
Sky.visibleDistance = $EnvGuiServer::VisibleDistance;
Sky.sendUpdate();
case "FogDistance":
$EnvGuiServer::FogDistance = mClampF(%value, 0, 1000);
Sky.fogDistance = $EnvGuiServer::FogDistance;
Sky.sendUpdate();
case "FogHeight":
$EnvGuiServer::FogHeight = mClampF(%value, 0, 1000);
// Nothing to see here...
case "FogColor":
$EnvGuiServer::FogColor = getColorF(%value);
Sky.fogColor = $EnvGuiServer::FogColor;
Sky.sendUpdate();
case "WaterColor":
$EnvGuiServer::WaterColor = getColorF(%value);
if (isObject(WaterPlane))
{
WaterPlane.color = getColorI($EnvGuiServer::WaterColor);
WaterPlane.blend = getWord(WaterPlane.color, 3) < 255;
WaterPlane.sendUpdate();
}
updateWaterFog();
case "WaterHeight":
$EnvGuiServer::WaterHeight = mClampF(%value, -1, 100);
if (isObject(WaterPlane))
{
%pos = getWords(GroundPlane.getTransform(), 0, 2);
%pos = vectorAdd(%pos, "0 0" SPC $EnvGuiServer::WaterHeight);
WaterPlane.setTransform(%pos SPC "0 0 1 0");
WaterPlane.sendUpdate();
updateWaterFog();
if (isObject(WaterZone))
{
%pos = vectorSub(%pos, "0 0 99.5");
%pos = vectorSub(%pos, "500000 -500000 0");
WaterZone.setTransform(%pos SPC "0 0 1 0");
}
}
case "UnderWaterColor":
$EnvGuiServer::UnderWaterColor = getColorF(%value);
if (isObject(WaterZone))
{
WaterZone.setWaterColor($EnvGuiServer::UnderWaterColor);
}
case "SkyColor":
$EnvGuiServer::SkyColor = getColorF(%value);
// Something is off about this one...
Sky.skyColor = $EnvGuiServer::SkyColor;
Sky.sendUpdate();
// Should probably combine this into one
// case "WaterScrollX" or "WaterScrollY":
case "WaterScrollX":
$EnvGuiServer::WaterScrollX = mClampF(%value, -10, 10);
$EnvGuiServer::WaterScrollY = mClampF($EnvGuiServer::WaterScrollY, -10, 10);
if (isObject(WaterPlane))
{
WaterPlane.scrollSpeed = $EnvGuiServer::WaterScrollX SPC $EnvGuiServer::WaterScrollY;
WaterPlane.sendUpdate();
}
if (isObject(WaterZone))
{
%fx = $EnvGuiServer::WaterScrollX * 414;
%fy = $EnvGuiServer::WaterScrollY * -414;
WaterZone.appliedForce = %fx SPC %fy SPC 0;
WaterZone.sendUpdate();
}
case "WaterScrollY":
$EnvGuiServer::WaterScrollY = mClampF(%value, -10, 10);
$EnvGuiServer::WaterScrollX = mClampF($EnvGuiServer::WaterScrollX, -10, 10);
if (isObject(WaterPlane))
{
WaterPlane.scrollSpeed = $EnvGuiServer::WaterScrollX SPC $EnvGuiServer::WaterScrollY;
WaterPlane.sendUpdate();
}
if (isObject(WaterZone))
{
%fx = $EnvGuiServer::WaterScrollX * 414;
%fy = $EnvGuiServer::WaterScrollY * -414;
WaterZone.appliedForce = %fx SPC %fy SPC 0;
WaterZone.sendUpdate();
}
case "GroundColor":
$EnvGuiServer::GroundColor = getColorF(%value);
if (isObject(GroundPlane))
{
GroundPlane.color = getColorI($EnvGuiServer::GroundColor);
GroundPlane.blend = getWord(GroundPlane.color, 3) < 255;
GroundPlane.sendUpdate();
Sky.renderBottomTexture = getWord(GroundPlane.color, 3) <= 0;
Sky.noRenderBans = Sky.renderBottomTexture;
Sky.sendUpdate();
}
case "GroundScrollX":
$EnvGuiServer::GroundScrollX = mClampF(%value, -10, 10);
$EnvGuiServer::GroundScrollY = mClampF($EnvGuiServer::GroundScrollY, -10, 10);
if (isObject(GroundPlane))
{
GroundPlane.scrollSpeed = $EnvGuiServer::GroundScrollX SPC $EnvGuiServer::GroundScrollY;
GroundPlane.sendUpdate();
}
case "GroundScrollY":
$EnvGuiServer::GroundScrollY = mClampF(%value, -10, 10);
$EnvGuiServer::GroundScrollX = mClampF($EnvGuiServer::GroundScrollX, -10, 10);
if (isObject(GroundPlane))
{
GroundPlane.scrollSpeed = $EnvGuiServer::GroundScrollX SPC $EnvGuiServer::GroundScrollY;
GroundPlane.sendUpdate();
}
case "VignetteMultiply":
$EnvGuiServer::VignetteMultiply = mClamp(%value, 0, 1);
sendVignetteAll();
case "VignetteColor":
$EnvGuiServer::VignetteColor = getColorF(%value);
sendVignetteAll();
default:
return 0;
}
return 1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment