369 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			369 lines
		
	
	
		
			7.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
package electrosphere.controls;
 | 
						|
 | 
						|
import electrosphere.renderer.ui.events.MouseEvent;
 | 
						|
import electrosphere.renderer.ui.events.ScrollEvent;
 | 
						|
 | 
						|
/**
 | 
						|
 * A low level control inside the engine
 | 
						|
 */
 | 
						|
public class Control {
 | 
						|
 | 
						|
    /**
 | 
						|
     * The different types of controls
 | 
						|
     */
 | 
						|
    public static enum ControlType {
 | 
						|
        /**
 | 
						|
         * A key control
 | 
						|
         */
 | 
						|
        KEY,
 | 
						|
        /**
 | 
						|
         * A mouse button control
 | 
						|
         */
 | 
						|
        MOUSE_BUTTON,
 | 
						|
        /**
 | 
						|
         * A mouse movement control
 | 
						|
         */
 | 
						|
        MOUSE_MOVEMENT,
 | 
						|
        /**
 | 
						|
         * A mouse scroll control
 | 
						|
         */
 | 
						|
        MOUSE_SCROLL,
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * The type of this control
 | 
						|
     */
 | 
						|
    ControlType type;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The activated state of the control
 | 
						|
     */
 | 
						|
    boolean state;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The key value of the control if it is a key control
 | 
						|
     */
 | 
						|
    int keyValue;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The name of the control
 | 
						|
     */
 | 
						|
    String name;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The description of the control
 | 
						|
     */
 | 
						|
    String description;
 | 
						|
 | 
						|
    /**
 | 
						|
     * True if this control is rebindable, false otherwise
 | 
						|
     */
 | 
						|
    boolean rebindable;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The method to fire on pressing the button/key
 | 
						|
     */
 | 
						|
    ControlMethod onPress;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The method to fire on releasing the button/key
 | 
						|
     */
 | 
						|
    ControlMethod onRelease;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The method to fire on repeating the button/key
 | 
						|
     */
 | 
						|
    ControlMethod onRepeat;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The method to fire on clicking with the mouse
 | 
						|
     */
 | 
						|
    ControlMethod onClick;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The method to fire on moving the mouse
 | 
						|
     */
 | 
						|
    MouseCallback onMove;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The method to fire on scrollign with the mouse
 | 
						|
     */
 | 
						|
    ScrollCallback onScroll;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The frame the control was pressed on
 | 
						|
     */
 | 
						|
    float pressFrame = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
     * The repeat timeout of the control
 | 
						|
     */
 | 
						|
    float repeatTimeout = 0;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Constructor
 | 
						|
     * @param type
 | 
						|
     * @param keyValue
 | 
						|
     * @param rebindable
 | 
						|
     * @param name
 | 
						|
     * @param description
 | 
						|
     */
 | 
						|
    public Control(ControlType type, int keyValue, boolean rebindable, String name, String description) {
 | 
						|
        this.type = type;
 | 
						|
        this.keyValue = keyValue;
 | 
						|
        this.state = false;
 | 
						|
        this.rebindable = rebindable;
 | 
						|
        this.name = name;
 | 
						|
        this.description = description;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets if this is a key control
 | 
						|
     * @return true if it is a key control, false otherwise
 | 
						|
     */
 | 
						|
    public boolean isIsKey() {
 | 
						|
        return type == ControlType.KEY;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets if this is a mouse control
 | 
						|
     * @return true if it is a mouse control, false otheriwse
 | 
						|
     */
 | 
						|
    public boolean isIsMouse() {
 | 
						|
        return type == ControlType.MOUSE_BUTTON;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets the state of the control
 | 
						|
     * @return true if it is active, false otherwise
 | 
						|
     */
 | 
						|
    public boolean isState() {
 | 
						|
        return state;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets the type of control
 | 
						|
     * @return The type
 | 
						|
     */
 | 
						|
    public ControlType getType(){
 | 
						|
        return type;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets the key value of the control
 | 
						|
     * @return The key value
 | 
						|
     */
 | 
						|
    public int getKeyValue() {
 | 
						|
        return keyValue;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the state of the control
 | 
						|
     * @param state The state
 | 
						|
     */
 | 
						|
    public void setState(boolean state) {
 | 
						|
        this.state = state;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the on press callback of the control
 | 
						|
     * @param method The callback
 | 
						|
     */
 | 
						|
    public void setOnPress(ControlMethod method){
 | 
						|
        onPress = method;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the on release callback of the control
 | 
						|
     * @param method The callback
 | 
						|
     */
 | 
						|
    public void setOnRelease(ControlMethod method){
 | 
						|
        onRelease = method;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the on repeat callback of the control
 | 
						|
     * @param method The callback
 | 
						|
     */
 | 
						|
    public void setOnRepeat(ControlMethod method){
 | 
						|
        onRepeat = method;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the on mouse move callback of the control
 | 
						|
     * @param method The callback
 | 
						|
     */
 | 
						|
    public void setOnMove(MouseCallback method){
 | 
						|
        onMove = method;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the on mouse click of the control
 | 
						|
     * @param method The callback
 | 
						|
     */
 | 
						|
    public void setOnClick(ControlMethod method){
 | 
						|
        onClick = method;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the on mouse scroll callback of the control
 | 
						|
     * @param method The callback
 | 
						|
     */
 | 
						|
    public void setOnScroll(ScrollCallback callback){
 | 
						|
        onScroll = callback;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the on press callback of the control
 | 
						|
     * @param method The callback
 | 
						|
     */
 | 
						|
    public void onPress(MouseState mouseState){
 | 
						|
        if(onPress != null){
 | 
						|
            onPress.execute(mouseState);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the on release callback of the control
 | 
						|
     * @param method The callback
 | 
						|
     */
 | 
						|
    public void onRelease(MouseState mouseState){
 | 
						|
        if(onRelease != null){
 | 
						|
            onRelease.execute(mouseState);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the on repeat callback of the control
 | 
						|
     * @param method The callback
 | 
						|
     */
 | 
						|
    public void onRepeat(MouseState mouseState){
 | 
						|
        if(onRepeat != null){
 | 
						|
            onRepeat.execute(mouseState);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the on mouse move callback of the control
 | 
						|
     * @param method The callback
 | 
						|
     */
 | 
						|
    public void onMove(MouseState mouseState, MouseEvent event){
 | 
						|
        if(onMove != null){
 | 
						|
            onMove.execute(mouseState, event);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the on mouse click callback of the control
 | 
						|
     * @param method The callback
 | 
						|
     */
 | 
						|
    public void onClick(MouseState mouseState){
 | 
						|
        if(onClick != null){
 | 
						|
            onClick.execute(mouseState);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the on mouse scroll callback of the control
 | 
						|
     * @param method The callback
 | 
						|
     */
 | 
						|
    public void onScroll(MouseState mouseState, ScrollEvent event){
 | 
						|
        if(onScroll != null){
 | 
						|
            onScroll.execute(mouseState, event);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets the frame the control was pressed
 | 
						|
     * @return The frame
 | 
						|
     */
 | 
						|
    public float getPressFrame(){
 | 
						|
        return this.pressFrame;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the frame the control was pressed
 | 
						|
     * @param frame The frame
 | 
						|
     */
 | 
						|
    public void setPressFrame(float frame){
 | 
						|
        pressFrame =  frame;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets the repeat timeout of the control
 | 
						|
     * @return The repeat timeout
 | 
						|
     */
 | 
						|
    public float getRepeatTimeout(){
 | 
						|
        return this.repeatTimeout;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the repeat timeout of the control
 | 
						|
     * @param timeout The repeat timeout
 | 
						|
     */
 | 
						|
    public void setRepeatTimeout(float timeout){
 | 
						|
        repeatTimeout = timeout;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets whether this control is rebindable
 | 
						|
     * @return true if it is rebindable, false otherwise
 | 
						|
     */
 | 
						|
    public boolean isRebindable(){
 | 
						|
        return rebindable;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets the name of the control
 | 
						|
     * @return The name
 | 
						|
     */
 | 
						|
    public String getName(){
 | 
						|
        return name;
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets the description of the control
 | 
						|
     * @return The description
 | 
						|
     */
 | 
						|
    public String getDescription(){
 | 
						|
        return description;
 | 
						|
    }
 | 
						|
    
 | 
						|
 | 
						|
    /**
 | 
						|
     * A callback to fire on a control event
 | 
						|
     */
 | 
						|
    public interface ControlMethod {
 | 
						|
        /**
 | 
						|
         * Excecutes the callback
 | 
						|
         * @param mouseState The state of the mouse
 | 
						|
         */
 | 
						|
        public void execute(MouseState mouseState);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * A callback to fire on a mouse event
 | 
						|
     */
 | 
						|
    public interface MouseCallback {
 | 
						|
        /**
 | 
						|
         * Executes the callback
 | 
						|
         * @param mouseState The state of the mouse
 | 
						|
         * @param event The mouse event
 | 
						|
         */
 | 
						|
        public void execute(MouseState mouseState, MouseEvent event);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * A callback to fire on a mouse scroll event
 | 
						|
     */
 | 
						|
    public interface ScrollCallback {
 | 
						|
        /**
 | 
						|
         * Executes the callback
 | 
						|
         * @param mouseState The state of the mouse
 | 
						|
         * @param event The mouse event
 | 
						|
         */
 | 
						|
        public void execute(MouseState mouseState, ScrollEvent event);
 | 
						|
    }
 | 
						|
    
 | 
						|
}
 |