상속: IDisposable
예제 #1
0
        public NativePlugin(string fileName)
        {
            _editorInterface.version  = 1;
            _editorInterface.pluginID = NextPluginID;
            NextPluginID++;
            _editorInterface.GetEditorHandle        = Marshal.GetFunctionPointerForDelegate(NativePluginCallbacks.GetEditorHandleDelegate);
            _editorInterface.GetWindowHandle        = Marshal.GetFunctionPointerForDelegate(NativePluginCallbacks.GetWindowHandleDelegate);
            _editorInterface.RegisterScriptHeader   = Marshal.GetFunctionPointerForDelegate(NativePluginCallbacks.RegisterScriptHeaderDelegate);
            _editorInterface.UnregisterScriptHeader = Marshal.GetFunctionPointerForDelegate(NativePluginCallbacks.UnregisterScriptHeaderDelegate);

            _dllHandle = NativeProxy.LoadLibrary(fileName);
            if (_dllHandle == IntPtr.Zero)
            {
                throw new AGSEditorException("Unable to load plugin '" + fileName + "'. It may depend on another DLL that is missing.");
            }

            _getPluginName    = (AGS_GetPluginName)GetManagedDelegateForFunction("AGS_GetPluginName", typeof(AGS_GetPluginName), true);
            _editorStartup    = (AGS_EditorStartup)GetManagedDelegateForFunction("AGS_EditorStartup", typeof(AGS_EditorStartup), true);
            _editorShutdown   = (AGS_EditorShutdown)GetManagedDelegateForFunction("AGS_EditorShutdown", typeof(AGS_EditorShutdown), true);
            _editorProperties = (AGS_EditorProperties)GetManagedDelegateForFunction("AGS_EditorProperties", typeof(AGS_EditorProperties), false);
            _editorSaveGame   = (AGS_EditorSaveGame)GetManagedDelegateForFunction("AGS_EditorSaveGame", typeof(AGS_EditorSaveGame), false);
            _editorLoadGame   = (AGS_EditorLoadGame)GetManagedDelegateForFunction("AGS_EditorLoadGame", typeof(AGS_EditorLoadGame), false);

            _pluginName = Marshal.PtrToStringAnsi(_getPluginName());
            _fileName   = fileName;
            PluginLookup.Add(_editorInterface.pluginID, this);
        }
예제 #2
0
        public ApplicationController()
        {
            _events                 = Factory.Events;
            _agsEditor              = Factory.AGSEditor;
            _guiController          = Factory.GUIController;
            _componentController    = Factory.ComponentController;
            _nativeProxy            = Factory.NativeProxy;
            _pluginEditorController = new AGSEditorController(_componentController, _agsEditor, _guiController);

            _events.GameLoad                     += new EditorEvents.GameLoadHandler(_events_GameLoad);
            _events.GamePostLoad                 += new EditorEvents.GamePostLoadHandler(_events_GamePostLoad);
            _events.GameSettingsChanged          += new EditorEvents.ParameterlessDelegate(_events_GameSettingsChanged);
            _events.ImportedOldGame              += new EditorEvents.ParameterlessDelegate(_events_ImportedOldGame);
            _events.RefreshAllComponentsFromGame += new EditorEvents.ParameterlessDelegate(_events_RefreshAllComponentsFromGame);
            _events.SavingGame                   += new EditorEvents.SavingGameHandler(_events_SavingGame);
            _events.SavingUserData               += new EditorEvents.SavingUserDataHandler(_events_SavingUserData);
            _events.LoadedUserData               += new EditorEvents.LoadedUserDataHandler(_events_LoadedUserData);
            _agsEditor.PreSaveGame               += new AGSEditor.PreSaveGameHandler(_agsEditor_PreSaveGame);

            _guiController.OnEditorShutdown += new GUIController.EditorShutdownHandler(GUIController_OnEditorShutdown);
            _guiController.Initialize(_agsEditor);
            _agsEditor.DoEditorInitialization();
            AGSColor.ColorMapper = new ColorMapper(_agsEditor);
            CreateComponents();
        }
예제 #3
0
        public ApplicationController()
        {
            _events = Factory.Events;
            _agsEditor = Factory.AGSEditor;
            _guiController = Factory.GUIController;
            _componentController = Factory.ComponentController;
            _nativeProxy = Factory.NativeProxy;
            _pluginEditorController = new AGSEditorController(_componentController, _agsEditor, _guiController);

            _events.GameLoad += new EditorEvents.GameLoadHandler(_events_GameLoad);
            _events.GamePostLoad += new EditorEvents.GamePostLoadHandler(_events_GamePostLoad);
            _events.GameSettingsChanged += new EditorEvents.ParameterlessDelegate(_events_GameSettingsChanged);
            _events.ImportedOldGame += new EditorEvents.ParameterlessDelegate(_events_ImportedOldGame);
            _events.RefreshAllComponentsFromGame += new EditorEvents.ParameterlessDelegate(_events_RefreshAllComponentsFromGame);
            _events.SavingGame += new EditorEvents.SavingGameHandler(_events_SavingGame);
            _events.SavingUserData += new EditorEvents.SavingUserDataHandler(_events_SavingUserData);
            _events.LoadedUserData += new EditorEvents.LoadedUserDataHandler(_events_LoadedUserData);
            _agsEditor.PreSaveGame += new AGSEditor.PreSaveGameHandler(_agsEditor_PreSaveGame);

            _guiController.OnEditorShutdown += new GUIController.EditorShutdownHandler(GUIController_OnEditorShutdown);
            _guiController.Initialize(_agsEditor);
            _agsEditor.DoEditorInitialization();
            AGSColor.ColorMapper = new ColorMapper(_agsEditor);
            CreateComponents();
        }
