Script Editor Plugin – Arma Reforger

From Bohemia Interactive Community
Jump to navigation Jump to search
(Page creation)
 
m (Fix)
Line 21: Line 21:


== ScriptEditor Module API ==
== ScriptEditor Module API ==
{{Feature|informative|See {{Link/Enfusion|armaR|ScriptEditor}}.}}


In the below code, the {{hl|GetCurrentLine}} method is used to get the cursor location's line number.
In the below code, the {{hl|GetCurrentLine}} method is used to get the cursor location's line number.
Line 43: Line 45:
{{Feature|important|Each text operation goes into one {{Controls|Ctrl|Z}} '''each''', making reverting a multi-line text operation successive Ctrl+Zs.}}
{{Feature|important|Each text operation goes into one {{Controls|Ctrl|Z}} '''each''', making reverting a multi-line text operation successive Ctrl+Zs.}}


=== Dialog ===
 
== Configuration ==


Displayed parameters are declared values decorated with an {{hl|Attribute}}; a full setup is done as follow:
Displayed parameters are declared values decorated with an {{hl|Attribute}}; a full setup is done as follow:
Line 63: Line 66:
if (lineContent.IsEmpty())
if (lineContent.IsEmpty())
{
{
Workbench.Dialog("Empty line", "You cannot add a comment to a completely empty line.");
Workbench.Dialog("Empty line", "You cannot add a comment to a completely empty line."); // absolutely arbitrary tutorial decision :)
return;
return;
}
}
Line 83: Line 86:


{{Feature|informative|
{{Feature|informative|
Think of the plugin's behaviour: should the end user encounter a configuration popup on each tool usage
Think of the plugin's behaviour: should the end user encounter a configuration popup on each plugin usage
(e.g from the {{hl|Run}} method) or can it be configured once, or should ''some'' settings be offered on every usage?
(e.g from the {{hl|Run}} method) or can it be configured once, or should ''some'' settings be offered on every usage?
}}
}}

Revision as of 18:09, 26 April 2024

This tutorial teaches how to create a Script Editor-specific plugin.

Please read Workbench Plugin first.


Setup

  • Open Script Editor
  • In an addon, create a new script in WorkbenchGame/ScriptEditor - name it TAG_TutorialPlugin.c (must end with Plugin by convention)
  • Double-click the file to open it
  • Press Ctrl + T to use the Script Template plugin
    • In its window, select "Class Type: WorkbenchPlugin", leave the other fields blank/default
    • A Workbench plugin skeleton is inserted.
  • In the WorkbenchPluginAttribute, replace wbModules: { "ResourceManager" } by wbModules: { "ScriptEditor" }
  • In the Run() method, write Print("It works!"); and save the file
  • Press Ctrl + ⇧ Shift + R to reload scripts
  • The TAG_TutorialPlugin plugin should appear in the Script Editor's Plugins list, available in the top bar - click on the plugin entry
  • "It works!" gets printed in the output console.


ScriptEditor Module API

In the below code, the GetCurrentLine method is used to get the cursor location's line number. The GetLineText/SetLineText methods is used to obtain and change the line's value by adding an inline comment indicating the current line number ("hardcoded" into the comment).

[WorkbenchPluginAttribute(name: "Tutorial Plugin", description: "This tutorial plugin does something.", shortcut: "Ctrl+Shift+H", wbModules: { "ScriptEditor" }, awesomeFontCode: 0xF188)] class TAG_TutorialPlugin : WorkbenchPlugin { override void Run() { ScriptEditor scriptEditor = Workbench.GetModule(ScriptEditor); int lineNumber = scriptEditor.GetCurrentLine(); string lineContent; scriptEditor.GetLineText(lineContent); lineContent += " // current line is " + (lineNumber + 1); scriptEditor.SetLineText(lineContent); } }

Each text operation goes into one Ctrl + Z each, making reverting a multi-line text operation successive Ctrl+Zs.


Configuration

Displayed parameters are declared values decorated with an Attribute; a full setup is done as follow:

[WorkbenchPluginAttribute(name: "Tutorial Plugin", description: "This tutorial plugin does something.", shortcut: "Ctrl+Shift+H", wbModules: { "ScriptEditor" }, awesomeFontCode: 0xF188)] class TAG_TutorialPlugin : WorkbenchPlugin { [Attribute(desc: "Only display the line number without any other text")] protected bool m_bOnlyLineNumber; override void Run() { ScriptEditor scriptEditor = Workbench.GetModule(ScriptEditor); int lineNumber = scriptEditor.GetCurrentLine(); string lineContent; scriptEditor.GetLineText(lineContent); if (lineContent.IsEmpty()) { Workbench.Dialog("Empty line", "You cannot add a comment to a completely empty line."); // absolutely arbitrary tutorial decision :) return; } if (m_bOnlyLineNumber) lineContent += " // " + (lineNumber + 1).ToString(); else lineContent += " // current line is " + (lineNumber + 1).ToString(); scriptEditor.SetLineText(lineContent); } override void Configure() { Workbench.ScriptDialog("Tutorial Plugin Configuration", "Usage:\nTick the checkbox or not, depending on if the line number should be written or not", this); } }

Think of the plugin's behaviour: should the end user encounter a configuration popup on each plugin usage (e.g from the Run method) or can it be configured once, or should some settings be offered on every usage?