feat(combat): 승리조건(전체 처치)·몬스터 슬롯 렌더·HP바·타겟 클릭
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1206,6 +1206,12 @@ end
|
|||||||
local restLeave = _EntityService:GetEntityByPath("/ui/DefaultGroup/RestHud/Leave")
|
local restLeave = _EntityService:GetEntityByPath("/ui/DefaultGroup/RestHud/Leave")
|
||||||
if restLeave ~= nil and restLeave.ButtonComponent ~= nil then
|
if restLeave ~= nil and restLeave.ButtonComponent ~= nil then
|
||||||
restLeave:ConnectEvent(ButtonClickEvent, function() self:LeaveNode() end)
|
restLeave:ConnectEvent(ButtonClickEvent, function() self:LeaveNode() end)
|
||||||
|
end
|
||||||
|
for i = 1, ${MAX_MONSTERS} do
|
||||||
|
local ms = _EntityService:GetEntityByPath("/ui/DefaultGroup/CombatHud/MonsterSlot" .. tostring(i))
|
||||||
|
if ms ~= nil and ms.ButtonComponent ~= nil then
|
||||||
|
ms:ConnectEvent(ButtonClickEvent, function() self:SetTarget(i) end)
|
||||||
|
end
|
||||||
end`),
|
end`),
|
||||||
method('StartPlayerTurn', `self.Turn = self.Turn + 1
|
method('StartPlayerTurn', `self.Turn = self.Turn + 1
|
||||||
self.Energy = self.MaxEnergy
|
self.Energy = self.MaxEnergy
|
||||||
@@ -1420,7 +1426,11 @@ end`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], N
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
self:RenderCombat()`),
|
self:RenderCombat()`),
|
||||||
method('CheckCombatEnd', `if self.EnemyHp <= 0 then
|
method('CheckCombatEnd', `local anyAlive = false
|
||||||
|
for i = 1, #self.Monsters do
|
||||||
|
if self.Monsters[i].alive == true then anyAlive = true; break end
|
||||||
|
end
|
||||||
|
if anyAlive == false then
|
||||||
self.CombatOver = true
|
self.CombatOver = true
|
||||||
self.Gold = self.Gold + ${GOLD_PER_WIN}
|
self.Gold = self.Gold + ${GOLD_PER_WIN}
|
||||||
self:ApplyRelics("combatReward")
|
self:ApplyRelics("combatReward")
|
||||||
@@ -1453,22 +1463,54 @@ local entity = _EntityService:GetEntityByPath("/ui/DefaultGroup/CombatHud/Result
|
|||||||
if entity ~= nil then
|
if entity ~= nil then
|
||||||
entity.Enable = true
|
entity.Enable = true
|
||||||
end`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'text' }]),
|
end`, [{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'text' }]),
|
||||||
method('RenderCombat', `self:SetText("/ui/DefaultGroup/CombatHud/EnemyName", self.EnemyName)
|
method('RenderCombat', `for i = 1, ${MAX_MONSTERS} do
|
||||||
self:SetText("/ui/DefaultGroup/CombatHud/EnemyHp", "HP " .. string.format("%d", self.EnemyHp) .. "/" .. string.format("%d", self.EnemyMaxHp))
|
local base = "/ui/DefaultGroup/CombatHud/MonsterSlot" .. tostring(i)
|
||||||
self:SetText("/ui/DefaultGroup/CombatHud/EnemyBlock", "방어 " .. string.format("%d", self.EnemyBlock))
|
local m = self.Monsters[i]
|
||||||
local intent = self.EnemyIntents[self.EnemyIntentIndex]
|
if m ~= nil and m.alive == true then
|
||||||
local intentText = ""
|
self:SetEntityEnabled(base, true)
|
||||||
if intent ~= nil then
|
self:SetText(base .. "/Name", m.name)
|
||||||
if intent.kind == "Attack" then
|
self:SetText(base .. "/Hp", string.format("%d", m.hp) .. "/" .. string.format("%d", m.maxHp))
|
||||||
intentText = "의도: 공격 " .. tostring(intent.value)
|
local intent = m.intents[m.intentIdx]
|
||||||
elseif intent.kind == "Defend" then
|
local t = ""
|
||||||
intentText = "의도: 방어 " .. tostring(intent.value)
|
if intent ~= nil then
|
||||||
|
if intent.kind == "Attack" then t = "공격 " .. tostring(intent.value)
|
||||||
|
elseif intent.kind == "Defend" then t = "방어 " .. tostring(intent.value) end
|
||||||
|
end
|
||||||
|
if i == self.TargetIndex then t = "[타겟] " .. t end
|
||||||
|
self:SetText(base .. "/Intent", t)
|
||||||
|
self:SetHpBar(base .. "/HpBarFill", m.hp, m.maxHp)
|
||||||
|
else
|
||||||
|
self:SetEntityEnabled(base, false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
self:SetText("/ui/DefaultGroup/CombatHud/EnemyIntent", intentText)
|
|
||||||
self:SetText("/ui/DefaultGroup/CombatHud/PlayerHp", "HP " .. string.format("%d", self.PlayerHp) .. "/" .. string.format("%d", self.PlayerMaxHp))
|
self:SetText("/ui/DefaultGroup/CombatHud/PlayerHp", "HP " .. string.format("%d", self.PlayerHp) .. "/" .. string.format("%d", self.PlayerMaxHp))
|
||||||
self:SetText("/ui/DefaultGroup/CombatHud/PlayerBlock", "방어 " .. string.format("%d", self.PlayerBlock))
|
self:SetText("/ui/DefaultGroup/CombatHud/PlayerBlock", "방어 " .. string.format("%d", self.PlayerBlock))
|
||||||
self:RenderRun()`),
|
self:RenderRun()`),
|
||||||
|
method('SetHpBar', `local e = _EntityService:GetEntityByPath(path)
|
||||||
|
if e == nil or e.UITransformComponent == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local ratio = 0
|
||||||
|
if maxHp > 0 then ratio = hp / maxHp end
|
||||||
|
if ratio < 0 then ratio = 0 end
|
||||||
|
local w = 120 * ratio
|
||||||
|
e.UITransformComponent.RectSize = Vector2(w, 14)`, [
|
||||||
|
{ Type: 'string', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'path' },
|
||||||
|
{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'hp' },
|
||||||
|
{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'maxHp' },
|
||||||
|
]),
|
||||||
|
method('PositionMonsterSlot', `local sp = self.SlotPos
|
||||||
|
if sp == nil or sp[slot] == nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local e = _EntityService:GetEntityByPath("/ui/DefaultGroup/CombatHud/MonsterSlot" .. tostring(slot))
|
||||||
|
if e ~= nil and e.UITransformComponent ~= nil then
|
||||||
|
e.UITransformComponent.anchoredPosition = Vector2(sp[slot].x, sp[slot].y)
|
||||||
|
end`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }]),
|
||||||
|
method('SetTarget', `if self.Monsters[slot] ~= nil and self.Monsters[slot].alive == true then
|
||||||
|
self.TargetIndex = slot
|
||||||
|
self:RenderCombat()
|
||||||
|
end`, [{ Type: 'number', DefaultValue: null, SyncDirection: 0, Attributes: [], Name: 'slot' }]),
|
||||||
method('RenderRun', `self:SetText("/ui/DefaultGroup/CombatHud/Floor", "막 " .. string.format("%d", self.Floor) .. "/" .. string.format("%d", self.RunLength))
|
method('RenderRun', `self:SetText("/ui/DefaultGroup/CombatHud/Floor", "막 " .. string.format("%d", self.Floor) .. "/" .. string.format("%d", self.RunLength))
|
||||||
self:SetText("/ui/DefaultGroup/CombatHud/Gold", "골드 " .. string.format("%d", self.Gold))`),
|
self:SetText("/ui/DefaultGroup/CombatHud/Gold", "골드 " .. string.format("%d", self.Gold))`),
|
||||||
method('OfferReward', `local pool = {}
|
method('OfferReward', `local pool = {}
|
||||||
|
|||||||
Reference in New Issue
Block a user