Compare commits
No commits in common. "b13d27c0b8d40481b7ef177a6dd441ecb41cd5ee" and "af643b0388801af6ee30d080aae17d1524cfa506" have entirely different histories.
b13d27c0b8
...
af643b0388
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 1a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h1V3h9V2a1 1 0 0 0-1-1zm3 3a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h9a1 1 0 0 0 1-1V5a1 1 0 0 0-1-1zm1 2h7v7H6z"/></svg>
|
Before Width: | Height: | Size: 231 B |
|
@ -1,37 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bfswg75r148mr"
|
||||
path="res://.godot/imported/ActionCopy.svg-fe32bd9a658250ff5e4542f0ef742cc6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://project/assets/icons/ActionCopy.svg"
|
||||
dest_files=["res://.godot/imported/ActionCopy.svg-fe32bd9a658250ff5e4542f0ef742cc6.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M2 2a1 1 0 0 0-1 1v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-4a1 1 0 0 1-1-1V3a1 1 0 0 0-1-1z"/></svg>
|
Before Width: | Height: | Size: 198 B |
|
@ -1,37 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dqefy830o4foj"
|
||||
path="res://.godot/imported/Folder.svg-c5366e065eac9f3b42512c5da39f138e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://project/assets/icons/Folder.svg"
|
||||
dest_files=["res://.godot/imported/Folder.svg-c5366e065eac9f3b42512c5da39f138e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M8 0a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4zm0 6a2 2 0 0 0 0 4 2 2 0 0 0 0-4z"/></svg>
|
Before Width: | Height: | Size: 195 B |
|
@ -1,37 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dm2jiwrvkjnaa"
|
||||
path="res://.godot/imported/GuiTabMenuHl.svg-7d46ea78c1798f92cb9529645b049264.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://project/assets/icons/GuiTabMenuHl.svg"
|
||||
dest_files=["res://.godot/imported/GuiTabMenuHl.svg-7d46ea78c1798f92cb9529645b049264.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M10.168 8.754a5 5 0 1 0-1.414 1.414l4.316 4.316 1.414-1.414zM6 3a3 3 0 0 1 0 6 3 3 0 0 1 0-6z"/></svg>
|
Before Width: | Height: | Size: 189 B |
|
@ -1,37 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://beb4tj06ivjae"
|
||||
path="res://.godot/imported/Search.svg-000822acacc83acc029332775ac6bf48.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://project/assets/icons/Search.svg"
|
||||
dest_files=["res://.godot/imported/Search.svg-000822acacc83acc029332775ac6bf48.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16"><path fill="#e0e0e0" d="M9 1v2h6V1zM4 1a1 1 0 0 0-.691.291l-2 2a1 1 0 0 0 1.414 1.414l.293-.293v7.172l-.293-.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l2-2a1 1 0 0 0-1.414-1.414l-.293.293V4.412l.293.293a1 1 0 0 0 1.414-1.414l-2-2A1 1 0 0 0 4 1zm5 6v2h4V7zm0 6v2h2v-2z"/></svg>
|
Before Width: | Height: | Size: 344 B |
|
@ -1,37 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dx8paqeom7dtb"
|
||||
path="res://.godot/imported/Sort.svg-25c42cee888ae0bd8bbed8b3683eb96a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://project/assets/icons/Sort.svg"
|
||||
dest_files=["res://.godot/imported/Sort.svg-25c42cee888ae0bd8bbed8b3683eb96a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
|
@ -49,6 +49,32 @@ public class GifDecoder
|
|||
}
|
||||
}
|
||||
|
||||
private record GraphicsControl
|
||||
{
|
||||
public int TransparencyIndex;
|
||||
|
||||
public GraphicsControl(BinaryReader reader)
|
||||
{
|
||||
var blockSize = reader.ReadByte();
|
||||
if (blockSize != 4)
|
||||
{
|
||||
throw new InvalidDataException($"Graphics Control block size should be 4. Found: {blockSize}");
|
||||
}
|
||||
|
||||
// The only flag we care about is transparency
|
||||
var flags = reader.ReadByte();
|
||||
var transparency = (flags & 0x1) != 0;
|
||||
var delayTime = reader.ReadUInt16(); // I don't think thief uses any animated gifs so we'll ignore this :)
|
||||
var rawTransparencyIndex = reader.ReadByte();
|
||||
TransparencyIndex = transparency ? rawTransparencyIndex : -1;
|
||||
var terminator = reader.ReadByte();
|
||||
if (terminator != 0)
|
||||
{
|
||||
throw new InvalidDataException($"Graphics Control terminator should be 0. Found: {terminator}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public record ImageData
|
||||
{
|
||||
public int Width;
|
||||
|
|
|
@ -9,14 +9,12 @@ public partial class Context : Node
|
|||
|
||||
public ResourcePathManager PathManager { get; private set; }
|
||||
public ModelLoader ModelLoader { get; private set; }
|
||||
public string CampaignName { get; set; }
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
var extractPath = ProjectSettings.GlobalizePath($"user://extracted/tmp");
|
||||
PathManager = new ResourcePathManager(extractPath);
|
||||
ModelLoader = new ModelLoader();
|
||||
CampaignName = "";
|
||||
|
||||
Instance = this;
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ public partial class Mission : Node3D
|
|||
public bool Dump = false;
|
||||
public int LightmapLayers = 33;
|
||||
|
||||
string _campaignName;
|
||||
string _missionName;
|
||||
DbFile _file;
|
||||
TextureLoader _textureLoader;
|
||||
|
@ -58,10 +59,10 @@ public partial class Mission : Node3D
|
|||
var resourceSelector = GetNode<Control>("%ResourceSelector") as ResourceSelector;
|
||||
resourceSelector.ResourceSelected += (string campaign, string mission) =>
|
||||
{
|
||||
var context = Context.Instance;
|
||||
context.CampaignName = campaign;
|
||||
_campaignName = campaign;
|
||||
_missionName = mission;
|
||||
var (newCampaign, missionPath) = context.PathManager.GetResourcePath(ResourceType.Mission, campaign, mission);
|
||||
var pathManager = Context.Instance.PathManager;
|
||||
var (newCampaign, missionPath) = pathManager.GetResourcePath(ResourceType.Mission, campaign, mission);
|
||||
if (newCampaign != campaign)
|
||||
{
|
||||
GD.Print($"Didn't find campaign mission: ({campaign}, {mission})");
|
||||
|
@ -120,7 +121,7 @@ public partial class Mission : Node3D
|
|||
{
|
||||
ClearMap();
|
||||
|
||||
_textureLoader = new TextureLoader(Context.Instance.CampaignName);
|
||||
_textureLoader = new TextureLoader(_campaignName);
|
||||
Timing.TimeStage("DbFile Parse", () => _file = new(FileName));
|
||||
Timing.TimeStage("Register Textures", () => UseChunk<TxList>("TXLIST", RegisterTextures));
|
||||
Timing.TimeStage("Build WR", () => UseChunk<WorldRep>("WREXT", BuildWrMeshes));
|
||||
|
@ -267,7 +268,7 @@ public partial class Mission : Node3D
|
|||
var scale = scaleProp == null ? Vector3.One : scaleProp.value.ToGodotVec3(false);
|
||||
var model = Timing.TimeStage("Get Models", () =>
|
||||
{
|
||||
return Context.Instance.ModelLoader.Load(modelName);
|
||||
return Context.Instance.ModelLoader.Load(_campaignName, modelName);
|
||||
});
|
||||
if (model != null)
|
||||
{
|
||||
|
@ -286,18 +287,17 @@ public partial class Mission : Node3D
|
|||
path = prop.value;
|
||||
|
||||
var pathManager = Context.Instance.PathManager;
|
||||
var campaign = Context.Instance.CampaignName;
|
||||
if (path.StartsWith("fam", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var resType = ResourceType.Texture;
|
||||
path = pathManager.GetResourcePath(resType, campaign, prop.value).Item2;
|
||||
path = pathManager.GetResourcePath(resType, _campaignName, prop.value).Item2;
|
||||
}
|
||||
else
|
||||
{
|
||||
var resType = ResourceType.ObjectTexture;
|
||||
var convertedValue = ResourcePathManager.ConvertSeparator(prop.value);
|
||||
var resName = Path.GetFileNameWithoutExtension(convertedValue);
|
||||
path = pathManager.GetResourcePath(resType, campaign, resName).Item2;
|
||||
path = pathManager.GetResourcePath(resType, _campaignName, resName).Item2;
|
||||
}
|
||||
|
||||
return path != null;
|
||||
|
|
|
@ -18,8 +18,7 @@ public partial class Model : Node3D
|
|||
node.QueueFree();
|
||||
}
|
||||
|
||||
Context.Instance.CampaignName = campaignName;
|
||||
var model = Context.Instance.ModelLoader.Load(modelPath);
|
||||
var model = Context.Instance.ModelLoader.Load(campaignName, modelPath);
|
||||
AddChild(model);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,9 +9,8 @@ public class ModelLoader
|
|||
{
|
||||
private readonly Dictionary<(string, string), MeshInstance3D> _cache = new();
|
||||
|
||||
public MeshInstance3D Load(string modelName, bool forceLoad = false)
|
||||
public MeshInstance3D Load(string campaignName, string modelName, bool forceLoad = false)
|
||||
{
|
||||
var campaignName = Context.Instance.CampaignName;
|
||||
campaignName ??= "";
|
||||
|
||||
if (!forceLoad)
|
||||
|
|
|
@ -1,91 +0,0 @@
|
|||
using Godot;
|
||||
|
||||
namespace KeepersCompound.TMV.UI;
|
||||
|
||||
public partial class TextureBrowser : Node
|
||||
{
|
||||
private Tree _folderTree;
|
||||
private LineEdit _searchBar;
|
||||
private MenuButton _sortMenu;
|
||||
private Button _openFolderButton;
|
||||
private MenuButton _browserMenu;
|
||||
private HFlowContainer _textureList;
|
||||
private TextureRect _previewTexture;
|
||||
private LineEdit _texturePath;
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
// !HACK TEMP
|
||||
Context.Instance.PathManager.Init("/stuff/Games/thief/drive_c/GOG Games/TG ND 1.27 (MAPPING)/");
|
||||
Context.Instance.CampaignName = "TheBlackParade_1_0";
|
||||
|
||||
_folderTree = GetNode<Tree>("%FolderTree");
|
||||
_searchBar = GetNode<LineEdit>("%SearchBar");
|
||||
_sortMenu = GetNode<MenuButton>("%SortMenu");
|
||||
_openFolderButton = GetNode<Button>("%OpenTextureFolderButton");
|
||||
_browserMenu = GetNode<MenuButton>("%BrowserOverflowMenu");
|
||||
_textureList = GetNode<HFlowContainer>("%TextureList");
|
||||
_previewTexture = GetNode<TextureRect>("%PreviewTexture");
|
||||
_texturePath = GetNode<LineEdit>("%PathBox");
|
||||
|
||||
BuildFolderTree();
|
||||
BuildTextureList(); // TODO: This should be triggered on folder change
|
||||
}
|
||||
|
||||
private void BuildFolderTree()
|
||||
{
|
||||
_folderTree.Clear();
|
||||
_folderTree.SetColumnTitle(0, "Name");
|
||||
_folderTree.SetColumnTitle(1, "Count");
|
||||
|
||||
// TODO: We need some way to get family names
|
||||
// Maybe PathManager and CampaignResource should be expanded so that we
|
||||
// can get the resource itself and query things
|
||||
var pathManager = Context.Instance.PathManager;
|
||||
}
|
||||
|
||||
private void BuildTextureList()
|
||||
{
|
||||
foreach (var child in _textureList.GetChildren())
|
||||
{
|
||||
child.QueueFree();
|
||||
}
|
||||
|
||||
var pathManager = Context.Instance.PathManager;
|
||||
var campaign = Context.Instance.CampaignName;
|
||||
var resType = LGS.ResourceType.Texture;
|
||||
var textureNames = pathManager.GetResourceNames(resType, campaign);
|
||||
foreach (var name in textureNames)
|
||||
{
|
||||
var (_, path) = pathManager.GetResourcePath(resType, campaign, name);
|
||||
var texture = TextureLoader.LoadTexture(path);
|
||||
|
||||
var textureRect = new TextureRect();
|
||||
textureRect.Texture = texture;
|
||||
textureRect.ExpandMode = TextureRect.ExpandModeEnum.IgnoreSize;
|
||||
textureRect.StretchMode = TextureRect.StretchModeEnum.KeepAspectCentered;
|
||||
textureRect.SetAnchorsPreset(Control.LayoutPreset.FullRect);
|
||||
|
||||
var slot = new Panel();
|
||||
slot.CustomMinimumSize = new Vector2(128, 128);
|
||||
slot.AddChild(textureRect);
|
||||
slot.GuiInput += (input) =>
|
||||
{
|
||||
if (input is InputEventMouseButton mouseEvent &&
|
||||
mouseEvent.Pressed &&
|
||||
mouseEvent.ButtonIndex == MouseButton.Left)
|
||||
{
|
||||
SetPreviewTexture(name, texture);
|
||||
}
|
||||
};
|
||||
|
||||
_textureList.AddChild(slot);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetPreviewTexture(string name, Texture2D texture)
|
||||
{
|
||||
_previewTexture.Texture = texture;
|
||||
_texturePath.Text = name;
|
||||
}
|
||||
}
|
|
@ -1,298 +0,0 @@
|
|||
[gd_scene load_steps=8 format=3 uid="uid://byknmqac1a5vn"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://b208ufsau5jhb" path="res://project/jorge.png" id="1_1vlw2"]
|
||||
[ext_resource type="Script" path="res://project/code/TMV/UI/TextureBrowser.cs" id="1_72xft"]
|
||||
[ext_resource type="Texture2D" uid="uid://beb4tj06ivjae" path="res://project/assets/icons/Search.svg" id="1_ityvd"]
|
||||
[ext_resource type="Texture2D" uid="uid://dx8paqeom7dtb" path="res://project/assets/icons/Sort.svg" id="3_0k1fm"]
|
||||
[ext_resource type="Texture2D" uid="uid://dqefy830o4foj" path="res://project/assets/icons/Folder.svg" id="3_xdjfn"]
|
||||
[ext_resource type="Texture2D" uid="uid://dm2jiwrvkjnaa" path="res://project/assets/icons/GuiTabMenuHl.svg" id="4_s4jwc"]
|
||||
[ext_resource type="Texture2D" uid="uid://bfswg75r148mr" path="res://project/assets/icons/ActionCopy.svg" id="7_2pq2g"]
|
||||
|
||||
[node name="AssetBrowser" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="TabContainer" type="TabContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
current_tab = 0
|
||||
|
||||
[node name="Textures" type="MarginContainer" parent="TabContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 8
|
||||
theme_override_constants/margin_top = 8
|
||||
theme_override_constants/margin_right = 8
|
||||
theme_override_constants/margin_bottom = 8
|
||||
script = ExtResource("1_72xft")
|
||||
metadata/_tab_index = 0
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/Textures"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="HSplitContainer" type="HSplitContainer" parent="TabContainer/Textures/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="FolderTree" type="Tree" parent="TabContainer/Textures/VBoxContainer/HSplitContainer"]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(256, 0)
|
||||
layout_mode = 2
|
||||
columns = 2
|
||||
column_titles_visible = true
|
||||
|
||||
[node name="HSplitContainer" type="HSplitContainer" parent="TabContainer/Textures/VBoxContainer/HSplitContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="Browser" type="VBoxContainer" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="Options" type="HBoxContainer" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Browser"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="SearchBar" type="LineEdit" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Browser/Options"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
placeholder_text = "Search..."
|
||||
clear_button_enabled = true
|
||||
right_icon = ExtResource("1_ityvd")
|
||||
|
||||
[node name="SortMenu" type="MenuButton" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Browser/Options"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
tooltip_text = "Sort Mode"
|
||||
icon = ExtResource("3_0k1fm")
|
||||
icon_alignment = 1
|
||||
item_count = 4
|
||||
popup/item_0/text = "Family"
|
||||
popup/item_0/checkable = 2
|
||||
popup/item_0/id = 1
|
||||
popup/item_1/text = "Name"
|
||||
popup/item_1/checkable = 2
|
||||
popup/item_1/id = 2
|
||||
popup/item_2/text = "Index"
|
||||
popup/item_2/checkable = 2
|
||||
popup/item_2/disabled = true
|
||||
popup/item_3/text = "Count"
|
||||
popup/item_3/checkable = 2
|
||||
popup/item_3/id = 3
|
||||
popup/item_3/disabled = true
|
||||
|
||||
[node name="OpenTextureFolderButton" type="Button" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Browser/Options"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
tooltip_text = "Open folder in File Explorer"
|
||||
icon = ExtResource("3_xdjfn")
|
||||
flat = true
|
||||
icon_alignment = 1
|
||||
|
||||
[node name="BrowserOverflowMenu" type="MenuButton" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Browser/Options"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
icon = ExtResource("4_s4jwc")
|
||||
item_count = 9
|
||||
popup/item_0/text = "Keep Aspect Ratio"
|
||||
popup/item_0/checkable = 1
|
||||
popup/item_0/checked = true
|
||||
popup/item_0/id = 1
|
||||
popup/item_1/text = "Show Custom"
|
||||
popup/item_1/checkable = 1
|
||||
popup/item_1/checked = true
|
||||
popup/item_2/text = "Show Family Name"
|
||||
popup/item_2/checkable = 1
|
||||
popup/item_2/id = 2
|
||||
popup/item_3/text = "Show File Name"
|
||||
popup/item_3/checkable = 1
|
||||
popup/item_3/checked = true
|
||||
popup/item_3/id = 3
|
||||
popup/item_4/text = "Show File Type"
|
||||
popup/item_4/checkable = 1
|
||||
popup/item_4/checked = true
|
||||
popup/item_4/id = 4
|
||||
popup/item_5/text = "Show Resolution"
|
||||
popup/item_5/checkable = 1
|
||||
popup/item_5/id = 5
|
||||
popup/item_6/id = 8
|
||||
popup/item_6/separator = true
|
||||
popup/item_7/text = "Show Usage Count"
|
||||
popup/item_7/checkable = 1
|
||||
popup/item_7/id = 6
|
||||
popup/item_7/disabled = true
|
||||
popup/item_8/text = "Show Texture Index"
|
||||
popup/item_8/checkable = 1
|
||||
popup/item_8/id = 7
|
||||
popup/item_8/disabled = true
|
||||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Browser"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Browser/PanelContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 8
|
||||
theme_override_constants/margin_top = 8
|
||||
theme_override_constants/margin_right = 8
|
||||
theme_override_constants/margin_bottom = 8
|
||||
|
||||
[node name="Scroll" type="ScrollContainer" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Browser/PanelContainer/MarginContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="TextureList" type="HFlowContainer" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Browser/PanelContainer/MarginContainer/Scroll"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="Panel" type="Panel" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Browser/PanelContainer/MarginContainer/Scroll/TextureList"]
|
||||
custom_minimum_size = Vector2(128, 128)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="TextureRect2" type="TextureRect" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Browser/PanelContainer/MarginContainer/Scroll/TextureList/Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("1_1vlw2")
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="Preview" type="VBoxContainer" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer"]
|
||||
custom_minimum_size = Vector2(384, 0)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="Panel" type="Panel" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer"]
|
||||
custom_minimum_size = Vector2(384, 0)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="PreviewTexture" type="TextureRect" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/Panel"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("1_1vlw2")
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="PanelContainer" type="PanelContainer" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 8
|
||||
theme_override_constants/margin_top = 8
|
||||
theme_override_constants/margin_right = 8
|
||||
theme_override_constants/margin_bottom = 8
|
||||
|
||||
[node name="Details" type="GridContainer" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
theme_override_constants/h_separation = 16
|
||||
columns = 2
|
||||
|
||||
[node name="FilterLabel" type="Label" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
layout_mode = 2
|
||||
text = "Texture Filter"
|
||||
|
||||
[node name="FilterOptions" type="OptionButton" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
selected = 0
|
||||
item_count = 2
|
||||
popup/item_0/text = "Linear"
|
||||
popup/item_1/text = "Nearest"
|
||||
popup/item_1/id = 1
|
||||
|
||||
[node name="Position" type="Label" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
layout_mode = 2
|
||||
text = "Position"
|
||||
|
||||
[node name="PositionOptions" type="OptionButton" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
selected = 0
|
||||
item_count = 2
|
||||
popup/item_0/text = "Scaled"
|
||||
popup/item_1/text = "Tiled"
|
||||
popup/item_1/id = 1
|
||||
|
||||
[node name="ZoomLabel" type="Label" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
text = "Zoom"
|
||||
|
||||
[node name="ZoomSlider" type="HSlider" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 4
|
||||
min_value = 0.5
|
||||
max_value = 8.0
|
||||
value = 0.5
|
||||
|
||||
[node name="PathLabel" type="Label" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
layout_mode = 2
|
||||
text = "Path"
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="PathBox" type="LineEdit" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details/HBoxContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
editable = false
|
||||
|
||||
[node name="PathCopyButton" type="Button" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details/HBoxContainer"]
|
||||
layout_mode = 2
|
||||
icon = ExtResource("7_2pq2g")
|
||||
flat = true
|
||||
|
||||
[node name="FileTypeLabel" type="Label" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
layout_mode = 2
|
||||
text = "File Type"
|
||||
|
||||
[node name="FileTypeBox" type="LineEdit" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
editable = false
|
||||
|
||||
[node name="ResolutionLabel" type="Label" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
layout_mode = 2
|
||||
text = "Resolution"
|
||||
|
||||
[node name="ResolutionBox" type="LineEdit" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
editable = false
|
||||
|
||||
[node name="FileSizeLabel" type="Label" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
layout_mode = 2
|
||||
text = "File Size"
|
||||
|
||||
[node name="FileSizeBox" type="LineEdit" parent="TabContainer/Textures/VBoxContainer/HSplitContainer/HSplitContainer/Preview/VBoxContainer/PanelContainer/MarginContainer/Details"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
editable = false
|
Loading…
Reference in New Issue