Interface modding

本页面讲述的内容长期有效
Katty von Keksburg讨论 | 贡献2022年12月5日 (一) 15:55的版本 (文本替换 - 替换“[[Category:”为“[[分类:”)

在《钢铁雄心IV》中,界面是指玩家用来与游戏交互的用户界面。

概述

界面文件的组件可以分为两组:容器和元素。例如,containerWindowType 是一个容器,而 iconType 是一个元素。

界面文件使用 .gui 文件类型。 所有界面文件都可以在 /Hearts of Iron IV/interface/ 中找到。

当出现 internal 字样时,这个部分的源代码是只有P社可以修改的,即它所指的主题是不可修改的。

可以在界面文件中使用宏,以便更轻松地调整位置。

例如,这将使一个名为 WINDOW_X_POS 的宏,其值为 10。

@WINDOW_X_POS = 10

可以在元素中这样引用它:

containerWindowType = {
    name = "my_container"
    position = { x = @WINDOW_X_POS y = -600 }

    # ...
}

容器

容器用于将元素组合在一起,并将它们与内部函数相关联。

除非通过脚本化 GUI,否则无法添加新容器。这是因为容器的 name 属性在内部链接到容器所需的任何数据。常见的例外是,您可以在 countrytechtreeview.gui 中为自定义技术文件夹添加新容器。

容器定义的顺序和嵌套会影响它们的显示方式。

containerWindowType

最常见的容器类型,用于保存任何一组元素。

通常使用以下属性:

  • name - 容器的名称。
  • background - 容器的背景。
  • position - 容器的屏幕位置。
  • size - 容器的边界框。接受百分数( 如 100%% )。
  • moveable - 设置是否可以拖动容器。
  • fullscreen -设置是否将容器全屏化。
  • orientation - 设置 position 属性的方向原点。
  • clipping - 设置容器是否将修剪其他元素(如在边界处剪切其元素)。

以下属性用于动画容器:

  • show_position - 容器在显示模式下移动到的屏幕位置。
  • hide_position - 容器在隐藏模式下移动到的屏幕位置。
  • show_animation_type - 用于显示容器的动画类型(始终减速)
  • hide_animation_type - 用于隐藏容器的动画类型(始终加速)。
  • animation_time - 动画播放时间(始终为 300)。
  • upsound - 当容器移动到显示位置时要播放的声音。
  • downsound - 当容器移动到隐藏位置时要播放的声音。
  • fade_time - 淡入淡出的时间。
  • fade_type - 淡入的类型(始终为线性)。

以下属性很少或从不使用:

  • dontRender - 不渲染
  • horizontalBorder - 水平边界
  • verticalBorder - 垂直边界

scrollbarType

滚动条用于定义滚动条由哪些元素组成。

使用以下属性:

  • name - 滚动条名称。
  • slider - 用作滚动条滑块的按钮元素。
  • track - 用作滚动条跟踪器的按钮元素。
  • leftbutton - 用作滚动条左增量按钮的按钮元素。
  • rightbutton - 用作滚动条右增量按钮的按钮元素。
  • position - 滚动条的屏幕位置。
  • size - 滚动条的边界框。
  • priority - 滚动条相对于其他元素的优先级。
  • borderSize - 滚动条边框的边界框。
  • maxValue - 滚动条能移动的最大值(用于控制增量)。
  • minValue - 滚动条能移动的最小值(用于控制增量)。
  • stepSize - 使用增量按钮的单次增量大小。
  • startValue - 滚动条滑块的初始大小。
  • horizontal - 设置滚动条是水平 (1) 还是垂直 (0)。

Elements

容器中使用了多种元素类型。所有元素都必须在容器内使用,它们不会在容器之外工作。

元素将继承它们所在的容器的方向,除非为自己指定了方向。

以下元素可以自由添加,并可用于脚本化 GUI。

  • iconType - 用于静态图像。
  • instantTextBoxType - 用于文本。
  • buttonType - 用于按钮。

以下元素依赖于内部代码。您可以添加新元素,它们不会填充数据。

  • smoothListboxType - 用于平滑滚动列表。
  • listboxType - 用于滚动列表。
  • checkboxType - 用于复选框。
  • OverlappingElementsBoxType - 用于重叠元素。
  • editBoxType - 用于可编辑的文本框。
  • shieldtype - 用于显示国家/地区旗帜。

以下元素已过时:

  • guiButtonType - 与 buttonType 相同。
  • textBoxType -与 instantTextBoxType 相同。
  • eu3dialogtype - 与 windowType 相同。
  • shieldtype - 仅在 eu3dialogtype 中使用。 较新的文件中的标志使用不同的元素。

iconType

图标元素用于向界面添加图像。它的用法与 buttonType 重叠,但后者作为按钮运行。

使用以下属性:

  • name - 图标名称。
  • position - 图标的屏幕位置。
  • orientation - 设置位置属性的方向原点。
  • spriteType - 用于图标的图像。引用 spriteType 定义。
  • quadTextureSprite - 用于图标的图像。引用动态的 spriteType 定义(例如旗帜)或多帧的 spriteType 定义。
  • frame - 使用多帧图像时要用于图标的帧。
  • alwaystransparent - 强制图标透明,如点击只能一个元素后面的另一个元素。
  • hint_tag - 设置鼠标悬停在图标上方时用于显示提示的关键字。
  • pdx_tooltip - 设置要向玩家显示的提示。采用本地化关键字。
  • pdx_tooltip_delayed - 设置要向玩家延迟显示的提示。采用本地化关键字。
  • centerposition - 设置位置是否以图标的中心为原点。

instantTextBoxType

实例文本框元素用于向界面添加文本。在某些情况下,元素的文本是在内部生成的(如regiment_count)。在这些情况下,除非文本在本地化字符串中公开,否则无法对其进行编辑。

使用以下属性:

  • name - 文本框名称。
  • position - 文本框的屏幕位置。
  • orientation - 设置位置属性的方向原点。
  • text - 文本框显示的文本。
  • font - 用于文本的字体。
  • maxWidth - 显示文本的总宽度,以像素为单位。
  • maxHeight - 显示文本的总高度,以像素为单位。
  • format - 文本的对齐方式。
  • fixedsize - 文本框是否截断超出其边框的文本。
  • borderSize - 文本框边框的边界框。
  • alwaystransparent - 强制文本透明,如点击只能一个元素后面的另一个元素。
  • pdx_tooltip - 设置要向玩家显示的提示。采用本地化关键字。
  • pdx_tooltip_delayed - 设置要向玩家延迟显示的提示。采用本地化关键字。

以下属性很少或从不使用:

  • textureFile - 从不使用。

可用的 format 值:

  • left
  • centre
  • right

buttonType

按钮元素用于向界面添加按钮。按钮由图像和文本组成,因此它们的操作方式与 iconTypeinstantTextBoxType 类似。

使用以下属性:

  • name - 按钮名称。
  • position - 按钮名称。
  • orientation - 设置位置属性的方向原点。
  • spriteType - 用于按钮的图像。引用 spriteType 定义。
  • quadTextureSprite - 用于按钮的图像。引用动态的 spriteType 定义(如旗帜)或多帧的 spriteType 定义。
  • frame - 使用多帧图像时要用于按钮的帧。
  • alwaystransparent - 强制按钮透明,如点击只能一个元素后面的另一个元素。
  • buttonText - 按钮显示的文本。
  • buttonFont - 用于文本的字体。
  • shortcut - 为此按钮添加的快捷方式。
  • clicksound - 点击时要播放的声音。
  • oversound - 悬停时要播放的声音。
  • hint_tag - 设置鼠标悬停在按钮上方时用于显示提示的关键字。
  • pdx_tooltip - 设置要向玩家显示的提示。采用本地化关键字。
  • pdx_tooltip_delayed - 设置要向玩家延迟显示的提示。采用本地化关键字。
  • scale - 缩放按钮大小。

以下属性很少或从不使用:

  • tooltip - 从未使用过。
  • tooltipText - 从未使用过。
  • delayedTooltipText - 从未使用过。

smoothListboxType

平滑列表框元素用于定义列表框,该列表框是用条目填充的可滚动列表。 通常,这些元素在内部与另一个容器链接,来构成列表框中使用的实际条目。

使用以下属性:

  • name - 列表框名称。
  • position - 列表框的屏幕位置。
  • orientation - 设置位置属性的方向原点。
  • size - 列表框的边界框。
  • spacing - 列表框条目的间距。
  • horizontal - 列表框是水平 (1) 还是垂直 (0)。
  • scrollbartype - 用于列表框的滚动条。
  • bordersize - 列表框边框的边界框。
  • alwaystransparent - 强制列表框透明,如点击只能一个元素后面的另一个元素。

以下属性很少或从不使用:

  • background - 从不使用。

listboxType

列表框元素用于定义列表框,列表框是用条目填充的可滚动列表。通常,这些元素在内部与另一个容器链接,该容器构成列表框中使用的实际条目。

使用以下属性:

  • name - 列表框名称。
  • position - 列表框的屏幕位置。
  • orientation - 设置位置属性的方向原点。
  • size - 列表框的边界框。
  • spacing - 列表框条目的间距。
  • horizontal - 列表框是水平 (1) 还是垂直 (0)。
  • scrollbartype - 用于列表框的滚动条。
  • bordersize - 列表框边框的边界框。
  • alwaystransparent - 强制列表框透明,如点击只能一个元素后面的另一个元素。

以下属性很少或从不使用:

  • background - 从未使用过。

checkboxType

复选框元素用于向界面添加复选框。复选框的实际效果在内部( internal )定义。

使用以下属性:

  • name - 复选框名称。
  • position - 复选框的屏幕位置。
  • orientation - 设置位置属性的方向原点。
  • spriteType - 用于复选框的图像。引用 spriteType 定义。
  • quadTextureSprite - 用于复选框的图像。 引用动态的 spriteType 定义(例如旗帜)或多帧的 spriteType 定义。
  • frame - 使用多帧图像时要用于图标的帧。
  • alwaystransparent - 强制复选框透明,如点击只能一个元素后面的另一个元素。
  • buttonText - 复选框显示的文本。
  • buttonFont - 用于文本的字体。
  • shortcut - 要为此复选框添加的快捷方式。
  • clicksound - 点击时要使用的声音。
  • hint_tag - 设置鼠标悬停在复选框上方时用于显示提示的关键字。
  • pdx_tooltip - 设置要向玩家显示的提示。
  • pdx_tooltip_delayed - 设置要向玩家延迟显示的提示。
  • scale - 缩放复选框大小。

以下属性很少或从不使用:

  • tooltip - 从未使用过。
  • tooltipText - 从未使用过。
  • delayedTooltipText - 从未使用过。

editBoxType

编辑文本框元素用于将可编辑的文本框添加到界面。

使用以下属性:

  • name - 文本框名称。
  • position - 文本框的屏幕位置。
  • orientation - 设置位置属性的方向原点。
  • text - 文本框显示的文本。
  • font - 用于文本的字体。
  • maxWidth - 显示文本的总宽度,以像素为单位。
  • maxHeight - 显示文本的总高度,以像素为单位。
  • format - 文本的对齐方式。
  • fixedsize - 文本框是否截断超出其边框的文本。
  • borderSize - 文本框边框的边界框。
  • alwaystransparent - 强制文本框透明,如点击只能一个元素后面的另一个元素。
  • ignore_tab_navigation - 使元素忽略选项卡导航。

可用的 format 值:

  • left
  • centre
  • right

OverlappingElementsBoxType

重叠元素框元素用于定义一种特殊类型的列表框,该列表框在其内部动态重叠子元素。

使用以下属性:

  • name - 列表框名称。
  • position - 列表框的屏幕位置。
  • orientation - 设置位置属性的方向原点。
  • size - 列表框的边界框。
  • spacing - 列表框条目的间距。
  • horizontal - 列表框是水平 (1) 还是垂直 (0)。
  • bordersize - 列表框边框的边界框。
  • alwaystransparent - 强制列表框透明,如点击只能一个元素后面的另一个元素。

以下属性很少或从不使用:

  • textureFile - 从不使用。

位置与方向原点

了解位置坐标如何工作对于正确编辑界面非常重要。

元素(或容器)使用的 orientation 属性会通知您元素的锚点所在位置。例如,UPPER_LEFT 表示位于屏幕的左上角的 (0, 0) 位置,而 LOWER_RIGHT 是右下角。

然后,position 属性从此锚点位置工作。因此,如果您希望元素位于屏幕的另一侧,则需要先更改 orientation

使用这个系统是因为它允许界面适应不同的分辨率。因为所有的位置都与一个特定的原点相联系,这个原点是根据玩家的屏幕分辨率动态计算的,所以容器和元素的位置保持稳定。

所以,如果你想确保你的界面编辑是稳定的,你必须正确使用 orientation 属性。

一个错误的做法是只编辑 position , 例如 position = { x = 1800 y = 200 }。这在拥有1800以上像素的显示器(如1900 x 1200 以上)中能正常工作,但在更小的显示器上就看不到了。

可用的 orientation 值 (大小写不敏感):

  • CENTER
  • UPPER_LEFT
  • LOWER_LEFT
  • UPPER_RIGHT
  • LOWER_RIGHT

字体

参考: Font Modding

在《钢铁雄心IV》中可用的字体如下:

  • Arial12
  • Arial12_bold
  • cg_16b
  • cg_18b
  • garamond_12
  • garamond_14
  • garamond_14_bold
  • garamond_16
  • garamond_16_bold
  • garamond_24
  • hoi_16mbs
  • hoi_16tooltip3
  • hoi_16typewriter
  • hoi_18
  • hoi_18b
  • hoi_18mbs
  • hoi_20b
  • hoi_20bs
  • hoi_22tech
  • hoi_22typewriter
  • hoi_24header
  • hoi_26mbs
  • hoi_30header
  • hoi_33
  • hoi_36header
  • hoi4_typewriter16
  • hoi4_typewriter22
  • hoi_mapfont4
  • hoi_arrow_font
  • newsfeed_body
  • newsfeed_title
  • standard
  • standard_18
  • standard_22
  • tahoma_20_bold
  • vic_18
  • vic_18_grey
  • vic_18s
  • vic_22
  • vic_22_bl
  • vic_22s
  • vic_36
  • vic_36s