コード例 #1
0
    public void Unfog(Vector3 position, float radius, float angle, Vector3 forward, int layermask = 0)
    {
        FogFill fogfill = new FogFill(this, position, radius, angle, forward);

        ColliderFogRectList colliderrects = GetExtendedColliders(fogfill, layermask);

        if (colliderrects == null)
        {
            fogfill.UnfogCircle(_values);
            return;
        }

        //if (colliderrects.Count != 1 || !colliderrects[0].ContainsCircle(fogfill.position, fogfill.radius))
        //    fogfill.UnfogCircle(_values, colliderrects);
        fogfill.UnfogCircleLineOfSight(_values, colliderrects, layermask);
    }
コード例 #2
0
    ColliderFogRectList GetExtendedColliders(FogFill fogfill, int layermask)
    {
        // quick check to see if all raycasts will hit something
        if (layermask == 0)
        {
            return(null);
        }

        ColliderFogRectList colliderrects = null;

        if (mode == FogOfWarMode.Mode2D)
        {
            // is there anything overlapping with the area?
            Collider2D[] colliders = Physics2D.OverlapCircleAll(fogfill.worldPosition, fogfill.worldRadius, layermask);
            if (colliders.Length == 0)
            {
                return(null);
            }

            // extend the colliders outwards away from the center
            colliderrects = new ColliderFogRectList(this);
            colliderrects.Add(colliders);
        }
        else//if (mode == FogOfWarMode.Mode3D)
        {
            // is there anything overlapping with the area?
            Collider[] colliders = Physics.OverlapSphere(fogfill.worldPosition, fogfill.worldRadius, layermask);
            if (colliders.Length == 0)
            {
                return(null);
            }

            // extend the colliders outwards away from the center
            colliderrects = new ColliderFogRectList(this);
            colliderrects.Add(colliders);
        }

        colliderrects.ExtendToCircleEdge(fogfill.position, fogfill.radius);
        colliderrects.Optimise();
        return(colliderrects.Count == 0 ? null : colliderrects);
    }