feat(node-map): MapHud 배경 이미지+오버레이, 노드 아이콘화(라벨 제거·확대), RenderMapNode ImageRUID+상태 틴트
타입별 공식 아이콘(주황버섯/골렘/발록/돈주머니/모닥불/상자) + 리스항구 배경. 절차 배치·간선·바인딩 불변.
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -1681,18 +1681,31 @@ function upsertUi() {
|
|||||||
displayOrder: 7,
|
displayOrder: 7,
|
||||||
components: [
|
components: [
|
||||||
transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 1920, y: 1080 }, pos: { x: 0, y: 0 }, align: ALIGN_CENTER }),
|
transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 1920, y: 1080 }, pos: { x: 0, y: 0 }, align: ALIGN_CENTER }),
|
||||||
sprite({ color: { r: 0.05, g: 0.06, b: 0.09, a: 0.9 }, type: 1, raycast: true }),
|
sprite({ dataId: NODEICONS.background, color: { r: 1, g: 1, b: 1, a: 1 }, type: 0, raycast: false }),
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
mapHud.jsonString.enable = false;
|
mapHud.jsonString.enable = false;
|
||||||
map.push(mapHud);
|
map.push(mapHud);
|
||||||
|
// 배경 위 반투명 어두운 오버레이(노드 가독성). displayOrder 0 = 도트(1)·타이틀(2)·노드(5) 아래.
|
||||||
|
map.push(entity({
|
||||||
|
id: guid('map', 990),
|
||||||
|
path: '/ui/DefaultGroup/MapHud/Overlay',
|
||||||
|
modelId: 'uisprite',
|
||||||
|
entryId: 'UISprite',
|
||||||
|
componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent',
|
||||||
|
displayOrder: 0,
|
||||||
|
components: [
|
||||||
|
transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 1920, y: 1080 }, pos: { x: 0, y: 0 }, align: ALIGN_CENTER }),
|
||||||
|
sprite({ color: { r: 0.04, g: 0.05, b: 0.09, a: 0.5 }, type: 1, raycast: true }),
|
||||||
|
],
|
||||||
|
}));
|
||||||
map.push(entity({
|
map.push(entity({
|
||||||
id: guid('map', 1),
|
id: guid('map', 1),
|
||||||
path: '/ui/DefaultGroup/MapHud/Title',
|
path: '/ui/DefaultGroup/MapHud/Title',
|
||||||
modelId: 'uitext',
|
modelId: 'uitext',
|
||||||
entryId: 'UIText',
|
entryId: 'UIText',
|
||||||
componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent',
|
componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent',
|
||||||
displayOrder: 0,
|
displayOrder: 2,
|
||||||
components: [
|
components: [
|
||||||
transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 700, y: 60 }, pos: { x: 0, y: 510 } }),
|
transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: 700, y: 60 }, pos: { x: 0, y: 510 } }),
|
||||||
sprite({ color: TRANSPARENT }),
|
sprite({ color: TRANSPARENT }),
|
||||||
@@ -1715,32 +1728,19 @@ function upsertUi() {
|
|||||||
displayOrder: 5,
|
displayOrder: 5,
|
||||||
components: [
|
components: [
|
||||||
transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size, pos }),
|
transform({ parentW: 1920, parentH: 1080, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size, pos }),
|
||||||
sprite({ color: { r: 0.2, g: 0.22, b: 0.26, a: 1 }, type: 1, raycast: true }),
|
sprite({ color: { r: 1, g: 1, b: 1, a: 1 }, type: 0, raycast: true }),
|
||||||
button(),
|
button(),
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
nodeEnt.jsonString.enable = false;
|
nodeEnt.jsonString.enable = false;
|
||||||
map.push(nodeEnt);
|
map.push(nodeEnt);
|
||||||
map.push(entity({
|
|
||||||
id: guid('map', mapN++),
|
|
||||||
path: `${nodePath}/Label`,
|
|
||||||
modelId: 'uitext',
|
|
||||||
entryId: 'UIText',
|
|
||||||
componentNames: 'MOD.Core.UITransformComponent,MOD.Core.SpriteGUIRendererComponent,MOD.Core.TextComponent',
|
|
||||||
displayOrder: 0,
|
|
||||||
components: [
|
|
||||||
transform({ parentW: size.x, parentH: size.y, anchor: { x: 0.5, y: 0.5 }, pivot: { x: 0.5, y: 0.5 }, size: { x: size.x + 20, y: 30 }, pos: { x: 0, y: 0 } }),
|
|
||||||
sprite({ color: TRANSPARENT }),
|
|
||||||
text({ value: label, fontSize: id === 'boss' ? 18 : 15, bold: true, color: { r: 1, g: 1, b: 1, a: 1 }, alignment: 4 }),
|
|
||||||
],
|
|
||||||
}));
|
|
||||||
};
|
};
|
||||||
for (let r = 1; r <= MAP_ROWS; r++) {
|
for (let r = 1; r <= MAP_ROWS; r++) {
|
||||||
for (let c = 1; c <= MAP_COLS; c++) {
|
for (let c = 1; c <= MAP_COLS; c++) {
|
||||||
pushMapNode(`r${r}c${c}`, { x: nodeX(r), y: nodeY(c) }, { x: 56, y: 56 }, '');
|
pushMapNode(`r${r}c${c}`, { x: nodeX(r), y: nodeY(c) }, { x: 64, y: 64 }, '');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pushMapNode('boss', BOSS_POS, { x: 72, y: 72 }, '보스');
|
pushMapNode('boss', BOSS_POS, { x: 88, y: 88 }, '보스');
|
||||||
const pushDots = (dotId, from, to) => {
|
const pushDots = (dotId, from, to) => {
|
||||||
for (let k = 1; k <= 3; k++) {
|
for (let k = 1; k <= 3; k++) {
|
||||||
const t = k / 4;
|
const t = k / 4;
|
||||||
@@ -5637,37 +5637,13 @@ if node == nil then
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
e.Enable = true
|
e.Enable = true
|
||||||
local tname = "전투"
|
local ruid = self.NodeIcons[node.type]
|
||||||
local r0 = 0.78
|
if ruid == nil then
|
||||||
local g0 = 0.36
|
ruid = self.NodeIcons["combat"]
|
||||||
local b0 = 0.32
|
end
|
||||||
if node.type == "elite" then
|
if e.SpriteGUIRendererComponent ~= nil and ruid ~= nil then
|
||||||
tname = "엘리트"
|
e.SpriteGUIRendererComponent.ImageRUID = ruid
|
||||||
r0 = 0.62
|
|
||||||
g0 = 0.4
|
|
||||||
b0 = 0.85
|
|
||||||
elseif node.type == "shop" then
|
|
||||||
tname = "상점"
|
|
||||||
r0 = 0.9
|
|
||||||
g0 = 0.75
|
|
||||||
b0 = 0.35
|
|
||||||
elseif node.type == "rest" then
|
|
||||||
tname = "휴식"
|
|
||||||
r0 = 0.4
|
|
||||||
g0 = 0.75
|
|
||||||
b0 = 0.45
|
|
||||||
elseif node.type == "treasure" then
|
|
||||||
tname = "보물"
|
|
||||||
r0 = 0.35
|
|
||||||
g0 = 0.7
|
|
||||||
b0 = 0.75
|
|
||||||
elseif node.type == "boss" then
|
|
||||||
tname = "보스"
|
|
||||||
r0 = 0.85
|
|
||||||
g0 = 0.25
|
|
||||||
b0 = 0.25
|
|
||||||
end
|
end
|
||||||
self:SetText(base .. "/Label", tname)
|
|
||||||
local reachable = self:IsReachable(id)
|
local reachable = self:IsReachable(id)
|
||||||
local visited = false
|
local visited = false
|
||||||
if self.VisitedNodes ~= nil then
|
if self.VisitedNodes ~= nil then
|
||||||
@@ -5677,13 +5653,13 @@ if self.VisitedNodes ~= nil then
|
|||||||
end
|
end
|
||||||
if e.SpriteGUIRendererComponent ~= nil then
|
if e.SpriteGUIRendererComponent ~= nil then
|
||||||
if id == self.CurrentNodeId then
|
if id == self.CurrentNodeId then
|
||||||
e.SpriteGUIRendererComponent.Color = Color(0.95, 0.8, 0.3, 1)
|
e.SpriteGUIRendererComponent.Color = Color(1, 0.82, 0.3, 1)
|
||||||
elseif visited == true then
|
elseif visited == true then
|
||||||
e.SpriteGUIRendererComponent.Color = Color(0.18, 0.19, 0.22, 0.9)
|
e.SpriteGUIRendererComponent.Color = Color(0.5, 0.5, 0.55, 0.9)
|
||||||
elseif reachable == true then
|
elseif reachable == true then
|
||||||
e.SpriteGUIRendererComponent.Color = Color(r0, g0, b0, 1)
|
e.SpriteGUIRendererComponent.Color = Color(1, 1, 1, 1)
|
||||||
else
|
else
|
||||||
e.SpriteGUIRendererComponent.Color = Color(r0 * 0.45, g0 * 0.45, b0 * 0.45, 0.55)
|
e.SpriteGUIRendererComponent.Color = Color(0.4, 0.4, 0.45, 0.45)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if e.ButtonComponent ~= nil then
|
if e.ButtonComponent ~= nil then
|
||||||
|
|||||||
9589
ui/DefaultGroup.ui
9589
ui/DefaultGroup.ui
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user