void CheckObjectsInLight()
    {
        for (int i = 0; i < casters.Length; i++)
        {
            a = casters[i].transform.position.x - transform.position.x;
            b = casters[i].transform.position.z - transform.position.z;
            c = Mathf.Sqrt(Mathf.Pow(a, 2) + Mathf.Pow(b, 2));

            float degree = 90 - (Mathf.Acos(a / c) * Mathf.Rad2Deg);
            if (Mathf.Abs(degree) <= light.spotAngle / 2)
            {
                if (objInLight.Count == 0)
                {
                    objInLight.Add(casters[i]);
                    Puppet p = ScriptableObject.CreateInstance <Puppet>();
                    p.Create(casters[i], transform.position);
                    puppets.Add(p);
                    EdgeCollider2D ec = edgeCollider.AddComponent <EdgeCollider2D>();
                    ecList.Add(ec);
                }
                else if (!objInLight.Contains(casters[i]))
                {
                    objInLight.Add(casters[i]);
                    Puppet p = ScriptableObject.CreateInstance <Puppet>();
                    p.Create(casters[i], transform.position);
                    puppets.Add(p);
                    EdgeCollider2D ec = edgeCollider.AddComponent <EdgeCollider2D>();
                    ecList.Add(ec);
                }
            }
            else if (Mathf.Abs(degree) > light.spotAngle / 2)
            {
                if (objInLight.Contains(casters[i]))
                {
                    int n = objInLight.IndexOf(casters[i]);
                    print(n);
                    objInLight.RemoveAt(n);
                    puppets.RemoveAt(n);
                    Destroy(ecList[n]);
                    ecList.RemoveAt(n);
                }
            }
        }
        for (int ii = 0; ii < puppets.Count; ii++)
        {
            puppets[ii].origin = transform.position;
            puppets[ii].CreateShadowCollision();
            ecList[ii].points = puppets[ii].sortedPoints;
        }
    }
Example #2
0
    void CheckObjectsInLight()
    {
        for (int i = 0; i < casters.Length; i++)
        {
            if (lC.CheckForInLight(casters[i].transform.position, light))
            {
                if (!objInLight.Contains(casters[i]))
                {
                    objInLight.Add(casters[i]);
                    Puppet p = new Puppet();
                    p.Create(casters[i], transform.position);
                    puppets.Add(p);
                }
            }
            else
            {
                if (objInLight.Contains(casters[i]))
                {
                    int n = objInLight.IndexOf(casters[i]);
                    objInLight.RemoveAt(n);
                    puppets.RemoveAt(n);
                }
            }
        }
        int k = puppets.Count - 1;

        for (int ii = 0; ii < puppets.Count; k = ii++)
        {
            puppets[ii].origin    = transform.position;
            puppets[ii].rayLength = light.range;
            puppets[ii].GetShadowBounds();
            for (int j = 0; j < puppets[k].pointsList.Count; j++)
            {
                if (Area.ContainsPoint(puppets[ii].pointsList.ToArray(), puppets[k].pointsList[j]))
                {
                    Debug.Log("Shadows are touching!");
                }
//					else
//					{
//						Debug.Log("outside "+ii+" / "+k+" / "+j);
//					}
            }
        }
    }