Radial bone options menu now has colored options, things of similar functionality are colored in the same color. Any physics related locks will now make bones appear as locks in adv bone select mode, so it should be easier to find them. Corrected localization

This commit is contained in:
penolakushari 2024-09-30 23:45:41 +03:00
parent 5ec7072d56
commit 874edb41a6
3 changed files with 78 additions and 57 deletions

View File

@ -1048,6 +1048,9 @@ local RGM_CIRCLE = {
{ x = -4, y = 0 } { x = -4, y = 0 }
} }
local LockGo = Material("icon16/lock_go.png", "alphatest")
local Lock = Material("icon16/lock.png", "alphatest")
local midw, midh = ScrW()/2, ScrH()/2 local midw, midh = ScrW()/2, ScrH()/2
local divide540 = RGM_Constants.FLOAT_1DIVIDE540 -- aggressive microoptimizations local divide540 = RGM_Constants.FLOAT_1DIVIDE540 -- aggressive microoptimizations
@ -1114,13 +1117,14 @@ function AdvBoneSelectRender(ent, bonenodes)
if nodesExist and (not bonenodes[ent][i]) or false then continue end if nodesExist and (not bonenodes[ent][i]) or false then continue end
local pos = ent:GetBonePosition(i) local pos = ent:GetBonePosition(i)
pos = pos:ToScreen() pos = pos:ToScreen()
local x, y = pos.x, pos.y
local dist = math.abs((mx - pos.x)^2 + (my - pos.y)^2) local dist = math.abs((mx - x)^2 + (my - y)^2)
local circ = table.Copy(RGM_CIRCLE) local circ = table.Copy(RGM_CIRCLE)
for k, v in ipairs(circ) do for k, v in ipairs(circ) do
v.x = v.x + pos.x v.x = v.x + x
v.y = v.y + pos.y v.y = v.y + y
end end
if dist < 576 then -- 24 pixels if dist < 576 then -- 24 pixels
@ -1136,6 +1140,16 @@ function AdvBoneSelectRender(ent, bonenodes)
draw.NoTexture() draw.NoTexture()
surface.DrawPoly(circ) surface.DrawPoly(circ)
if bonenodes[ent][i].bonelock then
surface.SetMaterial(LockGo)
surface.SetDrawColor(COLOR_WHITE:Unpack())
surface.DrawTexturedRect(x - 12, y - 12, 24, 24)
elseif bonenodes[ent][i].poslock or bonenodes[ent][i].anglock then
surface.SetMaterial(Lock)
surface.SetDrawColor(COLOR_WHITE:Unpack())
surface.DrawTexturedRect(x - 12, y - 12, 24, 24)
end
end end
-- We use the average length of all bone names to ensure some names don't overlap each other -- We use the average length of all bone names to ensure some names don't overlap each other
@ -1198,36 +1212,44 @@ function AdvBoneSelectPick(ent, bonenodes)
end end
local SelectedBone = nil local SelectedBone = nil
local Colors = {
Color(255, 140, 105), -- Orange, for Resets
Color(100, 255, 255), -- Cyan (Blue is too dark), for Zeroing scale
Color(100, 255, 0), -- Green, for Locks
Color(255, 255, 255) -- White, for whatever
}
local FeaturesNPhys = { local FeaturesNPhys = {
{ 1, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.reset")) }, -- 1 { 1, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.reset")), 1 }, -- 1
{ 5, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetchildren")) }, -- 5 { 5, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetchildren")), 1 }, -- 5
{ 2, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetpos")) }, -- 2 { 2, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetpos")), 1 }, -- 2
{ 6, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetposchildren")) }, -- 6 { 6, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetposchildren")), 1 }, -- 6
{ 3, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetrot")) }, -- 3 { 3, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetrot")), 1 }, -- 3
{ 7, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetrotchildren")) }, -- 7 { 7, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetrotchildren")), 1 }, -- 7
{ 4, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetscale")) }, -- 4 { 4, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetscale")), 1 }, -- 4
{ 8, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetscalechildren")) }, -- 8 { 8, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetscalechildren")), 1 }, -- 8
{ 9, (language.GetPhrase("tool.ragdollmover.scalezero") .. " " .. language.GetPhrase("tool.ragdollmover.bone")) }, -- 9 { 9, (language.GetPhrase("tool.ragdollmover.scalezero") .. " " .. language.GetPhrase("tool.ragdollmover.bone")), 2 }, -- 9
{ 10, (language.GetPhrase("tool.ragdollmover.scalezero") .. " " .. language.GetPhrase("tool.ragdollmover.bonechildren")) }, -- 10 { 10, (language.GetPhrase("tool.ragdollmover.scalezero") .. " " .. language.GetPhrase("tool.ragdollmover.bonechildren")), 2 }, -- 10
{ 15, { "#tool.ragdollmover.unlockscale", "#tool.ragdollmover.lockscale" } }, --15 { 15, { "#tool.ragdollmover.unlockscale", "#tool.ragdollmover.lockscale" }, 3 }, --15
{ 17, "#tool.ragdollmover.putgizmopos" } -- 17 { 17, "#tool.ragdollmover.putgizmopos", 4 } -- 17
} }
local FeaturesPhys = { local FeaturesPhys = {
{ 1, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.reset")) }, -- 1 { 1, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.reset")), 1 }, -- 1
{ 5, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetchildren")) }, -- 5 { 5, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetchildren")), 1 }, -- 5
{ 6, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetposchildren")) }, -- 6 { 6, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetposchildren")), 1 }, -- 6
{ 7, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetrotchildren")) }, -- 7 { 7, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetrotchildren")), 1 }, -- 7
{ 8, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetscalechildren")) }, -- 8 { 8, (language.GetPhrase("tool.ragdollmover.resetmenu") .. " " .. language.GetPhrase("tool.ragdollmover.resetscalechildren")), 1 }, -- 8
{ 9, (language.GetPhrase("tool.ragdollmover.scalezero") .. " " .. language.GetPhrase("tool.ragdollmover.bone")) }, -- 9 { 9, (language.GetPhrase("tool.ragdollmover.scalezero") .. " " .. language.GetPhrase("tool.ragdollmover.bone")), 2 }, -- 9
{ 10, (language.GetPhrase("tool.ragdollmover.scalezero") .. " " .. language.GetPhrase("tool.ragdollmover.bonechildren")) }, -- 10 { 10, (language.GetPhrase("tool.ragdollmover.scalezero") .. " " .. language.GetPhrase("tool.ragdollmover.bonechildren")), 2 }, -- 10
{ 12, { "#tool.ragdollmover.unlockpos", "#tool.ragdollmover.lockpos" } }, -- 12 { 12, { "#tool.ragdollmover.unlockpos", "#tool.ragdollmover.lockpos" }, 3 }, -- 12
{ 13, { "#tool.ragdollmover.unlockang", "#tool.ragdollmover.lockang" } }, -- 13 { 13, { "#tool.ragdollmover.unlockang", "#tool.ragdollmover.lockang" }, 3}, -- 13
{ 15, { "#tool.ragdollmover.unlockscale", "#tool.ragdollmover.lockscale" } }, --15 { 15, { "#tool.ragdollmover.unlockscale", "#tool.ragdollmover.lockscale" }, 3 }, --15
{ 14, "#tool.ragdollmover.lockbone" }, -- 14 { 14, "#tool.ragdollmover.lockbone", 3 }, -- 14
{ 11, "#tool.ragdollmover.unlockbone" }, -- 11 { 11, "#tool.ragdollmover.unlockbone", 3 }, -- 11
{ 16, "#tool.ragdollmover.freezebone" }, -- 16 { 16, "#tool.ragdollmover.freezebone", 4 }, -- 16
{ 17, "#tool.ragdollmover.putgizmopos" } -- 17 { 17, "#tool.ragdollmover.putgizmopos", 4 } -- 17
} }
function AdvBoneSelectRadialRender(ent, bones, bonenodes, isresetmode) function AdvBoneSelectRadialRender(ent, bones, bonenodes, isresetmode)
@ -1301,6 +1323,20 @@ function AdvBoneSelectRadialRender(ent, bones, bonenodes, isresetmode)
btype = bonenodes[ent][bone].Type btype = bonenodes[ent][bone].Type
end end
local pos = ent:GetBonePosition(bone)
pos = pos:ToScreen()
local circ = table.Copy(RGM_CIRCLE)
for k, v in ipairs(circ) do
v.x = v.x + pos.x
v.y = v.y + pos.y
end
surface.SetDrawColor(COLOR_WHITE:Unpack())
draw.NoTexture()
surface.DrawPoly(circ)
local boneoptions = btype == 1 and FeaturesPhys or FeaturesNPhys local boneoptions = btype == 1 and FeaturesPhys or FeaturesNPhys
local count = btype == 1 and 14 or 12 local count = btype == 1 and 14 or 12
local angborder = (360 / count) / 2 local angborder = (360 / count) / 2
@ -1324,7 +1360,7 @@ function AdvBoneSelectRadialRender(ent, bones, bonenodes, isresetmode)
local thisang = (360 / count * (k - 1)) local thisang = (360 / count * (k - 1))
local thisrad = thisang / 180 * math.pi local thisrad = thisang / 180 * math.pi
local uix, uiy = (math.sin(thisrad) * 250 * modifier), (math.cos(thisrad) * -250 * modifier) local uix, uiy = (math.sin(thisrad) * 250 * modifier), (math.cos(thisrad) * -250 * modifier)
local color = COLOR_WHITE local color = Colors[option[3]]
uix, uiy = uix + midw, uiy + midh uix, uiy = uix + midw, uiy + midh
@ -1333,26 +1369,11 @@ function AdvBoneSelectRadialRender(ent, bones, bonenodes, isresetmode)
local diff = math.abs((thisang - selangle + 180) % 360 - 180) local diff = math.abs((thisang - selangle + 180) % 360 - 180)
local isselected = diff < angborder and true or false local isselected = diff < angborder and true or false
local pos = ent:GetBonePosition(bone)
pos = pos:ToScreen()
local circ = table.Copy(RGM_CIRCLE)
for k, v in ipairs(circ) do
v.x = v.x + pos.x
v.y = v.y + pos.y
end
if isselected then if isselected then
surface.SetDrawColor(COLOR_BRIGHT_YELLOW:Unpack())
color = COLOR_BRIGHT_YELLOW color = COLOR_BRIGHT_YELLOW
SelectedBone = id SelectedBone = id
else
surface.SetDrawColor(color:Unpack())
end end
draw.NoTexture()
surface.DrawPoly(circ)
local ytextoffset = -14 local ytextoffset = -14
if uiy > (midh + 30) then ytextoffset = RGMFontSize + 14 end if uiy > (midh + 30) then ytextoffset = RGMFontSize + 14 end

