egohandler.java

来自「一个JAVA程序员的游戏」· Java 代码 · 共 115 行

JAVA
115
字号
/*
 * Ego.java
 *
 * Created on 9. Dezember 2006, 18:31
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package kanjitori.action;

import com.jme.bounding.BoundingBox;
import com.jme.input.InputHandler;
import com.jme.input.KeyBindingManager;
import com.jme.input.KeyInput;
import com.jme.input.RelativeMouse;
import com.jme.input.action.InputAction;
import com.jme.math.Vector3f;
import com.jme.renderer.Camera;
import com.jme.scene.CameraNode;
import com.jme.scene.Node;
import com.jme.scene.Skybox;
import com.jme.scene.shape.Box;
import com.jme.system.DisplaySystem;
import kanjitori.*;
import java.awt.Point;
import kanjitori.graphics.item.Item;
import kanjitori.preferences.GamePreferences;
import kanjitori.preferences.KeyMap;

/**
 *
 * @author Pirx
 */
public class EgoHandler  extends InputHandler {
    
    public final static int MOVE_FORWARD = 0;
    public final static int MOVE_LEFT = 1;
    public final static int MOVE_BACKWARD = 2;
    public final static int MOVE_RIGHT = 3;
    public final static int MOVE_TURN_LEFT = 4;
    public final static int MOVE_TURN_RIGHT = 5;
    public final static int MOVE_TURN_UP = 6;
    public final static int MOVE_TURN_DOWN = 7;
    
    private final static String FORWARD = "forward";
    private final static String BACKWARD = "backward";
    private final static String STRAFE_LEFT = "strafeLeft";
    private final static String STRAFE_RIGHT = "strafeRight";
    private final static String TURN_LEFT = "turnLeft";
    private final static String TURN_RIGHT = "turnRight";
    private final static String TURN_UP = "turnUp";
    private final static String TURN_DOWN = "turnDown";

    private final static String TELEPORT = "teleport";
    private final static String DEF_CHANGE = "defChange";
    
    private float moveSpeed = 5;
    private float rotSpeed = 5;
    
    private InputAction[] move = new InputAction[8];
    
    /** Creates a new instance of Ego */
    public EgoHandler(KeyMap keyMap) {
        initKeyBindings(keyMap);
        initMouseBindings(keyMap.isMouseInverted());
    }

    private void initKeyBindings(KeyMap keyMap) {
        KeyBindingManager keyboard = KeyBindingManager.getKeyBindingManager();
        for (int k = 0; k < KeyMap.KEY_INPUT.length; k++) {
            String action = keyMap.getAction(KeyMap.KEY_INPUT[k]);
            if (action != null) {
               keyboard.add(action, KeyMap.KEY_INPUT[k]);    
            }
        }
        
        Node playerNode = Player.getPlayer().getNode();
        CameraNode camNode = Player.getPlayer().getCamNode();
 
        move[MOVE_FORWARD] = new MoveAction(playerNode, moveSpeed, MoveAction.Direction.FORWARD);
        move[MOVE_BACKWARD] = new MoveAction(playerNode, moveSpeed, MoveAction.Direction.BACKWARD);
        move[MOVE_LEFT] = new MoveAction(playerNode, moveSpeed, MoveAction.Direction.LEFT);
        move[MOVE_RIGHT] = new MoveAction(playerNode, moveSpeed, MoveAction.Direction.RIGHT);
        move[MOVE_TURN_LEFT] = new RotateAction(camNode, rotSpeed, RotateAction.Direction.LEFT);
        move[MOVE_TURN_RIGHT] = new RotateAction(camNode, rotSpeed, RotateAction.Direction.RIGHT);
        move[MOVE_TURN_UP] = new RotateAction(camNode, rotSpeed, RotateAction.Direction.UP);
        move[MOVE_TURN_DOWN] = new RotateAction(camNode, rotSpeed, RotateAction.Direction.DOWN);
        
        addAction(move[MOVE_FORWARD], FORWARD, true );
        addAction(move[MOVE_FORWARD], DEVICE_MOUSE, 1, AXIS_NONE, true ); 
        addAction(move[MOVE_BACKWARD], BACKWARD, true );
        addAction(move[MOVE_LEFT], STRAFE_LEFT, true );
        addAction(move[MOVE_RIGHT], STRAFE_RIGHT, true );     
        addAction(move[MOVE_TURN_LEFT], TURN_LEFT, true );     
        addAction(move[MOVE_TURN_RIGHT], TURN_RIGHT, true );     
        addAction(move[MOVE_TURN_UP], TURN_UP, true );     
        addAction(move[MOVE_TURN_DOWN], TURN_DOWN, true );     
        
        addAction(new ItemAction(Item.Type.TELEPORT), TELEPORT, false);
        addAction(new ItemAction(Item.Type.DEF_CHANGE), DEF_CHANGE, false);
    }     
    
    private void initMouseBindings(boolean invertMouse) {
        
        RelativeMouse mouse = new RelativeMouse("Mouse Input");
        mouse.registerWithInputHandler( this );
       
        CameraNode camNode = Player.getPlayer().getCamNode();
        MouseAction mouseAction = new MouseAction(mouse, camNode, rotSpeed/4, invertMouse);
        addAction(mouseAction);   
    }    
    
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?