Package de.venjinx.editor.debug

Source Code of de.venjinx.editor.debug.DebugMouse

package de.venjinx.editor.debug;

import org.lwjgl.opengl.Display;

import com.jme3.app.Application;
import com.jme3.app.SimpleApplication;
import com.jme3.app.state.AbstractAppState;
import com.jme3.app.state.AppStateManager;
import com.jme3.collision.CollisionResult;
import com.jme3.collision.CollisionResults;
import com.jme3.material.Material;
import com.jme3.math.Ray;
import com.jme3.math.Vector2f;
import com.jme3.math.Vector3f;
import com.jme3.renderer.Camera;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;

import de.venjinx.util.Util;

public class DebugMouse extends AbstractAppState {

    private SimpleApplication simpleApp;

    private Ray mouseRay = new Ray();
    private Vector2f mouse2D = new Vector2f();
    private Vector3f mouse3D = new Vector3f();
    private Vector3f hitPoint = new Vector3f();
    private CollisionResults results;
    private CollisionResult mouseHitResult;
    private Camera cam;
    private Node mouse3DNode;
    private Geometry cursor3D;

    private boolean show3DCursor = true;

    public DebugMouse() {
        results = new CollisionResults();
        cursor3D = Util.createPoint(0, 0, 0, .05f);
        cursor3D.setName("3D mouse cursor");

        mouse3DNode = new Node("3D mouse");

        mouse3DNode.attachChild(cursor3D);
    }

    @Override
    public void initialize(AppStateManager stateManager, Application app) {
        super.initialize(stateManager, app);
        simpleApp = (SimpleApplication) app;
        cam = simpleApp.getCamera();
    }

    @Override
    public void update(float tpf) {
        if (!simpleApp.getInputManager().isCursorVisible())
            mouse2D.set(Display.getWidth() / 2, Display.getHeight() / 2);
        else mouse2D.set(simpleApp.getInputManager().getCursorPosition());

        mouse3D.set(cam.getWorldCoordinates(mouse2D, 0f));

        mouseRay.setOrigin(mouse3D);
        mouseRay.setDirection(mouse3D.subtract(cam.getLocation()).normalizeLocal());

        results.clear();

        mouse3DNode.detachChild(cursor3D);
        simpleApp.getRootNode().collideWith(mouseRay, results);
        if (show3DCursor)
            mouse3DNode.attachChild(cursor3D);
        mouseHitResult = results.getClosestCollision();

        if (mouseHitResult != null)
            hitPoint.set(mouseHitResult.getContactPoint());
        else hitPoint.set(mouse3D.add(mouseRay.direction));
        cursor3D.setLocalTranslation(hitPoint);
    }

    public void setShowPointer(boolean show) {
        show3DCursor = show;
        if (show)
            mouse3DNode.attachChild(cursor3D);
        else mouse3DNode.detachChild(cursor3D);
    }

    public void setMaterial(Material mat) {
        if (mat != null)
            cursor3D.setMaterial(mat);
    }

    public Vector2f get2D() {
        return mouse2D;
    }

    public Vector3f get3D() {
        return mouse3D;
    }

    public Vector3f getHitPoint() {
        return hitPoint;
    }

    public Vector3f getDirection() {
        return mouseRay.direction;
    }

    public Ray getRay() {
        return mouseRay;
    }

    public CollisionResult getHitResult() {
        return mouseHitResult;
    }

    public CollisionResult getHitResult(Node nodeToCollide) {
        results.clear();
        nodeToCollide.collideWith(mouseRay, results);
        return results.getClosestCollision();
    }

    public Geometry getHitGeometry() {
        if (mouseHitResult != null)
            return mouseHitResult.getGeometry();
        return null;
    }

    public Node getPointer() {
        return mouse3DNode;
    }
}
TOP

Related Classes of de.venjinx.editor.debug.DebugMouse

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.