mirror of
https://github.com/Rundll86/Dog-Lynx-And-HCN.git
synced 2026-06-29 23:12:28 +08:00
feat(武器系统): 添加武器背包功能及武器展示组件
实现武器背包功能,用于存储已获得的武器名称。新增WeaponShow组件,根据操作类型显示不同的武器信息。修改Feed.gd以支持武器展示逻辑,包括获取和提炼两种操作状态。
This commit is contained in:
@@ -1,26 +1,43 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://c7747qr83iojj"]
|
[gd_scene load_steps=6 format=3 uid="uid://c7747qr83iojj"]
|
||||||
|
|
||||||
[ext_resource type="Theme" uid="uid://b6nox1qqh50ub" path="res://themes/smallText.tres" id="1_ua7kx"]
|
[ext_resource type="Theme" uid="uid://b6nox1qqh50ub" path="res://themes/smallText.tres" id="1_ua7kx"]
|
||||||
|
[ext_resource type="Script" path="res://scripts/Statemachine/WeaponShow.gd" id="2_cojxr"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bbm8l3hr4ihar" path="res://components/UI/ItemShow.tscn" id="2_yqc2h"]
|
[ext_resource type="PackedScene" uid="uid://bbm8l3hr4ihar" path="res://components/UI/ItemShow.tscn" id="2_yqc2h"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://b2qhes4apaxsj" path="res://components/Weapons/NuclearBomb.tscn" id="3_gh1wm"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://cp57lmeohvo3o" path="res://resources/weapons/nuclear-bomb.png" id="4_yyc4p"]
|
||||||
|
|
||||||
[node name="WeaponShow" type="HBoxContainer"]
|
[node name="WeaponShow" type="HBoxContainer"]
|
||||||
offset_right = 189.0
|
offset_right = 189.0
|
||||||
offset_bottom = 22.0
|
offset_bottom = 22.0
|
||||||
theme = ExtResource("1_ua7kx")
|
theme = ExtResource("1_ua7kx")
|
||||||
|
script = ExtResource("2_cojxr")
|
||||||
|
weapon = ExtResource("3_gh1wm")
|
||||||
|
|
||||||
[node name="operation" type="Label" parent="."]
|
[node name="operation" type="Label" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
text = "获得/提炼"
|
text = "提炼"
|
||||||
|
|
||||||
|
[node name="avatar" type="TextureRect" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
visible = false
|
||||||
|
custom_minimum_size = Vector2(20, 20)
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 10
|
||||||
|
size_flags_vertical = 4
|
||||||
|
texture = ExtResource("4_yyc4p")
|
||||||
|
expand_mode = 1
|
||||||
|
stretch_mode = 5
|
||||||
|
|
||||||
[node name="name" type="Label" parent="."]
|
[node name="name" type="Label" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
visible = false
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 10
|
text = "核弹控制器"
|
||||||
text = "武器名称"
|
|
||||||
|
|
||||||
[node name="soul" parent="." instance=ExtResource("2_yqc2h")]
|
[node name="soul" parent="." instance=ExtResource("2_yqc2h")]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 10
|
size_flags_horizontal = 10
|
||||||
type = 4
|
type = 4
|
||||||
|
count = 1
|
||||||
|
|||||||
@@ -98,6 +98,7 @@ var lastDirection: int = 1
|
|||||||
var currentFocusedBoss: EntityBase = null
|
var currentFocusedBoss: EntityBase = null
|
||||||
var charginup: bool = false
|
var charginup: bool = false
|
||||||
var weapons: Array[Weapon] = []
|
var weapons: Array[Weapon] = []
|
||||||
|
var weaponBag: Array[String] = []
|
||||||
var canRunAi: bool = true
|
var canRunAi: bool = true
|
||||||
var currentStage: int = 0
|
var currentStage: int = 0
|
||||||
var spawnTime: float = 0
|
var spawnTime: float = 0
|
||||||
@@ -115,6 +116,7 @@ func _ready():
|
|||||||
for i in weaponStore.get_children():
|
for i in weaponStore.get_children():
|
||||||
i.hide()
|
i.hide()
|
||||||
weapons.append(i)
|
weapons.append(i)
|
||||||
|
weaponBag.append(i.displayName)
|
||||||
statebar.levelLabels.hide()
|
statebar.levelLabels.hide()
|
||||||
UIState.player = self
|
UIState.player = self
|
||||||
energyChanged.connect(
|
energyChanged.connect(
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
@tool
|
||||||
|
extends HBoxContainer
|
||||||
|
class_name WeaponShow
|
||||||
|
|
||||||
|
enum Operation {
|
||||||
|
GET,
|
||||||
|
EXTRACT,
|
||||||
|
}
|
||||||
|
|
||||||
|
@export var weapon: PackedScene = null
|
||||||
|
@export var operation: Operation = Operation.GET
|
||||||
|
|
||||||
|
@onready var operationLabel: Label = $"%operation"
|
||||||
|
@onready var avatarRect: TextureRect = $"%avatar"
|
||||||
|
@onready var nameLabel: Label = $"%name"
|
||||||
|
@onready var soulShow: ItemShow = $"%soul"
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
var weaponInstance = weapon.instantiate() as Weapon
|
||||||
|
avatarRect.texture = weaponInstance.avatarTexture
|
||||||
|
nameLabel.text = weaponInstance.displayName
|
||||||
|
soulShow.count = weaponInstance.soulLevel
|
||||||
|
if operation == Operation.GET:
|
||||||
|
operationLabel.text = "获得"
|
||||||
|
avatarRect.visible = true
|
||||||
|
nameLabel.visible = true
|
||||||
|
soulShow.visible = false
|
||||||
|
else:
|
||||||
|
operationLabel.text = "提炼"
|
||||||
|
avatarRect.visible = false
|
||||||
|
nameLabel.visible = false
|
||||||
|
soulShow.visible = true
|
||||||
@@ -79,6 +79,15 @@ func rebuildInfo():
|
|||||||
fieldsBox.add_child(fieldShow)
|
fieldsBox.add_child(fieldShow)
|
||||||
if noField:
|
if noField:
|
||||||
fieldsBox.add_child(QuickUI.smallText("无词条"))
|
fieldsBox.add_child(QuickUI.smallText("无词条"))
|
||||||
|
for i in weaponsBox.get_children():
|
||||||
|
i.queue_free()
|
||||||
|
for weapon in weapons:
|
||||||
|
var weaponShow: WeaponShow = ComponentManager.getUIComponent("WeaponShow").instantiate()
|
||||||
|
weaponShow.weapon = weapon
|
||||||
|
if is_instance_valid(UIState.player):
|
||||||
|
weaponShow.operation = WeaponShow.Operation.EXTRACT if UIState.player.weaponBag.has(weapon.instantiate().displayName) else WeaponShow.Operation.GET
|
||||||
|
weaponShow.visible = true
|
||||||
|
weaponsBox.add_child(weaponShow)
|
||||||
for i in costsBox.get_children():
|
for i in costsBox.get_children():
|
||||||
i.queue_free()
|
i.queue_free()
|
||||||
for i in range(min(costs.size(), costCounts.size())):
|
for i in range(min(costs.size(), costCounts.size())):
|
||||||
|
|||||||
Reference in New Issue
Block a user