1
0
mirror of https://github.com/Mojang/bedrock-samples.git synced 2024-11-23 12:26:14 +00:00
bedrock-samples/resource_pack/ui/npc_interact_screen.json
Mike Ammerlaan c989e80c35 v1.21.0.3
2024-06-13 09:45:16 -07:00

1538 lines
46 KiB
JSON

/********************************************************
+* (c) Mojang. All rights reserved *
+* (c) Microsoft. All rights reserved. *
+*********************************************************/
{
"namespace": "npc_interact",
//---------------------------------------------------------------------------
// Common
//---------------------------------------------------------------------------
"multiline_text_edit_control@common.multiline_text_edit_box": {
"anchor_from": "center",
"anchor_to": "center",
"$place_holder_text": "npcscreen.addtext",
"property_bag": {
"#property_field": "#item_name"
}
},
"text_edit_control@common.text_edit_box": {
"anchor_from": "top_left",
"anchor_to": "top_left",
"property_bag": {
"#property_field": "#item_name"
}
},
"label_padding@common.empty_panel": {
"size": [ "100%", 1 ]
},
// Stack panel under title bar that fills the frame
"main_stack_panel": {
"type": "stack_panel",
"orientation": "vertical",
"layer": 1,
"anchor_from": "top_middle",
"anchor_to": "top_middle",
"size": [ "100% - 8px", "100%c" ]
},
//---------------------------------------------------------------------------
// Skin picker
//---------------------------------------------------------------------------
"skin_button": {
"type": "button",
"$focus_id|default": "",
"$focus_override_down|default": "",
"$focus_override_up|default": "",
"$focus_override_left|default": "",
"$focus_override_right|default": "",
"focus_identifier": "$focus_id",
"focus_change_down": "$focus_override_down",
"focus_change_up": "$focus_override_up",
"focus_change_left": "$focus_override_left",
"focus_change_right": "$focus_override_right",
"focus_enabled": true,
"bindings": [
{
"binding_type": "collection_details",
"binding_collection_name": "skins_collection",
"binding_collection_prefix": "skins"
}
],
"button_mappings": [
{
"from_button_id": "button.menu_select",
"to_button_id": "button.view_skin",
"mapping_type": "pressed"
},
{
"from_button_id": "button.menu_ok",
"to_button_id": "button.view_skin",
"mapping_type": "focused"
},
{
"to_button_id": "button.skin_unhovered",
"mapping_type": "pressed"
},
{
"to_button_id": "button.skin_hovered",
"mapping_type": "pressed"
}
]
},
"skin_model": {
"type": "custom",
"renderer": "actor_portrait_renderer",
"layer": 5,
"anchor_from": "bottom_middle",
"anchor_to": "bottom_middle",
"size": [ "100%", "100%" ],
"offset": [ 0, -10 ],
"enable_scissor_test": true,
"animation_reset_name": "screen_animation_reset",
"anims": [
"@common.screen_exit_size_animation_push",
"@common.screen_exit_size_animation_pop",
"@common.screen_entrance_size_animation_push",
"@common.screen_entrance_size_animation_pop"
],
"bindings": [
{
"binding_type": "collection",
"binding_collection_name": "skins_collection",
"binding_name": "#skin_index"
}
]
},
"skin_model_clipper": {
"type": "panel",
"anchor_from": "top_left",
"anchor_to": "top_left",
"size": [ "100%", "100% - 1px" ],
"clips_children": true
},
"skins_grid_item": {
"type": "panel",
"anchor_from": "bottom_left",
"anchor_to": "bottom_left",
"size": [ "default", "100%" ],
"controls": [
{
"clip@npc_interact.skin_model_clipper": {
"controls": [
{
"model@npc_interact.skin_model": {}
}
]
}
},
{ "button@npc_interact.skin_button": {} },
{
// Frame that appears around this item if it is the selected one
"selectFrame@common.focus_border_white": {
"size": [ "100% - 1px", "100% - 2px" ],
"bindings": [
{
"binding_type": "collection",
"binding_name": "#skin_visible",
"binding_name_override": "#visible",
"binding_collection_name": "skins_collection"
}
]
}
}
]
},
"skins_grid": {
"type": "grid",
"anchor_from": "bottom_middle",
"anchor_to": "bottom_middle",
"offset": [ 0, 0 ],
"size": [ 160, 65 ],
"grid_item_template": "npc_interact.skins_grid_item",
"grid_dimension_binding": "#skins_grid_dimensions",
"collection_name": "skins_collection",
"bindings": [
{
"binding_name": "#skins_grid_dimensions"
}
]
},
"cycle_pack_button@common_buttons.light_glyph_button": {
"$button_content": "skin_picker.chevron_image"
},
"cycle_pack_left_button@npc_interact.cycle_pack_button": {
"anchor_from": "bottom_left",
"anchor_to": "bottom_left",
"$chevron_image_name": "textures/ui/chevron_left",
"$pressed_button_name": "button.cycle_pack_left"
},
"cycle_pack_right_button@npc_interact.cycle_pack_button": {
"anchor_from": "bottom_right",
"anchor_to": "bottom_right",
"$chevron_image_name": "textures/ui/chevron_right",
"$pressed_button_name": "button.cycle_pack_right"
},
"banner_fill": {
"type": "image",
"texture": "textures/ui/Banners"
},
"skin_picker@npc_interact.banner_fill": {
"anchor_from": "bottom_middle",
"anchor_to": "bottom_middle",
"size": [ "100%", 65 ],
"offset": [ -1, -10 ],
"layer": 5,
"controls": [
{
"left@npc_interact.cycle_pack_left_button": {
"size": [ 30, "100%" ],
"bindings": [
{
"binding_name": "#cycle_pack_left_button_visible",
"binding_name_override": "#visible"
}
]
}
},
{
"sg@npc_interact.skins_grid": {
}
},
{
"right@npc_interact.cycle_pack_right_button": {
"size": [ 30, "100%" ],
"bindings": [
{
"binding_name": "#cycle_pack_left_button_visible",
"binding_name_override": "#visible"
}
]
}
}
]
},
//---------------------------------------------------------------------------
// Basic Panel
//---------------------------------------------------------------------------
"name_edit@npc_interact.text_edit_control": {
"max_length": 128,
"size": [ "100%", 14 ],
"$wrap": false,
"$text_edit_box_content_binding_name": "#name_text",
"$text_box_name": "#name_text_box",
"$text_edit_box_binding_condition": "once"
},
"advanced_button": {
// This button is small, and we want it to be centered, so wrap in in a panel and center relative to that
"type": "panel",
"size": [ "100%", "100%c" ],
"controls": [
{
"button@common_buttons.light_text_form_fitting_button": {
"$pressed_button_name": "button.advanced_settings",
"$button_text": "npcscreen.advancedsettings",
"layer": 2,
"anchor_from": "top_middle",
"anchor_to": "top_middle",
"offset": [ 0, 2 ]
}
}
]
},
"dialog_button": {
"type": "panel",
"size": [ "100%", "100%c" ],
"controls": [
{
"button@common_buttons.light_text_form_fitting_button": {
"$pressed_button_name": "button.dialog_button",
"$button_text": "npcscreen.editdialog",
"layer": 2,
"anchor_from": "top_middle",
"anchor_to": "top_middle",
"offset": [ 0, 1 ]
}
}
]
},
"basic_stack_panel@npc_interact.main_stack_panel": {
"controls": [
{ "top_pad@common.empty_panel": { "size": [ "100%", 4 ] } },
{
"name_label@edu_common.light_label": {
"text": "npcscreen.name"
}
},
{ "name_padding@npc_interact.label_padding": {} },
{ "name_edit@npc_interact.name_edit": {} },
{ "dialog_pre_padding@npc_interact.label_padding": {} },
{
"dialog_label@edu_common.light_label": {
"text": "npcscreen.dialog"
}
},
{ "dialog_post_padding@npc_interact.label_padding": {} },
{ "dialog__padding@npc_interact.label_padding": {} },
{ "dialog_button@npc_interact.dialog_button": {} },
{ "appearance_pre_padding@npc_interact.label_padding": {} },
{
"appearance_label@edu_common.light_label": {
"text": "npcscreen.appearance"
}
},
{ "appearance_post_padding@npc_interact.label_padding": {} },
{ "skins@npc_interact.skin_picker": {} },
{ "advanced_button@npc_interact.advanced_button": {} }
]
},
"basic_content": {
// Arbitrary type, just want to group all basic controls together
"type": "panel",
"controls": [
{ "basic@npc_interact.basic_stack_panel": {} }
],
"bindings": [
{
"binding_name": "#basic_visible",
"binding_name_override": "#visible",
"binding_type": "global"
}
]
},
//---------------------------------------------------------------------------
// Advanced Panel
//---------------------------------------------------------------------------
"advanced_stack_panel@npc_interact.main_stack_panel": {
"controls": [
{ "top_pad@common.empty_panel": { "size": [ "100%", 4 ] } },
{ "add_help_text@npc_interact.add_help_text": {} },
{ "middle_pad@common.empty_panel": { "size": [ "100%", 12 ] } },
{ "actions@npc_interact.action_panel": {} },
{ "add_buttons@npc_interact.add_buttons": {} },
{ "bottom_pad@common.empty_panel": { "size": [ "100%", 4 ] } }
]
},
"action_title@edu_common.dark_label": {
"anchor_from": "top_left",
"anchor_to": "top_left"
},
"plus_icon": {
"type": "image",
"size": [ 15, 15 ],
"layer": 2,
"texture": "textures/ui/plus"
},
"plus_button@common_buttons.light_glyph_button": {
"size": [ 30, 30 ],
"layer": 1,
"$button_content": "npc_interact.plus_icon",
"$pressed_button_name": "button.expand_action_edit",
"bindings": [
{
"binding_type": "collection_details",
"binding_collection_name": "actions_collection",
"binding_collection_prefix": "actions"
}
]
},
"action_text_edit@npc_interact.multiline_text_edit_control": {
"size": [ 252, 50 ],
"max_length": 1024,
"anchor_from": "top_left",
"anchor_to": "top_left",
"$text_edit_box_content_binding_type": "collection",
"$text_edit_box_grid_collection_name": "actions_collection",
"$text_edit_box_content_binding_name": "#action_text",
"$text_box_name": "action_text_box",
"$text_edit_box_binding_condition": "visible",
"enabled_newline": true,
"bindings": [
{
"binding_type": "collection",
"binding_name": "#command_identifier",
"binding_name_override": "#focus_identifier",
"binding_collection_name": "actions_collection",
"binding_condition": "once"
},
{
"binding_type": "collection",
"binding_name": "#add_command_focus_override_up",
"binding_name_override": "#focus_change_up",
"binding_collection_name": "actions_collection"
},
{
"binding_type": "collection",
"binding_name": "#command_focus_override_down",
"binding_name_override": "#focus_change_down",
"binding_collection_name": "actions_collection"
}
]
},
"maximized_action_edit@npc_interact.multiline_text_edit_control": {
"size": [ "100%", "100%" ],
"$text_edit_box_content_binding_name": "#maximized_action_text",
"$text_box_name": "maximized_action_edit_box",
"$text_edit_box_binding_condition": "visible",
"$place_holder_text": "#maximized_placeholder_text",
"max_length": 1024,
"enabled_newline": true,
"bindings": [
{
"binding_name": "#maximized_edit_visible",
"binding_name_override": "#visible"
},
{
"binding_name": "#maximized_placeholder_text"
}
]
},
"action_edit": {
"type": "stack_panel",
"orientation": "horizontal",
"size": [ "100%", "50px" ],
"controls": [
{
"text_edit@npc_interact.action_text_edit": {
"$place_holder_text": "$action_edit_placeholder"
}
},
{
"expand@npc_interact.plus_button": {
"size": [ 30, 50 ]
}
}
]
},
"button_name_edit@npc_interact.text_edit_control": {
"max_length": 128,
"size": [ "100%", 14 ],
"$wrap": false,
"$text_edit_box_content_binding_type": "collection",
"$text_edit_box_grid_collection_name": "actions_collection",
"$text_edit_box_content_binding_name": "#button_name_text",
"$text_box_name": "button_name_edit",
"$text_edit_box_binding_condition": "once",
// Shouldn't be needed, but for some reason this control doesn't pad the label properly
"$text_edit_box_label_anchor_point": "left_middle",
"bindings": [
{
"binding_type": "collection",
"binding_name": "#button_name_edit_visible",
"binding_name_override": "#visible",
"binding_collection_name": "actions_collection"
},
{
"binding_type": "collection",
"binding_name": "#button_name_identifier",
"binding_name_override": "#focus_identifier",
"binding_collection_name": "actions_collection",
"binding_condition": "once"
},
{
"binding_type": "collection",
"binding_name": "#button_name_focus_override_up",
"binding_name_override": "#focus_change_up",
"binding_collection_name": "actions_collection",
"binding_condition": "once"
}
]
},
"command_toggle@edu_common.slider_toggle": {
"$toggle_grid_collection_name": "actions_collection",
"$toggle_binding_type": "collection",
"bindings": [
{
"binding_type": "collection_details",
"binding_collection_name": "actions_collection",
"binding_collection_prefix": "actions"
},
{
"binding_type": "$toggle_binding_type",
"binding_condition": "$toggle_binding_condition",
"binding_collection_name": "$toggle_grid_collection_name",
"binding_name": "$toggle_state_binding_name",
"binding_name_override": "#toggle_state"
},
{
"binding_type": "$toggle_enabled_binding_type",
"binding_condition": "$toggle_enabled_binding_condition",
"binding_collection_name": "$toggle_grid_collection_name",
"binding_name": "$toggle_enabled_binding_name",
"binding_name_override": "#enabled"
},
{
"binding_type": "collection",
"binding_name": "#button_mode_identifier",
"binding_name_override": "#focus_identifier",
"binding_collection_name": "actions_collection",
"binding_condition": "once"
},
{
"binding_type": "collection",
"binding_name": "#button_mode_focus_override_up",
"binding_name_override": "#focus_change_up",
"binding_collection_name": "actions_collection",
"binding_condition": "once"
}
]
},
"command_toggle_panel@common.empty_panel": {
"size": [ "30% + 10px", "100%" ],
"controls": [
{
"command_toggle@npc_interact.command_toggle": {
"anchor_from": "left_middle",
"anchor_to": "left_middle",
"$toggle_name": "$toggle_name",
"$toggle_state_binding_name": "$toggle_state_binding_name"
}
},
{
// Can't use $option_label because the text has to be dark
"toggle_label@edu_common.dark_label": {
"anchor_from": "left_middle",
"anchor_to": "left_middle",
"max_size": [ "70%", "100%" ],
"text": "$toggle_label_text",
"offset": [ 32, 0 ]
}
}
]
},
"action_mode": {
"type": "stack_panel",
"orientation": "horizontal",
"size": [ "100%", 25 ],
"controls": [
{
"button_mode_toggle_panel@npc_interact.command_toggle_panel": {
"$toggle_name": "button_mode_toggle",
"$toggle_state_binding_name": "#button_mode_enabled",
"$toggle_label_text": "npcscreen.action.buttonmode"
}
},
{
"on_enter_toggle_panel@npc_interact.command_toggle_panel": {
"$toggle_name": "on_enter_toggle",
"$toggle_state_binding_name": "#on_enter_enabled",
"$toggle_label_text": "npcscreen.action.onEnter"
}
},
{
"on_exit_toggle_panel@npc_interact.command_toggle_panel": {
"$toggle_name": "on_exit_toggle",
"$toggle_state_binding_name": "#on_exit_enabled",
"$toggle_label_text": "npcscreen.action.onExit"
}
}
],
"bindings": [
{
// Actions on close are not allowed for url actions, so hide this toggle in that case
"binding_type": "collection",
"binding_name": "(not #is_url_action)",
"binding_name_override": "#visible",
"binding_collection_name": "actions_collection"
}
]
},
"button_name_label@edu_common.dark_label": {
"text": "npcscreen.action.buttonname",
"bindings": [
{
// Actions on close are not allowed for url actions, so show this label instead
"binding_type": "collection",
"binding_name": "#is_url_action",
"binding_name_override": "#visible",
"binding_collection_name": "actions_collection"
}
]
},
"url_notifications": {
"type": "stack_panel",
"orientation": "vertical",
"size": ["100%", "100%c"],
"controls": [
{
"empty_uri_warning@edu_common.inline_notification": {
"$state": "warning",
"$warning_text": "npcscreen.action.url.warning.emptyUri",
"bindings": [
{
"binding_name": "(#action_error_status = 'EmptyUri')",
"binding_name_override": "#visible",
"binding_type": "collection",
"binding_collection_name": "actions_collection"
}
]
}
},
{
"invalid_uri_warning@edu_common.inline_notification": {
"$state": "warning",
"$warning_text": "npcscreen.action.url.warning.invalidUri",
"bindings": [
{
"binding_name": "(#action_error_status = 'InvalidUri')",
"binding_name_override": "#visible",
"binding_type": "collection",
"binding_collection_name": "actions_collection"
}
]
}
}
]
},
"action_template@npc_interact.main_stack_panel": {
"size": [ "100% - 12px", "100%c" ],
"offset": [ 0, 5 ],
"controls": [
{
"title@npc_interact.action_title": {
"text": "$action_title"
}
},
{ "label_pad@common.empty_panel": { "size": [ "100%", 2 ] } },
{ "edit@npc_interact.action_edit": {} },
{ "edit_pad@common.empty_panel": { "size": [ "100%", 1 ] } },
{ "url_warning@npc_interact.url_notifications": {} },
{ "url_pad@common.empty_panel": { "size": [ "100%", 3 ] } },
{ "action_mode@npc_interact.action_mode": {} },
{ "mode_pad@common.empty_panel": { "size": [ "100%", 3 ] } },
{ "button_name_label@npc_interact.button_name_label": {} },
{ "button_name@npc_interact.button_name_edit": {} }
]
},
"action_command@npc_interact.action_template": {
"$action_title": "npcscreen.action.command.title",
"$action_edit_placeholder": "npcscreen.action.command.placeholder",
"bindings": [
{
// All action types are in the control, but only one is visible through bindings
"binding_type": "collection",
"binding_name": "#is_command_action",
"binding_name_override": "#visible",
"binding_collection_name": "actions_collection"
},
{
"binding_name": "#commands_enabled",
"binding_name_override": "#enabled"
}
]
},
"action_url@npc_interact.action_template": {
"$action_title": "npcscreen.action.url.title",
"$action_edit_placeholder": "npcscreen.action.url.placeholder",
"bindings": [
{
// All action types are in the control, but only one is visible through bindings
"binding_type": "collection",
"binding_name": "#is_url_action",
"binding_name_override": "#visible",
"binding_collection_name": "actions_collection"
}
]
},
"padded_action": {
"type": "stack_panel",
"size": [ "100%", "100%c" ],
"orientation": "vertical",
"controls": [
{ "action@npc_interact.action": {} },
{
"padding": {
"type": "panel",
"size": [ "100%", 10 ]
}
}
]
},
"action": {
"type": "image",
"texture": "textures/ui/dialog_background_opaque",
"size": [ "100%", "100%c" ],
"controls": [
{
"trash@edu_common.photo_trash_button": {
"anchor_from": "top_right",
"anchor_to": "top_right",
"offset": [ -4, 4 ],
"button_mappings": [
{
"from_button_id": "button.menu_select",
"to_button_id": "button.delete_action",
"mapping_type": "pressed"
},
{
"from_button_id": "button.menu_ok",
"to_button_id": "button.delete_action",
"mapping_type": "pressed"
}
],
"bindings": [
{
"binding_type": "collection_details",
"binding_collection_name": "actions_collection",
"binding_collection_prefix": "actions"
}
]
}
},
{ "command@npc_interact.action_command": {} },
{ "url@npc_interact.action_url": {} }
]
},
// Collection of "actions", meaning url or command buttons
"action_panel": {
"type": "stack_panel",
"anchor_from": "top_left",
"anchor_to": "top_left",
"size": [ "100%", "100%c" ],
"factory": {
"name": "action_item_factory",
"control_name": "npc_interact.padded_action"
},
"collection_name": "actions_collection",
"bindings": [
{
"binding_name": "#action_count",
"binding_name_override": "#collection_length"
}
]
},
"add_button@common_buttons.light_text_button": {
"$pressed_button_name": "button.add_url",
"$button_text": "npcscreen.addurl",
"size": [ "fill", 20 ]
},
"help_label@edu_common.light_label": {
"size": "$label_size",
"variables": [
{
"requires": "$education_edition",
"$label_size": [ 139, "default" ]
},
{
"requires": "(not $education_edition)",
"$label_size": [ "default", "default" ]
}
]
},
// Help text that is visible when no actions have been added
"add_help_section": {
"type": "stack_panel",
"orientation": "horizontal",
"size": [ "100%", "100%cm" ],
"controls": [
{
"text_url": {
"type": "panel",
"size": [ "100%cm", "100%cm" ],
"ignored": "(not $education_edition)",
"controls": [
{
"tts_border@common.non_interact_focus_border_button": {
"tts_inherit_siblings": true,
"size": [ "100%sm + 5px", "100%sm + 5px" ],
"bindings": [
{
"binding_name": "#tts_enabled",
"binding_name_override": "#enabled"
}
]
}
},
{
"wrapper_panel_url": {
"type": "stack_panel",
"orientation": "vertical",
"size": [ "100%cm", "100%c" ],
"controls": [
{
"text_url_a@npc_interact.help_label": {
"text": "$text_url_a"
}
},
{
"padding@common.empty_panel": {
"size": [ "100%sm", 12 ]
}
},
{
"text_url_b@npc_interact.help_label": {
"text": "$text_url_b"
}
}
]
}
}
]
}
},
{
"padding@common.empty_panel": {
"size": [ 23, 12 ],
"ignored": "(not $education_edition)"
}
},
{
"text_command": {
"type": "panel",
"size": [ "fill", "100%cm" ],
"controls": [
{
"tts_border@common.non_interact_focus_border_button": {
"tts_inherit_siblings": true,
"size": [ "100%sm + 5px", "100%sm + 5px" ],
"bindings": [
{
"binding_name": "#tts_enabled",
"binding_name_override": "#enabled"
}
]
}
},
{
"wrapper_panel_command": {
"type": "stack_panel",
"orientation": "vertical",
"size": [ "100%cm", "100%c" ],
"controls": [
{
"text_command_a@npc_interact.help_label": {
"text": "$text_command_a"
}
},
{
"padding@common.empty_panel": {
"size": [ "100%sm", 12 ]
}
},
{
"text_command_b@npc_interact.help_label": {
"text": "$text_command_b"
}
}
]
}
}
]
}
}
],
"bindings": [
{
"binding_name": "#help_visible",
"binding_name_override": "#visible"
}
]
},
"add_help_text@npc_interact.add_help_section": {
"$text_url_a": "npcscreen.help.url.a",
"$text_url_b": "npcscreen.help.url.b",
"$text_command_a": "npcscreen.help.command.a",
"$text_command_b": "npcscreen.help.command.b"
},
"add_buttons": {
"type": "stack_panel",
"orientation": "horizontal",
"size": [ "100%", "100%cm" ],
"controls": [
{
"add_url@npc_interact.add_button": {
"$pressed_button_name": "button.add_url",
"$button_text": "npcscreen.addurl",
"ignored": "(not $education_edition)",
"bindings": [
{
"binding_name": "#commands_enabled",
"binding_name_override": "#enabled"
},
{
"binding_name": "#add_command_focus_override_up",
"binding_name_override": "#focus_change_up"
}
]
}
},
{
"padding@common.empty_panel": {
"size": [ 23, "100%sm" ],
"ignored": "(not $education_edition)"
}
},
{
"add_command@npc_interact.add_button": {
"$pressed_button_name": "button.add_command",
"$button_text": "npcscreen.addcommand",
"bindings": [
{
"binding_name": "#commands_enabled",
"binding_name_override": "#enabled"
},
{
"binding_name": "#add_command_focus_override_up",
"binding_name_override": "#focus_change_up"
}
]
}
}
],
"bindings": [
{
"binding_name": "#add_buttons_enabled",
"binding_name_override": "#enabled"
}
]
},
"advanced_scrolling_panel@common.scrolling_panel": {
"$show_background": false,
"size": [ "100%", "100%" ],
"$scroll_size": [ 5, "100% - 8px" ],
"$scroll_bar_left_padding_size": [ 0, 0 ],
"$scroll_bar_right_padding_size": [ 4, 0 ],
"$scrolling_content": "npc_interact.advanced_scrolling_content"
},
"advanced_scrolling_content": {
// Arbitrary type, just want to group all advanced controls together
"type": "panel",
"size": [ "100%", "100%c" ],
"controls": [
{ "advanced@npc_interact.advanced_stack_panel": {} }
],
"bindings": [
{
"binding_name": "#advanced_visible",
"binding_name_override": "#visible",
"binding_type": "global"
}
]
},
//---------------------------------------------------------------------------
// Student Panel
//---------------------------------------------------------------------------
"message_model": {
"type": "panel",
// This window has a zoomed in top portion of the paper doll, so offset down and oversize a bit to zoom in
// Do this on a parent element since the async ui transition grabs parent size
"size": [ "100%", "150%" ],
"controls": [
{
"model@npc_interact.skin_model": {
"offset": [ 0, 0 ],
"bindings": [
{
"binding_type": "global",
// Binding itself doesn't do anything, but the callback is used to fill the property bag
"binding_name": "#student_model_update"
}
]
}
}
]
},
"clipped_message_model@npc_interact.skin_model_clipper": {
"controls": [
{ "model@npc_interact.message_model": {} }
]
},
"message_model_window@npc_interact.banner_fill": {
"anchor_from": "left_middle",
"anchor_to": "left_middle",
// Take up the rest of the space that the text doesn't take, with a gap
"size": [ "100% - 222px - 2px", "100%" ],
"controls": [
{ "model@npc_interact.clipped_message_model": {} },
{
"immersive_reader_button@im_reader.reader_button": {
"anchor_from": "bottom_right",
"anchor_to": "bottom_right",
"offset": [ -2, -2 ],
"size": [ 18, 18 ],
"$button_tts_name|default": "key.immersivereader",
"layer": 5,
"ignored": "($is_worldbuilder or not $education_edition)",
"bindings": [
{
"binding_name": "#im_reader_button_visible",
"binding_name_override": "#visible"
}
]
}
}
]
},
"edit_box_background@common.empty_panel": {},
"npc_message@npc_interact.multiline_text_edit_control": {
"$enabled": true,
"size": [ "100%", "100%cm" ],
"enabled": "$enabled",
"anchor_from": "top_left",
"anchor_to": "top_left",
"$text_background_default": "npc_interact.edit_box_background",
"$text_background_hover": "npc_interact.edit_box_background",
"$text_box_text_color": "$npc_dialog_text_color",
"$text_box_name": "student_message_bubble",
"$text_edit_box_content_binding_name": "#dialogtext",
"$color": "$npc_dialog_text_color",
"$disabled_alpha": 1,
"max_length": 1000,
"constrain_to_rect": false,
"$text_edit_box_placeholder_content_binding_name": "#placeholder_dialog_text",
"$text_alpha": 1,
"$locked_text_alpha": "$disabled_alpha",
"$locked_color": "$color",
"variables": [
{
// Clear placeholder text for non-worldbuilders so they don't see "add text here" when they don't have permission to add text
"requires": "(not $is_worldbuilder)",
"$place_holder_text": "",
"$enabled": false
}
],
// Clear enabled binding, we're using a variable
"bindings": [
],
"locked_control": "background",
"default_control": "background",
"hover_control": "background",
"pressed_control": "background",
"text_control": "label",
"place_holder_control": "place_holder",
"controls": [
{
"label@common.text_edit_box_label": {
"layer": 1,
"size": [ "100%", "default" ],
"anchor_from": "top_left",
"anchor_to": "top_left"
}
},
{
"visibility_panel": {
"type": "panel",
"size": [ "100%", "100%c" ],
"anchor_from": "top_left",
"anchor_to": "top_left",
"controls": [
{
"place_holder@common.text_edit_box_place_holder_label": {
"layer": 1,
"size": [ "100%", "default" ],
"anchor_from": "top_left",
"anchor_to": "top_left"
}
}
],
"bindings": [
{
"binding_type": "view",
"source_control_name": "label",
"source_property_name": "(#item_name = '')",
"target_property_name": "#visible",
"resolve_sibling_scope": true
}
]
}
},
{ "background@common.empty_panel": { "size": [ "100%", "100%sm" ] } }
]
},
"text_scroll@common.scrolling_panel": {
"size": [ "100% - 10px", "100% - 11px" ],
"$always_handle_scrolling": true,
"$jump_to_bottom_on_update": false,
"$scrolling_content": "npc_interact.npc_message",
"$scroll_box_visible_touch": false,
"$show_background": false,
"$scroll_bar_left_padding_size": [ 0, 0 ],
"$scroll_bar_right_padding_size": [ 0, 0 ],
"$scroll_size": [ 5, "100%" ],
"$scroll_size_touch": "$scroll_size",
"offset": [ 0, -1 ],
"variables": [
{
// Always jump to the bottom when it's in worldbuilder
"requires": "($is_worldbuilder)",
"$jump_to_bottom_on_update": true
}
]
},
"student_message_bubble": {
"type": "image",
"texture": "textures/ui/dialog_bubble",
"anchor_from": "right_middle",
"anchor_to": "right_middle",
"size": [ 222, "100%" ],
"controls": [
{
"dialog_panel": {
"type": "panel",
"size": [ "100%", "100%" ],
"$virtual_keyboard_buffer_control": "text_scroll",
"controls": [
{ "text_scroll@npc_interact.text_scroll": {} }
]
}
}
]
},
// Point on the speach bubble, positioned right at the edge of the bubble pointing into the paper doll window
"bubble_point": {
"type": "image",
"texture": "textures/ui/dialog_bubble_point",
"size": [ 16, 18 ],
"layer": 6,
"anchor_from": "right_middle",
"anchor_to": "right_middle",
// Offset to be on just to the left of the text
"offset": [ "-222px + 1px", 0 ]
},
"student_message_section@common.empty_panel": {
"size": [ "100%", 97 ],
"anchor_from": "center",
"anchor_to": "center",
"controls": [
{
"model@npc_interact.message_model_window": {}
},
{
"point@npc_interact.bubble_point": {}
},
{
"message@npc_interact.student_message_bubble": {}
}
]
},
"student_button_label": {
"type": "label",
"color": "$text_color",
"text": "#student_button_text",
"bindings": [
{
"binding_name": "#student_button_text",
"binding_type": "collection",
"binding_collection_name": "student_buttons_collection"
},
{
"binding_name": "$visible_binding",
"binding_type": "collection",
"binding_name_override": "#visible",
"binding_collection_name": "student_buttons_collection"
}
]
},
"student_button_label_panel": {
"type": "panel",
"size": [ "100%", "100%" ],
"controls": [
{
"url@npc_interact.student_button_label": {
"variables": [
{
"requires": "$default_state",
"$text_color": "$npc_url_text_color"
}
],
"$visible_binding": "#is_url_button"
}
},
{
"command@npc_interact.student_button_label": {
"$visible_binding": "#is_command_button"
}
}
]
},
// Wrap in panel so we can make the buttons a bit smaller for padding
"student_button@common.empty_panel": {
// Grid has 3 columns, so 1/3 size
"size": [ "33.3333%", 20 ],
"controls": [
{
"button@common_buttons.light_text_button": {
"$button_type_panel": "npc_interact.student_button_label_panel",
"$pressed_button_name": "button.student_button",
"layer": 4,
"size": [ "100% - 2px", "100% - 2px" ],
"bindings": [
{
"binding_type": "collection_details",
"binding_collection_name": "student_buttons_collection",
"binding_collection_prefix": "student_buttons"
}
]
}
}
],
"bindings": [
{
"binding_name": "#student_button_visible",
"binding_type": "collection",
"binding_name_override": "#visible",
"binding_collection_name": "student_buttons_collection"
}
]
},
"student_buttons@common.empty_panel": {
"size": [ "100%", "100%c" ],
"controls": [
{
"buttons": {
"type": "stack_panel",
"orientation": "horizontal",
// A bit bigger than 100% so edges line up with other ui, as the buttons are -2px smaller for padding
"size": [ "100% + 2px", "100%cm" ],
"controls": [
{
"actions": {
"type": "grid",
"size": [ "fill", "default" ],
"grid_item_template": "npc_interact.student_button",
"grid_dimension_binding": "#student_button_grid_dimensions",
"collection_name": "student_buttons_collection",
"bindings": [
{
"binding_name": "#student_button_grid_dimensions"
}
]
}
}
]
}
}
]
},
"student_stack_panel@npc_interact.main_stack_panel": {
"size": [ "100%", "100%c" ],
"controls": [
{ "top_pad@common.empty_panel": { "size": [ "100%", 4 ] } },
{ "message@npc_interact.student_message_section": {} },
{ "message_pad@common.empty_panel": { "size": [ "100%", 4 ] } },
{ "buttons@npc_interact.student_buttons": {} }
]
},
"student_view_content": {
// Arbitrary type, just want to group all advanced controls together
"type": "panel",
"size": [ "100%", "100%cm" ],
"controls": [
{ "student@npc_interact.student_stack_panel": {} },
{
"close@npc_interact.close_button_holder": {
"$close_button_to_button_id": "button.exit_student"
}
}
],
"bindings": [
{
"binding_name": "#student_view_visible",
"binding_name_override": "#visible",
"binding_type": "global"
}
]
},
// -----------------------------------------------
// Base window
// -----------------------------------------------
"close_button_base@common.back_button": {
"type": "button",
"size": [ 21, 21 ],
"layer": 10,
"offset": [ -2, 2 ],
"locked_control": "",
"default_control": "default",
"hover_control": "hover",
"pressed_control": "pressed",
"$close_button_panel_size": [ 15, 15 ],
"$close_button_to_button_id": "button.menu_exit",
"$button_text": "",
"button_mappings": [
{
"from_button_id": "button.menu_select",
"to_button_id": "$close_button_to_button_id",
"mapping_type": "pressed"
},
{
"from_button_id": "button.menu_ok",
"to_button_id": "$close_button_to_button_id",
"mapping_type": "focused"
},
{
// Catch ESC here too
"from_button_id": "button.menu_cancel",
"to_button_id": "$close_button_to_button_id",
"mapping_type": "global"
}
],
"controls": [
{
"default@common.close_button_panel": {
"$close_button_texture": "$default_texture"
}
},
{
"hover@common.close_button_panel": {
"$close_button_texture": "$hover_texture"
}
},
{
"pressed@common.close_button_panel": {
"$close_button_texture": "$pressed_texture"
}
}
],
"bindings": [
{
"binding_name": "$visibility_binding_name",
"binding_name_override": "#visible"
}
]
},
"x_close_button@common.close_button": {
"button_mappings": [
{
"from_button_id": "button.menu_select",
"to_button_id": "$close_button_to_button_id",
"mapping_type": "pressed"
},
{
"from_button_id": "button.menu_ok",
"to_button_id": "$close_button_to_button_id",
"mapping_type": "focused"
},
{
// Catch ESC here too
"from_button_id": "button.menu_cancel",
"to_button_id": "$close_button_to_button_id",
"mapping_type": "global"
}
],
"bindings": [
{
"binding_name": "$visibility_binding_name",
"binding_name_override": "#visible"
}
]
},
// Visibility binding overtakes ignore condition, so wrap in parent that can ignore, then child can bind visibility
"ignorable_x_close_button": {
"type": "panel",
"size": [ "100%c", "100%c" ],
"controls": [
{ "button@npc_interact.x_close_button": {} }
]
},
"close_button_holder": {
"type": "panel",
"size": [ "100%c", "100%c" ],
// Weird anchoring since this needs to be above the top right corner, outside the panel indent
"anchor_from": "top_right",
"anchor_to": "bottom_right",
"offset": [ 8, -3 ],
// Since there's a close button on every screen, the close button on a given screen handles the button mapping
// for back/esc. This means for any screen the first back press will first deselect a text box if one is selected,
// then the next press maps to one of these "close_button_to_button_id" values
"controls": [
{
"close_basic@npc_interact.x_close_button": {
"$close_button_to_button_id": "button.exit_basic",
"$visibility_binding_name": "#basic_visible"
}
},
{
"close_student_edit@npc_interact.ignorable_x_close_button": {
// Only show this when editing the student view as a worldbuilder
"ignored": "(not $is_worldbuilder)",
"$close_button_to_button_id": "button.exit_student_edit",
"$visibility_binding_name": "#student_view_visible"
}
},
{
"close_student@npc_interact.ignorable_x_close_button": {
// Only show this when viewing the student view as a non-worldbuilder
"ignored": "$is_worldbuilder",
"$close_button_to_button_id": "button.exit_student",
"$visibility_binding_name": "#student_view_visible"
}
},
{
"close_maximized_action_edit@npc_interact.close_button_base": {
"$close_button_to_button_id": "button.exit_maximized",
"$default_texture": "textures/ui/minimize",
"$hover_texture": "textures/ui/minimizeHover",
"$pressed_texture": "textures/ui/minimizePress",
"$visibility_binding_name": "#maximized_edit_visible"
}
},
{
"close_advanced@npc_interact.close_button_base": {
"$close_button_to_button_id": "button.exit_advanced",
"$default_texture": "textures/ui/back_button_default",
"$hover_texture": "textures/ui/back_button_hover",
"$pressed_texture": "textures/ui/back_button_pressed",
"$visibility_binding_name": "#advanced_visible"
}
}
]
},
"main_content@common.empty_panel": {
"controls": [
{ "basic@npc_interact.basic_content": {} },
{ "advanced@npc_interact.advanced_scrolling_panel": {} },
{ "maximized_action_edit@npc_interact.maximized_action_edit": {} },
{ "close@npc_interact.close_button_holder": {} }
]
},
"root_panel@common_dialogs.main_panel_no_buttons": {
"size": [ 325, 200 ],
"layer": 1,
"anchor_from": "center",
"anchor_to": "center",
"$title_panel": "common_dialogs.standard_title_label",
"$text_name": "#title_text",
"$title_text_binding_type": "global",
// Can't use default button because we need to change the icon to indicate if it's going to go back or close the window
"$show_close_button": false
},
"gamepad_helper_exit_text": {
"type": "label",
"text": "controller.buttonTip.exit",
"color": "$gamepad_description_text_color"
},
"close_text@common.gamepad_helper_b": {
"$gamepad_description": "npc_interact.gamepad_helper_exit_text"
},
"npc_screen_contents": {
"type": "panel",
"controls": [
{
// Teacher window containing basic and advanced editing screens
"teacher@npc_interact.root_panel": {
"$child_control": "npc_interact.main_content",
"bindings": [
{
"binding_name": "#teacher_view_visible",
"binding_name_override": "#visible",
"binding_type": "global"
}
]
}
},
{
// Student view is form fitting because there could be any amount of student buttons and we don't want dead space
"student@common_dialogs.form_fitting_main_panel_no_buttons": {
"$panel_size": [ 320, "100%cm" ],
"size": "$panel_size",
"$child_control": "npc_interact.student_view_content",
"$title_panel": "common_dialogs.standard_title_label",
"$text_name": "#title_text",
"$title_text_binding_type": "global",
// Don't show default close button, we want our own
"$show_close_button": false,
"$custom_background": "common_dialogs.dialog_background_opaque_with_child",
"bindings": [
{
"binding_name": "#student_view_visible",
"binding_name_override": "#visible",
"binding_type": "global"
}
]
}
},
{
"npc_screen_close@npc_interact.close_text": {
"anchor_to": "bottom_left",
"anchor_from": "bottom_left",
"offset": [ 20, 0 ]
}
}
]
},
"npc_screen@common.base_screen": {
"type": "screen",
"$screen_content": "npc_interact.npc_screen_contents",
"button_mappings": [
{
"from_button_id": "button.menu_exit",
"to_button_id": "button.menu_continue",
"mapping_type": "global"
}
]
}
}