|
29 | 29 | #endif
|
30 | 30 |
|
31 | 31 | #include <QTextEdit>
|
| 32 | +#include <QFileInfo> |
32 | 33 | #include <QFileDialog>
|
33 | 34 | #include <QMessageBox>
|
34 | 35 | #include <QSettings>
|
@@ -184,6 +185,15 @@ bool JoypadScriptObject::buttonChanged(enum Button b)
|
184 | 185 | return hasChanged;
|
185 | 186 | }
|
186 | 187 | //----------------------------------------------------
|
| 188 | +Q_INVOKABLE void JoypadScriptObject::ovrdResetAll() |
| 189 | +{ |
| 190 | + for (int i=0; i<MAX_JOYPAD_PLAYERS; i++) |
| 191 | + { |
| 192 | + jsOverrideMask1[i] = 0xFF; |
| 193 | + jsOverrideMask2[i] = 0x00; |
| 194 | + } |
| 195 | +} |
| 196 | +//---------------------------------------------------- |
187 | 197 | //---- EMU State Object
|
188 | 198 | //----------------------------------------------------
|
189 | 199 | int EmuStateScriptObject::numInstances = 0;
|
@@ -924,6 +934,111 @@ bool MovieScriptObject::isFromSaveState()
|
924 | 934 | return flag;
|
925 | 935 | }
|
926 | 936 | //----------------------------------------------------
|
| 937 | +void MovieScriptObject::replay() |
| 938 | +{ |
| 939 | + FCEUI_MoviePlayFromBeginning(); |
| 940 | +} |
| 941 | +//---------------------------------------------------- |
| 942 | +bool MovieScriptObject::readOnly() |
| 943 | +{ |
| 944 | + return FCEUI_GetMovieToggleReadOnly(); |
| 945 | +} |
| 946 | +//---------------------------------------------------- |
| 947 | +void MovieScriptObject::setReadOnly(bool which) |
| 948 | +{ |
| 949 | + FCEUI_SetMovieToggleReadOnly(which); |
| 950 | +} |
| 951 | +//---------------------------------------------------- |
| 952 | +int MovieScriptObject::mode() |
| 953 | +{ |
| 954 | + int _mode = IDLE; |
| 955 | + if (FCEUMOV_Mode(MOVIEMODE_TASEDITOR)) |
| 956 | + { |
| 957 | + _mode = TAS_EDITOR; |
| 958 | + } |
| 959 | + else if (FCEUMOV_IsRecording()) |
| 960 | + { |
| 961 | + _mode = RECORD; |
| 962 | + } |
| 963 | + else if (FCEUMOV_IsFinished()) |
| 964 | + { |
| 965 | + _mode = FINISHED; //Note: this comes before playback since playback checks for finished as well |
| 966 | + } |
| 967 | + else if (FCEUMOV_IsPlaying()) |
| 968 | + { |
| 969 | + _mode = PLAYBACK; |
| 970 | + } |
| 971 | + else |
| 972 | + { |
| 973 | + _mode = IDLE; |
| 974 | + } |
| 975 | + return _mode; |
| 976 | +} |
| 977 | +//---------------------------------------------------- |
| 978 | +void MovieScriptObject::stop() |
| 979 | +{ |
| 980 | + FCEUI_StopMovie(); |
| 981 | +} |
| 982 | +//---------------------------------------------------- |
| 983 | +int MovieScriptObject::frameCount() |
| 984 | +{ |
| 985 | + return FCEUMOV_GetFrame(); |
| 986 | +} |
| 987 | +//---------------------------------------------------- |
| 988 | +int MovieScriptObject::length() |
| 989 | +{ |
| 990 | + if (!FCEUMOV_IsRecording() && !FCEUMOV_IsPlaying() && !FCEUMOV_Mode(MOVIEMODE_TASEDITOR)) |
| 991 | + { |
| 992 | + script->throwError(QJSValue::GenericError, "No movie loaded."); |
| 993 | + } |
| 994 | + return FCEUI_GetMovieLength(); |
| 995 | +} |
| 996 | +//---------------------------------------------------- |
| 997 | +int MovieScriptObject::rerecordCount() |
| 998 | +{ |
| 999 | + if (!FCEUMOV_IsRecording() && !FCEUMOV_IsPlaying() && !FCEUMOV_Mode(MOVIEMODE_TASEDITOR)) |
| 1000 | + { |
| 1001 | + script->throwError(QJSValue::GenericError, "No movie loaded."); |
| 1002 | + } |
| 1003 | + return FCEUI_GetMovieRerecordCount(); |
| 1004 | +} |
| 1005 | +//---------------------------------------------------- |
| 1006 | +QString MovieScriptObject::getFilepath() |
| 1007 | +{ |
| 1008 | + if (!FCEUMOV_IsRecording() && !FCEUMOV_IsPlaying() && !FCEUMOV_Mode(MOVIEMODE_TASEDITOR)) |
| 1009 | + { |
| 1010 | + script->throwError(QJSValue::GenericError, "No movie loaded."); |
| 1011 | + } |
| 1012 | + return QString::fromStdString(FCEUI_GetMovieName()); |
| 1013 | +} |
| 1014 | +//---------------------------------------------------- |
| 1015 | +QString MovieScriptObject::getFilename() |
| 1016 | +{ |
| 1017 | + if (!FCEUMOV_IsRecording() && !FCEUMOV_IsPlaying() && !FCEUMOV_Mode(MOVIEMODE_TASEDITOR)) |
| 1018 | + { |
| 1019 | + script->throwError(QJSValue::GenericError, "No movie loaded."); |
| 1020 | + } |
| 1021 | + QFileInfo fi( QString::fromStdString(FCEUI_GetMovieName()) ); |
| 1022 | + return fi.fileName(); |
| 1023 | +} |
| 1024 | +//---------------------------------------------------- |
| 1025 | +bool MovieScriptObject::skipRerecords = false; |
| 1026 | +//---------------------------------------------------- |
| 1027 | +void MovieScriptObject::rerecordCounting(bool counting) |
| 1028 | +{ |
| 1029 | + skipRerecords = counting; |
| 1030 | +} |
| 1031 | +//---------------------------------------------------- |
| 1032 | +bool MovieScriptObject::play(const QString& filename, bool readOnly, int pauseFrame) |
| 1033 | +{ |
| 1034 | + if (pauseFrame < 0) pauseFrame = 0; |
| 1035 | + |
| 1036 | + // Load it! |
| 1037 | + bool loaded = FCEUI_LoadMovie(filename.toLocal8Bit().data(), readOnly, pauseFrame); |
| 1038 | + |
| 1039 | + return loaded; |
| 1040 | +} |
| 1041 | +//---------------------------------------------------- |
927 | 1042 | bool MovieScriptObject::record(const QString& filename, int saveType, const QString author)
|
928 | 1043 | {
|
929 | 1044 | if (filename.isEmpty())
|
@@ -1751,6 +1866,7 @@ bool QtScriptInstance::onGuiThread()
|
1751 | 1866 | int QtScriptInstance::throwError(QJSValue::ErrorType errorType, const QString &message)
|
1752 | 1867 | {
|
1753 | 1868 | running = false;
|
| 1869 | + mem->reset(); |
1754 | 1870 | engine->throwError(errorType, message);
|
1755 | 1871 | return 0;
|
1756 | 1872 | }
|
@@ -2075,6 +2191,13 @@ void QtScriptManager::removeScriptInstance(QtScriptInstance* script)
|
2075 | 2191 | it++;
|
2076 | 2192 | }
|
2077 | 2193 | }
|
| 2194 | + |
| 2195 | + // If no scripts are loaded, reset globals |
| 2196 | + if (scriptList.size() == 0) |
| 2197 | + { |
| 2198 | + JS::MovieScriptObject::skipRerecords = false; |
| 2199 | + JS::JoypadScriptObject::ovrdResetAll(); |
| 2200 | + } |
2078 | 2201 | }
|
2079 | 2202 | //----------------------------------------------------
|
2080 | 2203 | void QtScriptManager::frameBeginUpdate()
|
@@ -2713,6 +2836,11 @@ void QScriptDialog_t::logOutput(const QString& text)
|
2713 | 2836 | }
|
2714 | 2837 | }
|
2715 | 2838 | //----------------------------------------------------
|
| 2839 | +bool FCEU_JSRerecordCountSkip() |
| 2840 | +{ |
| 2841 | + return JS::MovieScriptObject::skipRerecords; |
| 2842 | +} |
| 2843 | +//---------------------------------------------------- |
2716 | 2844 | uint8_t FCEU_JSReadJoypad(int which, uint8_t joyl)
|
2717 | 2845 | {
|
2718 | 2846 | return JS::JoypadScriptObject::readOverride(which, joyl);
|
|
0 commit comments