Confirmedusers
13,514
edits
Mirotworez (talk | contribs) (Created page with "В Vintage Story в настоящее время вам нужно сформулировать свои графические интерфейсы в коде, что тр...") |
Mirotworez (talk | contribs) (Created page with "Это компонент, который создает и управляет вашими элементами графического интерфейса для вас....") |
||
(13 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
'''Protip:''' | '''Protip:''' | ||
Используйте привязку клавиши отладки для «циклических режимов контура диалогового окна» при создании графического интерфейса. Он нарисует контуры вокруг границ вашего графического интерфейса, что значительно упростит понимание того, как ваш код переводится в визуальный графический интерфейс. | |||
== | == Начиная == | ||
Вы должны инкапсулировать каждый диалог GUI в свой собственный класс, хотя диалог может состоять из нескольких окон - например, диалоговое окно ванильного персонажа имеет два - одно для носимых игроков и одно для статистики игрока. Есть пара базовых классов, которые немного облегчат вам жизнь. | |||
=== | ===Графический интерфейс объекта блокировки=== | ||
Чтобы создать графический интерфейс, привязанный к блочному объекту, наследуйте от <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=== | ||
Чтобы создать элемент графического интерфейса, с которым нельзя взаимодействовать, наследуйте от <code>HudElement</code>. | |||
=== | ===Графический интерфейс общего назначения=== | ||
Для любого другого использования наследуйте от класса общего назначения <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]) | |||
== | == Основы графического интерфейса == | ||
В общем, вы можете создать свою собственную систему графического интерфейса, если хотите, просто переопределив <code>OnRenderGUI</code> и визуализируя все, что вам нравится. Также существует множество переопределяемых методов для обработки ввода с клавиатуры и мыши, см. также класс [https://github.com/anegostudios/vsapi/blob/master/Client/UI/Dialog/GuiDialog.cs GuiDialog] на Github. | |||
Если вы хотите использовать ванильную систему графического интерфейса, ее концепция представляет собой просто плоский или иерархический список элементов графического интерфейса, размещенных в определенных позициях. Позиция определяется экземпляром <code>ElementBounds</code>. Рассмотрим подробнее его свойства: | |||
=== | === Границы Элемента=== | ||
* <code>FixedX</code>/<code>FixedY</code>: | * <code>FixedX</code>/<code>FixedY</code>: абсолютное положение, в котором должен быть размещен элемент. | ||
* <code>FixedWidth</code>/<code>FixedHeight</code>: | * <code>FixedWidth</code>/<code>FixedHeight</code>: абсолютная ширина и высота элемента. | ||
* <code>FixedPaddingX</code>/<code>FixedPaddingY</code>: | * <code>FixedPaddingX</code>/<code>FixedPaddingY</code>: абсолютное внутреннее заполнение элемента. | ||
* <code>FixedMarginX</code>/<code>FixedMarginY</code>: | * <code>FixedMarginX</code>/<code>FixedMarginY</code>: абсолютное внешнее заполнение элемента | ||
* <code>ParentBounds</code>: | * <code>ParentBounds</code>: родительские границы, в которых находится этот элемент. | ||
* <code>ChildBounds</code>: | * <code>ChildBounds</code>: дочерние границы, которые содержит этот элемент. | ||
* <code>Alignment</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>: | * <code>HorizontalSizing</code>/<code>VerticalSizing</code>: используемый метод изменения размера может быть либо <code>Fixed</code> (по умолчанию), <code>Percentual</code>, либо <code>FitToChildren</code> | ||
===GuiComposer=== | ===GuiComposer=== | ||
Это компонент, который создает и управляет вашими элементами графического интерфейса для вас. Вы можете создать композитор через клиентский API: <code>capi.Gui.CreateCompo(dialogName, bounds)</code>. Вы должны предоставить ему уникальный идентификатор и общие границы диалога. Когда у вас есть экземпляр GUIComposer, вы можете последовательно добавлять элементы. Вот небольшой пример: | |||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
private void SetupDialog() | private void SetupDialog() |