Added: Dynamic legend and information for working modes

Added: Tool mode information is equal to drop-down menu
This commit is contained in:
Deyan Dobromirov 2020-12-28 20:08:33 +02:00
parent a4abdb5681
commit cd36922ad6
8 changed files with 97 additions and 56 deletions

View File

@ -87,7 +87,7 @@ local gtInitLogs = {"*Init", false, 0}
------------ CONFIGURE ASMLIB ------------
asmlib.InitBase("track","assembly")
asmlib.SetOpVar("TOOL_VERSION","8.623")
asmlib.SetOpVar("TOOL_VERSION","8.624")
asmlib.SetIndexes("V" , "x", "y", "z")
asmlib.SetIndexes("A" ,"pitch","yaw","roll")
asmlib.SetIndexes("WV",1,2,3)

View File

@ -1,9 +1,28 @@
return function(sTool, sLimit) local tSet = {} -- Bulgarian
tSet["tool."..sTool..".1" ] = "Сглобява сегментно трасе от предмети"
tSet["tool."..sTool..".left" ] = "Създава/Залепва парче. Задръжте ШИФТ за да натрупате"
tSet["tool."..sTool..".right" ] = "Сменяне на точките на сглобка. Задръжте ШИФТ за на обратно (Бързо: АЛТ + СКРОЛ)"
tSet["tool."..sTool..".right_use" ] = "Отваря менюто с най-често използваните парчета"
tSet["tool."..sTool..".reload" ] = "Премахва парче. Задръжте ШИФТ за да изберете опора"
tSet["tool."..sTool..".info.1" ] = "Обикновено създаване/залепяне"
tSet["tool."..sTool..".info.2" ] = "Пресичане на активни точки"
tSet["tool."..sTool..".info.3" ] = "Линейна сегментна интерполация"
tSet["tool."..sTool..".info.4" ] = "Преобръщане спрямо нормалата"
tSet["tool."..sTool..".left.1" ] = "Създаване/залепване на парче. Задръжте SHIFT за натрупване"
tSet["tool."..sTool..".left.2" ] = "Създаване на парче в пресечената точна на лъчите"
tSet["tool."..sTool..".left.3" ] = "Създаване на интерполирана крива на трасе от предмети"
tSet["tool."..sTool..".left.4" ] = "Създаване на огледалните парчета на избрания списък"
tSet["tool."..sTool..".right.1" ] = "Копитане на модела на парчето или отваряне на чести записи"
tSet["tool."..sTool..".right.2" ] = tSet["tool."..sTool..".right.1"]
tSet["tool."..sTool..".right.3" ] = "Създаване на възел за сегментна крива. Задръжте SHIFT да обновите"
tSet["tool."..sTool..".right.4" ] = "Регистриране на предмет в списъка за обръщане. Задръжте SHIFT за смяна на модела"
tSet["tool."..sTool..".right_use.1" ] = "Смяна на краищата при забранен SCROLL. Задръжте SHIFT за обратно и CTRL за следваща"
tSet["tool."..sTool..".right_use.2" ] = tSet["tool."..sTool..".right_use.1"]
tSet["tool."..sTool..".right_use.3" ] = tSet["tool."..sTool..".right_use.1"]
tSet["tool."..sTool..".right_use.4" ] = tSet["tool."..sTool..".right_use.1"]
tSet["tool."..sTool..".reload.1" ] = "Премахване на парче трасе. Задръжте SHIFT за да изберете опора"
tSet["tool."..sTool..".reload.2" ] = "Премахване на парче трасе. Задръжте SHIFT изберете релационен лъч"
tSet["tool."..sTool..".reload.3" ] = "Премахване на възел от интерполационната крива. Задръжте SHIFT за да изчите стека"
tSet["tool."..sTool..".reload.4" ] = "Премахване на всички оредмети от списъка за обръщане. Ако няма списък маха парче"
tSet["tool."..sTool..".reload_use.1" ] = "Позволете експорт на данните за да отворите DSV мениджър"
tSet["tool."..sTool..".reload_use.2" ] = tSet["tool."..sTool..".reload_use.1"]
tSet["tool."..sTool..".reload_use.3" ] = tSet["tool."..sTool..".reload_use.1"]
tSet["tool."..sTool..".reload_use.4" ] = tSet["tool."..sTool..".reload_use.1"]
tSet["tool."..sTool..".desc" ] = "Сглобява трасе по което да вървят превозните средства"
tSet["tool."..sTool..".name" ] = "Монтаж на трасе"
tSet["tool."..sTool..".phytype" ] = "Изберете типа на физическите свойства от дадените тук"
@ -79,10 +98,6 @@
tSet["tool."..sTool..".category_con" ] = "Категория трасе:"
tSet["tool."..sTool..".workmode" ] = "Сменете тази опция за да изберете различен режим на работа"
tSet["tool."..sTool..".workmode_con" ] = "Работен режим:"
tSet["tool."..sTool..".workmode_1" ] = "Обикновено създаване/залепяне"
tSet["tool."..sTool..".workmode_2" ] = "Пресичане на активни точки"
tSet["tool."..sTool..".workmode_3" ] = "Линейна сегментна интерполация"
tSet["tool."..sTool..".workmode_4" ] = "Преобръщане спрямо нормалата"
tSet["tool."..sTool..".pn_export" ] = "Цъкнете за да съхраните базата данни на файл"
tSet["tool."..sTool..".pn_export_lb" ] = "Съхрани DB"
tSet["tool."..sTool..".pn_routine" ] = "Списъкът с редовно използваните ви парчета трасе"

