Package transientlibs.rlforj.examples

Source Code of transientlibs.rlforj.examples.ProjectionExample

package transientlibs.rlforj.examples;

import java.util.List;
import java.util.Random;

import transientlibs.rlforj.los.BresLos;
import transientlibs.rlforj.los.BresOpportunisticLos;
import transientlibs.rlforj.los.ILosAlgorithm;
import transientlibs.rlforj.los.PrecisePermissive;
import transientlibs.rlforj.los.ShadowCasting;
import transientlibs.rlforj.math.Point2I;

public class ProjectionExample {

    public static void main(String[] args) {
        ExampleBoard b = new ExampleBoard(21, 21);
        Random rand = new Random();
        for (int i = 0; i < 30; i++) {
            b.setObstacle(rand.nextInt(21), rand.nextInt(21));
        }
        int x1 = rand.nextInt(21), y1 = rand.nextInt(21);
        b.invisibleFloor = '.';
        b.invisibleWall = '#';

        displayProjection(new ShadowCasting(), "Shadowcasting", b, x1, y1);
        displayProjection(new PrecisePermissive(), "Precise Permissive", b, x1, y1);
        displayProjection(new BresLos(false), "Bresenham", b, x1, y1);
        BresLos bl = new BresLos(true);
        displayProjection(bl, "Symmetric Bresenham", b, x1, y1);
        displayProjection(new BresOpportunisticLos(), "Opportunistic Bresenham", b, x1, y1);
    }

    /**
     * @param algoName The name of the algorithm
     * @param a
     * @param b
     * @param x1
     * @param y1
     */
    private static void displayProjection(ILosAlgorithm a, String algoName, ExampleBoard b, int x1, int y1) {
        boolean los;
        List<Point2I> path;
        b.resetVisitedAndMarks();
        System.out.println(algoName);
        los = a.existsLineOfSight(b, 10, 10, x1, y1, true);

        path = a.getProjectPath();
        markProjectPath(b, path);
        if (los) {
            b.mark(x1, y1, '*');
        } else {
            b.mark(x1, y1, '?');
        }

        System.out.println("Los " + (los ? "exists" : "does not exist"));
        b.print(10, 10);
    }

    private static void markProjectPath(ExampleBoard b, List<Point2I> path) {
        if (path.size() < 1) {
            return;
        }

        int lastx = path.get(0).x, lasty = path.get(0).y;
        for (int i = 1; i < path.size(); i++) {
            Point2I p = path.get(i);
            int x = p.x, y = p.y;
            if (x != lastx) {
                if (y != lasty) {
                    b.mark(x, y, ((x - lastx) * (y - lasty) > 0) ? '\\' : '/');
                } else {
                    b.mark(x, y, '-');
                }
            } else {
                b.mark(x, y, '|');
            }

            lastx = x;
            lasty = y;
        }
    }
}
TOP

Related Classes of transientlibs.rlforj.examples.ProjectionExample

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.