*Poze / Video:
*Link download / Code:
Code:
import time
import math
class ExpandedTaskBar(ui.ScriptWindow):
BUTTON_DRAGON_SOUL = 0
if app.ENABLE_SPECIAL_INVENTORY_SYSTEM:
BUTTON_SPECIAL_INVENTORY = 1
if app.ENABLE_GROWTH_PET_SYSTEM:
BUTTON_PET_INFO = 2
if app.ENABLE_EXCHANGE_LOG:
BUTTON_EXCHANGE = 3
if app.ENABLE_TELEPORT_WINDOW:
BUTTON_TELEPORT = 4
if app.ENABLE_BUFF_SYSTEM:
BUTTON_BUFF = 5
if app.ENABLE_REWARD_SYSTEM:
BUTTON_REWARD = 6
ANIM_STATE_OFF = 0
ANIM_STATE_RISE = 1
ANIM_STATE_EXPAND = 2
ANIM_STATE_COLLAPSE = 3
ANIM_STATE_FALL = 4
RISE_FALL_DURATION = 0.25
EXPAND_COLLAPSE_DURATION = 0.25
def _easeInOutCubic(self, p):
if p < 0.5:
return 4 * p * p * p
else:
f = (2 * p) - 2
return 0.5 * f * f * f + 1
def __init__(self):
ui.Window.__init__(self)
self.SetWindowName("ExpandedTaskBar")
self.exclusion_list = []
self.animState = self.ANIM_STATE_OFF
self.animStartTime = 0.0
self.finalX, self.finalY, self.finalWidth, self.finalHeight = 0, 0, 0, 0
self.button_order = []
self.animFunc = self._easeInOutCubic
def __del__(self):
ui.Window.__del__(self)
def LoadWindow(self):
try:
pyScrLoader = ui.PythonScriptLoader()
pyScrLoader.LoadScriptFile(self, uiScriptLocale.LOCALE_UISCRIPT_PATH + "ExpandedTaskBar.py")
except:
import exception
exception.Abort("ExpandedTaskBar.LoadWindow.LoadObject")
self.expandedTaskBarBoard = self.GetChild("ExpanedTaskBar_Board")
self.toggleButtonDict = {}
self.toggleButtonDict[ExpandedTaskBar.BUTTON_DRAGON_SOUL] = self.GetChild("DragonSoulButton")
if app.ENABLE_SPECIAL_INVENTORY_SYSTEM:
self.toggleButtonDict[ExpandedTaskBar.BUTTON_SPECIAL_INVENTORY] = self.GetChild("SpecialInventoryButton")
if app.ENABLE_GROWTH_PET_SYSTEM:
self.toggleButtonDict[ExpandedTaskBar.BUTTON_PET_INFO] = self.GetChild("PetInfoButton")
if app.ENABLE_EXCHANGE_LOG:
self.toggleButtonDict[ExpandedTaskBar.BUTTON_EXCHANGE] = self.GetChild("ExchangeButton")
if app.ENABLE_TELEPORT_WINDOW:
self.toggleButtonDict[ExpandedTaskBar.BUTTON_TELEPORT]=self.GetChild("TeleportButton")
if app.ENABLE_BUFF_SYSTEM:
self.toggleButtonDict[ExpandedTaskBar.BUTTON_BUFF]=self.GetChild("BuffButton")
if app.ENABLE_REWARD_SYSTEM:
self.toggleButtonDict[ExpandedTaskBar.BUTTON_REWARD] = self.GetChild("RewardButton")
for button in self.toggleButtonDict.values():
button.SetParent(self)
self.RePositionButton()
def RePositionButton(self):
self.button_order = []
if not ExpandedTaskBar.BUTTON_DRAGON_SOUL in self.exclusion_list:
self.button_order.append(ExpandedTaskBar.BUTTON_DRAGON_SOUL)
if app.ENABLE_SPECIAL_INVENTORY_SYSTEM:
if not ExpandedTaskBar.BUTTON_SPECIAL_INVENTORY in self.exclusion_list:
self.button_order.append(ExpandedTaskBar.BUTTON_SPECIAL_INVENTORY)
if app.ENABLE_GROWTH_PET_SYSTEM:
if not ExpandedTaskBar.BUTTON_PET_INFO in self.exclusion_list:
self.button_order.append(ExpandedTaskBar.BUTTON_PET_INFO)
if app.ENABLE_EXCHANGE_LOG:
if not ExpandedTaskBar.BUTTON_EXCHANGE in self.exclusion_list:
self.button_order.append(ExpandedTaskBar.BUTTON_EXCHANGE)
if app.ENABLE_TELEPORT_WINDOW:
if not ExpandedTaskBar.BUTTON_TELEPORT in self.exclusion_list:
self.button_order.append(ExpandedTaskBar.BUTTON_TELEPORT)
if app.ENABLE_BUFF_SYSTEM:
if not ExpandedTaskBar.BUTTON_BUFF in self.exclusion_list:
self.button_order.append(ExpandedTaskBar.BUTTON_BUFF)
if app.ENABLE_REWARD_SYSTEM:
if not ExpandedTaskBar.BUTTON_REWARD in self.exclusion_list:
self.button_order.append(ExpandedTaskBar.BUTTON_REWARD)
total_count = len(self.button_order)
self.finalHeight = self.expandedTaskBarBoard.GetHeight()
self.finalWidth = total_count * 36
self.finalX = (wndMgr.GetScreenWidth() - self.finalWidth) / 2
self.finalY = wndMgr.GetScreenHeight() - 74
def OnUpdate(self):
if self.animState == self.ANIM_STATE_OFF:
return
elapsedTime = time.clock() - self.animStartTime
if self.animState == self.ANIM_STATE_RISE:
progress = min(elapsedTime / self.RISE_FALL_DURATION, 1.0)
scale = self.animFunc(progress)
currentY = (self.finalY + self.finalHeight) - (self.finalHeight * scale)
self.SetPosition((wndMgr.GetScreenWidth() - 36) / 2, currentY)
if progress >= 1.0:
self.animState = self.ANIM_STATE_EXPAND
self.animStartTime = time.clock()
elif self.animState == self.ANIM_STATE_EXPAND or self.animState == self.ANIM_STATE_COLLAPSE:
progress = min(elapsedTime / self.EXPAND_COLLAPSE_DURATION, 1.0)
scale = self.animFunc(progress)
if self.animState == self.ANIM_STATE_COLLAPSE:
scale = 1.0 - scale
currentWidth = 36 + ((self.finalWidth - 36) * scale)
currentX = (wndMgr.GetScreenWidth() - currentWidth) / 2
self.SetPosition(currentX, self.finalY)
self.SetSize(currentWidth, self.finalHeight)
self.expandedTaskBarBoard.SetSize(currentWidth, self.finalHeight)
start_pos = (currentWidth - 36) / 2
for i, key in enumerate(self.button_order):
target_pos = i * 36
pos_x = start_pos + ((target_pos - start_pos) * scale)
if key in self.toggleButtonDict:
self.toggleButtonDict[key].SetPosition(pos_x, 0)
if progress >= 1.0:
if self.animState == self.ANIM_STATE_EXPAND:
self.animState = self.ANIM_STATE_OFF
else:
self.animState = self.ANIM_STATE_FALL
self.animStartTime = time.clock()
elif self.animState == self.ANIM_STATE_FALL:
progress = min(elapsedTime / self.RISE_FALL_DURATION, 1.0)
scale = 1.0 - self.animFunc(progress)
currentY = (self.finalY + self.finalHeight) - (self.finalHeight * scale)
self.SetPosition((wndMgr.GetScreenWidth() - 36) / 2, currentY)
if progress >= 1.0:
self.animState = self.ANIM_STATE_OFF
ui.ScriptWindow.Hide(self)
def Show(self):
if self.IsShow() and self.animState != self.ANIM_STATE_OFF:
return
self.RePositionButton()
self.SetSize(36, self.finalHeight)
self.SetPosition((wndMgr.GetScreenWidth() - 36) / 2, self.finalY + self.finalHeight)
for key in self.toggleButtonDict:
self.toggleButtonDict[key].SetPosition(0, 0)
ui.ScriptWindow.Show(self)
self.animState = self.ANIM_STATE_RISE
self.animStartTime = time.clock()
self.SetTop()
def Close(self):
if not self.IsShow() or self.animState in (self.ANIM_STATE_COLLAPSE, self.ANIM_STATE_FALL):
return
self.animState = self.ANIM_STATE_COLLAPSE
self.animStartTime = time.clock()
def SetTop(self):
super(ExpandedTaskBar, self).SetTop()
for button in self.toggleButtonDict.values():
button.SetTop()
def SetToolTipText(self, eButton, text):
if eButton in self.toggleButtonDict:
self.toggleButtonDict[eButton].SetToolTipText(text)
def SetToggleButtonEvent(self, eButton, kEventFunc):
if eButton in self.toggleButtonDict:
self.toggleButtonDict[eButton].SetEvent(kEventFunc)
def OnPressEscapeKey(self):
self.Close()
return True