View File

@ -1,12 +1,31 @@
return function(sTool, sLimit) local tSet = {} -- English ( Column "ISO 639-1" )
------ CONFIGURE TRANSLATIONS ------ https://en.wikipedia.org/wiki/ISO_639-1
-- con >> control # def >> default # hd >> header # lb >> label
tSet["tool."..sTool..".1" ] = "Assembles a prop-segmented track"
tSet["tool."..sTool..".left" ] = "Spawn/snap a piece. Hold SHIFT to stack"
tSet["tool."..sTool..".right" ] = "Switch assembly points. Hold SHIFT for versa (Quick: ALT + SCROLL)"
tSet["tool."..sTool..".right_use" ] = "Open frequently used pieces menu"
tSet["tool."..sTool..".reload" ] = "Remove a piece. Hold SHIFT to select an anchor"
tSet["tool."..sTool..".desc" ] = "Assembles a track for vehicles to run on"
tSet["tool."..sTool..".info.1" ] = "General spawn/snap pieces"
tSet["tool."..sTool..".info.2" ] = "Active point intersection"
tSet["tool."..sTool..".info.3" ] = "Curve line segment fitting"
tSet["tool."..sTool..".info.4" ] = "Surface normal flip over"
tSet["tool."..sTool..".left.1" ] = "Spawn/snap a track piece. Hold SHIFT to stack"
tSet["tool."..sTool..".left.2" ] = "Spawn track piece at the intersection point"
tSet["tool."..sTool..".left.3" ] = "Spawn segmented track interpolation curve"
tSet["tool."..sTool..".left.4" ] = "Spawn flipped over list of tracks selected"
tSet["tool."..sTool..".right.1" ] = "Copy track piece model or open frequent pieces frame"
tSet["tool."..sTool..".right.2" ] = "Copy track piece model or open frequent pieces frame"
tSet["tool."..sTool..".right.3" ] = "Create node for the segmented curve. Hold SHIFT to update"
tSet["tool."..sTool..".right.4" ] = "Register entity to flip over list. Hold SHIFT to change model"
tSet["tool."..sTool..".right_use.1" ] = "Change points for SCROLL disabled. Hold SHIFT for reverse and CTRL for next"
tSet["tool."..sTool..".right_use.2" ] = tSet["tool."..sTool..".right_use.1"]
tSet["tool."..sTool..".right_use.3" ] = tSet["tool."..sTool..".right_use.1"]
tSet["tool."..sTool..".right_use.4" ] = tSet["tool."..sTool..".right_use.1"]
tSet["tool."..sTool..".reload.1" ] = "Remove a track piece. Hold SHIFT to select an anchor"
tSet["tool."..sTool..".reload.2" ] = "Remove a track piece. Hold SHIFT to select relation ray"
tSet["tool."..sTool..".reload.3" ] = "Removes a curve interpolation node. Hold SHIFT to clear the stack"
tSet["tool."..sTool..".reload.4" ] = "Remove all entities from the selection list. When missing removes piece"
tSet["tool."..sTool..".reload_use.1" ] = "Enable database export to open DSV manager"
tSet["tool."..sTool..".reload_use.2" ] = tSet["tool."..sTool..".reload_use.1"]
tSet["tool."..sTool..".reload_use.3" ] = tSet["tool."..sTool..".reload_use.1"]
tSet["tool."..sTool..".reload_use.4" ] = tSet["tool."..sTool..".reload_use.1"]
tSet["tool."..sTool..".desc" ] = "Assembles a track for the vehicles to run on"
tSet["tool."..sTool..".name" ] = "Track assembly"
tSet["tool."..sTool..".phytype" ] = "Select physical properties type of the ones listed here"
tSet["tool."..sTool..".phytype_con" ] = "Material type:"
@ -81,10 +100,6 @@
tSet["tool."..sTool..".category_con" ] = "Track category:"
tSet["tool."..sTool..".workmode" ] = "Change this option to select a different working mode"
tSet["tool."..sTool..".workmode_con" ] = "Work mode:"
tSet["tool."..sTool..".workmode_1" ] = "General spawn/snap pieces"
tSet["tool."..sTool..".workmode_2" ] = "Active point intersection"
tSet["tool."..sTool..".workmode_3" ] = "Curve line segment fitting"
tSet["tool."..sTool..".workmode_4" ] = "Surface normal flip over"
tSet["tool."..sTool..".pn_export" ] = "Click to export the client database as a file"
tSet["tool."..sTool..".pn_export_lb" ] = "Export DB"
tSet["tool."..sTool..".pn_routine" ] = "The list of your frequently used track pieces"

