using System; using System.Collections; using System.Collections.Generic; using Ichni.Editor; using Ichni.RhythmGame.Beatmap; using Ichni.RhythmGame.ThemeBundles.Basic.Beatmap; using UnityEngine; namespace Ichni.RhythmGame.ThemeBundles.Basic { public partial class DirectionalLight : EnvironmentObject { [SerializeField] private Light directionalLight; public float intensity; public bool castShadows; public static DirectionalLight GenerateElement(string elementName, Guid id, List tags, bool isFirstGenerated, GameElement parentElement, string themeBundleName, string objectName, bool isStatic, float intensity, bool castShadows) { DirectionalLight dirLight = EnvironmentObject.GenerateElement(elementName, id, tags, isFirstGenerated, themeBundleName, objectName, parentElement, isStatic).GetComponent(); dirLight.intensity = intensity; dirLight.castShadows = castShadows; return dirLight; } public override void Refresh() { base.Refresh(); directionalLight.color = colorSubmodule.currentBaseColor; directionalLight.intensity = intensity; directionalLight.shadows = castShadows ? LightShadows.Soft : LightShadows.None; } } public partial class DirectionalLight { public override void SaveBM() { matchedBM = new DirectionalLight_BM(elementName, elementGuid, tags, parentElement.matchedBM as GameElement_BM, themeBundleName, objectName, isStatic, intensity, castShadows); } public override void SetUpInspector() { base.SetUpInspector(); IHaveInspection inspector = EditorManager.instance.uiManager.inspector; var container = inspector.GenerateContainer("Directional Light"); var intensityField = inspector.GenerateInputField(this, container, "Intensity", nameof(intensity)); intensityField.AddListenerFunction(_ => Refresh()); var castShadowsToggle = inspector.GenerateToggle(this, container, "Cast Shadows", nameof(castShadows)); castShadowsToggle.AddListenerFunction(_ => Refresh()); } } namespace Beatmap { public class DirectionalLight_BM : EnvironmentObject_BM { public float intensity; public bool castShadows; public DirectionalLight_BM() { } public DirectionalLight_BM(string elementName, Guid id, List tags, GameElement_BM parent, string themeBundleName, string objectName, bool isStatic, float intensity, bool castShadows) : base(elementName, id, tags, parent, themeBundleName, objectName, isStatic) { this.intensity = intensity; this.castShadows = castShadows; } public override void ExecuteBM() { matchedElement = DirectionalLight.GenerateElement(elementName, elementGuid, tags, false, GetElement(attachedElementGuid), themeBundleName, objectName, isStatic, intensity, castShadows); } public override GameElement DuplicateBM(GameElement parent) { return DirectionalLight.GenerateElement(elementName, Guid.NewGuid(), tags, false, parent, themeBundleName, objectName, isStatic, intensity, castShadows); } } } }