diff --git a/src/mygame/appstate/RunLevel.java b/src/mygame/appstate/RunLevel.java index 3bba9df..4fd7797 100644 --- a/src/mygame/appstate/RunLevel.java +++ b/src/mygame/appstate/RunLevel.java @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import static mygame.Main.main; +import mygame.camera.CustomChaseCamera; import mygame.control.NetworkPlayableCharacter; import mygame.control.PhysicsControl; import mygame.control.PlayableCharacter; @@ -134,8 +135,11 @@ public class RunLevel extends BaseAppState //System.out.println("In here.,"); - ChaseCamera chaseCam = new ChaseCamera(this.app.getCamera(), player, inputManager); + CustomChaseCamera chaseCam = new CustomChaseCamera(this.app.getCamera(), player, inputManager); chaseCam.setLookAtOffset(new Vector3f(0,2.5f,0)); + chaseCam.setDefaultHorizontalRotation((float)Math.PI); + chaseCam.setSmoothMotion(false); + chaseCam.setTrailingEnabled(false); //this.app.getCamera().setFrustumPerspective(this.app.getCamera().getFr, aspect, near, far); //this.app.getCamera().setFrustumPerspective(90, 16f/9, 0, 2000f); //float fov = 50; diff --git a/src/mygame/camera/CustomChaseCamera.java b/src/mygame/camera/CustomChaseCamera.java new file mode 100644 index 0000000..478fa7c --- /dev/null +++ b/src/mygame/camera/CustomChaseCamera.java @@ -0,0 +1,63 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mygame.camera; + +import com.jme3.input.ChaseCamera; +import com.jme3.input.InputManager; +import com.jme3.math.FastMath; +import com.jme3.math.Vector3f; +import com.jme3.renderer.Camera; +import com.jme3.scene.Spatial; + +/** + * + * @author sigon + */ +public class CustomChaseCamera extends ChaseCamera{ + + public boolean canZoom = true; + + public CustomChaseCamera(Camera cam, Spatial target, InputManager inputManager) { + super(cam, target, inputManager); + } + + public void setHorizontalRotation(float newRotation) { + targetRotation = newRotation; + } + /* + public float getRotation() { + return targetRotation; + }*/ + + @Override + protected void updateCamera(float tpf) { + super.updateCamera(tpf); + targetRotation = (float)(targetRotation % (2*Math.PI)); + } + + @Override + protected void zoomCamera(float value) { + if (!canZoom || !enabled) { + return; + } + + zooming = false; + targetDistance += value * zoomSensitivity; + if (targetDistance > maxDistance) { + targetDistance = maxDistance; + } + if (targetDistance < minDistance) { + targetDistance = minDistance; + } + if (veryCloseRotation) { + if ((targetVRotation < minVerticalRotation) && (targetDistance > (minDistance + 1.0f))) { + targetVRotation = minVerticalRotation; + } + } + distance = targetDistance; + System.out.println(targetDistance); + } +} diff --git a/src/mygame/control/PlayableCharacter.java b/src/mygame/control/PlayableCharacter.java index ab5c9c7..60ec6a5 100644 --- a/src/mygame/control/PlayableCharacter.java +++ b/src/mygame/control/PlayableCharacter.java @@ -8,6 +8,7 @@ import com.jme3.collision.CollisionResults; import com.jme3.export.JmeExporter; import com.jme3.export.JmeImporter; import com.jme3.export.Savable; +import com.jme3.input.ChaseCamera; import com.jme3.input.KeyInput; import com.jme3.input.controls.ActionListener; import com.jme3.input.controls.AnalogListener; @@ -27,6 +28,7 @@ import com.jme3.scene.control.Control; import java.io.IOException; import static mygame.Main.level; import static mygame.Main.main; +import mygame.camera.CustomChaseCamera; import mygame.server.ServerMain.PlayerActionMessage; import mygame.server.ServerMain.PlayerPositionMessage; import mygame.server.ServerMain.ServerMessage; @@ -51,6 +53,11 @@ public class PlayableCharacter extends AbstractControl implements Savable, Clone PhysicsControl physics; Vector3f walkDirection; + + float lastActionPerformed = 0.0f; + static final float FREECAMERATIME = 0.5f; + float cameraTransition = 0.0f; + float oldRotation = 0.0f; // empty serialization constructor @@ -87,8 +94,8 @@ public class PlayableCharacter extends AbstractControl implements Savable, Clone main.getInputManager().addMapping("StrafeLeft", new KeyTrigger(KeyInput.KEY_A)); main.getInputManager().addMapping("StrafeRight", new KeyTrigger(KeyInput.KEY_D)); main.getInputManager().addMapping("Jump", new KeyTrigger(KeyInput.KEY_SPACE)); - main.getInputManager().addListener(this, "WalkForward"); - main.getInputManager().addListener(this, "WalkBackward"); + //main.getInputManager().addListener(this, "WalkForward"); + //main.getInputManager().addListener(this, "WalkBackward"); main.getInputManager().addListener(this, "StrafeRight"); main.getInputManager().addListener(this, "StrafeLeft"); main.getInputManager().addListener(this, "Jump"); @@ -108,7 +115,13 @@ public class PlayableCharacter extends AbstractControl implements Savable, Clone /*if (this instanceof NetworkPlayableCharacter) { System.out.println("1:"+getWalkDirection()+"Moving:"+moving+"/"+strafingLeft+"/"+strafingRight+"/"+walkingBackward+"/"+walkingForward); }*/ + main.getCamera().setLocation(spatial.getLocalTranslation().add(-20,7f,0)); if (moving) { + if (!(this instanceof NetworkPlayableCharacter)) { + cameraTransition+=tpf*4; + spatial.getControl(CustomChaseCamera.class).setHorizontalRotation(FastMath.interpolateLinear(cameraTransition, (float)(oldRotation), (float)Math.PI)); + lastActionPerformed = 0.0f; + } if (!channel.getAnimationName().equalsIgnoreCase("Walk")) { channel.setAnim("Walk"); channel.setLoopMode(LoopMode.Loop); @@ -132,8 +145,16 @@ public class PlayableCharacter extends AbstractControl implements Savable, Clone channel.setAnim("stand"); channel.setLoopMode(LoopMode.DontLoop); } + } else { + if (!(this instanceof NetworkPlayableCharacter)) { + //System.out.println(spatial.getControl(CustomChaseCamera.class).getHorizontalRotation()+","+(spatial.getControl(CustomChaseCamera.class).getHorizontalRotation()%(2*Math.PI))); + oldRotation = spatial.getControl(CustomChaseCamera.class).getHorizontalRotation(); + cameraTransition = 0.0f; + } + } + if (!(this instanceof NetworkPlayableCharacter)) { + lastActionPerformed+=tpf; } - //isOnGround(); } private void SmoothMoveWalk(Vector3f walkDirection, float tpf) { @@ -174,6 +195,7 @@ public class PlayableCharacter extends AbstractControl implements Savable, Clone @Override public void onAction(String name, boolean isPressed, float tpf) { + lastActionPerformed = 0.0f; switch (name) { case "StrafeLeft":{ current_time = 0.0f; @@ -195,7 +217,7 @@ public class PlayableCharacter extends AbstractControl implements Savable, Clone main.client.send(action); } }break; - case "WalkBackward":{ + /*case "WalkBackward":{ current_time = 0.0f; prevRot = spatial.getLocalRotation(); walkingBackward = isPressed; @@ -214,7 +236,7 @@ public class PlayableCharacter extends AbstractControl implements Savable, Clone PlayerActionMessage action = new PlayerActionMessage(name,Boolean.toString(isPressed),main.client.getId(),spatial.getLocalTranslation(),spatial.getLocalRotation(),main.getCamera().getDirection(),main.getCamera().getLeft()); main.client.send(action); } - }break; + }break;*/ } } @@ -254,22 +276,22 @@ public class PlayableCharacter extends AbstractControl implements Savable, Clone Vector3f walkDirection = new Vector3f(0,0,0); if (strafingLeft) { - walkDirection.addLocal(camLeftDir); + walkDirection.addLocal(0,0,-1); moving=true; } if (strafingRight) { - walkDirection.addLocal(camLeftDir.negate()); + walkDirection.addLocal(0,0,1); moving=true; } - if (walkingForward) { + /*if (walkingForward) { walkDirection.addLocal(camDir); moving=true; } if (walkingBackward) { walkDirection.addLocal(camDir.negate()); moving=true; - } + } */ return walkDirection; } } \ No newline at end of file