View File

@ -1,9 +1,7 @@
return function(sTool, sLimit) local tSet = {} -- French
tSet["tool."..sTool..".1" ] = "Assemble une piste segmenté"
tSet["tool."..sTool..".left" ] = "Créer/aligner une pièce. Maintenez SHIFT pour empiler"
tSet["tool."..sTool..".right" ] = "Changer de point de rassemblement. Maintenez SHIFT pour le verso (Rapide: ALT + MOLETTE)"
tSet["tool."..sTool..".right_use" ] = "Ouvrir le menu des pièces utilisés fréquemment"
tSet["tool."..sTool..".reload" ] = "Retirer une pièce. Maintenez SHIFT pour sélectionner une ancre"
tSet["tool."..sTool..".info.1" ] = "Général créer/aligner pieces"
tSet["tool."..sTool..".info.2" ] = "Intersection de point actif"
tSet["tool."..sTool..".info.3" ] = "Ajustement de segment de ligne"
tSet["tool."..sTool..".desc" ] = "Assemble une piste auquel les véhicules peuvent rouler dessus"
tSet["tool."..sTool..".name" ] = "Assembleur à piste"
tSet["tool."..sTool..".phytype" ] = "Sélectionnez une des propriétés physiques dans la liste"
@ -77,9 +75,7 @@ return function(sTool, sLimit) local tSet = {} -- French
tSet["tool."..sTool..".category" ] = "Sélectionnez la catégorie de piste à utiliser en développant le dossier"
tSet["tool."..sTool..".category_con" ] = "Catégorie de piste:"
tSet["tool."..sTool..".workmode" ] = "Modifiez cette option pour utiliser différents modes de travail"
tSet["tool."..sTool..".workmode_1" ] = "Général créer/aligner pieces"
tSet["tool."..sTool..".workmode_2" ] = "Intersection de point actif"
tSet["tool."..sTool..".workmode_3" ] = "Ajustement de segment de ligne"
tSet["tool."..sTool..".workmode_con" ] = "Mode de travail:"
tSet["tool."..sTool..".pn_export" ] = "Cliquer pour exporter la base de données client dans un fichier"
tSet["tool."..sTool..".pn_export_lb" ] = "Exporter BD"
tSet["tool."..sTool..".pn_routine" ] = "La liste de vos pièces de pistes utilisés fréquemment"

