forked from ayte/PinmikPanik
80 lines
3.1 KiB
Python
80 lines
3.1 KiB
Python
|
import gamedata.objects.base as base
|
||
|
|
||
|
class Slider(base.BaseObject):
|
||
|
def __init__(self,x,y,game,w=100,h=64,folder="base"):
|
||
|
super().__init__(x,y,game,w,h) # initialise l'objet de base avec les bons arguments
|
||
|
|
||
|
self.posttext = " %"
|
||
|
|
||
|
self.max = 100
|
||
|
|
||
|
self.currentvalue = self.getvalue()
|
||
|
|
||
|
self.bgsprite = self.gensprite(w,h,folder)
|
||
|
|
||
|
self.sprite = game.pygame.transform.scale(game.sprite_lib["gui/slider/"+folder+"/circle.png"],(h,h))
|
||
|
|
||
|
self.maxwidth = w-h
|
||
|
self.rect = [self.getvalue()/self.max*(self.maxwidth)+self.baserect[0],self.baserect[1],h,h]
|
||
|
|
||
|
self.sfx = game.sound_lib["sfx/click.wav"]
|
||
|
|
||
|
self.dragged = False
|
||
|
|
||
|
def change(self):
|
||
|
print("Value : "+self.currentvalue)
|
||
|
|
||
|
def getvalue(self):
|
||
|
return self.game.globals["sfxvolume"]*100
|
||
|
|
||
|
def postovalue(self):
|
||
|
self.currentvalue = (self.rect[0]-self.baserect[0])/(self.maxwidth)*self.max
|
||
|
|
||
|
def gensprite(self,w,h,folder):
|
||
|
game = self.game
|
||
|
left = game.sprite_lib["gui/slider/"+folder+"/left.png"]
|
||
|
left = game.pygame.transform.scale(left,(round(h/left.get_height()*left.get_width()),h))
|
||
|
right = game.sprite_lib["gui/slider/"+folder+"/right.png"]
|
||
|
right = game.pygame.transform.scale(right,(round(h/right.get_height()*right.get_width()),h))
|
||
|
|
||
|
middle = game.sprite_lib["gui/slider/"+folder+"/middle.png"]
|
||
|
middle = game.pygame.transform.scale(middle,(w-left.get_width()-right.get_width(),h))
|
||
|
|
||
|
surface = game.pygame.Surface((w,h),game.pygame.SRCALPHA)
|
||
|
surface.blit(left,(0,0))
|
||
|
surface.blit(middle,(left.get_width(),0))
|
||
|
surface.blit(right,(left.get_width()+middle.get_width(),0))
|
||
|
|
||
|
return surface
|
||
|
|
||
|
|
||
|
def step(self):
|
||
|
game = self.game
|
||
|
if self.rect[0]<=game.inputs["mouse"]["pos"][0]+game.globals["camerax"]<=self.rect[0]+self.rect[2]:
|
||
|
if self.rect[1]<=game.inputs["mouse"]["pos"][1]+game.globals["cameray"]<=self.rect[1]+self.rect[3]:
|
||
|
if game.inputs["mouse"]["click"]>1:
|
||
|
self.rect[0] = game.inputs["mouse"]["pos"][0]+game.globals["camerax"]-self.rect[3]/2
|
||
|
self.rect[0] = min(self.rect[0],self.baserect[0]+self.maxwidth)
|
||
|
self.rect[0] = max(self.rect[0],self.baserect[0])
|
||
|
self.dragged = True
|
||
|
|
||
|
self.postovalue()
|
||
|
|
||
|
if self.dragged and game.inputs["mouse"]["click"]==0:
|
||
|
# Le slider a été laché
|
||
|
self.change()
|
||
|
self.dragged = False
|
||
|
|
||
|
def draw(self):
|
||
|
|
||
|
game = self.game
|
||
|
|
||
|
game.window.blit(self.bgsprite,(self.baserect[0]-game.globals["camerax"],self.baserect[1]-game.globals["cameray"]))
|
||
|
game.window.blit(self.sprite,(self.rect[0]-game.globals["camerax"],self.rect[1]-game.globals["cameray"]))
|
||
|
|
||
|
|
||
|
txt = game.fontfile.render(str(round(self.currentvalue))+self.posttext,False,[255]*3)
|
||
|
px = self.baserect[0]+self.baserect[2]+50-game.globals["camerax"]
|
||
|
py = self.rect[1]+self.rect[3]/2-txt.get_height()/2-game.globals["camerax"]
|
||
|
game.window.blit(txt,[px,py])
|