54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
import pygame
|
|
import math
|
|
from . import assets
|
|
|
|
# Returns a surface that can be blitted
|
|
def make_element(defn, scale):
|
|
element = None
|
|
|
|
if defn["type"] == "text":
|
|
defaults = {
|
|
"font": "Times New Roman",
|
|
"color": (255, 255, 255),
|
|
"size": 45,
|
|
}
|
|
for key in defaults:
|
|
if not key in defn:
|
|
defn[key] = defaults[key]
|
|
element = pygame.font.SysFont(defn["font"], defn["size"]).render(str(defn["text"]), False, defn["color"])
|
|
elif defn["type"] == "image":
|
|
if "scale" in defn:
|
|
scale *= defn["scale"]
|
|
element = assets.get(defn["texture"])
|
|
|
|
if element != None:
|
|
rect = element.get_size()
|
|
return pygame.transform.scale(element, (math.floor(rect[0] * scale), math.floor(rect[1] * scale)))
|
|
|
|
class Hud:
|
|
elements = {}
|
|
|
|
def add(self, name, pos, definition):
|
|
self.elements[name] = [pos, definition]
|
|
|
|
def change(self, name, definition):
|
|
for key in definition:
|
|
self.elements[name][1][key] = definition[key]
|
|
|
|
def set_pos(self, name, pos):
|
|
self.elements[name][0] = pos
|
|
|
|
def remove(self, name):
|
|
del self.elements[name]
|
|
|
|
def render(self, surface, scale=1.0):
|
|
for name in self.elements:
|
|
element = self.elements[name]
|
|
pos = [element[0][0], element[0][1]]
|
|
for axis in range(len(pos)):
|
|
p = pos[axis]
|
|
if p < 1 and p > 0: # Decimal -- Use percentage
|
|
size = surface.get_size()
|
|
pos[axis] = size[axis] * pos[axis]
|
|
surface.blit(make_element(element[1], scale), pos)
|