/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.jme3.app.SimpleApplication
 *  com.jme3.input.ChaseCamera
 *  com.jme3.input.controls.ActionListener
 *  com.jme3.input.controls.AnalogListener
 *  com.jme3.input.controls.InputListener
 *  com.jme3.input.controls.KeyTrigger
 *  com.jme3.input.controls.Trigger
 *  com.jme3.material.Material
 *  com.jme3.math.Quaternion
 *  com.jme3.math.Vector3f
 *  com.jme3.scene.Geometry
 *  com.jme3.scene.Mesh
 *  com.jme3.scene.Spatial
 *  com.jme3.scene.shape.Quad
 */
package jme3.hello;

import com.jme3.app.SimpleApplication;
import com.jme3.input.ChaseCamera;
import com.jme3.input.controls.ActionListener;
import com.jme3.input.controls.AnalogListener;
import com.jme3.input.controls.InputListener;
import com.jme3.input.controls.KeyTrigger;
import com.jme3.input.controls.Trigger;
import com.jme3.material.Material;
import com.jme3.math.Quaternion;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.Mesh;
import com.jme3.scene.Spatial;
import com.jme3.scene.shape.Quad;

public class TestChaseCamera
extends SimpleApplication
implements AnalogListener,
ActionListener {
    private Spatial teaGeom;
    private ChaseCamera chaseCam;

    public static void main(String[] args) {
        TestChaseCamera app = new TestChaseCamera();
        app.start();
    }

    public void simpleInitApp() {
        this.teaGeom = this.assetManager.loadModel("Models/blob/Blob.mesh.xml");
        Material mat_tea = new Material(this.assetManager, "Common/MatDefs/Misc/ShowNormals.j3md");
        this.teaGeom.setMaterial(mat_tea);
        this.rootNode.attachChild(this.teaGeom);
        Material mat_ground = new Material(this.assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
        Geometry ground = new Geometry("ground", (Mesh)new Quad(50.0f, 50.0f));
        ground.setLocalRotation(new Quaternion().fromAngleAxis(-1.5707964f, Vector3f.UNIT_X));
        ground.setLocalTranslation(-25.0f, -1.0f, 25.0f);
        ground.setMaterial(mat_ground);
        this.rootNode.attachChild((Spatial)ground);
        this.flyCam.setEnabled(false);
        this.chaseCam = new ChaseCamera(this.cam, this.teaGeom, this.inputManager);
        this.chaseCam.setRotationSpeed(0.0f);
        this.chaseCam.setSmoothMotion(true);
        this.chaseCam.setTrailingEnabled(true);
        this.chaseCam.setLookAtOffset(Vector3f.UNIT_Y.mult(3.0f));
        this.registerInput();
    }

    public void registerInput() {
        Trigger[] triggerArray = new Trigger[2];
        triggerArray[0] = new KeyTrigger(200);
        triggerArray[1] = new KeyTrigger(17);
        this.inputManager.addMapping("moveForward", triggerArray);
        Trigger[] triggerArray2 = new Trigger[2];
        triggerArray2[0] = new KeyTrigger(208);
        triggerArray2[1] = new KeyTrigger(31);
        this.inputManager.addMapping("moveBackward", triggerArray2);
        Trigger[] triggerArray3 = new Trigger[2];
        triggerArray3[0] = new KeyTrigger(205);
        triggerArray3[1] = new KeyTrigger(32);
        this.inputManager.addMapping("moveRight", triggerArray3);
        Trigger[] triggerArray4 = new Trigger[2];
        triggerArray4[0] = new KeyTrigger(203);
        triggerArray4[1] = new KeyTrigger(30);
        this.inputManager.addMapping("moveLeft", triggerArray4);
        Trigger[] triggerArray5 = new Trigger[1];
        triggerArray5[0] = new KeyTrigger(25);
        this.inputManager.addMapping("displayPosition", triggerArray5);
        this.inputManager.addListener((InputListener)this, new String[]{"moveForward", "moveBackward", "moveRight", "moveLeft"});
        this.inputManager.addListener((InputListener)this, new String[]{"displayPosition"});
    }

    public void onAnalog(String name, float value, float tpf) {
        if (name.equals("moveForward")) {
            this.teaGeom.move(0.0f, 0.0f, -5.0f * tpf);
        }
        if (name.equals("moveBackward")) {
            this.teaGeom.move(0.0f, 0.0f, 5.0f * tpf);
        }
        if (name.equals("moveRight")) {
            this.teaGeom.move(5.0f * tpf, 0.0f, 0.0f);
        }
        if (name.equals("moveLeft")) {
            this.teaGeom.move(-5.0f * tpf, 0.0f, 0.0f);
        }
    }

    public void onAction(String name, boolean keyPressed, float tpf) {
        if (name.equals("displayPosition") && keyPressed) {
            this.teaGeom.move(10.0f, 10.0f, 10.0f);
        }
    }

    public void simpleUpdate(float tpf) {
        super.simpleUpdate(tpf);
    }
}
