diff --git a/res/sprite/font.png b/res/sprite/font.png index 74bbd2f..b30c57a 100644 Binary files a/res/sprite/font.png and b/res/sprite/font.png differ diff --git a/src/assets.py b/src/assets.py index bc66f02..4bac3c7 100644 --- a/src/assets.py +++ b/src/assets.py @@ -5,4 +5,6 @@ sprites = { "louisd": arcade.load_texture("res/sprite/louisd.png"), "louisl": arcade.load_texture("res/sprite/louisl.png"), "louisb": arcade.load_texture("res/sprite/louisb.png"), + "cursor": arcade.load_texture("res/sprite/handcursor.png"), + "font": arcade.load_spritesheet("res/sprite/font.png"), } diff --git a/src/gamestates/title.py b/src/gamestates/title.py index 9202635..9243416 100644 --- a/src/gamestates/title.py +++ b/src/gamestates/title.py @@ -1,25 +1,15 @@ import arcade import assets +import text + +text = text.TextRenderer(0, 100, 200) def switch(): - print("Hello I'm switched") + text.reset("●A bölcs, gyors, fürge róka zöld ágon ül, miközben egy tyúk csípős paprikát főz, és egy whiskyvel teli dobozt cipelő dzsesszzenész kvázi jókedvűen fütyörészik.") + text.type_all() def update(dt): pass def draw(game): - arcade.draw_rect_filled( - arcade.LBWH(0, 0, game.screen_width, game.screen_height), - arcade.color.BLUE, - ) - - arcade.draw_texture_rect( - assets.sprites["louisu"], - arcade.LBWH( - 0, - 0, - assets.sprites["louisu"].width, - assets.sprites["louisu"].height - ), - pixelated=True - ) + text.render() diff --git a/src/text.py b/src/text.py index 1d4c47d..f173d29 100644 --- a/src/text.py +++ b/src/text.py @@ -1,3 +1,5 @@ +import arcade +import assets class Character: def __init__(self, visible, codepoint=None, width=None, y_offset=None, display=None): @@ -9,6 +11,83 @@ class Character: 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): + self.sprites = [] + self.base_x = x + self.base_y = y + self.width = width + self.text = "" + self.textptr = 0 + self.x = x + self.y = y + + def reset(self, text): + self.text = text + self.textptr = 0 + self.sprites = [] + + 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 + ) + ]) + + 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 render(self): + for s in self.sprites: + arcade.draw_texture_rect( + s[0], + s[1], + pixelated=True + ) + +# 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 @@ -92,10 +171,10 @@ texttable = { 'd': Character(True, 100, 5, 0 ), 'e': Character(True, 101, 5, 0 ), 'f': Character(True, 102, 4, 0 ), - 'g': Character(True, 103, 5, 0 ), + 'g': Character(True, 103, 5, -3), 'h': Character(True, 104, 5, 0 ), 'i': Character(True, 105, 2, 0 ), - 'j': Character(True, 106, 3, 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 ), @@ -105,7 +184,7 @@ texttable = { 'q': Character(True, 113, 5, -3), 'r': Character(True, 114, 4, 0 ), 's': Character(True, 115, 5, 0 ), - 't': Character(True, 116, 3, 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 ), @@ -134,8 +213,12 @@ texttable = { 'ű': Character(True, 18 , 5, 0 ), # Görög betűk - 'α': Character(True, 94 , 3, 0), - 'β': Character(True, 95 , 3, 0), - 'γ': Character(True, 96 , 3, 0), - 'Ω': Character(True, 127, 3, 0), + 'α': 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) } +