Skip to content

Commit b7ad802

Browse files
Haruma-Kclaude
andcommitted
feat: AddressableAssetGroupNameBasedProviderを追加
アドレッサブルアセットグループ名でラベルとバージョンを生成するプロバイダーを実装: - AddressableAssetGroupNameBasedProvider: 共通ロジックを持つベースクラス - AddressableAssetGroupNameBasedLabelProvider: グループ名からラベルを生成 - AddressableAssetGroupNameBasedVersionProvider: グループ名からバージョンを生成 グループ名をそのまま使用、または正規表現による置換機能をサポート 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent b12dcb1 commit b7ad802

File tree

6 files changed

+184
-0
lines changed

6 files changed

+184
-0
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System;
2+
using SmartAddresser.Editor.Core.Models.Shared;
3+
using UnityEditor.AddressableAssets.Settings;
4+
5+
namespace SmartAddresser.Editor.Core.Models.LayoutRules.LabelRules
6+
{
7+
/// <summary>
8+
/// Provide the label based on the addressable asset group name.
9+
/// </summary>
10+
[Serializable]
11+
public sealed class AddressableAssetGroupNameBasedLabelProvider : AddressableAssetGroupNameBasedProvider,
12+
ILabelProvider
13+
{
14+
void ILabelProvider.Setup()
15+
{
16+
base.Setup();
17+
}
18+
19+
string ILabelProvider.Provide(string assetPath, Type assetType, bool isFolder, string address,
20+
AddressableAssetGroup addressableAssetGroup)
21+
{
22+
if (addressableAssetGroup == null)
23+
return null;
24+
25+
return base.Provide(addressableAssetGroup.Name);
26+
}
27+
28+
string ILabelProvider.GetDescription()
29+
{
30+
return base.GetDescription();
31+
}
32+
}
33+
}

Assets/SmartAddresser/Editor/Core/Models/LayoutRules/LabelRules/AddressableAssetGroupNameBasedLabelProvider.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System;
2+
using SmartAddresser.Editor.Core.Models.Shared;
3+
using UnityEditor.AddressableAssets.Settings;
4+
5+
namespace SmartAddresser.Editor.Core.Models.LayoutRules.VersionRules
6+
{
7+
/// <summary>
8+
/// Provide the version based on the addressable asset group name.
9+
/// </summary>
10+
[Serializable]
11+
public sealed class AddressableAssetGroupNameBasedVersionProvider : AddressableAssetGroupNameBasedProvider,
12+
IVersionProvider
13+
{
14+
void IVersionProvider.Setup()
15+
{
16+
base.Setup();
17+
}
18+
19+
string IVersionProvider.Provide(string assetPath, Type assetType, bool isFolder, string address,
20+
AddressableAssetGroup addressableAssetGroup)
21+
{
22+
if (addressableAssetGroup == null)
23+
return null;
24+
25+
return base.Provide(addressableAssetGroup.Name);
26+
}
27+
28+
string IVersionProvider.GetDescription()
29+
{
30+
return base.GetDescription();
31+
}
32+
}
33+
}

Assets/SmartAddresser/Editor/Core/Models/LayoutRules/VersionRules/AddressableAssetGroupNameBasedVersionProvider.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
using System;
2+
using System.Text.RegularExpressions;
3+
using UnityEngine;
4+
5+
namespace SmartAddresser.Editor.Core.Models.Shared
6+
{
7+
[Serializable]
8+
public abstract class AddressableAssetGroupNameBasedProvider
9+
{
10+
[SerializeField] private bool _replaceWithRegex;
11+
[SerializeField] private string _pattern;
12+
[SerializeField] private string _replacement;
13+
14+
private Regex _regex;
15+
16+
/// <summary>
17+
/// If true, replaces the group name value through regular expressions.
18+
/// </summary>
19+
public bool ReplaceWithRegex
20+
{
21+
get => _replaceWithRegex;
22+
set => _replaceWithRegex = value;
23+
}
24+
25+
/// <summary>
26+
/// Regex pattern to replace the group name value.
27+
/// </summary>
28+
public string Pattern
29+
{
30+
get => _pattern;
31+
set => _pattern = value;
32+
}
33+
34+
/// <summary>
35+
/// Replacement value for the regex pattern.
36+
/// </summary>
37+
public string Replacement
38+
{
39+
get => _replacement;
40+
set => _replacement = value;
41+
}
42+
43+
public void Setup()
44+
{
45+
if (!_replaceWithRegex)
46+
return;
47+
48+
try
49+
{
50+
_regex = new Regex(_pattern);
51+
}
52+
catch
53+
{
54+
_regex = null;
55+
}
56+
}
57+
58+
public string Provide(string groupName)
59+
{
60+
if (string.IsNullOrEmpty(groupName))
61+
return null;
62+
63+
if (_replaceWithRegex && _regex == null)
64+
return null;
65+
66+
try
67+
{
68+
return _replaceWithRegex ? _regex.Replace(groupName, _replacement) : groupName;
69+
}
70+
catch
71+
{
72+
return null;
73+
}
74+
}
75+
76+
public string GetDescription()
77+
{
78+
var result = "Source: Addressable Asset Group Name";
79+
if (_replaceWithRegex)
80+
result += $", Regex: Replace \"{_pattern}\" with \"{_replacement}\"";
81+
82+
return result;
83+
}
84+
}
85+
}

Assets/SmartAddresser/Editor/Core/Models/Shared/AddressableAssetGroupNameBasedProvider.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)