FtcRobotController/TeamCode/src/main/java/org/firstinspires/ftc/teamcode/GamepadRecord.java

95 lines
2.9 KiB
Java

package org.firstinspires.ftc.teamcode;
import com.qualcomm.robotcore.eventloop.opmode.TeleOp;
import com.qualcomm.robotcore.util.ReadWriteFile;
import org.firstinspires.ftc.robotcore.internal.system.AppUtil;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.util.HashMap;
@TeleOp(name="Gamepad Recorder v1.0.1")
public class GamepadRecord extends Gamepad {
private final String outputFileName = "recording1.json";
private File outputFile;
private JSONObject outputJSON;
private boolean prevGuide = false;
private int currentIndex = 0;
private HashMap<GameMotor, API.Motor> motors = new HashMap<>();
@Override
public void init() {
super.init();
outputFile = AppUtil.getInstance().getSettingsFile(outputFileName);
try {
outputJSON = new JSONObject();
outputJSON.put("recordedData", new JSONArray());
} catch (JSONException e) {
api.print("Why are we here? Just to suffer?");
}
for (GameMotor m : GameMotor.values()) {
motors.put(m, api.new Motor(m.name));
}
api.clear();
api.print("Press play to start");
}
@Override
public void start() {
this.resetStartTime();
}
@Override
public void loop() {
long ms = System.currentTimeMillis()+15;
super.loop();
api.print("Time", this.time + "");
try {
JSONObject motorData = new JSONObject();
for (GameMotor m : GameMotor.values()) {
//noinspection ConstantConditions
double power = motors.get(m).getRawPower();
motorData.put(m.name().toLowerCase(), power);
}
JSONObject currentData = new JSONObject()
.put("time", this.getRuntime() * 1000) // Time
.put("data", motorData); // Data
if (
currentIndex == 0 ||
!currentData.get("data").toString()
.equals(
outputJSON.getJSONArray("recordedData").getJSONObject(currentIndex - 1).get("data").toString())
)
outputJSON.getJSONArray("recordedData").put(currentIndex++, currentData);
} catch (JSONException e) {
api.print("Why are we here? Just to suffer?" + System.lineSeparator() + e.getMessage());
}
ms -= System.currentTimeMillis();
if (ms > 5) try {
Thread.sleep(ms);
} catch (InterruptedException ie) {
api.print("Why are we here? Just to suffer? (Thread.sleep error)");
}
if (gamepad1.guide && !prevGuide) {
ReadWriteFile.writeFile(outputFile, outputJSON.toString());
api.print("Wrote file to '" + outputFile.getName() + "'!");
}
prevGuide = gamepad1.guide;
}
}