documents reformatted
This commit is contained in:
@@ -1,41 +1,36 @@
|
||||
package ModelFiles;
|
||||
|
||||
|
||||
public abstract class Action {
|
||||
|
||||
Integer priority; // Priority of the Task
|
||||
Integer delay; // Potential Delay before starting the task
|
||||
String targetDREF;
|
||||
Integer taskTime; // How long should the task take
|
||||
boolean taskComplete; // Is the task completed?
|
||||
ActionType actionType;
|
||||
|
||||
public Action(ActionType actionType, int delay) {
|
||||
this.actionType = actionType;
|
||||
this.delay = delay;
|
||||
this.targetDREF = null;
|
||||
}
|
||||
|
||||
Integer priority; //Priority of the Task
|
||||
Integer delay; //Potential Delay before starting the task
|
||||
String targetDREF;
|
||||
Integer taskTime; //How long should the task take
|
||||
boolean taskComplete; //Is the task completed?
|
||||
ActionType actionType;
|
||||
public Action(ActionType actionType, int delay, String target) {
|
||||
this.actionType = actionType;
|
||||
this.delay = delay;
|
||||
targetDREF = target;
|
||||
}
|
||||
|
||||
public ActionType getType() {
|
||||
return actionType;
|
||||
}
|
||||
|
||||
public Integer getDelay() {
|
||||
return delay;
|
||||
}
|
||||
|
||||
public String getTarget() {
|
||||
return targetDREF;
|
||||
}
|
||||
|
||||
public Action(ActionType actionType, int delay){
|
||||
this.actionType = actionType;
|
||||
this.delay = delay;
|
||||
this.targetDREF = null;
|
||||
}
|
||||
|
||||
|
||||
public Action(ActionType actionType, int delay, String target){
|
||||
this.actionType = actionType;
|
||||
this.delay = delay;
|
||||
targetDREF = target;
|
||||
}
|
||||
|
||||
public ActionType getType(){
|
||||
return actionType;
|
||||
}
|
||||
|
||||
|
||||
public Integer getDelay(){
|
||||
return delay;
|
||||
}
|
||||
|
||||
public String getTarget(){
|
||||
return targetDREF;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
package ModelFiles;
|
||||
|
||||
|
||||
public enum ActionType{
|
||||
public enum ActionType {
|
||||
VISION,
|
||||
MOTOR,
|
||||
DELAY,
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
package ModelFiles;
|
||||
// package ProjectModels.CognitiveModel;
|
||||
|
||||
|
||||
public class Delay extends Action {
|
||||
|
||||
public Delay(){
|
||||
super(ActionType.DELAY,1000);
|
||||
public Delay() {
|
||||
super(ActionType.DELAY, 1000);
|
||||
}
|
||||
|
||||
public Delay(int delay){
|
||||
super(ActionType.DELAY,delay);
|
||||
public Delay(int delay) {
|
||||
super(ActionType.DELAY, delay);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -7,16 +7,15 @@ public class MindQueue {
|
||||
|
||||
LinkedList<Action> q;
|
||||
|
||||
public MindQueue () {
|
||||
public MindQueue() {
|
||||
q = new LinkedList<Action>();
|
||||
}
|
||||
|
||||
public void push(Action e){
|
||||
public void push(Action e) {
|
||||
q.add(e);
|
||||
}
|
||||
|
||||
|
||||
public Action removeEvent(Action e){
|
||||
public Action removeEvent(Action e) {
|
||||
Action temp = e;
|
||||
q.remove(e);
|
||||
return temp;
|
||||
@@ -24,36 +23,35 @@ public class MindQueue {
|
||||
|
||||
public Action pop() {
|
||||
Vision v = new Vision();
|
||||
if(q.isEmpty()) {
|
||||
if (q.isEmpty()) {
|
||||
return v;
|
||||
}
|
||||
return q.remove();
|
||||
}
|
||||
|
||||
public boolean isEmpty(){
|
||||
public boolean isEmpty() {
|
||||
return q.isEmpty();
|
||||
}
|
||||
|
||||
public String printQueue(){
|
||||
public String printQueue() {
|
||||
String queueTrace = "Next to Execute ==> ";
|
||||
|
||||
for (Action action : q) {
|
||||
if(action.getType() == ActionType.VISION){
|
||||
if (action.getType() == ActionType.VISION) {
|
||||
queueTrace += "[V]";
|
||||
}
|
||||
if(action.getType() == ActionType.MOTOR){
|
||||
}
|
||||
if (action.getType() == ActionType.MOTOR) {
|
||||
queueTrace += "[M]";
|
||||
}
|
||||
if(action.getType() == ActionType.DELAY){
|
||||
}
|
||||
if (action.getType() == ActionType.DELAY) {
|
||||
queueTrace += "[D]";
|
||||
}
|
||||
}
|
||||
}
|
||||
return queueTrace;
|
||||
return queueTrace;
|
||||
}
|
||||
|
||||
public int queueLength(){
|
||||
public int queueLength() {
|
||||
return q.size();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
package ModelFiles;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
// import ModelFiles.ActionType;
|
||||
@@ -6,12 +7,12 @@ import java.io.IOException;
|
||||
|
||||
public class Model {
|
||||
|
||||
private MindQueue q; //Queue for actions
|
||||
private MindQueue q; // Queue for actions
|
||||
boolean modelActive; // On/Off Switch for the model execution
|
||||
XPlaneConnect xpc; //Allows connection to the simulator
|
||||
XPlaneConnect xpc; // Allows connection to the simulator
|
||||
float[] storedVision;
|
||||
|
||||
//Constructors
|
||||
// Constructors
|
||||
public Model() {
|
||||
q = new MindQueue();
|
||||
modelActive = false;
|
||||
@@ -20,62 +21,61 @@ public class Model {
|
||||
public Model(XPlaneConnect xpc) {
|
||||
q = new MindQueue();
|
||||
modelActive = false;
|
||||
this.xpc = xpc;
|
||||
this.xpc = xpc;
|
||||
}
|
||||
|
||||
|
||||
/*Getters*/
|
||||
/* Getters */
|
||||
public MindQueue getQueue() {
|
||||
return q;
|
||||
}
|
||||
|
||||
/*Setters*/
|
||||
/* Setters */
|
||||
|
||||
/*
|
||||
* Setup Methods
|
||||
* Printing, Empty check, Activation/Deactivation of Model, etc.
|
||||
*/
|
||||
*/
|
||||
public void activateModel() {
|
||||
modelActive = true;
|
||||
}
|
||||
|
||||
public void establishConnection(XPlaneConnect newXPC){
|
||||
public void establishConnection(XPlaneConnect newXPC) {
|
||||
this.xpc = newXPC;
|
||||
}
|
||||
|
||||
public void deactivateModel(){
|
||||
public void deactivateModel() {
|
||||
modelActive = false;
|
||||
}
|
||||
|
||||
public boolean isEmpty(){
|
||||
public boolean isEmpty() {
|
||||
return q.isEmpty();
|
||||
}
|
||||
|
||||
public void push(Action a){
|
||||
public void push(Action a) {
|
||||
q.push(a);
|
||||
}
|
||||
|
||||
public boolean isActive(){
|
||||
public boolean isActive() {
|
||||
return modelActive;
|
||||
}
|
||||
|
||||
public void printModelQueue(){
|
||||
public void printModelQueue() {
|
||||
System.out.println(q.printQueue());
|
||||
}
|
||||
|
||||
public int getModelQueueLength(){
|
||||
public int getModelQueueLength() {
|
||||
return q.queueLength();
|
||||
}
|
||||
|
||||
public void createAction(ActionType actionType, MotorType motorType, int delay,String target) {
|
||||
|
||||
public void createAction(ActionType actionType, MotorType motorType, int delay, String target) {
|
||||
Action newAction = null;
|
||||
switch(actionType) {
|
||||
switch (actionType) {
|
||||
case VISION:
|
||||
newAction = new Vision(delay,target);
|
||||
newAction = new Vision(delay, target);
|
||||
this.push(newAction);
|
||||
break;
|
||||
case MOTOR:
|
||||
newAction = new Motor(motorType,delay,target);
|
||||
newAction = new Motor(motorType, delay, target);
|
||||
this.push(newAction);
|
||||
break;
|
||||
|
||||
@@ -83,13 +83,13 @@ public class Model {
|
||||
newAction = new Delay(delay);
|
||||
this.push(newAction);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Processing Methods
|
||||
*
|
||||
*/
|
||||
*/
|
||||
|
||||
/*
|
||||
* Process the next event in the model queue
|
||||
@@ -99,30 +99,30 @@ public class Model {
|
||||
Action temp = q.pop();
|
||||
// System.out.println("Type of Action: " + temp.getType());
|
||||
|
||||
if(temp.getType() == ActionType.VISION){ // Vision Action (Get Data)
|
||||
handelVisionAction(temp, returnArray);
|
||||
} else if (temp.getType() == ActionType.MOTOR){ //Motor Action (Act Upon Data)
|
||||
if (temp.getType() == ActionType.VISION) { // Vision Action (Get Data)
|
||||
handelVisionAction(temp, returnArray);
|
||||
} else if (temp.getType() == ActionType.MOTOR) { // Motor Action (Act Upon Data)
|
||||
handleMotorAction(temp);
|
||||
} else if (temp.getType() == ActionType.DELAY){//Pure Delays (Do nothing)
|
||||
handleDelayAction(temp);
|
||||
} else if (temp.getType() == ActionType.DELAY) {// Pure Delays (Do nothing)
|
||||
handleDelayAction(temp);
|
||||
}
|
||||
// q.push(temp);
|
||||
return returnArray;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* Next Helpers */
|
||||
private void handelVisionAction(Action temp, float[] returnArray) {
|
||||
Vision tempV = (Vision) temp;
|
||||
initiateDelay(tempV.getDelay());
|
||||
String dref = tempV.getTarget();
|
||||
try {
|
||||
returnArray = xpc.getDREF(dref);
|
||||
storedVision = returnArray.clone();
|
||||
// System.out.println(returnArray[0]);
|
||||
} catch (IOException e) {
|
||||
|
||||
}
|
||||
Vision tempV = (Vision) temp;
|
||||
initiateDelay(tempV.getDelay());
|
||||
String dref = tempV.getTarget();
|
||||
try {
|
||||
returnArray = xpc.getDREF(dref);
|
||||
storedVision = returnArray.clone();
|
||||
// System.out.println(returnArray[0]);
|
||||
} catch (IOException e) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private void handleMotorAction(Action temp) {
|
||||
@@ -135,50 +135,51 @@ public class Model {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
switch(motorType){
|
||||
case PITCHUP:
|
||||
float[] pitchUp = {currentControls[0] + 0.01f};
|
||||
if(storedVision[0] > 80) {
|
||||
if(currentControls[0] < 0.2f) {
|
||||
System.out.println("Pitching Up");
|
||||
xpc.sendCTRL(pitchUp);
|
||||
}
|
||||
|
||||
switch (motorType) {
|
||||
case PITCHUP:
|
||||
float[] pitchUp = { currentControls[0] + 0.01f };
|
||||
if (storedVision[0] > 80) {
|
||||
if (currentControls[0] < 0.2f) {
|
||||
System.out.println("Pitching Up");
|
||||
xpc.sendCTRL(pitchUp);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
case PITCHDOWN:
|
||||
float[] pitchDown = {currentControls[0] - 0.01f};
|
||||
if(storedVision[0] < 80) {
|
||||
if(currentControls[0] > -0.2f) {
|
||||
// System.out.println("Sending Pitch Down");
|
||||
System.out.println("Pitching Down");
|
||||
xpc.sendCTRL(pitchDown);
|
||||
}
|
||||
case PITCHDOWN:
|
||||
float[] pitchDown = { currentControls[0] - 0.01f };
|
||||
if (storedVision[0] < 80) {
|
||||
if (currentControls[0] > -0.2f) {
|
||||
// System.out.println("Sending Pitch Down");
|
||||
System.out.println("Pitching Down");
|
||||
xpc.sendCTRL(pitchDown);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void handleDelayAction(Action temp){
|
||||
private void handleDelayAction(Action temp) {
|
||||
Delay tempD = (Delay) temp;
|
||||
initiateDelay(tempD.getDelay());
|
||||
}
|
||||
|
||||
public static void initiateDelay(int delay){
|
||||
public static void initiateDelay(int delay) {
|
||||
try {
|
||||
Thread.sleep(delay); // Using the action's Built in Delay
|
||||
Thread.sleep(delay); // Using the action's Built in Delay
|
||||
} catch (InterruptedException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package ModelFiles;
|
||||
import java.io.IOException;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class Motor extends Action {
|
||||
|
||||
@@ -8,41 +8,37 @@ public class Motor extends Action {
|
||||
MotorType motorType;
|
||||
|
||||
public Motor(MotorType motorType) {
|
||||
super(ActionType.MOTOR,1000);
|
||||
super(ActionType.MOTOR, 1000);
|
||||
this.motorType = motorType;
|
||||
}
|
||||
|
||||
// public Motor(int delay) {
|
||||
// super(ActionType.MOTOR,delay);
|
||||
// }
|
||||
// public Motor(int delay) {
|
||||
// super(ActionType.MOTOR,delay);
|
||||
// }
|
||||
|
||||
public Motor(MotorType motorType, int delay, String target) {
|
||||
super(ActionType.MOTOR, delay, target);
|
||||
this.motorType = motorType;
|
||||
}
|
||||
|
||||
public Motor(MotorType motorType,int delay, String target) {
|
||||
super(ActionType.MOTOR,delay,target);
|
||||
this.motorType = motorType;
|
||||
}
|
||||
public void createMotorControl() { // TODO: Maybe takes in a formatted set of vision inputs?
|
||||
control = null;
|
||||
}
|
||||
|
||||
public MotorType getMotorType() {
|
||||
return motorType;
|
||||
}
|
||||
|
||||
public void createMotorControl(){ // TODO: Maybe takes in a formatted set of vision inputs?
|
||||
control = null;
|
||||
}
|
||||
public void sendMotorControl(XPlaneConnect xpc) {
|
||||
|
||||
|
||||
public MotorType getMotorType(){
|
||||
return motorType;
|
||||
}
|
||||
|
||||
public void sendMotorControl(XPlaneConnect xpc) {
|
||||
|
||||
if(control != null) {
|
||||
try {
|
||||
xpc.sendCTRL(control);
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
System.out.println("Control failed to send");
|
||||
if (control != null) {
|
||||
try {
|
||||
xpc.sendCTRL(control);
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
System.out.println("Control failed to send");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
package ModelFiles;
|
||||
|
||||
public enum MotorType{
|
||||
PITCHUP,
|
||||
public enum MotorType {
|
||||
PITCHUP,
|
||||
PITCHDOWN
|
||||
}
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
package ModelFiles;
|
||||
|
||||
public class Process {
|
||||
|
||||
|
||||
public Process(){
|
||||
public Process() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
package ModelFiles;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
@@ -14,5 +15,5 @@ public class Tests {
|
||||
m.push(a);
|
||||
assertEquals(i, m.pop());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -2,21 +2,20 @@ package ModelFiles;
|
||||
|
||||
public class Vision extends Action {
|
||||
|
||||
|
||||
public Vision(){
|
||||
super(ActionType.VISION,1000);
|
||||
public Vision() {
|
||||
super(ActionType.VISION, 1000);
|
||||
}
|
||||
|
||||
public Vision(int delay){
|
||||
super(ActionType.VISION,delay);
|
||||
public Vision(int delay) {
|
||||
super(ActionType.VISION, delay);
|
||||
}
|
||||
|
||||
public Vision(String dref){
|
||||
super(ActionType.VISION,1000,dref);
|
||||
public Vision(String dref) {
|
||||
super(ActionType.VISION, 1000, dref);
|
||||
}
|
||||
|
||||
public Vision(int delay, String dref){
|
||||
super(ActionType.VISION,delay, dref);
|
||||
public Vision(int delay, String dref) {
|
||||
super(ActionType.VISION, delay, dref);
|
||||
}
|
||||
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -25,7 +25,7 @@ import ModelFiles.XPlaneConnect;
|
||||
public class Main {
|
||||
|
||||
public static void main(String[] args) {
|
||||
//Encapsulation (or lack thereof) Test
|
||||
// Encapsulation (or lack thereof) Test
|
||||
Model m = new Model();
|
||||
MindQueue q = m.getQueue();
|
||||
Action a = new Vision();
|
||||
@@ -34,46 +34,43 @@ public class Main {
|
||||
MindQueue q2 = m.getQueue();
|
||||
System.out.println(q2.pop());
|
||||
|
||||
//Using actions
|
||||
try(XPlaneConnect xpc = new XPlaneConnect()) {
|
||||
Action b = new Vision(10,"sim/cockpit2/gauges/indicators/airspeed_kts_pilot");
|
||||
Action d = new Delay(20);
|
||||
// Using actions
|
||||
try (XPlaneConnect xpc = new XPlaneConnect()) {
|
||||
Action b = new Vision(10, "sim/cockpit2/gauges/indicators/airspeed_kts_pilot");
|
||||
Action d = new Delay(20);
|
||||
// Ensure connection established.
|
||||
m = new Model(xpc);
|
||||
m.activateModel();
|
||||
m.createAction(ActionType.VISION, null, 0, "sim/cockpit2/gauges/indicators/airspeed_kts_pilot");
|
||||
m.createAction(ActionType.MOTOR, MotorType.PITCHUP, 0, null);
|
||||
// m.push(b);
|
||||
// m.push(d);
|
||||
m.printModelQueue();
|
||||
// m.deactivateModel();
|
||||
while(m.isActive() && !m.isEmpty()) {
|
||||
m = new Model(xpc);
|
||||
m.activateModel();
|
||||
m.createAction(ActionType.VISION, null, 0, "sim/cockpit2/gauges/indicators/airspeed_kts_pilot");
|
||||
m.createAction(ActionType.MOTOR, MotorType.PITCHUP, 0, null);
|
||||
// m.push(b);
|
||||
// m.push(d);
|
||||
m.printModelQueue();
|
||||
// m.deactivateModel();
|
||||
while (m.isActive() && !m.isEmpty()) {
|
||||
float[] array = m.next();
|
||||
if(array != null) {
|
||||
if (array != null) {
|
||||
// System.out.println(array[0]);
|
||||
// if(array[0] > 80.0f) {
|
||||
// m.push(d);
|
||||
// m.push(d);
|
||||
// }
|
||||
} else {
|
||||
// System.out.println("no dice");
|
||||
// System.out.println(xpc.getDREF(null)");
|
||||
}
|
||||
if(m.getModelQueueLength() < 5){
|
||||
if (m.getModelQueueLength() < 5) {
|
||||
m.createAction(ActionType.VISION, null, 0, "sim/cockpit2/gauges/indicators/airspeed_kts_pilot");
|
||||
m.createAction(ActionType.MOTOR, MotorType.PITCHUP, 0, null);
|
||||
m.createAction(ActionType.MOTOR, MotorType.PITCHDOWN, 0, null);
|
||||
}
|
||||
|
||||
|
||||
// m.printModelQueue();
|
||||
}
|
||||
}
|
||||
catch (SocketException ex)
|
||||
{
|
||||
} catch (SocketException ex) {
|
||||
System.out.println("Unable to set up the connection. (Error message was '" + ex.getMessage() + "'.)");
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
System.out.println("Something went wrong with one of the commands. (Error message was '" + ex.getMessage() + "'.)");
|
||||
} catch (IOException ex) {
|
||||
System.out.println(
|
||||
"Something went wrong with one of the commands. (Error message was '" + ex.getMessage() + "'.)");
|
||||
}
|
||||
System.out.println("Exiting");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user