Modding:GUIs/ru: Difference between revisions

From Vintage Story Wiki
Created page with "Это компонент, который создает и управляет вашими элементами графического интерфейса для вас...."
(Created page with "В Vintage Story в настоящее время вам нужно сформулировать свои графические интерфейсы в коде, что тр...")
(Created page with "Это компонент, который создает и управляет вашими элементами графического интерфейса для вас....")
 
(13 intermediate revisions by the same user not shown)
Line 5: Line 5:


'''Protip:'''
'''Protip:'''
Use the debug keybind to "Cycle Dialog Outline Modes" when building a GUI. It will draw outlines around your GUI element bounds, making it much easier to understand how your code is translated into the visual GUI.
  Используйте привязку клавиши отладки для «циклических режимов контура диалогового окна» при создании графического интерфейса. Он нарисует контуры вокруг границ вашего графического интерфейса, что значительно упростит понимание того, как ваш код переводится в визуальный графический интерфейс.


== Starting out ==
== Начиная ==
You should encapsulate every GUI Dialog into its own class, albeit a dialog may consist of multiple windows - the vanilla character dialog for example has two - one for the players wearables and one for the player stats. There's a couple of base classes to make your life a bit easier.
Вы должны инкапсулировать каждый диалог GUI в свой собственный класс, хотя диалог может состоять из нескольких окон - например, диалоговое окно ванильного персонажа имеет два - одно для носимых игроков и одно для статистики игрока. Есть пара базовых классов, которые немного облегчат вам жизнь.


===Block Entity GUI===
===Графический интерфейс объекта блокировки===


