diff --git a/BizHawk.MultiClient/GlobalWinF.cs b/BizHawk.MultiClient/GlobalWinF.cs new file mode 100644 index 0000000000..ce1b5ef693 --- /dev/null +++ b/BizHawk.MultiClient/GlobalWinF.cs @@ -0,0 +1,90 @@ +using BizHawk.DiscSystem; +using SlimDX.Direct3D9; +using SlimDX.DirectSound; + +using BizHawk.Client.Common; + +namespace BizHawk.MultiClient +{ + public static class GlobalWinF + { + public static MainForm MainForm; +#if WINDOWS + public static DirectSound DSound; + public static Direct3D Direct3D; +#endif + public static Sound Sound; + public static IRenderer RenderPanel; + public static OSDManager OSD = new OSDManager(); + public static DisplayManager DisplayManager = new DisplayManager(); + public static CoreComm CoreComm; + + public static Controller NullControls; + public static AutofireController AutofireNullControls; + + /// + /// whether throttling is force-disabled by use of fast forward + /// + public static bool ForceNoThrottle; + + //the movie will be spliced inbetween these if it is present + public static CopyControllerAdapter MovieInputSourceAdapter = new CopyControllerAdapter(); + public static CopyControllerAdapter MovieOutputHardpoint = new CopyControllerAdapter(); + + //dont take my word for it, since the final word is actually in RewireInputChain, but here is a guide... + //user -> Input -> ActiveController -> UDLR -> StickyXORPlayerInputAdapter -> TurboAdapter(TBD) -> Lua(?TBD?) -> .. + //.. -> MultitrackRewiringControllerAdapter -> MovieInputSourceAdapter -> (MovieSession) -> MovieOutputAdapter -> ControllerOutput(1) -> Game + //(1)->Input Display + + //the original source controller, bound to the user, sort of the "input" port for the chain, i think + public static Controller ActiveController; + + //rapid fire version on the user controller, has its own key bindings and is OR'ed against ActiveController + public static AutofireController AutoFireController; + + //the "output" port for the controller chain. + public static CopyControllerAdapter ControllerOutput = new CopyControllerAdapter(); + + //input state which has been destined for game controller inputs are coalesced here + public static ControllerInputCoalescer ControllerInputCoalescer = new ControllerInputCoalescer(); + //input state which has been destined for client hotkey consumption are colesced here + public static InputCoalescer HotkeyCoalescer = new InputCoalescer(); + + public static UD_LR_ControllerAdapter UD_LR_ControllerAdapter = new UD_LR_ControllerAdapter(); + + /// + /// provides an opportunity to mutate the player's input in an autohold style + /// + public static StickyXORAdapter StickyXORAdapter = new StickyXORAdapter(); + + public static AutoFireStickyXORAdapter AutofireStickyXORAdapter = new AutoFireStickyXORAdapter(); + + /// + /// Forces any controller button to Off, useful for things like Joypad.Set + /// + public static ForceOffAdaptor ForceOffAdaptor = new ForceOffAdaptor(); + + /// + /// will OR together two IControllers + /// + public static ORAdapter OrControllerAdapter = new ORAdapter(); + + /// + /// fire off one-frame logical button clicks here. useful for things like ti-83 virtual pad and reset buttons + /// + public static ClickyVirtualPadController ClickyVirtualPadController = new ClickyVirtualPadController(); + + public static SimpleController MovieOutputController = new SimpleController(); + + public static Controller ClientControls; + + public static string GetOutputControllersAsMnemonic() + { + MnemonicsGenerator mg = new MnemonicsGenerator(); + mg.SetSource(ControllerOutput); + return mg.GetControllersAsMnemonic(); + } + + public static DiscHopper DiscHopper = new DiscHopper(); + } +}