예제 #4
0
        private void SendCommandAndSwitchWindows(string command)
        {
            ClearCurrentLineMarker();

            ChangeDebugState(DebugState.Running);
            if (_engineWindowHandle != IntPtr.Zero)
            {
                NativeProxy.SetForegroundWindow(_engineWindowHandle);
            }
            _communicator.SendMessage("<Engine Command=\"" + command + "\" />");
        }
예제 #5
0
 public void Dispose()
 {
     if (_dllHandle != IntPtr.Zero)
     {
         if (_enabled)
         {
             StopPlugin();
         }
         NativeProxy.FreeLibrary(_dllHandle);
         _dllHandle = IntPtr.Zero;
     }
 }
예제 #6
0
        private Delegate GetManagedDelegateForFunction(string functionName, Type delegateType, bool mustExist)
        {
            IntPtr pAddressOfFunctionToCall = NativeProxy.GetProcAddress(_dllHandle, functionName);

            if (pAddressOfFunctionToCall == IntPtr.Zero)
            {
                if (mustExist)
                {
                    throw new AGSEditorException("Function '" + functionName + "' not exported from plugin");
                }
                return(null);
            }

            return(Marshal.GetDelegateForFunctionPointer(pAddressOfFunctionToCall, delegateType));
        }
예제 #7
0
        private void SendCommandAndSwitchWindows(string command)
        {
            ClearCurrentLineMarker();

            ChangeDebugState(DebugState.Running);
            if (_engineWindowHandle != IntPtr.Zero)
            {
                if (Utilities.IsMonoRunning())
                {
                    //Is there any way of doing this in mono? I couldn't find any.
                    //I guess the user will have to bring the game back to focus by himself...
                }
                else
                {
                    NativeProxy.SetForegroundWindow(_engineWindowHandle);
                }
            }
            _communicator.SendMessage("<Engine Command=\"" + command + "\" />");
        }
예제 #8
0
        private void WriteAndroidCfg(string outputDir)
        {
            string configPath = Path.Combine(outputDir, ANDROID_CFG);

            RuntimeSetup setup    = Factory.AGSEditor.CurrentGame.DefaultSetup;
            int          rotation = (int)setup.Rotation;

            NativeProxy.WritePrivateProfileString("misc", "config_enabled", "1", configPath);
            NativeProxy.WritePrivateProfileString("misc", "rotation", rotation.ToString(), configPath);
            NativeProxy.WritePrivateProfileString("misc", "translation", setup.Translation, configPath);

            NativeProxy.WritePrivateProfileString("controls", "mouse_method", "0", configPath);
            NativeProxy.WritePrivateProfileString("controls", "mouse_longclick", "1", configPath);

            NativeProxy.WritePrivateProfileString("compatibility", "clear_cache_on_room_change", "0", configPath);

            NativeProxy.WritePrivateProfileString("sound", "samplerate", "44100", configPath);
            NativeProxy.WritePrivateProfileString("sound", "enabled", "1", configPath);
            NativeProxy.WritePrivateProfileString("sound", "threaded", "1", configPath);
            NativeProxy.WritePrivateProfileString("sound", "cache_size", "64", configPath);

            NativeProxy.WritePrivateProfileString("midi", "enabled", "0", configPath);
            NativeProxy.WritePrivateProfileString("midi", "preload_patches", "0", configPath);

            NativeProxy.WritePrivateProfileString("video", "framedrop", "0", configPath);

            if (setup.GraphicsDriver == GraphicsDriver.Software)
            {
                NativeProxy.WritePrivateProfileString("graphics", "renderer", "0", configPath);
            }
            else
            {
                NativeProxy.WritePrivateProfileString("graphics", "renderer", "1", configPath);
            }

            if (setup.GraphicsFilter == "StdScale")
            {
                NativeProxy.WritePrivateProfileString("graphics", "smoothing", "0", configPath);
            }
            else
            {
                NativeProxy.WritePrivateProfileString("graphics", "smoothing", "1", configPath);
            }

            if (setup.FullscreenGameScaling == GameScaling.ProportionalStretch)
            {
                NativeProxy.WritePrivateProfileString("graphics", "scaling", "1", configPath);
            }
            else if (setup.FullscreenGameScaling == GameScaling.StretchToFit)
            {
                NativeProxy.WritePrivateProfileString("graphics", "scaling", "2", configPath);
            }
            else
            {
                NativeProxy.WritePrivateProfileString("graphics", "scaling", "0", configPath);
            }

            NativeProxy.WritePrivateProfileString("graphics", "super_sampling", "0", configPath);
            NativeProxy.WritePrivateProfileString("graphics", "smooth_sprites", setup.AAScaledSprites ? "1" : "0", configPath);

            NativeProxy.WritePrivateProfileString("debug", "show_fps", "0", configPath);
            NativeProxy.WritePrivateProfileString("debug", "logging", "0", configPath);
        }