View File

@ -1,9 +1,7 @@
return function(sTool, sLimit) local tSet = {} -- Japanese
tSet["tool."..sTool..".1" ] = "区間的な線路を組み立て"
tSet["tool."..sTool..".left" ] = "線路の部分がスポーンする。SHIFT押すながら部分が増えるスタック"
tSet["tool."..sTool..".right" ] = "組み立てポイントを変わる。SHIFT押すながら方向を逆にして。ショートカット ALT + SCROLL"
tSet["tool."..sTool..".right_use" ] = "よく使った線路部分メニュ"
tSet["tool."..sTool..".reload" ] = "線路部分を外す。SHIFT押すながらアンカーを選択して"
tSet["tool."..sTool..".info.1" ] = "通常部分のスポーン/スナップ"
tSet["tool."..sTool..".info.2" ] = "アクティブポイントの交差点"
tSet["tool."..sTool..".info.3" ] = "曲線線分フィッティング"
tSet["tool."..sTool..".desc" ] = "乗り物が走る線路を組み立てる"
tSet["tool."..sTool..".name" ] = "線路の組み立て"
tSet["tool."..sTool..".phytype" ] = "一覧済みしたものの物性タイプを選択して"
@ -77,9 +75,7 @@
tSet["tool."..sTool..".category" ] = "フォルダを展開して、使用するトラックカテゴリを選択します"
tSet["tool."..sTool..".category_con" ] = "トラックカテゴリ:"
tSet["tool."..sTool..".workmode" ] = "稼働モード変更の設定"
tSet["tool."..sTool..".workmode_1" ] = "通常部分のスポーン/スナップ"
tSet["tool."..sTool..".workmode_2" ] = "アクティブポイントの交差点"
tSet["tool."..sTool..".workmode_3" ] = "曲線線分フィッティング"
tSet["tool."..sTool..".workmode_con" ] = "稼働モ:"
tSet["tool."..sTool..".pn_export" ] = "クリックでクライアントデータベースをファイルにエクスポート"
tSet["tool."..sTool..".pn_export_lb" ] = "DB エクスポート"
tSet["tool."..sTool..".pn_routine" ] = "よく使った線路部分表"

View File

@ -1,9 +1,8 @@
return function(sTool, sLimit) local tSet = {} -- Russian
tSet["tool."..sTool..".1" ] = "Собрать сегментированную дорогу из предметов"
tSet["tool."..sTool..".left" ] = "Создает/Прилепает кусок. Удерживайте СДВИГ чтобы нагромождали"
tSet["tool."..sTool..".right" ] = "Изменение точки сборки. Удерживайте СДВИГ чтобы реверс (Быстро: АЛТ + ПРОКРУТКИ)"
tSet["tool."..sTool..".right_use" ] = "Открывается меню с наиболее часто используемых кусков"
tSet["tool."..sTool..".reload" ] = "Убрать кусок. Удерживайте СДВИГ чтобы выбрать якорь"
tSet["tool."..sTool..".info.1" ] = "Общее создание/прилепание куски"
tSet["tool."..sTool..".info.2" ] = "Пересечение активной точки"
tSet["tool."..sTool..".info.3" ] = "Кривой отрезок линии фитинг"
tSet["tool."..sTool..".info.4" ] = "Нормаль поверхности перевернуть"
tSet["tool."..sTool..".desc" ] = "Создает дорогу для транспортных средств"
tSet["tool."..sTool..".name" ] = "Сборка дороги"
tSet["tool."..sTool..".phytype" ] = "Выберите тип физических свойств из тех которые перечислены здесь"
@ -79,10 +78,6 @@
tSet["tool."..sTool..".category_con" ] = "Категория дороги:"
tSet["tool."..sTool..".workmode" ] = "Измените эту опцию чтобы использовать другой рабочий режим"
tSet["tool."..sTool..".workmode_con" ] = "Рабочий режим:"
tSet["tool."..sTool..".workmode_1" ] = "Общее создание/прилепание куски"
tSet["tool."..sTool..".workmode_2" ] = "Пересечение активной точки"
tSet["tool."..sTool..".workmode_3" ] = "Кривой отрезок линии фитинг"
tSet["tool."..sTool..".workmode_4" ] = "Нормаль поверхности перевернуть"
tSet["tool."..sTool..".pn_export" ] = "Нажмите чтобы сохранить файл базы данных"
tSet["tool."..sTool..".pn_export_lb" ] = "Экспорт БД"
tSet["tool."..sTool..".pn_routine" ] = "Список регулярно используемых кусков дороги"

