412 lines
16 KiB
Lua
412 lines
16 KiB
Lua
local LightSettingUI = class("LightSettingUi", BaseUI)
|
|
|
|
function LightSettingUI:ctor()
|
|
end
|
|
|
|
function LightSettingUI:getPrefabPath()
|
|
return "assets/prefabs/ui/gm/gm_light_setting.prefab"
|
|
end
|
|
|
|
function LightSettingUI:isFullScreen()
|
|
return false
|
|
end
|
|
|
|
function LightSettingUI:onClose()
|
|
self.dropList.onValueChanged:RemoveAllListeners()
|
|
self.colorInputField.onEndEdit:RemoveAllListeners()
|
|
self.intensityInputField.onEndEdit:RemoveAllListeners()
|
|
self.shadowStrengthSlider.onValueChanged:RemoveAllListeners()
|
|
self.shadowStrengthInputField.onEndEdit:RemoveAllListeners()
|
|
self.shadowResolutionDropList.onValueChanged:RemoveAllListeners()
|
|
self.shadowBiasSlider.onValueChanged:RemoveAllListeners()
|
|
self.shadowBiasInputField.onEndEdit:RemoveAllListeners()
|
|
self.shadowNormalBiasSlider.onValueChanged:RemoveAllListeners()
|
|
self.shadowNormalBiasInputField.onEndEdit:RemoveAllListeners()
|
|
self.shadowNearPlaneSlider.onValueChanged:RemoveAllListeners()
|
|
self.shadowNearPlaneInputField.onEndEdit:RemoveAllListeners()
|
|
self.shadowProjectionDropList.onValueChanged:RemoveAllListeners()
|
|
self.shadowDistanceInputField.onEndEdit:RemoveAllListeners()
|
|
self.shadowNearPlaneOffsetInputField.onEndEdit:RemoveAllListeners()
|
|
self.shadowCascadesDropList.onValueChanged:RemoveAllListeners()
|
|
self.shadowmaskModeDropList.onValueChanged:RemoveAllListeners()
|
|
self.shadowsDropList.onValueChanged:RemoveAllListeners()
|
|
end
|
|
|
|
function LightSettingUI:onLoadRootComplete()
|
|
local uiMap = self.root:genAllChildren()
|
|
uiMap["gm_light_setting.close_btn"]:addClickListener(function()
|
|
self:closeUI()
|
|
end)
|
|
|
|
self.dropList = uiMap["gm_light_setting.light_list"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_DROP_DOWN)
|
|
self.dropList.onValueChanged:AddListener(function(index)
|
|
if self.lights == nil then
|
|
return
|
|
end
|
|
self.currLight = self.lights[index]
|
|
self:refreshLight()
|
|
end)
|
|
self.dropList:ClearOptions()
|
|
|
|
self.mask = uiMap["gm_light_setting.mask"]
|
|
|
|
-- 颜色
|
|
self.colorInputField = uiMap["gm_light_setting.input_field_1"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_INPUT_FIELD)
|
|
self.colorImage = uiMap["gm_light_setting.image_1"]
|
|
self.colorAlphaSlider = uiMap["gm_light_setting.image_1.alpha_slider"]
|
|
self.colorInputField.onEndEdit:AddListener(function (value)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
if string.byte(value) ~= 35 then
|
|
value = "#" .. value
|
|
end
|
|
local color = CS.BF.Utils.ParseHtmlString(value)
|
|
if color == nil then
|
|
return
|
|
end
|
|
self.currLight.color = color
|
|
self:refreshLight()
|
|
end)
|
|
|
|
-- 强度
|
|
self.intensityInputField = uiMap["gm_light_setting.input_field_2"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_INPUT_FIELD)
|
|
self.intensityInputField.onEndEdit:AddListener(function (value)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
local intensity = tonumber(value)
|
|
if intensity == nil then
|
|
return
|
|
end
|
|
self.currLight.intensity = intensity
|
|
self:refreshLight()
|
|
end)
|
|
|
|
-- 阴影
|
|
self.shadowStrengthSlider = uiMap["gm_light_setting.slider_5"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_SLIDER)
|
|
self.shadowStrengthSlider.onValueChanged:AddListener(function (value)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
self.currLight.shadowStrength = value
|
|
self:refreshLight()
|
|
end)
|
|
self.shadowStrengthInputField = uiMap["gm_light_setting.input_field_5"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_INPUT_FIELD)
|
|
self.shadowStrengthInputField.onEndEdit:AddListener(function (value)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
local strength = tonumber(value)
|
|
if strength == nil then
|
|
return
|
|
end
|
|
self.currLight.shadowStrength = strength
|
|
self:refreshLight()
|
|
end)
|
|
|
|
self.shadowResolutionDropList = uiMap["gm_light_setting.resolution_list_6"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_DROP_DOWN)
|
|
self.shadowResolutionDropList:ClearOptions()
|
|
local optionList = {}
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("Use Quality Settings"))
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("Low Resolution"))
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("Medium Resolution"))
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("High Resolution"))
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("Very High Resolution"))
|
|
self.shadowResolutionDropList:AddOptions(optionList)
|
|
self.shadowResolutionDropList.onValueChanged:AddListener(function(index)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
if index == 0 then
|
|
self.currLight.shadowResolution = CS.UnityEngine.Rendering.LightShadowResolution.FromQualitySettings
|
|
elseif index == 1 then
|
|
self.currLight.shadowResolution = CS.UnityEngine.Rendering.LightShadowResolution.Low
|
|
elseif index == 2 then
|
|
self.currLight.shadowResolution = CS.UnityEngine.Rendering.LightShadowResolution.Medium
|
|
elseif index == 3 then
|
|
self.currLight.shadowResolution = CS.UnityEngine.Rendering.LightShadowResolution.High
|
|
elseif index == 4 then
|
|
self.currLight.shadowResolution = CS.UnityEngine.Rendering.LightShadowResolution.VeryHigh
|
|
else
|
|
self.currLight.shadowResolution = CS.UnityEngine.Rendering.LightShadowResolution.FromQualitySettings
|
|
end
|
|
self:refreshLight()
|
|
end)
|
|
self.shadowResolutionDropList:SetValueWithoutNotify(0)
|
|
|
|
self.shadowBiasSlider = uiMap["gm_light_setting.slider_7"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_SLIDER)
|
|
self.shadowBiasSlider.onValueChanged:AddListener(function (value)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
self.currLight.shadowBias = value
|
|
self:refreshLight()
|
|
end)
|
|
self.shadowBiasInputField = uiMap["gm_light_setting.input_field_7"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_INPUT_FIELD)
|
|
self.shadowBiasInputField.onEndEdit:AddListener(function (value)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
local shadowBias = tonumber(value)
|
|
if shadowBias == nil then
|
|
return
|
|
end
|
|
self.currLight.shadowBias = shadowBias
|
|
self:refreshLight()
|
|
end)
|
|
|
|
self.shadowNormalBiasSlider = uiMap["gm_light_setting.slider_8"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_SLIDER)
|
|
self.shadowNormalBiasSlider.onValueChanged:AddListener(function (value)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
self.currLight.shadowNormalBias = value
|
|
self:refreshLight()
|
|
end)
|
|
self.shadowNormalBiasInputField = uiMap["gm_light_setting.input_field_8"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_INPUT_FIELD)
|
|
self.shadowNormalBiasInputField.onEndEdit:AddListener(function (value)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
local shadowNormalBias = tonumber(value)
|
|
if shadowNormalBias == nil then
|
|
return
|
|
end
|
|
self.currLight.shadowNormalBias = shadowNormalBias
|
|
self:refreshLight()
|
|
end)
|
|
|
|
self.shadowNearPlaneSlider = uiMap["gm_light_setting.slider_9"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_SLIDER)
|
|
self.shadowNearPlaneSlider.onValueChanged:AddListener(function (value)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
self.currLight.shadowNearPlane = value
|
|
self:refreshLight()
|
|
end)
|
|
self.shadowNearPlaneInputField = uiMap["gm_light_setting.input_field_9"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_INPUT_FIELD)
|
|
self.shadowNearPlaneInputField.onEndEdit:AddListener(function (value)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
local shadowNearPlane = tonumber(value)
|
|
if shadowNearPlane == nil then
|
|
return
|
|
end
|
|
self.currLight.shadowNearPlane = shadowNearPlane
|
|
self:refreshLight()
|
|
end)
|
|
|
|
self.shadowProjectionDropList = uiMap["gm_light_setting.projection_list_11"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_DROP_DOWN)
|
|
self.shadowProjectionDropList:ClearOptions()
|
|
local optionList = {}
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("Close Fit"))
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("Stable Fit"))
|
|
self.shadowProjectionDropList:AddOptions(optionList)
|
|
self.shadowProjectionDropList.onValueChanged:AddListener(function(index)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
if index == 0 then
|
|
CS.UnityEngine.QualitySettings.shadowProjection = CS.UnityEngine.ShadowProjection.CloseFit
|
|
else
|
|
CS.UnityEngine.QualitySettings.shadowProjection = CS.UnityEngine.ShadowProjection.StableFit
|
|
end
|
|
self:refreshLight()
|
|
end)
|
|
self.shadowProjectionDropList:SetValueWithoutNotify(0)
|
|
|
|
self.shadowDistanceInputField = uiMap["gm_light_setting.input_field_12"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_INPUT_FIELD)
|
|
self.shadowDistanceInputField.onEndEdit:AddListener(function (value)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
local shadowDistance = tonumber(value)
|
|
if shadowDistance == nil then
|
|
return
|
|
end
|
|
CS.UnityEngine.QualitySettings.shadowDistance = shadowDistance
|
|
self:refreshLight()
|
|
end)
|
|
|
|
self.shadowNearPlaneOffsetInputField = uiMap["gm_light_setting.input_field_13"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_INPUT_FIELD)
|
|
self.shadowNearPlaneOffsetInputField.onEndEdit:AddListener(function (value)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
local shadowNearPlaneOffset = tonumber(value)
|
|
if shadowNearPlaneOffset == nil then
|
|
return
|
|
end
|
|
CS.UnityEngine.QualitySettings.shadowNearPlaneOffset = shadowNearPlaneOffset
|
|
self:refreshLight()
|
|
end)
|
|
|
|
self.shadowCascadesDropList = uiMap["gm_light_setting.cascades_list_14"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_DROP_DOWN)
|
|
self.shadowCascadesDropList:ClearOptions()
|
|
local optionList = {}
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("No Cascades"))
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("Two Cascades"))
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("Four Cascades"))
|
|
self.shadowCascadesDropList:AddOptions(optionList)
|
|
self.shadowCascadesDropList.onValueChanged:AddListener(function(index)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
if index == 0 then
|
|
CS.UnityEngine.QualitySettings.shadowCascades = 1
|
|
elseif index == 1 then
|
|
CS.UnityEngine.QualitySettings.shadowCascades = 2
|
|
elseif index == 2 then
|
|
CS.UnityEngine.QualitySettings.shadowCascades = 4
|
|
else
|
|
CS.UnityEngine.QualitySettings.shadowCascades = 1
|
|
end
|
|
self:refreshLight()
|
|
end)
|
|
self.shadowCascadesDropList:SetValueWithoutNotify(0)
|
|
|
|
self.shadowmaskModeDropList = uiMap["gm_light_setting.mode_list_15"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_DROP_DOWN)
|
|
self.shadowmaskModeDropList:ClearOptions()
|
|
local optionList = {}
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("Shadowmask"))
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("Distance Shadowmask"))
|
|
self.shadowmaskModeDropList:AddOptions(optionList)
|
|
self.shadowmaskModeDropList.onValueChanged:AddListener(function(index)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
if index == 1 then
|
|
CS.UnityEngine.QualitySettings.shadowmaskMode = CS.UnityEngine.ShadowmaskMode.DistanceShadowmask
|
|
else
|
|
CS.UnityEngine.QualitySettings.shadowmaskMode = CS.UnityEngine.ShadowmaskMode.Shadowmask
|
|
end
|
|
self:refreshLight()
|
|
end)
|
|
self.shadowmaskModeDropList:SetValueWithoutNotify(0)
|
|
|
|
self.shadowsDropList = uiMap["gm_light_setting.shadows_list_16"]:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_DROP_DOWN)
|
|
self.shadowsDropList:ClearOptions()
|
|
local optionList = {}
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("Disable Shadows"))
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("Hard Shadows Only"))
|
|
table.insert(optionList, CS.UnityEngine.UI.Dropdown.OptionData("Hard And Soft Shadows"))
|
|
self.shadowsDropList:AddOptions(optionList)
|
|
self.shadowsDropList.onValueChanged:AddListener(function(index)
|
|
if self.currLight == nil then
|
|
return
|
|
end
|
|
if index == 1 then
|
|
CS.UnityEngine.QualitySettings.shadows = CS.UnityEngine.ShadowQuality.HardOnly
|
|
elseif index == 2 then
|
|
CS.UnityEngine.QualitySettings.shadows = CS.UnityEngine.ShadowQuality.All
|
|
else
|
|
CS.UnityEngine.QualitySettings.shadows = CS.UnityEngine.ShadowQuality.Disable
|
|
end
|
|
self:refreshLight()
|
|
end)
|
|
self.shadowsDropList:SetValueWithoutNotify(0)
|
|
|
|
self.lights = CS.UnityEngine.GameObject.FindObjectsOfType(GConst.TYPEOF_UNITY_CLASS.LIGHT)
|
|
if self.lights == nil or self.lights.Length <= 0 then
|
|
self.lights = nil
|
|
self.currLight = nil
|
|
self.mask:setLocalScale(1, 1, 1)
|
|
else
|
|
self.mask:setLocalScale(0, 0, 0)
|
|
end
|
|
end
|
|
|
|
function LightSettingUI:onRefresh()
|
|
self:refreshLightList()
|
|
end
|
|
|
|
function LightSettingUI:refreshLightList()
|
|
self.dropList:ClearOptions()
|
|
if self.lights == nil then
|
|
return
|
|
end
|
|
if self.lights.Length <= 0 then
|
|
return
|
|
end
|
|
local optionList = {}
|
|
for i = 0, self.lights.Length - 1 do
|
|
local data = CS.UnityEngine.UI.Dropdown.OptionData(self.lights[i].transform.name)
|
|
table.insert(optionList, data)
|
|
end
|
|
self.dropList:AddOptions(optionList)
|
|
self.dropList:SetValueWithoutNotify(0)
|
|
self.currLight = self.lights[0]
|
|
self:refreshLight()
|
|
end
|
|
|
|
function LightSettingUI:refreshLight()
|
|
local lightColor = self.currLight.color
|
|
self.colorImage:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE).color = BF.Color(lightColor.r, lightColor.g, lightColor.b, 1)
|
|
self.colorAlphaSlider:getComponent(GConst.TYPEOF_UNITY_CLASS.BF_SLIDER).value = 1 - lightColor.a
|
|
self.colorInputField.text = CS.UnityEngine.ColorUtility.ToHtmlStringRGBA(lightColor)
|
|
self.intensityInputField.text = tostring(self.currLight.intensity)
|
|
|
|
self.shadowStrengthInputField.text = tostring(self.currLight.shadowStrength)
|
|
self.shadowStrengthSlider.value = self.currLight.shadowStrength
|
|
|
|
local shadowResolution = self.currLight.shadowResolution
|
|
if shadowResolution == CS.UnityEngine.Rendering.LightShadowResolution.FromQualitySettings then
|
|
self.shadowResolutionDropList:SetValueWithoutNotify(0)
|
|
elseif shadowResolution == CS.UnityEngine.Rendering.LightShadowResolution.Low then
|
|
self.shadowResolutionDropList:SetValueWithoutNotify(1)
|
|
elseif shadowResolution == CS.UnityEngine.Rendering.LightShadowResolution.Medium then
|
|
self.shadowResolutionDropList:SetValueWithoutNotify(2)
|
|
elseif shadowResolution == CS.UnityEngine.Rendering.LightShadowResolution.High then
|
|
self.shadowResolutionDropList:SetValueWithoutNotify(3)
|
|
elseif shadowResolution == CS.UnityEngine.Rendering.LightShadowResolution.VeryHigh then
|
|
self.shadowResolutionDropList:SetValueWithoutNotify(4)
|
|
else
|
|
self.shadowResolutionDropList:SetValueWithoutNotify(0)
|
|
end
|
|
|
|
self.shadowBiasSlider.value = self.currLight.shadowBias
|
|
self.shadowBiasInputField.text = tostring(self.currLight.shadowBias)
|
|
|
|
self.shadowNormalBiasSlider.value = self.currLight.shadowNormalBias
|
|
self.shadowNormalBiasInputField.text = tostring(self.currLight.shadowNormalBias)
|
|
|
|
self.shadowNearPlaneSlider.value = self.currLight.shadowNearPlane
|
|
self.shadowNearPlaneInputField.text = tostring(self.currLight.shadowNearPlane)
|
|
|
|
if CS.UnityEngine.QualitySettings.shadowProjection == CS.UnityEngine.ShadowProjection.StableFit then
|
|
self.shadowProjectionDropList:SetValueWithoutNotify(1)
|
|
else
|
|
self.shadowProjectionDropList:SetValueWithoutNotify(0)
|
|
end
|
|
|
|
self.shadowDistanceInputField.text = tostring(CS.UnityEngine.QualitySettings.shadowDistance)
|
|
|
|
self.shadowNearPlaneOffsetInputField.text = tostring(CS.UnityEngine.QualitySettings.shadowNearPlaneOffset)
|
|
|
|
if CS.UnityEngine.QualitySettings.shadowCascades == 2 then
|
|
self.shadowCascadesDropList:SetValueWithoutNotify(1)
|
|
elseif CS.UnityEngine.QualitySettings.shadowCascades == 4 then
|
|
self.shadowCascadesDropList:SetValueWithoutNotify(2)
|
|
else
|
|
self.shadowCascadesDropList:SetValueWithoutNotify(0)
|
|
end
|
|
|
|
if CS.UnityEngine.QualitySettings.shadowmaskMode == CS.UnityEngine.ShadowmaskMode.DistanceShadowmask then
|
|
self.shadowmaskModeDropList:SetValueWithoutNotify(1)
|
|
else
|
|
self.shadowmaskModeDropList:SetValueWithoutNotify(0)
|
|
end
|
|
|
|
if CS.UnityEngine.QualitySettings.shadows == CS.UnityEngine.ShadowQuality.HardOnly then
|
|
self.shadowsDropList:SetValueWithoutNotify(1)
|
|
elseif CS.UnityEngine.QualitySettings.shadows == CS.UnityEngine.ShadowQuality.All then
|
|
self.shadowsDropList:SetValueWithoutNotify(2)
|
|
else
|
|
self.shadowsDropList:SetValueWithoutNotify(0)
|
|
end
|
|
end
|
|
|
|
return LightSettingUI
|