Quote:
Originally Posted by King Sora
Oi oi!
Ich habe für dich Beispiele angefertigt wie du die slices zu managen hast, bzw. managen solltest. Ich finde diese "Einzelbilderlogik" wirklich richtig schlecht, ich musste mich schon überwinden es bei der MP-Bar so zu slicen.
Im Anhang findest du Beispiele (Video, Photoshop Datei und ein Bild) wie du die Controls anordnen solltest und eine kleine Projektmappe (C#) wie man am besten die HP-Bar umsetzen sollte. - Ich kann leider nur C# und kein Python xD
Lg. Sora
|
In C# / C++ ist das kein Problem, das weis ich selbst zu gut.
Jedoch ist es in der bestehenden Metin2 Funktionalität bisher leider nicht bzw kaum ohne grössere Performance Verluste möglich (Es sei denn der Code soll auch n C++ Part fürn Source beinhalten, dann ist das wiederum recht einfach)
Glaub mir freiwillig mach ichs auch nicht mit Bildern ^^
Ich sag nur gleich vorneweg: Das Tool von Avenue hat das ganze komisch convertiert.
z.B. haben die einzelnen Bilder immer einen minimalistischen "Rand" also ein Bereich der nicht vollkommen Transparent ist, das beeinträchtigt das Gesamtbild, allerdings hab ich grade nichts anderes, daher werd ich evtl später nochmal ein paar feinjustierungen machen.
Aktueller aufbau:
eine Art 2. ui.py in der z.B. die Taskbar als ganzes Vertreten ist, in dieser Klasse jedoch aufgeteilt.
z.B. Minimap: illumina.TaskBar.MiniMap
# Edit hab mich soeben entschlossen die Teile des Codes immer wieder zu posten, schliesslich bin ich schon länger aus Python raus und evtl findet jemand was, was man besser machen könnte:
Meine Bisherige Taskbar:
[Only registered and activated users can see links. Click Here To Register...]
Code:
class TaskBar(Window):
class MiniMap(Window):
class MapTextToolTip(Window):
def __init__(self):
ui.Window.__init__(self)
textLine = ui.TextLine()
textLine.SetParent(self)
textLine.SetHorizontalAlignCenter()
textLine.SetOutline()
textLine.SetHorizontalAlignRight()
textLine.Show()
self.textLine = textLine
def __del__(self):
ui.Window.__del__(self)
def SetText(self, text):
self.textLine.SetText(text)
def SetTooltipPosition(self, PosX, PosY):
if localeInfo.IsARABIC():
w, h = self.textLine.GetTextSize()
self.textLine.SetPosition(PosX - w - 5, PosY)
else:
self.textLine.SetPosition(PosX - 5, PosY)
def SetTextColor(self, TextColor):
self.textLine.SetPackedFontColor(TextColor)
def GetTextSize(self):
return self.textLine.GetTextSize()
def __init__(self):
ui.Window.__init__(self)
self.AddFlag("not_pick")
self.tooltipInfo = None
self.btnAtlas = None
self.Show()
def OnUpdate(self):
miniMap.UpdateAtlas()
self.UpdateMiniMapToolTip()
def UpdateMiniMapToolTip(self):
(mouseX, mouseY) = wndMgr.GetMousePosition()
if self.tooltipInfo:
if True == CustomIsIn(mouseX, mouseY, self):
(bFind, sName, iPosX, iPosY, dwTextColor) = miniMap.GetInfo(mouseX, mouseY)
if bFind == 0:
self.tooltipInfo.Hide()
elif not self.CanSeeInfo:
self.tooltipInfo.SetText("%s(%s)" % (sName, localeInfo.UI_POS_UNKNOWN))
self.tooltipInfo.SetTooltipPosition(mouseX - 5, mouseY)
self.tooltipInfo.SetTextColor(dwTextColor)
self.tooltipInfo.Show()
else:
if localeInfo.IsARABIC() and sName[-1].isalnum():
self.tooltipInfo.SetText("(%s)%d, %d" % (sName, iPosX, iPosY))
else:
self.tooltipInfo.SetText("%s(%d, %d)" % (sName, iPosX, iPosY))
self.tooltipInfo.SetTooltipPosition(mouseX - 5, mouseY)
self.tooltipInfo.SetTextColor(dwTextColor)
self.tooltipInfo.Show()
else:
self.tooltipInfo.Hide()
def AddToolTip(self, parent):
self.tooltipInfo = self.MapTextToolTip()
self.tooltipInfo.SetParent(parent)
self.tooltipInfo.Hide()
def OnRender(self):
(x, y) = self.GetGlobalPosition()
fx = float(x)
fy = float(y)
miniMap.Render(fx, fy)
def HideAtlas(self):
miniMap.HideAtlas()
def BuildButtons(self, parent):
self.btnAtlas = Button()
self.btnAtlas.SetParent(parent)
self.btnAtlas.SetUpVisual("illumina/controls/special/taskbar/btn_atlas_01_normal.tga")
self.btnAtlas.SetOverVisual("illumina/controls/special/taskbar/btn_atlas_02_hover.tga")
self.btnAtlas.SetDownVisual("illumina/controls/special/taskbar/btn_atlas_03_active.tga")
self.btnAtlas.SetToolTipText(localeInfo.MINIMAP_SHOW_AREAMAP, 0, -25)
self.btnAtlas.SetEvent(ui.__mem_func__(self.ShowAtlas))
self.btnAtlas.SetPosition(191, 19)
self.btnAtlas.Show()
def ShowAtlas(self):
miniMap.ShowAtlas()
def CanSeeInfo(self):
return True
def GetMapsUnallowed(self):
return {
"metin2_map_monkeydungeon" : FALSE,
"metin2_map_monkeydungeon_02" : FALSE,
"metin2_map_monkeydungeon_03" : FALSE,
"metin2_map_devilsCatacomb" : FALSE,
}
class ExpBar(Window):
image = None
class TextToolTip(ui.Window):
def __init__(self):
ui.Window.__init__(self, "TOP_MOST")
textLine = ui.TextLine()
textLine.SetParent(self)
textLine.SetHorizontalAlignCenter()
textLine.SetOutline()
textLine.Show()
self.textLine = textLine
def __del__(self):
ui.Window.__del__(self)
def SetText(self, text):
self.textLine.SetText(text)
def OnRender(self):
(mouseX, mouseY) = wndMgr.GetMousePosition()
self.textLine.SetPosition(mouseX, mouseY - 15)
def __init__(self):
Window.__init__(self)
self.image = ExpandedImageBox()
self.image.AddFlag("not_pick")
self.image.LoadImage("illumina/controls/special/taskbar/progress_exp_full.tga")
self.image.SetParent(self)
self.image.Show()
self.SetSize(self.image.GetWidth(), self.image.GetHeight())
self.SetPosition(241, 89)
self.Show()
def __del__(self):
self.Hide()
Window.__del__(self)
def AddToolTip(self, parent):
self.tooltipInfo = self.TextToolTip()
self.tooltipInfo.SetParent(parent)
self.tooltipInfo.Hide()
def OnUpdate(self):
import player
curEXP = unsigned32(player.GetStatus(player.EXP))
nextEXP = unsigned32(player.GetStatus(player.NEXT_EXP))
Percentage = -1 + float(curEXP)/float(nextEXP)
self.image.SetRenderingRect(0.0, Percentage, 0.0, 0.0)
(mouseX, mouseY) = wndMgr.GetMousePosition()
if self.tooltipInfo:
if True == CustomIsIn(mouseX, mouseY, self):
self.tooltipInfo.Show()
self.tooltipInfo.SetText("%s : %.2f%%" % (localeInfo.TASKBAR_EXP, float(curEXP) / max(1, float(nextEXP)) * 100))
else:
self.tooltipInfo.Hide()
def __init__(self):
Window.__init__(self)
self.path = "illumina/controls/special/taskbar/"
self.width = max(1280, wndMgr.GetScreenWidth())
self.height = 158
self.repeat = 220
self.bar = None
self.atlas = None
self.exp_Bar = None
self.BuildMiniMap()
self.BuildBar()
self.BuildExpBar()
self.BuildButtons()
self.SetPosition( (wndMgr.GetScreenWidth() - self.width )/2,wndMgr.GetScreenHeight()-self.height)
self.SetSize(self.width, self.height)
self.Show()
self.BuildToolTips()
def __del__(self):
self.Hide()
Window.__del__(self)
def BuildBar(self):
self.bar = []
files = ["bar_" +dir+".tga" for dir in ("repeat","left", "middle", "right", ) ]
for x in files:
part = ExpandedImageBox()
part.AddFlag("not_pick")
part.LoadImage("illumina/controls/special/taskbar/" + x)
part.SetParent(self)
part.Show()
self.bar.append(part)
self.bar[0].SetPosition(self.bar[1].GetWidth() ,self.height - self.bar[0].GetHeight())
self.bar[0].SetPercentage(float(self.width) - float(self.bar[1].GetWidth()) - float(self.bar[3].GetWidth()), float(self.repeat))
self.bar[1].SetPosition(0,self.height -124)
self.bar[2].SetPosition( (self.width - self.bar[2].GetWidth()) / 2 , self.height - self.bar[2].GetHeight())
self.bar[3].SetPosition(self.width - self.bar[3].GetWidth(),0)
def BuildMiniMap(self):
miniMap.Create()
miniMap.SetScale(2.0)
miniMap.RegisterAtlasWindow(self)
self.Atlas = self.MiniMap()
self.Atlas.SetParent(self)
self.Atlas.SetSize(128, 128)
self.Atlas.SetPosition(self.width - 280, 15)
self.Atlas.Show()
def BuildExpBar(self):
self.exp_Bar = self.ExpBar()
self.exp_Bar.SetParent(self.bar[1])
def BuildButtons(self):
self.Atlas.BuildButtons(self.bar[3])
def BuildToolTips(self):
self.Atlas.AddToolTip(self)
self.exp_Bar.AddToolTip(self)
Falls interesse besteht kann ich auch mal mein LiveDevelopement Script rausgeben.