1
1
mirror of https://github.com/Rundll86/Dog-Lynx-And-HCN.git synced 2026-05-28 06:51:54 +08:00

feat: 新增角色系统及基础功能实现

新增HCN、Lynx和MuyangDog三个可玩角色及其相关资源
实现角色选择界面和角色属性系统
重构玩家生成逻辑以支持角色选择
优化角色卡片UI显示效果
This commit is contained in:
2026-05-04 21:34:57 +08:00
parent 4d1f68cac1
commit dc4b080a09
23 changed files with 362 additions and 48 deletions
+5 -5
View File
@@ -7,16 +7,16 @@ var speedScale: float = 1
func _init(cd: float = 100):
cooldown = cd
func centralTime():
func centralTime() -> float:
return cooldown / speedScale
func isCooldowned():
func isCooldowned() -> bool:
return timeSinceLastStart() >= centralTime()
func start():
func start() -> bool:
var state = isCooldowned()
if state:
lastStart = WorldManager.getTime()
return state
func timeSinceLastStart():
func timeSinceLastStart() -> float:
return WorldManager.getTime() - lastStart
func percent():
func percent() -> float:
return timeSinceLastStart() / centralTime()
+13 -7
View File
@@ -138,7 +138,7 @@ func _ready():
UIState.player = self
if WorldManager.isRelease():
for i in weaponStore.get_children():
i.free()
i.queue_free()
weaponStore.add_child(ComponentManager.getWeapon("PurpleCrystal").instantiate())
for i in weaponStore.get_children():
i.hide()
@@ -505,6 +505,7 @@ func summon(who: PackedScene, syncFields: bool = true, lockValue: bool = true) -
var instance: SummonBase = who.instantiate()
instance.position = get_global_mouse_position()
instance.myMaster = self
summoned(instance)
if isPlayer(): instance.add_to_group("players")
if syncFields:
if lockValue:
@@ -550,20 +551,22 @@ func enterStage(_stage: int):
pass
func kill():
pass
func summoned(_entity: SummonBase):
pass
static func findPlayer(playerName: String) -> EntityBase:
for i in getPlayers():
if i.displayName == playerName:
return i
return null
static func generatePlayer(playerName: String) -> EntityBase:
var player = generate(ComponentManager.getCharacter("Rooster"), Vector2.ZERO, false)
player.displayName = playerName
static func generatePlayer(playerName: String, character: String, extraFields: Dictionary = {}) -> EntityBase:
var player = generate(ComponentManager.getCharacter(character), Vector2.ZERO, false, false, true, playerName)
player.name = "Player_%s" % playerName
print(extraFields)
var feed = ComponentManager.getAbstract("FeedCardBase").instantiate() as Feed
for field in OutGameStorage.upgradableFieldsValue:
for field in extraFields:
feed.fields.append(field)
feed.fieldValues.append(OutGameStorage.upgradableFieldsValue[field])
feed.fieldValues.append(extraFields[field])
feed.freeToBuy = true
feed.apply(player)
return player
@@ -572,12 +575,15 @@ static func generate(
spawnPosition: Vector2,
isMob: bool = true,
spawnAsBoss: bool = false,
addToWorld: bool = true
addToWorld: bool = true,
disName: String = ""
):
var instance: EntityBase = entity.instantiate()
instance.position = spawnPosition
instance.isBoss = spawnAsBoss
instance.level = clamp((round(Wave.current * (1 + GameRule.entityLevelOffsetByWave * randf_range(-1, 1)))), 1, INF)
if disName:
instance.displayName = disName
if isMob:
instance.add_to_group("mobs")
else: