From 21dbab5a77b5bb7de731cdd95e51f30057265d07 Mon Sep 17 00:00:00 2001 From: Ilari Liusvaara Date: Sat, 10 May 2014 14:36:54 +0300 Subject: [PATCH] Instancefy multitrack.cpp stuff --- include/core/instance.hpp | 2 ++ include/core/multitrack.hpp | 5 ++-- src/core/instance.cpp | 2 +- src/core/mainloop.cpp | 8 +++--- src/core/multitrack.cpp | 39 +++++++++++++++------------- src/platform/wxwidgets/editor-multitrack.cpp | 16 ++++++------ 6 files changed, 39 insertions(+), 33 deletions(-) diff --git a/include/core/instance.hpp b/include/core/instance.hpp index cbc96077..1e90b6be 100644 --- a/include/core/instance.hpp +++ b/include/core/instance.hpp @@ -5,6 +5,7 @@ #include "core/movie.hpp" #include "core/mbranch.hpp" #include "core/memorywatch.hpp" +#include "core/multitrack.hpp" #include "library/lua-base.hpp" #include "library/memoryspace.hpp" #include "library/settingvar.hpp" @@ -20,6 +21,7 @@ struct emulator_instance voice_commentary commentary; subtitle_commentary subtitles; movie_branches mbranch; + multitrack_edit mteditor; }; extern emulator_instance lsnes_instance; diff --git a/include/core/multitrack.hpp b/include/core/multitrack.hpp index df77517e..b45d56dd 100644 --- a/include/core/multitrack.hpp +++ b/include/core/multitrack.hpp @@ -4,6 +4,7 @@ #include #include "library/threads.hpp" #include "library/controller-data.hpp" +#include "core/movie.hpp" class multitrack_edit { @@ -15,6 +16,7 @@ public: MT_OR, MT_XOR }; + multitrack_edit(movie_logic* _mlogic); void enable(bool state); void set(unsigned port, unsigned controller, state s); void set_and_notify(unsigned port, unsigned controller, state s); @@ -28,8 +30,7 @@ private: threads::lock mlock; bool enabled; std::map, state> controllerstate; + movie_logic& mlogic; }; -extern multitrack_edit multitrack_editor; - #endif diff --git a/src/core/instance.cpp b/src/core/instance.cpp index d865c72b..8fa844ea 100644 --- a/src/core/instance.cpp +++ b/src/core/instance.cpp @@ -2,7 +2,7 @@ #include "core/settings.hpp" emulator_instance::emulator_instance() - : setcache(lsnes_vset), subtitles(&mlogic), mbranch(&mlogic) + : setcache(lsnes_vset), subtitles(&mlogic), mbranch(&mlogic), mteditor(&mlogic) { } diff --git a/src/core/mainloop.cpp b/src/core/mainloop.cpp index 8de5112e..0f3c56b6 100644 --- a/src/core/mainloop.cpp +++ b/src/core/mainloop.cpp @@ -243,7 +243,7 @@ controller_frame movie_logic::update_controls(bool subframe) throw(std::bad_allo controller_frame tmp = controls.get(CORE().mlogic.get_movie().get_current_frame()); our_rom.rtype->pre_emulate_frame(tmp); //Preset controls, the lua will override if needed. lua_callback_do_input(tmp, subframe); - multitrack_editor.process_frame(tmp); + CORE().mteditor.process_frame(tmp); controls.commit(tmp); return tmp; } @@ -393,7 +393,7 @@ void update_movie_state() _status.macros = utf8::to32(mss.str()); controller_frame c; - if(!multitrack_editor.any_records()) + if(!CORE().mteditor.any_records()) c = CORE().mlogic.get_movie().get_controls(); else c = controls.get_committed(); @@ -405,8 +405,8 @@ void update_movie_state() char32_t buffer[MAX_DISPLAY_LENGTH]; c.display(pindex.first, pindex.second, buffer); std::u32string _buffer = buffer; - if(readonly && multitrack_editor.is_enabled()) { - multitrack_edit::state st = multitrack_editor.get(pindex.first, pindex.second); + if(readonly && CORE().mteditor.is_enabled()) { + multitrack_edit::state st = CORE().mteditor.get(pindex.first, pindex.second); if(st == multitrack_edit::MT_PRESERVE) _buffer += U" (keep)"; else if(st == multitrack_edit::MT_OVERWRITE) diff --git a/src/core/multitrack.cpp b/src/core/multitrack.cpp index e9f7e38f..7147e192 100644 --- a/src/core/multitrack.cpp +++ b/src/core/multitrack.cpp @@ -10,6 +10,11 @@ void update_movie_state(); +multitrack_edit::multitrack_edit(movie_logic* _mlogic) + : mlogic(*_mlogic) +{ +} + bool multitrack_edit::is_enabled() { return enabled; @@ -36,7 +41,7 @@ void multitrack_edit::set(unsigned port, unsigned controller, state s) void multitrack_edit::set_and_notify(unsigned port, unsigned controller, state s) { - if(!lsnes_instance.mlogic || !lsnes_instance.mlogic.get_movie().readonly_mode()) + if(!mlogic || !mlogic.get_movie().readonly_mode()) return; set(port, controller, s); notify_multitrack_change(port, controller, (int)s); @@ -44,7 +49,7 @@ void multitrack_edit::set_and_notify(unsigned port, unsigned controller, state s void multitrack_edit::rotate(bool forward) { - if(!lsnes_instance.mlogic || !lsnes_instance.mlogic.get_movie().readonly_mode()) + if(!mlogic || !mlogic.get_movie().readonly_mode()) return; std::vector> x; for(unsigned i = 0;; i++) { @@ -91,7 +96,7 @@ void multitrack_edit::config_altered() void multitrack_edit::process_frame(controller_frame& input) { - if(!lsnes_instance.mlogic || !lsnes_instance.mlogic.get_movie().readonly_mode()) + if(!mlogic || !mlogic.get_movie().readonly_mode()) return; threads::alock h(mlock); bool any_need = false; @@ -103,7 +108,7 @@ void multitrack_edit::process_frame(controller_frame& input) return; //No need to twiddle. unsigned indices = input.get_index_count(); const port_type_set& portset = input.porttypes(); - pollcounter_vector& p = lsnes_instance.mlogic.get_movie().get_pollcounters(); + pollcounter_vector& p = mlogic.get_movie().get_pollcounters(); for(unsigned i = 0; i < indices; i++) { port_index_triple t = portset.index_to_triple(i); if(!t.valid) @@ -111,11 +116,11 @@ void multitrack_edit::process_frame(controller_frame& input) auto key = std::make_pair(t.port, t.controller); uint32_t pc = p.get_polls(i); if(!controllerstate.count(key) || controllerstate[key] == MT_PRESERVE || (!t.port && !t.controller)) { - int16_t v = lsnes_instance.mlogic.get_movie().read_subframe_at_index(pc, t.port, t.controller, + int16_t v = mlogic.get_movie().read_subframe_at_index(pc, t.port, t.controller, t.control); input.axis3(t.port, t.controller, t.control, v); } else { - int16_t v = lsnes_instance.mlogic.get_movie().read_subframe_at_index(pc, t.port, t.controller, + int16_t v = mlogic.get_movie().read_subframe_at_index(pc, t.port, t.controller, t.control); controllerstate[key]; const port_type& pt = portset.port_type(t.port); @@ -146,9 +151,9 @@ void multitrack_edit::process_frame(controller_frame& input) v ^= input.axis3(t.port, t.controller, t.control); break; } - lsnes_instance.mlogic.get_movie().write_subframe_at_index(pc, t.port, t.controller, t.control, + mlogic.get_movie().write_subframe_at_index(pc, t.port, t.controller, t.control, v); - v = lsnes_instance.mlogic.get_movie().read_subframe_at_index(pc, t.port, t.controller, + v = mlogic.get_movie().read_subframe_at_index(pc, t.port, t.controller, t.control); input.axis3(t.port, t.controller, t.control, v); } @@ -157,7 +162,7 @@ void multitrack_edit::process_frame(controller_frame& input) bool multitrack_edit::any_records() { - if(!lsnes_instance.mlogic || !lsnes_instance.mlogic.get_movie().readonly_mode()) + if(!mlogic || !mlogic.get_movie().readonly_mode()) return true; threads::alock h(mlock); bool any_need = false; @@ -171,14 +176,14 @@ namespace command::fnptr<> rotate_forward(lsnes_cmd, "rotate-multitrack", "Rotate multitrack", "Syntax: rotate-multitrack\nRotate multitrack\n", []() throw(std::bad_alloc, std::runtime_error) { - multitrack_editor.rotate(true); + CORE().mteditor.rotate(true); update_movie_state(); }); command::fnptr<> rotate_backward(lsnes_cmd, "rotate-multitrack-backwards", "Rotate multitrack backwards", "Syntax: rotate-multitrack-backwards\nRotate multitrack backwards\n", []() throw(std::bad_alloc, std::runtime_error) { - multitrack_editor.rotate(false); + CORE().mteditor.rotate(false); update_movie_state(); }); @@ -192,13 +197,13 @@ namespace if(c.first < 0) throw std::runtime_error("No such controller"); if(r[2] == "keep") - multitrack_editor.set_and_notify(c.first, c.second, multitrack_edit::MT_PRESERVE); + CORE().mteditor.set_and_notify(c.first, c.second, multitrack_edit::MT_PRESERVE); else if(r[2] == "rewrite") - multitrack_editor.set_and_notify(c.first, c.second, multitrack_edit::MT_OVERWRITE); + CORE().mteditor.set_and_notify(c.first, c.second, multitrack_edit::MT_OVERWRITE); else if(r[2] == "or") - multitrack_editor.set_and_notify(c.first, c.second, multitrack_edit::MT_OR); + CORE().mteditor.set_and_notify(c.first, c.second, multitrack_edit::MT_OR); else if(r[2] == "xor") - multitrack_editor.set_and_notify(c.first, c.second, multitrack_edit::MT_XOR); + CORE().mteditor.set_and_notify(c.first, c.second, multitrack_edit::MT_XOR); else throw std::runtime_error("Invalid mode (keep, rewrite, or, xor)"); update_movie_state(); @@ -213,7 +218,7 @@ namespace P(port, controller); - auto s = multitrack_editor.get(port, controller); + auto s = CORE().mteditor.get(port, controller); switch(s) { case multitrack_edit::MT_OR: L.pushstring("or"); @@ -236,5 +241,3 @@ namespace {"multitrack_state", multitrack_state}, }); } - -multitrack_edit multitrack_editor; diff --git a/src/platform/wxwidgets/editor-multitrack.cpp b/src/platform/wxwidgets/editor-multitrack.cpp index 7cf48bf9..527acc40 100644 --- a/src/platform/wxwidgets/editor-multitrack.cpp +++ b/src/platform/wxwidgets/editor-multitrack.cpp @@ -86,7 +86,7 @@ wxeditor_multitrack::wxeditor_multitrack(wxWindow* parent) ahreconfigure.set(notify_autohold_reconfigure, [this]() { if(typeset && *typeset == controls.get_blank().porttypes()) return; //Don't reconfigure if no change. - multitrack_editor.config_altered(); + lsnes_instance.mteditor.config_altered(); runuifun([this]() { try { this->update_controls(); @@ -95,7 +95,7 @@ wxeditor_multitrack::wxeditor_multitrack(wxWindow* parent) bool wasc = closing; closing = true; multitrack_open = NULL; - runemufn([]() { multitrack_editor.enable(false); }); + runemufn([]() { lsnes_instance.mteditor.enable(false); }); if(!wasc) Destroy(); } @@ -138,13 +138,13 @@ void wxeditor_multitrack::on_control(wxCommandEvent& e) std::string mode = tostdstring(ci.mode->GetStringSelection()); runemufn([ci, mode]() { if(mode == MTMODE_PRESERVE) - multitrack_editor.set(ci.port, ci.controller, multitrack_edit::MT_PRESERVE); + lsnes_instance.mteditor.set(ci.port, ci.controller, multitrack_edit::MT_PRESERVE); else if(mode == MTMODE_OVERWRITE) - multitrack_editor.set(ci.port, ci.controller, multitrack_edit::MT_OVERWRITE); + lsnes_instance.mteditor.set(ci.port, ci.controller, multitrack_edit::MT_OVERWRITE); else if(mode == MTMODE_OR) - multitrack_editor.set(ci.port, ci.controller, multitrack_edit::MT_OR); + lsnes_instance.mteditor.set(ci.port, ci.controller, multitrack_edit::MT_OR); else if(mode == MTMODE_XOR) - multitrack_editor.set(ci.port, ci.controller, multitrack_edit::MT_XOR); + lsnes_instance.mteditor.set(ci.port, ci.controller, multitrack_edit::MT_XOR); }); } @@ -231,7 +231,7 @@ void wxeditor_multitrack::on_wclose(wxCloseEvent& e) bool wasc = closing; closing = true; multitrack_open = NULL; - runemufn([]() { multitrack_editor.enable(false); }); + runemufn([]() { lsnes_instance.mteditor.enable(false); }); if(!wasc) Destroy(); } @@ -249,5 +249,5 @@ void wxeditor_multitrack_display(wxWindow* parent) } v->Show(); multitrack_open = v; - runemufn([]() { multitrack_editor.enable(true); }); + runemufn([]() { lsnes_instance.mteditor.enable(true); }); } -- 2.11.4.GIT