Renderer/src/main/java/electrosphere/controls/Control.java
austin 64a3628316
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
Add interaction usage data and functionality
2024-11-14 19:49:31 -05:00

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);
}
}