View File

@ -144,13 +144,34 @@ TOOL.ClientConVar = {
}
if(CLIENT) then
-- https://wiki.facepunch.com/gmod/Tool_Information_Display
TOOL.Information = {
{ name = "info", stage = 1 },
{ name = "left" },
{ name = "right" },
{ name = "right_use",icon2 = "gui/e.png" },
{ name = "reload" }
{name = "info.1", stage = 0, op = 1, icon = "gui/info" , icon2 = ""},
{name = "info.2", stage = 0, op = 2, icon = "gui/info" , icon2 = ""},
{name = "info.3", stage = 0, op = 3, icon = "gui/info" , icon2 = ""},
{name = "info.4", stage = 0, op = 4, icon = "gui/info" , icon2 = ""},
{name = "left.1", stage = 0, op = 1, icon = "gui/lmb.png", icon2 = ""},
{name = "left.2", stage = 0, op = 2, icon = "gui/lmb.png", icon2 = ""},
{name = "left.3", stage = 0, op = 3, icon = "gui/lmb.png", icon2 = ""},
{name = "left.4", stage = 0, op = 4, icon = "gui/lmb.png", icon2 = ""},
{name = "right.1", stage = 0, op = 1, icon = "gui/rmb.png", icon2 = ""},
{name = "right.2", stage = 0, op = 2, icon = "gui/rmb.png", icon2 = ""},
{name = "right.3", stage = 0, op = 3, icon = "gui/rmb.png", icon2 = ""},
{name = "right.4", stage = 0, op = 4, icon = "gui/rmb.png", icon2 = ""},
{name = "right_use.1", stage = 0, op = 1, icon = "gui/rmb.png", icon2 = "gui/e.png"},
{name = "right_use.2", stage = 0, op = 2, icon = "gui/rmb.png", icon2 = "gui/e.png"},
{name = "right_use.3", stage = 0, op = 3, icon = "gui/rmb.png", icon2 = "gui/e.png"},
{name = "right_use.4", stage = 0, op = 4, icon = "gui/rmb.png", icon2 = "gui/e.png"},
{name = "reload.1", stage = 0, op = 1, icon = "gui/r.png" , icon2 = ""},
{name = "reload.2", stage = 0, op = 2, icon = "gui/r.png" , icon2 = ""},
{name = "reload.3", stage = 0, op = 3, icon = "gui/r.png" , icon2 = ""},
{name = "reload.4", stage = 0, op = 4, icon = "gui/r.png" , icon2 = ""},
{name = "reload_use.1", stage = 0, op = 1, icon = "gui/r.png" , icon2 = "gui/e.png"},
{name = "reload_use.2", stage = 0, op = 2, icon = "gui/r.png" , icon2 = "gui/e.png"},
{name = "reload_use.3", stage = 0, op = 3, icon = "gui/r.png" , icon2 = "gui/e.png"},
{name = "reload_use.4", stage = 0, op = 4, icon = "gui/r.png" , icon2 = "gui/e.png"},
}
languageAdd("tool."..gsToolNameL..".category", "Construction")
concommandAdd(gsToolPrefL.."openframe", asmlib.GetActionCode("OPEN_FRAME"))
concommandAdd(gsToolPrefL.."openextdb", asmlib.GetActionCode("OPEN_EXTERNDB"))
@ -536,7 +557,10 @@ function TOOL:GetWorkingMode()
local nWork = self:GetClientNumber("workmode", 0)
local cWork = mathClamp(nWork or 0, 1, conWorkMode:GetSize())
local sWork = tostring(conWorkMode:Select(cWork) or gsNoAV):sub(1,6)
return cWork, sWork
if(SERVER) then
if(self:GetOperation() ~= cWork) then
self:SetOperation(cWork); self:SetStage(0) end
end; return cWork, sWork
end
-- Sends the proper ghost stack depth to DRAW_GHOSTS [0;N]
@ -2183,7 +2207,7 @@ function TOOL.BuildCPanel(CPanel)
for iD = 1, conWorkMode:GetSize() do
local sW = tostring(conWorkMode:Select(iD) or gsNoAV):lower()
local sI = asmlib.ToIcon("workmode_"..sW)
local sT = asmlib.GetPhrase("tool."..gsToolNameL..".workmode_"..iD)
local sT = asmlib.GetPhrase("tool."..gsToolNameL..".info."..iD)
pComboToolMode:AddChoice(sT, iD, (iD == aData), sI)
end
pComboToolMode:Dock(TOP) -- Setting tallness gets ingnored otherwise

