Files
rrttm/src/text.py
2026-10-17 15:31:14 +02:00

235 lines
7.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import arcade
import assets
class Character:
def __init__(self, visible, codepoint=None, width=None, y_offset=None, display=None):
self.visible = visible
if visible:
self.codepoint = codepoint # A szöveg atlaszba való index
self.width = width # A karakter szélessége
self.y_offset = y_offset # A karakter függőleges csúsztatása
else:
self.display = display # Egy függvény amely akkor fut le amikor a speciális karaktert megjelenítik
class TextRenderer:
def __init__(self, x, y, width=None, center=False):
self.sprites = []
self.base_x = x
self.base_y = y
self.width = width
self.center = center
self.text = ""
self.textptr = 0
self.x = x
self.y = y
def reset(self, text):
self.text = text
self.textptr = 0
self.sprites = []
self.x = self.base_x
self.y = self.base_y
def amend(self, text):
self.text = self.text + text
def type_tick(self):
if self.textptr >= len(self.text):
return True
try:
char = texttable[self.text[self.textptr]]
except:
char = texttable['?']
if char.visible:
c = char.codepoint
texture = assets.sprites["font"].get_texture(arcade.LBWH((c % 16) * 16, (c // 16) * 12, char.width, 12))
if self.width and self.x >= self.base_x + self.width:
self.y -= 13
self.x = self.base_x
self.sprites.append([
texture,
arcade.LBWH(
self.x,
self.y + char.y_offset,
char.width,
12
),
char.width
])
self.x += char.width
else:
try:
char.display(self)
except e:
print(f"Hiba: kivétel egy display függvényben: {e}")
self.textptr += 1
if self.textptr >= len(self.text):
return True
else:
return False
def type_all(self):
while not self.type_tick():
pass
def move(self, x, y):
for s in self.sprites:
s[1] = s[1].move(x, y)
def render(self, discoloration=(255,255,255)):
offset = -(sum(s[2] for s in self.sprites) // 2) if self.center else 0
for s in self.sprites:
arcade.draw_texture_rect(
s[0],
s[1].move(offset, 0),
pixelated=True,
color=arcade.types.Color(*discoloration)
)
# a \n display függvénye
def newline(self):
self.y -= 13
self.x = self.base_x
# A szövegtábla tartalmazza az össtes karakter tulajdonságait
texttable = {
# Szóköz
' ': Character(True, 0 , 4, 0 ),
# Írásjelek
'!': Character(True, 33 , 3, 0 ),
'"': Character(True, 34 , 4, 0 ),
'#': Character(True, 35 , 9, 0 ),
'$': Character(True, 36 , 9, 0 ),
'%': Character(True, 37 ,10, 0 ),
'&': Character(True, 38 , 8, 0 ),
'\'': Character(True, 39 , 3, 0 ),
'(': Character(True, 40 , 4, -1),
')': Character(True, 41 , 4, -1),
'*': Character(True, 42 , 4, 0 ),
'+': Character(True, 43 , 6, 0 ),
',': Character(True, 44 , 3, -2),
'-': Character(True, 45 , 4, 0 ),
'.': Character(True, 46 , 2, 0 ),
'/': Character(True, 47 , 5, 0 ),
':': Character(True, 58 , 2, 0 ),
';': Character(True, 59 , 3, -2),
'<': Character(True, 60 , 7, 0 ),
'=': Character(True, 61 , 6, 0 ),
'>': Character(True, 62 , 7, 0 ),
'?': Character(True, 63 , 5, 0 ),
'▪': Character(True, 64 , 3, 0 ),
'[': Character(True, 91 , 3, -1),
'♩': Character(True, 92 , 6, 0 ),
']': Character(True, 93 , 3, -1),
'“': Character(True, 124, 5, 0 ),
'”': Character(True, 123, 5, 0 ),
'●': Character(True, 125, 6, 0 ),
'~': Character(True, 126, 7, 0 ),
# Számjegyek
'0': Character(True, 48 , 5, 0 ),
'1': Character(True, 49 , 3, 0 ),
'2': Character(True, 50 , 5, 0 ),
'3': Character(True, 51 , 5, 0 ),
'4': Character(True, 52 , 5, 0 ),
'5': Character(True, 53 , 5, 0 ),
'6': Character(True, 54 , 5, 0 ),
'7': Character(True, 55 , 5, 0 ),
'8': Character(True, 56 , 5, 0 ),
'9': Character(True, 57 , 5, 0 ),
# Nagy betűk
'A': Character(True, 65 , 7, 0 ),
'B': Character(True, 66 , 6, 0 ),
'C': Character(True, 67 , 6, 0 ),
'D': Character(True, 68 , 6, 0 ),
'E': Character(True, 69 , 5, 0 ),
'F': Character(True, 70 , 5, 0 ),
'G': Character(True, 71 , 7, 0 ),
'H': Character(True, 72 , 6, 0 ),
'I': Character(True, 73 , 2, 0 ),
'J': Character(True, 74 , 5, 0 ),
'K': Character(True, 75 , 6, 0 ),
'L': Character(True, 76 , 5, 0 ),
'M': Character(True, 77 , 8, 0 ),
'N': Character(True, 78 , 6, 0 ),
'O': Character(True, 79 , 6, 0 ),
'P': Character(True, 80 , 6, 0 ),
'Q': Character(True, 81 , 6, 0 ),
'R': Character(True, 82 , 6, 0 ),
'S': Character(True, 83 , 6, 0 ),
'T': Character(True, 84 , 6, 0 ),
'U': Character(True, 85 , 6, 0 ),
'V': Character(True, 86 , 7, 0 ),
'W': Character(True, 87 , 8, 0 ),
'X': Character(True, 88 , 6, 0 ),
'Y': Character(True, 89 , 6, 0 ),
'Z': Character(True, 90 , 5, 0 ),
# Kis betűk
'a': Character(True, 97 , 5, 0 ),
'b': Character(True, 98 , 5, 0 ),
'c': Character(True, 99 , 5, 0 ),
'd': Character(True, 100, 5, 0 ),
'e': Character(True, 101, 5, 0 ),
'f': Character(True, 102, 4, 0 ),
'g': Character(True, 103, 5, -3),
'h': Character(True, 104, 5, 0 ),
'i': Character(True, 105, 2, 0 ),
'j': Character(True, 106, 3, -3),
'k': Character(True, 107, 5, 0 ),
'l': Character(True, 108, 2, 0 ),
'm': Character(True, 109, 8, 0 ),
'n': Character(True, 110, 5, 0 ),
'o': Character(True, 111, 5, 0 ),
'p': Character(True, 112, 5, -3),
'q': Character(True, 113, 5, -3),
'r': Character(True, 114, 4, 0 ),
's': Character(True, 115, 5, 0 ),
't': Character(True, 116, 4, 0 ),
'u': Character(True, 117, 4, 0 ),
'v': Character(True, 118, 6, 0 ),
'w': Character(True, 119, 8, 0 ),
'x': Character(True, 120, 5, 0 ),
'y': Character(True, 121, 5, -3),
'z': Character(True, 122, 5, 0 ),
# Magyar ékezetes betűk
'Á': Character(True, 1 , 7, 0 ),
'á': Character(True, 2 , 5, 0 ),
'É': Character(True, 3 , 5, 0 ),
'é': Character(True, 4 , 5, 0 ),
'Í': Character(True, 5 , 3, 0 ),
'í': Character(True, 6 , 3, 0 ),
'Ó': Character(True, 7 , 6, 0 ),
'ó': Character(True, 8 , 5, 0 ),
'Ö': Character(True, 9 , 6, 0 ),
'ö': Character(True, 10 , 5, 0 ),
'Ő': Character(True, 11 , 6, 0 ),
'ő': Character(True, 12 , 5, 0 ),
'Ú': Character(True, 13 , 6, 0 ),
'ú': Character(True, 14 , 5, 0 ),
'Ü': Character(True, 15 , 6, 0 ),
'ü': Character(True, 16 , 5, 0 ),
'Ű': Character(True, 17 , 6, 0 ),
'ű': Character(True, 18 , 5, 0 ),
# Görög betűk
'α': Character(True, 94 , 6, 0),
'β': Character(True, 95 , 5, 0),
'γ': Character(True, 96 , 7, 0),
'Ω': Character(True, 127, 6, 0),
# Speciális karakterek
'\n': Character(False, 0, 0, 0, display=newline)
}