Esempio n. 1
0
 private void RemoveLight(LightHitInfo info)
 {
     if (reflectedLights.ContainsKey(info.source))
     {
         LightBeam item = (LightBeam)reflectedLights[info.source];
         info.outputs.Remove(item);
         RemoveLight(info.source);
     }
 }
Esempio n. 2
0
 private void Recalculate(LightHitInfo info)
 {
     info.contactPoint = info.source.ClosestPoint(base.transform.position);
     LightFilter[] array = filters;
     foreach (LightFilter lightFilter in array)
     {
         lightFilter.ApplyFilter(info);
     }
 }
Esempio n. 3
0
        protected override Vector3 GetDirection(LightHitInfo info)
        {
            Vector3 vector = base.Direction;

            if (Vector3.Dot(info.source.Direction, vector) < 0f)
            {
                vector = -vector;
            }
            return(vector);
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
 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();
     }
 }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
        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;
        }
Esempio n. 8
0
        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;
            }
        }
Esempio n. 9
0
 public abstract void ApplyFilter(LightHitInfo info);