To create a GUI that's bound to a block entity, inherit from <code>GuiDialogBlockEntity</code>. In your block entity code you can then create and open that gui e.g. upon player interaction (example: [https://github.com/anegostudios/vssurvivalmod/blob/648193749d2ea5b8c155d27db0c7f6dc1050f9cd/BlockEntity/BEQuern.cs#L602 Quern Block Entity], [https://github.com/anegostudios/vssurvivalmod/blob/master/Gui/GuiDialogBlockEntityQuern.cs Quern Block Dialog])
Чтобы создать графический интерфейс, привязанный к блочному объекту, наследуйте от <code>GuiDialogBlockEntity</code>. Затем в коде вашего блока вы можете создать и открыть этот графический интерфейс, например. при взаимодействии с игроком (пример: [https://github.com/anegostudios/vssurvivalmod/blob/648193749d2ea5b8c155d27db0c7f6dc1050f9cd/BlockEntity/BEQuern.cs#L602 сущность блока жернова], [https://github.com/anegostudios/vssurvivalmod/blob/ master/Gui/GuiDialogBlockEntityQuern.cs Диалог блока жернова])


===HUD===
===HUD===


To create a GUI element which is not interactable, inherit from <code>HudElement</code>.
Чтобы создать элемент графического интерфейса, с которым нельзя взаимодействовать, наследуйте от <code>HudElement</code>.


===General Purpose GUI===
===Графический интерфейс общего назначения===


For any other uses, inerhit from the general purpose class <code>GuiDialog</code>, from which HudElement and GuiDialogBlockEntity also inherit from. You can override <code>ToggleKeyCombinationCode</code> to something like "yourAweseomeHotkeyCode" and use <code>capi.Input.RegisterHotKey</code> + <code>capi.Input.SetHotKeyHandler</code> to have your own keyboard key mapped to opening/closing your GUI (example: [https://github.com/anegostudios/vsessentialsmod/blob/master/Systems/WorldMap/WorldMapManager.cs#L105 World Map])
Для любого другого использования наследуйте от класса общего назначения <code>GuiDialog</code>, от которого также наследуются HudElement и GuiDialogBlockEntity. Вы можете переопределить <code>ToggleKeyCombinationCode</code> на что-то вроде «yourAweseomeHotkeyCode» и использовать <code>capi.Input.RegisterHotKey</code> + <code>capi.Input.SetHotKeyHandler</code>, чтобы получить собственную клавишу клавиатуры. сопоставляется с открытием/закрытием вашего графического интерфейса (пример: [https://github.com/anegostudios/vsessentialsmod/blob/master/Systems/WorldMap/WorldMapManager.cs#L105 World Map])


== GUI Basics ==
== Основы графического интерфейса ==


In general, you can pretty much build your own GUI system if you want to, by just overriding <code>OnRenderGUI</code> and render whatever you like. There's a multitude of overridable methods to handle mouse and keyboard inputs as well, see also the [https://github.com/anegostudios/vsapi/blob/master/Client/UI/Dialog/GuiDialog.cs GuiDialog] class on Github
В общем, вы можете создать свою собственную систему графического интерфейса, если хотите, просто переопределив <code>OnRenderGUI</code> и визуализируя все, что вам нравится. Также существует множество переопределяемых методов для обработки ввода с клавиатуры и мыши, см. также класс [https://github.com/anegostudios/vsapi/blob/master/Client/UI/Dialog/GuiDialog.cs GuiDialog] на Github.


If you want to use the vanilla GUI system, it's concept is merely a flat or hierarchical list of GUI elements placed at certain positions. The position is determined by an instance of <code>ElementBounds</code>. Let's have a closer look at it's properties:
Если вы хотите использовать ванильную систему графического интерфейса, ее концепция представляет собой просто плоский или иерархический список элементов графического интерфейса, размещенных в определенных позициях. Позиция определяется экземпляром <code>ElementBounds</code>. Рассмотрим подробнее его свойства:


=== ElementBounds===
=== Границы Элемента===


* <code>FixedX</code>/<code>FixedY</code>: The absolute position where the element should be placed
* <code>FixedX</code>/<code>FixedY</code>: абсолютное положение, в котором должен быть размещен элемент.
* <code>FixedWidth</code>/<code>FixedHeight</code>: The absolute width and height of the element
* <code>FixedWidth</code>/<code>FixedHeight</code>: абсолютная ширина и высота элемента.
* <code>FixedPaddingX</code>/<code>FixedPaddingY</code>: The absolute inner padding of the element
* <code>FixedPaddingX</code>/<code>FixedPaddingY</code>: абсолютное внутреннее заполнение элемента.
* <code>FixedMarginX</code>/<code>FixedMarginY</code>: The absolute outer padding of the element
* <code>FixedMarginX</code>/<code>FixedMarginY</code>: абсолютное внешнее заполнение элемента
* <code>ParentBounds</code>: The parent boundaries, in which this element resides in
* <code>ParentBounds</code>: родительские границы, в которых находится этот элемент.
* <code>ChildBounds</code>: The child boundaries this element contains
* <code>ChildBounds</code>: дочерние границы, которые содержит этот элемент.
* <code>Alignment</code>: The alignment of the element. If set to <code>None</code> the FixedX/Y Position is used. For any other value the FixedX/Y values are ignored. For example when you used <code>RightTop</code> the element will always be at the right top most corner of its parent bounds. If you use <code>RightFixed</code> the element will be right aligned, but its Y-Position is determined by <code>FixedY</code>
* <code>Alignment</code>: Выравнивание элемента. Если установлено значение <code>None</code>, используется фиксированная позиция X/Y. Для любого другого значения значения FixedX/Y игнорируются. Например, когда вы использовали <code>RightTop</code>, элемент всегда будет находиться в правом верхнем углу своих родительских границ. Если вы используете <code>RightFixed</code>, элемент будет выровнен по правому краю, но его Y-позиция определяется <code>FixedY</code>
* <code>HorizontalSizing</code>/<code>VerticalSizing</code>: The sizing method to be used, can be either <code>Fixed</code> (default), <code>Percentual</code> or <code>FitToChildren</code>
* <code>HorizontalSizing</code>/<code>VerticalSizing</code>: используемый метод изменения размера может быть либо <code>Fixed</code> (по умолчанию), <code>Percentual</code>, либо <code>FitToChildren</code>


===GuiComposer===
===GuiComposer===


This is the component that builds and manages your GUI elements for you. You can create a composer via the client api: <code>capi.Gui.CreateCompo(dialogName, bounds)</code>. You have to supply it with a unique identifier and the overall dialog bounds. Once you have a GUIComposer instance you can chain-add elements. Here's a small example:
Это компонент, который создает и управляет вашими элементами графического интерфейса для вас. Вы можете создать композитор через клиентский API: <code>capi.Gui.CreateCompo(dialogName, bounds)</code>. Вы должны предоставить ему уникальный идентификатор и общие границы диалога. Когда у вас есть экземпляр GUIComposer, вы можете последовательно добавлять элементы. Вот небольшой пример:
<syntaxhighlight lang="c#">
<syntaxhighlight lang="c#">
private void SetupDialog()
private void SetupDialog()
Confirmedusers
13,514

edits