Skip to content

Commit fba5f5f

Browse files
authored
Merge pull request #45 from murasaqi/dev
Dev
2 parents 10313e6 + 1c306fe commit fba5f5f

15 files changed

+95
-72
lines changed

jp.iridescenet.stagelightmaneuver/Editor/CustomEditor/StageLightTimelineClipEditor.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ public override void DrawBackground(TimelineClip clip, ClipBackgroundRegion regi
8686
var stageLightTimelineClip = (StageLightTimelineClip) clip.asset;
8787

8888

89+
if(stageLightTimelineClip.track == null) return;
8990

9091
if (stageLightTimelineClip.clipDisplayName != clip.displayName)
9192
{
@@ -240,7 +241,7 @@ Texture2D GetGradientTexture(TimelineClip clip, bool update = false)
240241
}
241242

242243

243-
var lightIntensityProperty = customClip.StageLightQueueData.TryGetActiveProperty<LightIntensityProperty>();
244+
var lightDimmerProperty = customClip.StageLightQueueData.TryGetActiveProperty<LightIntensityProperty>();
244245
if (update)
245246
{
246247
_gradientTextures.Remove(customClip);
@@ -277,10 +278,10 @@ Texture2D GetGradientTexture(TimelineClip clip, bool update = false)
277278
}
278279

279280
var intensityValue = 1f;
280-
if (lightIntensityProperty != null)
281+
if (lightDimmerProperty != null)
281282
{
282-
var t = SlmUtility.GetNormalizedTime(currentTime, timeProperty, lightIntensityProperty);
283-
intensityValue = lightIntensityProperty.lightToggleIntensity.value.Evaluate(t);
283+
var t = SlmUtility.GetNormalizedTime(currentTime, timeProperty, lightDimmerProperty);
284+
intensityValue = lightDimmerProperty.lightToggleDimmer.value.Evaluate(t);
284285
// intensityValue = intensityValue
285286
}
286287
else if(materialColorProperty != null)

jp.iridescenet.stagelightmaneuver/Editor/PropertyDrawer/StageLightPropertiesDrawer.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,16 +152,16 @@ private void DrawAddPropertyButton(SerializedObject serializedObject, List<SlmPr
152152
{
153153
var manualLightArrayProperty = property as ManualLightArrayProperty;
154154
var lightProperty = stageLightProperties.Find(x => x.GetType() == typeof(LightProperty)) as LightProperty;
155-
var lightIntensityProperty = stageLightProperties.Find(x => x.GetType() == typeof(LightIntensityProperty)) as LightIntensityProperty;
155+
var lightDimmerProperty = stageLightProperties.Find(x => x.GetType() == typeof(LightIntensityProperty)) as LightIntensityProperty;
156156
if (lightProperty != null)
157157
{
158158
manualLightArrayProperty.initialValue.angle = lightProperty.spotAngle.value.constant;
159159
manualLightArrayProperty.initialValue.innerAngle = lightProperty.innerSpotAngle.value.constant;
160160
manualLightArrayProperty.initialValue.range = lightProperty.range.value.constant;
161161
}
162-
if (lightIntensityProperty != null)
162+
if (lightDimmerProperty != null)
163163
{
164-
manualLightArrayProperty.initialValue.intensity = lightIntensityProperty.lightToggleIntensity.value.constant;
164+
manualLightArrayProperty.initialValue.intensity = lightDimmerProperty.lightToggleDimmer.value.constant;
165165
}
166166
}
167167
stageLightProperties.Add(property);

jp.iridescenet.stagelightmaneuver/Runtime/Channels/LightChannel.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public enum FallOffMode
4747

4848

4949
#region Configs
50+
[ChannelField(true)] public float intensityMultiplier = 1f;
5051
[ChannelField(true)] public float limitIntensityMin = 0f;
5152
[ChannelField(true)] public float limitIntensityMax = 10000f;
5253
[ChannelField(true)] public float limitInnerSpotAngleMin = 0f;
@@ -138,7 +139,7 @@ public override void EvaluateQue(float currentTime)
138139
var clockProperty= data.TryGetActiveProperty<ClockProperty>() as ClockProperty;
139140
var lightProperty = data.TryGetActiveProperty<LightProperty>() as LightProperty;
140141
var lightColorProperty = data.TryGetActiveProperty<LightColorProperty>() as LightColorProperty;
141-
var lightIntensityProperty = data.TryGetActiveProperty<LightIntensityProperty>() as LightIntensityProperty;
142+
var lightDimmerProperty = data.TryGetActiveProperty<LightIntensityProperty>() as LightIntensityProperty;
142143
var lightFlickerProperty = data.TryGetActiveProperty<LightFlickerProperty>() as LightFlickerProperty;
143144
var weight = data.weight;
144145
var stageLightOrderProperty = data.TryGetActiveProperty<StageLightOrderProperty>() as StageLightOrderProperty;
@@ -163,10 +164,10 @@ public override void EvaluateQue(float currentTime)
163164
}
164165
else
165166
{
166-
if (lightIntensityProperty != null)
167+
if (lightDimmerProperty != null)
167168
{
168169
var t = SlmUtility.GetNormalizedTime(currentTime, data, typeof(LightIntensityProperty),index);
169-
lightIntensity += lightIntensityProperty.lightToggleIntensity.value.Evaluate(t) * weight;
170+
lightIntensity += lightDimmerProperty.lightToggleDimmer.value.Evaluate(t) * weight;
170171
}
171172
if(lightFlickerProperty != null)
172173
{
@@ -209,7 +210,7 @@ public override void EvaluateQue(float currentTime)
209210
}
210211
}
211212

212-
lightIntensity = Mathf.Clamp(lightIntensity, limitIntensityMin, limitIntensityMax);
213+
lightIntensity = Mathf.Clamp(lightIntensity, limitIntensityMin, limitIntensityMax) * intensityMultiplier;
213214
spotAngle = Mathf.Clamp(spotAngle, limitSpotAngleMin, limitSpotAngleMax);
214215
innerSpotAngle = Mathf.Clamp(innerSpotAngle, limitInnerSpotAngleMin, limitInnerSpotAngleMax);
215216
spotRange = Mathf.Clamp(spotRange, limitSpotRangeMin, limitSpotRangeMax);

jp.iridescenet.stagelightmaneuver/Runtime/Channels/MaterialColorChannel.cs

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ public class MaterialColorChannel:StageLightChannelBase
3030
[ChannelField(false)] private int propertyId;
3131
#endregion
3232

33+
private List<Material> sharedMaterials = new();
34+
3335

3436
void Start()
3537
{
@@ -49,18 +51,22 @@ public void GetMeshRenderer()
4951

5052
public override void Init()
5153
{
52-
53-
_materialPropertyBlock = new MaterialPropertyBlock();
54+
_materialPropertyBlock ??= new MaterialPropertyBlock();
5455
if(meshRenderer)meshRenderer.GetPropertyBlock(_materialPropertyBlock);
55-
_materialPropertyBlocks = new Dictionary<Renderer, MaterialPropertyBlock>();
56+
57+
_materialPropertyBlocks ??= new Dictionary<Renderer, MaterialPropertyBlock>();
58+
_materialPropertyBlocks.Clear();
59+
5660
foreach (var meshRenderer in syncMeshRenderers)
5761
{
58-
if(meshRenderer == null) continue;
62+
if(meshRenderer == null || (_materialPropertyBlocks.TryGetValue(meshRenderer, out var prop) && prop != null)) continue;
5963
var materialPropertyBlock = new MaterialPropertyBlock();
6064
meshRenderer.GetPropertyBlock(materialPropertyBlock);
61-
_materialPropertyBlocks.Add(meshRenderer,materialPropertyBlock);
65+
66+
_materialPropertyBlocks.Add(meshRenderer, materialPropertyBlock);
6267
}
6368

69+
PropertyTypes.Clear();
6470
PropertyTypes.Add(typeof(MaterialColorProperty));
6571
}
6672

@@ -105,15 +111,17 @@ public override void EvaluateQue(float currentTime)
105111

106112
public override void UpdateChannel()
107113
{
108-
if (_materialPropertyBlock == null || _materialPropertyBlocks == null) return;
114+
if (_materialPropertyBlock == null || _materialPropertyBlocks == null)
109115
{
110116
Init();
111117
}
112-
if(_materialPropertyBlock ==null) return;
118+
119+
if(_materialPropertyBlock == null) return;
113120

114121
if (meshRenderer)
115122
{
116-
if(meshRenderer.sharedMaterials.Length <= materialIndex) return;
123+
meshRenderer.GetSharedMaterials(sharedMaterials);
124+
if(sharedMaterials.Count <= materialIndex) return;
117125
meshRenderer.GetPropertyBlock(_materialPropertyBlock,materialIndex);
118126
_materialPropertyBlock.SetColor(colorPropertyName,SlmUtility.GetHDRColor(color,intensity));
119127
meshRenderer.SetPropertyBlock(_materialPropertyBlock,materialIndex);

jp.iridescenet.stagelightmaneuver/Runtime/Channels/MaterialFloatChannel.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ public class MaterialFloatChannel:StageLightChannelBase
2424
[ChannelField(false)] private Dictionary<Renderer,MaterialPropertyBlock> _materialPropertyBlocks = null;
2525
[ChannelField(false)] private int propertyId;
2626
#endregion
27+
28+
private List<Material> sharedMaterials = new();
29+
2730

2831
void Start()
2932
{
@@ -43,19 +46,23 @@ public void GetMeshRenderer()
4346

4447
public override void Init()
4548
{
46-
47-
_materialPropertyBlock = new MaterialPropertyBlock();
49+
_materialPropertyBlock ??= new MaterialPropertyBlock();
4850
if(meshRenderer)meshRenderer.GetPropertyBlock(_materialPropertyBlock);
49-
_materialPropertyBlocks = new Dictionary<Renderer, MaterialPropertyBlock>();
51+
52+
_materialPropertyBlocks ??= new Dictionary<Renderer, MaterialPropertyBlock>();
53+
_materialPropertyBlocks.Clear();
54+
5055
foreach (var meshRenderer in syncMeshRenderers)
5156
{
52-
if(meshRenderer == null) continue;
57+
if(meshRenderer == null || (_materialPropertyBlocks.TryGetValue(meshRenderer, out var prop) && prop != null)) continue;
5358
var materialPropertyBlock = new MaterialPropertyBlock();
5459
meshRenderer.GetPropertyBlock(materialPropertyBlock);
55-
_materialPropertyBlocks.Add(meshRenderer,materialPropertyBlock);
60+
61+
_materialPropertyBlocks.Add(meshRenderer, materialPropertyBlock);
5662
}
5763

58-
PropertyTypes.Add(typeof(MaterialFloatProperty));
64+
PropertyTypes.Clear();
65+
PropertyTypes.Add(typeof(MaterialColorProperty));
5966
}
6067

6168
private void OnValidate()
@@ -86,15 +93,17 @@ public override void EvaluateQue(float currentTime)
8693

8794
public override void UpdateChannel()
8895
{
89-
if (_materialPropertyBlock == null || _materialPropertyBlocks == null) return;
96+
if (_materialPropertyBlock == null || _materialPropertyBlocks == null)
9097
{
9198
Init();
9299
}
100+
93101
if(_materialPropertyBlock ==null) return;
94102

95103
if (meshRenderer)
96104
{
97-
if(meshRenderer.sharedMaterials.Length <= materialIndex) return;
105+
meshRenderer.GetSharedMaterials(sharedMaterials);
106+
if(sharedMaterials.Count <= materialIndex) return;
98107
meshRenderer.GetPropertyBlock(_materialPropertyBlock,materialIndex);
99108
_materialPropertyBlock.SetFloat(colorPropertyName,floatValue);
100109
meshRenderer.SetPropertyBlock(_materialPropertyBlock,materialIndex);

jp.iridescenet.stagelightmaneuver/Runtime/Channels/MaterialTextureChannel.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using UnityEngine;
44

@@ -36,14 +36,19 @@ protected void OnEnable()
3636

3737
public override void Init()
3838
{
39-
_materialPropertyBlockDictionary = new Dictionary<MeshRenderer, MaterialPropertyBlock>();
39+
_materialPropertyBlockDictionary ??= new Dictionary<MeshRenderer, MaterialPropertyBlock>();
40+
_materialPropertyBlockDictionary.Clear();
41+
4042
foreach (var meshRenderer in meshRenderers)
4143
{
4244
if(meshRenderer == null) continue;
4345
var materialPropertyBlock = new MaterialPropertyBlock();
4446
meshRenderer.GetPropertyBlock(materialPropertyBlock);
45-
_materialPropertyBlockDictionary.Add(meshRenderer,materialPropertyBlock);
47+
48+
_materialPropertyBlockDictionary.Add(meshRenderer, materialPropertyBlock);
4649
}
50+
51+
PropertyTypes.Clear();
4752
PropertyTypes.Add(typeof(MaterialTextureProperty));
4853
}
4954

jp.iridescenet.stagelightmaneuver/Runtime/Channels/SyncLightMaterialChannel.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,10 @@ public class SyncLightMaterialChannel : StageLightChannelBase
3232
[ChannelField(true)] public float maxIntensityLimit = 3;
3333
[ChannelField(true)] public int materialIndex = 0;
3434
[FormerlySerializedAs("lightChannelChannel")] [FormerlySerializedAs("lightFxChannel")]
35+
[ChannelField(true)] public bool brightnessDecreasesToBlack = true;
3536
#endregion
3637

3738
#region params
38-
[ChannelField(false)] public bool brightnessDecreasesToBlack = true;
3939
[ChannelField(false)] private Dictionary<MeshRenderer,MaterialPropertyBlock> _materialPropertyBlocks;
4040
[ChannelField(false)] public float intensityMultiplier = 1f;
4141
#endregion
@@ -78,8 +78,8 @@ public void GetMeshRenderersInChild()
7878

7979
public override void Init()
8080
{
81+
_materialPropertyBlocks ??= new Dictionary<MeshRenderer, MaterialPropertyBlock>();
8182
if(_materialPropertyBlocks != null) _materialPropertyBlocks.Clear();
82-
_materialPropertyBlocks = new Dictionary<MeshRenderer, MaterialPropertyBlock>();
8383

8484
foreach (var meshRenderer in meshRenderers)
8585
{
@@ -106,10 +106,10 @@ public override void EvaluateQue(float currentTime)
106106
if(syncLightMaterialProperty != null)
107107
{
108108
intensityMultiplier += syncLightMaterialProperty.intensitymultiplier.value * data.weight;
109-
if(data.weight > 0.5f)
110-
{
111-
brightnessDecreasesToBlack = syncLightMaterialProperty.brightnessDecreasesToBlack.value;
112-
}
109+
// if(data.weight > 0.5f)
110+
// {
111+
// brightnessDecreasesToBlack = syncLightMaterialProperty.brightnessDecreasesToBlack.value;
112+
// }
113113

114114
maxIntensityLimit += syncLightMaterialProperty.maxIntensityLimit.value * data.weight;
115115
}

jp.iridescenet.stagelightmaneuver/Runtime/Channels/SyncRensFlaretChannel.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class SyncLensFlareChannel : StageLightChannelBase
2424

2525
#region Configs
2626
[ChannelField(true)] public float maxIntensityLimit = 3;
27+
[ChannelField(true)] public bool brightnessDecreasesToBlack = true;
2728
#endregion
2829

2930

@@ -80,6 +81,14 @@ public override void UpdateChannel()
8081
var intensity = Mathf.Min(lightChannel.lightIntensity * intensityMultiplier,maxIntensityLimit);
8182
lensFlareSRP.intensity = intensity;
8283
lensFlareSRP.scale = scale;
84+
85+
//? ライトの色を考慮
86+
//! レンズフレアの色変える方法わからんので、一旦単に明るさを変えるだけにする
87+
if (brightnessDecreasesToBlack)
88+
{
89+
float lightColorBrightness = lightChannel.lightColor.grayscale;
90+
lensFlareSRP.intensity *= lightColorBrightness;
91+
}
8392
}
8493
}
8594

jp.iridescenet.stagelightmaneuver/Runtime/Data/LightIntensityProperty.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ namespace StageLightManeuver
88
[Serializable]
99
public class LightIntensityProperty:SlmAdditionalProperty
1010
{
11-
[SlmValue("Intensity")]public SlmToggleValue<MinMaxEasingValue> lightToggleIntensity;// = new StageLightProperty<float>(){value = 1f};
11+
[FormerlySerializedAs("lightToggleIntensity")] [SlmValue("Dimmer")]public SlmToggleValue<MinMaxEasingValue> lightToggleDimmer;// = new StageLightProperty<float>(){value = 1f};
1212
public LightIntensityProperty()
1313
{
1414
propertyOverride = true;
15-
propertyName = "Intensity";
15+
propertyName = "Dimmer";
1616
clockOverride = new SlmToggleValue<ClockOverride>();
17-
lightToggleIntensity = new SlmToggleValue<MinMaxEasingValue>(){value = new MinMaxEasingValue()
17+
lightToggleDimmer = new SlmToggleValue<MinMaxEasingValue>(){value = new MinMaxEasingValue()
1818
{
1919
minMaxValue = new Vector2(0, 10),
2020
constant = 1f,
@@ -26,18 +26,18 @@ public override void ToggleOverride(bool toggle)
2626
{
2727
propertyOverride = toggle;
2828
clockOverride.propertyOverride = toggle;
29-
lightToggleIntensity.propertyOverride = toggle;
29+
lightToggleDimmer.propertyOverride = toggle;
3030
}
3131

3232
public LightIntensityProperty( LightIntensityProperty other )
3333
{
3434
propertyName = other.propertyName;
3535
propertyOverride = other.propertyOverride;
3636
clockOverride = new SlmToggleValue<ClockOverride>(other.clockOverride);
37-
lightToggleIntensity = new SlmToggleValue<MinMaxEasingValue>()
37+
lightToggleDimmer = new SlmToggleValue<MinMaxEasingValue>()
3838
{
39-
propertyOverride = other.lightToggleIntensity.propertyOverride,
40-
value = new MinMaxEasingValue(other.lightToggleIntensity.value)
39+
propertyOverride = other.lightToggleDimmer.propertyOverride,
40+
value = new MinMaxEasingValue(other.lightToggleDimmer.value)
4141
};
4242
}
4343

@@ -48,7 +48,7 @@ public override void OverwriteProperty(SlmProperty other)
4848
var otherProperty = other as LightIntensityProperty;
4949
if (other.propertyOverride)
5050
{
51-
if(otherProperty.lightToggleIntensity.propertyOverride) lightToggleIntensity.value = new MinMaxEasingValue(otherProperty.lightToggleIntensity.value);
51+
if(otherProperty.lightToggleDimmer.propertyOverride) lightToggleDimmer.value = new MinMaxEasingValue(otherProperty.lightToggleDimmer.value);
5252
if(otherProperty.clockOverride.propertyOverride) clockOverride = new SlmToggleValue<ClockOverride>(otherProperty.clockOverride);
5353
}
5454

jp.iridescenet.stagelightmaneuver/Runtime/Data/ManualColorArrayProperty.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public override void ToggleOverride(bool toggle)
4444
public override void ResyncArraySize(List<StageLightFixture> stageLights)
4545
{
4646
var colorPrimitiveValues = colorValues.value;
47+
if(colorPrimitiveValues.Count == stageLights.Count) return;
48+
4749
if (colorPrimitiveValues.Count < stageLights.Count)
4850
{
4951
while (colorPrimitiveValues.Count < stageLights.Count)

jp.iridescenet.stagelightmaneuver/Runtime/Data/ManualLightArrayProperty.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,9 @@ public void AddLightPrimitive(LightPrimitiveValue lightPrimitiveValue = null)
9292

9393
public override void ResyncArraySize(List<StageLightFixture> stageLights)
9494
{
95-
9695
var lightPrimitiveValues = lightValues.value;
96+
if(lightPrimitiveValues.Count == stageLights.Count) return;
97+
9798
if (lightPrimitiveValues.Count < stageLights.Count)
9899
{
99100
while (lightPrimitiveValues.Count < stageLights.Count)

jp.iridescenet.stagelightmaneuver/Runtime/Data/ManualPanTiltProperty.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ public override void ResyncArraySize(List<StageLightFixture> stageLights)
5656
{
5757
base.ResyncArraySize(stageLights);
5858
var manualPanTiltArray = positions.value;
59+
if(manualPanTiltArray.Count == stageLights.Count) return;
60+
5961
if (manualPanTiltArray.Count < stageLights.Count)
6062
{
6163
while (manualPanTiltArray.Count < stageLights.Count)

jp.iridescenet.stagelightmaneuver/Runtime/Data/SyncLightMaterialProperty.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
public class SyncLightMaterialProperty:SlmAdditionalProperty
44
{
55
public SlmToggleValue<float> intensitymultiplier;
6-
public SlmToggleValue<bool> brightnessDecreasesToBlack;
6+
internal SlmToggleValue<bool> brightnessDecreasesToBlack;
77
public SlmToggleValue<float> maxIntensityLimit;
88
public SyncLightMaterialProperty()
99
{

0 commit comments

Comments
 (0)