diff --git a/components/Abstracts/SkillIconBase.tscn b/components/UI/SkillIcon.tscn similarity index 100% rename from components/Abstracts/SkillIconBase.tscn rename to components/UI/SkillIcon.tscn diff --git a/scripts/Contents/Panels/MakeFeed.gd b/scripts/Contents/Panels/MakeFeed.gd index 74300f3..66c1fbd 100644 --- a/scripts/Contents/Panels/MakeFeed.gd +++ b/scripts/Contents/Panels/MakeFeed.gd @@ -24,9 +24,9 @@ func _ready(): refreshNeedBaseballCount *= 1 + randf_range(GameRule.refreshCountIncreasePercent.x, GameRule.refreshCountIncreasePercent.y) regenerateCards() ) - for feedScene in DirTool.listdir("res://components/Feeds"): - print("正在从 %s 加载饲料卡" % feedScene) - var feed = load(feedScene).instantiate() as Feed + for i in len(ComponentManager.feeds): + print("正在从 %s 加载饲料卡" % ComponentManager.feeds[i]) + var feed = ComponentManager.getFeed(i).instantiate() as Feed feed.selected.connect( func(applied: bool): if applied: diff --git a/scripts/Statemachine/DamageLabel.gd b/scripts/Statemachine/DamageLabel.gd index 0902bf3..341fc99 100644 --- a/scripts/Statemachine/DamageLabel.gd +++ b/scripts/Statemachine/DamageLabel.gd @@ -33,7 +33,7 @@ func _ready(): queue_free() static func create(spawnDamage: float, spawnCrit: bool, spawnPosition: Vector2, addToWorld: bool = true) -> DamageLabel: - var instance = load("res://components/UI/DamageLabel.tscn").instantiate() + var instance = ComponentManager.getUIComponent("DamageLabel").instantiate() instance.damage = spawnDamage instance.crit = spawnCrit instance.position = spawnPosition diff --git a/scripts/Statemachine/EntityBase.gd b/scripts/Statemachine/EntityBase.gd index a745dc9..f948d73 100644 --- a/scripts/Statemachine/EntityBase.gd +++ b/scripts/Statemachine/EntityBase.gd @@ -126,7 +126,7 @@ func _ready(): UIState.energyPercent.setCurrent(newEnergy) ) for i in weapons: - var icon: SkillIcon = load("res://components/Abstracts/SkillIconBase.tscn").instantiate() + var icon: SkillIcon = ComponentManager.getUIComponent("SkillIcon").instantiate() icon.weapon = i UIState.skillIconContainer.add_child(icon) else: diff --git a/scripts/Statemachine/FieldShow.gd b/scripts/Statemachine/FieldShow.gd index cdb9b43..f572e0a 100644 --- a/scripts/Statemachine/FieldShow.gd +++ b/scripts/Statemachine/FieldShow.gd @@ -37,7 +37,7 @@ func _ready(): valueLabel.label_settings.font_color = Color(1, 1, 1) static func create(newField: FieldStore.Entity, newValue: float, newShowSign: bool, newEntity: EntityBase, newUseViewCast: bool) -> FieldShow: - var fieldShow = load("res://components/UI/FieldShow.tscn").instantiate() + var fieldShow = ComponentManager.getUIComponent("FieldShow").instantiate() fieldShow.field = newField fieldShow.value = newValue fieldShow.showSign = newShowSign diff --git a/scripts/Statemachine/ItemDropped.gd b/scripts/Statemachine/ItemDropped.gd index b7f6a2a..fdefadf 100644 --- a/scripts/Statemachine/ItemDropped.gd +++ b/scripts/Statemachine/ItemDropped.gd @@ -50,7 +50,7 @@ static func generate( spawnPosition: Vector2, addToWorld: bool = true ): - var instance: ItemDropped = load("res://components/UI/ItemDropped.tscn").instantiate() + var instance: ItemDropped = ComponentManager.getUIComponent("ItemDropped").instantiate() instance.item = itemType instance.stackCount = count instance.position = spawnPosition diff --git a/scripts/Statemachine/ItemShow.gd b/scripts/Statemachine/ItemShow.gd index 4adf279..7e75a7b 100644 --- a/scripts/Statemachine/ItemShow.gd +++ b/scripts/Statemachine/ItemShow.gd @@ -23,7 +23,7 @@ func _physics_process(_delta): countLabel.text = str(count) static func generate(itemType: ItemStore.ItemType, itemCount: int = 1, isAutoFree: bool = false): - var item = load("res://components/UI/ItemShow.tscn").instantiate() + var item = ComponentManager.getUIComponent("ItemShow").instantiate() item.type = itemType item.count = itemCount item.autoFree = isAutoFree diff --git a/scripts/Structs/Feed.gd b/scripts/Structs/Feed.gd index a73d1df..539178e 100644 --- a/scripts/Structs/Feed.gd +++ b/scripts/Structs/Feed.gd @@ -4,7 +4,7 @@ class_name Feed signal selected(applied: bool) -@export var avatarTexture: Texture2D = load("res://icon.svg") +@export var avatarTexture: Texture2D = null @export var displayName: String = "未命名饲料" @export var quality: FeedName.Quality = FeedName.Quality.COMMON @export var topic: FeedName.Topic = FeedName.Topic.SURVIVAL @@ -69,7 +69,7 @@ func rebuildInfo(): noField = false var field = fields[i] var value = fieldValues[i] - var fieldShow: FieldShow = load("res://components/UI/FieldShow.tscn").instantiate() + var fieldShow: FieldShow = ComponentManager.getUIComponent("FieldShow").instantiate() fieldShow.field = field fieldShow.value = value if is_instance_valid(UIState.player): @@ -82,7 +82,7 @@ func rebuildInfo(): for i in range(min(costs.size(), costCounts.size())): var cost = costs[i] var count = costCounts[i] - var costShow: ItemShow = load("res://components/UI/ItemShow.tscn").instantiate() + var costShow: ItemShow = ComponentManager.getUIComponent("ItemShow").instantiate() costShow.type = cost costShow.count = int(count * multipiler()) costsBox.add_child(costShow) diff --git a/scripts/Structs/Weapon.gd b/scripts/Structs/Weapon.gd index 6fa4a31..be76bf9 100644 --- a/scripts/Structs/Weapon.gd +++ b/scripts/Structs/Weapon.gd @@ -2,7 +2,7 @@ extends PanelContainer class_name Weapon -@export var avatarTexture: Texture2D = load("res://icon.svg") +@export var avatarTexture: Texture2D = null @export var displayName: String = "未命名饲料" @export var quality: WeaponName.Quality = WeaponName.Quality.COMMON @export var typeTopic: WeaponName.TypeTopic = WeaponName.TypeTopic.IMPACT diff --git a/scripts/Tools/ItemStore.gd b/scripts/Tools/ItemStore.gd index 6385e0e..00be01f 100644 --- a/scripts/Tools/ItemStore.gd +++ b/scripts/Tools/ItemStore.gd @@ -23,4 +23,4 @@ static var idMap = { ItemType.SOUL: "soul", } static func getTexture(type: ItemType) -> Texture2D: - return load("res://resources/items/%s.svg" % idMap[type]) + return ComponentManager.getItemTexture(idMap[type]) diff --git a/scripts/Tools/Managers/ComponentManager.gd b/scripts/Tools/Managers/ComponentManager.gd index 607b239..48c2301 100644 --- a/scripts/Tools/Managers/ComponentManager.gd +++ b/scripts/Tools/Managers/ComponentManager.gd @@ -3,6 +3,10 @@ class_name ComponentManager static var bullets = {} static var characters = {} static var effects = {} +static var feeds = [] +static var uiComponents = {} +static var themes = {} +static var itemTextures = {} static func init(): for i in DirTool.listdir("res://components/Bullets"): @@ -11,9 +15,27 @@ static func init(): characters[DirTool.getBasenameWithoutExtension(i)] = load(i) for i in DirTool.listdir("res://components/Effects"): effects[DirTool.getBasenameWithoutExtension(i)] = load(i) + for i in DirTool.listdir("res://components/Feeds"): + feeds.append(load(i)) + for i in DirTool.listdir("res://components/UI"): + uiComponents[DirTool.getBasenameWithoutExtension(i)] = load(i) + for i in DirTool.listdir("res://themes"): + themes[DirTool.getBasenameWithoutExtension(i)] = load(i) + for i in DirTool.listdir("res://resources/items"): + itemTextures[DirTool.getBasenameWithoutExtension(i)] = load("res://resources/items/%s" % i) static func getBullet(name: String): return bullets[name] static func getCharacter(name: String): return characters[name] static func getEffect(name: String): return effects[name] +static func getFeed(index: int): + return feeds[index] +static func getUIComponent(name: String): + return uiComponents[name] +static func getTheme(name: String): + return themes[name] +static func getItemTexture(name: String): + return itemTextures[name] +static func readResource(path: String): + return load("res://resources/%s" % path) diff --git a/scripts/Tools/QuickUI.gd b/scripts/Tools/QuickUI.gd index 91f052f..d617cc0 100644 --- a/scripts/Tools/QuickUI.gd +++ b/scripts/Tools/QuickUI.gd @@ -3,7 +3,7 @@ class_name QuickUI static func smallText(text: String, center: bool = true): var label = Label.new() label.text = text - label.theme = load("res://themes/smallText.tres") + label.theme = ComponentManager.getTheme("smallText") if center: label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER return label @@ -15,4 +15,4 @@ static func graySmallText(text: String, center: bool = true): label.label_settings.font_color = Color(0.6, 0.6, 0.6, 1) if center: label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER - return label \ No newline at end of file + return label