Skip to content
Snippets Groups Projects
hud.py 3.71 KiB
import math
import time
from ost import gfx
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtOpenGL import *

class HUD(QObject):
  def __init__(self, parent=None):
    QObject.__init__(self,parent)
    self.objects = list()
    
  def Add(self, hud_object):
    if hud_object in self.objects:
      self.objects.remove(hud_object)
    self.objects.append(hud_object)
    hud_object.Appended(self)
    self.emit(SIGNAL('HUDChanged()'))

  def Remove(self, hud_object):
    if hud_object in self.objects:
      self.objects.remove(hud_object)
      self.emit(SIGNAL('HUDChanged()'))
        
  def Paint(self, painter):
    for hud_object in self.objects:
      hud_object.Paint(painter)
  
  def Clear(self):
    del(self.objects[:])
  
class HUDObject(QObject):
  def __init__(self, time, parent=None):
    QObject.__init__(self, parent)
    self.time = time
    self.timer = QTimer()
    self.timer.setSingleShot(True)
    self.hud = None
    self.endtime = None
    QObject.connect(self.timer, SIGNAL("timeout()"), self.Timeout)
    
  def Appended(self, hud):
    self.hud = hud
    if self.time >= 0:
      self.timer.start(self.time)
      self.endtime = float(time.time()+(self.time)/1000.0)
    
  def Timeout(self):
    self.timer.stop()
    if self.hud is not None:
      self.hud.Remove(self)
    self.emit(SIGNAL('Finished()'))
    
  def Reset(self):
    self.timer.stop()
    if self.hud is not None:
      self.hud.Add(self)
    
class TextHUDObject(HUDObject):
  def __init__(self, text, pos, time, color=QColor(255,255,255), font=QFont("Verdana"), parent=None):
    HUDObject.__init__(self,time,parent)
    self.text = text
    self.pos = pos
    self.rect = None
    self.color = color
    self.font = font
  
  def Paint(self, painter):
    if self.endtime is not None:
      rem_time = (self.endtime-float(time.time()))*1000.0
      if rem_time > 0:
        self.color.setAlpha((rem_time/self.time)*255)
    painter.setPen(QPen(self.color, Qt.SolidLine))
    painter.setFont(self.font)
    if self.pos is not None:
      painter.drawText(self.pos, self.text)
    if self.rect is not None:
      painter.drawText(self.rect, self.align, self.text)

class RectTextHUDObject(HUDObject):
  def __init__(self, text, rect, time, align=Qt.AlignCenter, color=QColor(255,255,255), font=QFont("Verdana"), parent=None):
    HUDObject.__init__(self,time,parent)
    self.text = text
    self.rect = rect
    self.align = align
    self.color = color
    self.font = font
    
  def Paint(self, painter):
    if self.endtime is not None:
      rem_time = (self.endtime-float(time.time()))*1000.0
      if rem_time > 0:
        self.color.setAlpha((rem_time/self.time)*255)
    painter.setPen(QPen(self.color, Qt.SolidLine))
    painter.setFont(self.font)
    painter.drawText(self.rect, self.align, self.text)

class RectHUDObject(HUDObject):
  def __init__(self, time, rect, fade=False, bg_color=QColor(255,255,255), border_color=QColor(255,255,255), parent=None):
    HUDObject.__init__(self,time,parent)
    self.rect = rect
    self.fade = fade
    self.bg_color = bg_color
    self.border_color = border_color

  def Paint(self, painter):
    if self.fade:
      rem_time = (self.endtime-float(time.time()))*1000.0
      if rem_time >0:
        alpha = (rem_time/self.time)*255
        self.bg_color.setAlpha(alpha)
        self.border_color.setAlpha(alpha)
    painter.setPen(self.border_color)
    painter.setBrush(self.bg_color)
    painter.drawRect(self.rect)
    painter.setPen(QPen(self.border_color, Qt.SolidLine))

class ImgHUDObject(HUDObject):
  def __init__(self, time, pos, img_loc="", parent=None):
    HUDObject.__init__(self,time,parent)
    self.pos = pos
    self.img = QImage(img_loc)

  def Paint(self, painter):
    painter.drawImage(self.pos, self.img)