using System; using BizHawk.DiscSystem; using System.Collections.Generic; #if WINDOWS using SlimDX.Direct3D9; using SlimDX.DirectSound; #endif namespace BizHawk.MultiClient { public static class Global { 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 Config Config; public static IEmulator Emulator; public static CoreComm CoreComm; public static GameInfo Game; public static CheatList CheatList; 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(); /// /// the global MovieSession can use this to deal with multitrack player remapping (should this be here? maybe it should be in MovieSession) /// public static MultitrackRewiringControllerAdapter MultitrackRewiringControllerAdapter = new MultitrackRewiringControllerAdapter(); public static MovieSession MovieSession = new MovieSession(); //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(); } }