private void RemoveLight(LightHitInfo info) { if (reflectedLights.ContainsKey(info.source)) { LightBeam item = (LightBeam)reflectedLights[info.source]; info.outputs.Remove(item); RemoveLight(info.source); } }
private void Recalculate(LightHitInfo info) { info.contactPoint = info.source.ClosestPoint(base.transform.position); LightFilter[] array = filters; foreach (LightFilter lightFilter in array) { lightFilter.ApplyFilter(info); } }
protected override Vector3 GetDirection(LightHitInfo info) { Vector3 vector = base.Direction; if (Vector3.Dot(info.source.Direction, vector) < 0f) { vector = -vector; } return(vector); }
public override void ApplyFilter(LightHitInfo info) { Color color = info.source.color; float num = Vector3.Dot((info.contactPoint - info.source.transform.position).normalized, Direction.normalized); if (num <= 0f || !ignoreBackfacing) { CalculateReflection(info); } else { RemoveLight(info); } }
private void AddLightSource(LightBase source) { if (!ignoreLights.Contains(source) && !lightHits.ContainsKey(source)) { source.AddConsume(this); LightHitInfo lightHitInfo = new LightHitInfo(source); Recalculate(lightHitInfo); lightHits.Add(source, lightHitInfo); if (debugLog) { Debug.Log("Added new light source: " + source.name); } lightAdded(source); source.UpdateLight(); } }
protected virtual Vector3 GetDirection(LightHitInfo info) { switch (type) { case MirrorType.Forward: return(Direction); case MirrorType.Reflect: return(Vector3.Reflect(info.source.Direction, Direction)); case MirrorType.Transparent: return(info.source.Direction); default: return(info.source.Direction); } }
private void CalculateReflection(LightHitInfo info) { Vector3 position = GetPosition(info.contactPoint); Vector3 direction = GetDirection(info); if (consume.debugLog) { Debug.Log("reflect"); } LightBase lightBase; if (reflectedLights.ContainsKey(info.source)) { lightBase = reflectedLights[info.source]; if (!lightBase.isActiveAndEnabled) { RemoveLight(info); return; } lightBase.transform.position = position; lightBase.Direction = direction; lightBase.UpdateLight(consume); } else { if (info.source.bouncesLeft == 0) { return; } lightBase = CreateLight(position, direction); Collider collider = GetComponent <Collider>(); if (collider == null) { collider = GetComponentInParent <Collider>(); } lightBase.SetSize(collider.bounds); lightBase.bouncesLeft = info.source.bouncesLeft - 1; reflectedLights.Add(info.source, lightBase); info.outputs.Add(lightBase); consume.ignoreLights.Add(lightBase); } lightBase.color = info.source.color; }
public override void ApplyFilter(LightHitInfo info) { Color color = default(Color); Color color2 = info.source.color; color.r = Mathf.Min(color2.r, this.color.r); Color color3 = info.source.color; color.g = Mathf.Min(color3.g, this.color.g); Color color4 = info.source.color; color.b = Mathf.Min(color4.b, this.color.b); Color color5 = color; if (consume.debugLog) { Debug.Log("Color"); } foreach (LightBase output in info.outputs) { output.color = color5; } }
public abstract void ApplyFilter(LightHitInfo info);