zoria/src/hud.py

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)