View File

@ -96,7 +96,7 @@ tool.ragdollmover.lockang=Lock Rotation
tool.ragdollmover.unlockang=Unlock Rotation tool.ragdollmover.unlockang=Unlock Rotation
tool.ragdollmover.lockscale=Lock Scale tool.ragdollmover.lockscale=Lock Scale
tool.ragdollmover.unlockscale=Unlock Scale tool.ragdollmover.unlockscale=Unlock Scale
tool.ragdollmover.lockbone=Lock to this Bone tool.ragdollmover.lockbone=Lock Other Bone to this Bone
tool.ragdollmover.unlockbone=Unlock this Bone tool.ragdollmover.unlockbone=Unlock this Bone
tool.ragdollmover.freezebone=Freeze/Unfreeze this Bone tool.ragdollmover.freezebone=Freeze/Unfreeze this Bone

View File

@ -78,17 +78,17 @@ tool.ragdollmover.physmovetip=Манипулирование нефизичес
tool.ragdollmover.scalerelativemove=Относительное масштабирование дочерних костей tool.ragdollmover.scalerelativemove=Относительное масштабирование дочерних костей
tool.ragdollmover.resetmenu=Сброс tool.ragdollmover.resetmenu=Сброс
tool.ragdollmover.resetpos=Сброс позиции tool.ragdollmover.resetpos=Позиции
tool.ragdollmover.resetrot=Сброс вращения tool.ragdollmover.resetrot=Вращения
tool.ragdollmover.resetscale=Сброс масштабирования tool.ragdollmover.resetscale=Масштабирования
tool.ragdollmover.reset=Сброс всего tool.ragdollmover.reset=Всего
tool.ragdollmover.resetposchildren=+Сброс позиции потомка tool.ragdollmover.resetposchildren=+Позиций потомков
tool.ragdollmover.resetrotchildren=+Сброс вращения потомка tool.ragdollmover.resetrotchildren=+Вращения потомков
tool.ragdollmover.resetscalechildren=+Сброс масштабирования потомка tool.ragdollmover.resetscalechildren=+Масштабирования потомков
tool.ragdollmover.resetchildren=+Сброс потомка tool.ragdollmover.resetchildren=+Потомков
tool.ragdollmover.scalezero=Установить нулевой размер tool.ragdollmover.scalezero=Установить нулевой размер
tool.ragdollmover.bone=Кость tool.ragdollmover.bone=Кости
tool.ragdollmover.bonechildren=Кость + Потомок tool.ragdollmover.bonechildren=Кости + Потомков
tool.ragdollmover.lockpos=Заблокировать позицию tool.ragdollmover.lockpos=Заблокировать позицию
tool.ragdollmover.unlockpos=Разблокировать позицию tool.ragdollmover.unlockpos=Разблокировать позицию
@ -96,7 +96,7 @@ tool.ragdollmover.lockang=Заблокировать поворот
tool.ragdollmover.unlockang=Разблокировать поворот tool.ragdollmover.unlockang=Разблокировать поворот
tool.ragdollmover.lockscale=Заблокировать масштабирование tool.ragdollmover.lockscale=Заблокировать масштабирование
tool.ragdollmover.unlockscale=Разблокировать масштабирование tool.ragdollmover.unlockscale=Разблокировать масштабирование
tool.ragdollmover.lockbone=Привязать к этой кости tool.ragdollmover.lockbone=Привязать другую кость к этой кости
tool.ragdollmover.unlockbone=Разблокировать кость tool.ragdollmover.unlockbone=Разблокировать кость
tool.ragdollmover.freezebone=Заморозить/разморозить кость tool.ragdollmover.freezebone=Заморозить/разморозить кость