View File

@ -38,7 +38,7 @@ Also, another great achievement progress is in place, so 10x guys for
* Tool convar tweaks is accessible via [dedicated in-game manipulation panel](https://youtu.be/3Ws6Jh3JUew?t=56)
* Context menu for direct track entity [value export and manipulation][ref-value-exp]
* Optional [flip-over mode called from spawning/snapping](https://youtu.be/3Ws6Jh3JUew?t=2146) for quickly flip the anchor across
* Track segment [flip over mode for mirroring](https://youtu.be/3Ws6Jh3JUew?t=1358) already created [url=https://youtu.be/3Ws6Jh3JUew?t=1722]loops and curves[/url]
* Track segment [flip over mode for mirroring](https://youtu.be/3Ws6Jh3JUew?t=1358) already created [loops and curves](https://youtu.be/3Ws6Jh3JUew?t=1722)
* Track segment [curve node interpolation](https://youtu.be/3Ws6Jh3JUew?t=200) for building custom track layouts
* Track curve fitting alignment based on [ray intersection for precise piece layout][ref-vid-inters]
* [Extendible database][ref-dbext] via [text file][ref-text-file] or a [lua script][ref-lua-script]
@ -173,10 +173,10 @@ set being solid with fading door `CLOSED` function state:
* If `Ghosts count` is larger than zero ghosted track pieces will be
rendered to assist you with the building.
* When not looking at trace entity piece predefined active point
will update the bodygroup/skin according to `trackassembly_bgskids`.
will update the bodygroup/skin according to `trackassembly_bgskids`.
2. Pressing `ATTACK1` ( Def: `Left Mouse Button` ) + `USE` ( Def: `E` )
* When not looking at trace entity piece predefined active point
will update the trace entity physical settings and constraints ( Based on anchor ).
will update the trace entity physical settings and constraints ( Based on anchor ).
3. Pressing `ATTACK1` ( Def: `Left Mouse Button` ) + `SPEED` ( Def: `SHIFT` )
* `SNAP` : Stack pieces according to `trackassembly_stackcnt` ( `Pieces count` ):
1. The value in `trackassembly_stackcnt` must be positive.
@ -216,7 +216,7 @@ set being solid with fading door `CLOSED` function state:
the [server database][ref-sv-db] [`sv_`][ref-dsv-dir] as a file in [DSV format][ref-dsv-dir].
11. Pressing `RELOAD` ( Def: `R` ) + `SPEED` ( Def: `SHIFT` )
* When pressing it on the world will clear the tool's selected operational track
pieces which are used for various things. Works differently based on the mode selected.
pieces which are used for various things. Works differently based on the mode selected.
* `SNAP` : Clears the `anchor` entity which all new pieces will be automatically constrained to.
* `CROSS`: Clears the `relation` ray defined for using active point intersection between two pieces.
* `CURVE`: Clears all nodes defined for using the curving algorithm. Otherwise clears the last point on the stack.