Exemplo n.º 1
0
    void Start()
    {
        walls  = new List <Wall>(FindObjectsOfType <Wall>());
        player = FindObjectOfType <Player>();
        turret = FindObjectOfType <Turret>();

        visibilityPolygonCalculator = new VisibilityPolygonCSharp <Vector2>(new Vector2Adapter());

        gameOverText         = FindObjectOfType <Text>();
        gameOverText.enabled = false;
    }
Exemplo n.º 2
0
    void Update()
    {
        // Render Player Field of View
        var polygons = walls.Select(wall => wall.points).ToArray();
        var segments = VisibilityPolygonCSharp <Vector2> .ConvertToSegments(polygons);

        // `player.transform.right` is the 'front' direction
        // Cheesy hack to restrict player's field of view
        segments.Add(new Segment <Vector2>(
                         player.transform.position - player.transform.right * 0.001F,
                         player.transform.position + player.transform.right + player.transform.up
                         ));
        segments.Add(new Segment <Vector2>(
                         player.transform.position - player.transform.right * 0.001F,
                         player.transform.position + player.transform.right - player.transform.up
                         ));

        segments = visibilityPolygonCalculator.BreakIntersections(segments);
        var visibility = visibilityPolygonCalculator.Compute(player.transform.position, segments);

        // Triangulate to render. Too low level for my taste, honestly.
        Triangulator tr = new Triangulator(visibility.ToArray());

        int [] triangles = tr.Triangulate();
        player.mesh.Clear();
        player.mesh.vertices  = visibility.Select(v => (Vector3)v).ToArray();
        player.mesh.triangles = triangles;
        player.mesh.RecalculateNormals();

        if (turret.enabled)
        {
            // Render Turret Field of View
            polygons = walls.Select(wall => wall.points).ToArray();
            segments = VisibilityPolygonCSharp <Vector2> .ConvertToSegments(polygons);

            segments = visibilityPolygonCalculator.BreakIntersections(segments);
            var turretVisibility = visibilityPolygonCalculator.Compute(turret.transform.position, segments);

            tr        = new Triangulator(turretVisibility.ToArray());
            triangles = tr.Triangulate();
            turret.mesh.Clear();
            turret.mesh.vertices  = turretVisibility.Select(v => (Vector3)v).ToArray();
            turret.mesh.triangles = triangles;
            turret.mesh.RecalculateNormals();
        }
    }