diff --git a/res/sprite/font.png b/res/sprite/font.png new file mode 100644 index 0000000..74bbd2f Binary files /dev/null and b/res/sprite/font.png differ diff --git a/src/gamestates/none.py b/src/gamestates/none.py index 5103709..52bddd2 100644 --- a/src/gamestates/none.py +++ b/src/gamestates/none.py @@ -1,11 +1,5 @@ import gamestate -def switch(): - pass - +# Azért létezik ez a "none" gamestate hogy meghívja az elsö gamestate init() funkcióját def update(dt): gamestate.switch_gamestate("title") - -def draw(): - pass - diff --git a/src/main.py b/src/main.py index 6f5866e..5655542 100644 --- a/src/main.py +++ b/src/main.py @@ -1,66 +1,12 @@ import arcade import assets import gamestate +import renderers +import text SCREEN_WIDTH = 256 SCREEN_HEIGHT = 224 -class TextureRenderer: - def __init__(self, ctx): - self.ctx = ctx - - self.program = ctx.program( - vertex_shader=""" - #version 330 - - in vec2 in_vert; - in vec2 in_uv; - - out vec2 uv; - - uniform vec2 screen_size; - uniform vec4 bounds; - - void main() { - // Convert quad coordinates from [-1, 1] to [0, 1] - vec2 local = in_vert * 0.5 + 0.5; - - // bounds = x, y, width, height in pixels - vec2 pixel_pos = bounds.xy + local * bounds.zw; - - // Convert pixels to NDC - vec2 ndc = pixel_pos / screen_size * 2.0 - 1.0; - - gl_Position = vec4(ndc, 0.0, 1.0); - uv = in_uv; - } - """, - fragment_shader=""" - #version 330 - - uniform sampler2D tex; - - in vec2 uv; - out vec4 color; - - void main() { - color = texture(tex, uv); - } - """, - ) - - self.quad = arcade.gl.geometry.quad_2d_fs() - - def render(self, texture, x, y, width, height): - self.program["screen_size"] = (self.ctx.screen.width, - self.ctx.screen.height) - self.program["bounds"] = (x, y, width, height) - - texture.use(0) - self.program["tex"] = 0 - - self.quad.render(self.program) - class Game(arcade.Window): def __init__(self): super().__init__( @@ -83,7 +29,7 @@ class Game(arcade.Window): color_attachments=[self.game_texture], ) - self.renderer = TextureRenderer(self.ctx) + self.renderer = renderers.TextureRenderer(self.ctx) def on_update(self, dt): gamestate.update(dt) @@ -121,6 +67,5 @@ class Game(arcade.Window): scaled_height, ) - game = Game() arcade.run() diff --git a/src/renderers.py b/src/renderers.py new file mode 100644 index 0000000..e0321a4 --- /dev/null +++ b/src/renderers.py @@ -0,0 +1,59 @@ +import arcade + +class TextureRenderer: + def __init__(self, ctx): + self.ctx = ctx + + self.program = ctx.program( + vertex_shader=""" + #version 330 + + in vec2 in_vert; + in vec2 in_uv; + + out vec2 uv; + + uniform vec2 screen_size; + uniform vec4 bounds; + + void main() { + // Convert quad coordinates from [-1, 1] to [0, 1] + vec2 local = in_vert * 0.5 + 0.5; + + // bounds = x, y, width, height in pixels + vec2 pixel_pos = bounds.xy + local * bounds.zw; + + // Convert pixels to NDC + vec2 ndc = pixel_pos / screen_size * 2.0 - 1.0; + + gl_Position = vec4(ndc, 0.0, 1.0); + uv = in_uv; + } + """, + fragment_shader=""" + #version 330 + + uniform sampler2D tex; + + in vec2 uv; + out vec4 color; + + void main() { + color = texture(tex, uv); + } + """, + ) + + self.quad = arcade.gl.geometry.quad_2d_fs() + + def render(self, texture, x, y, width, height): + self.program["screen_size"] = (self.ctx.screen.width, + self.ctx.screen.height) + self.program["bounds"] = (x, y, width, height) + + texture.use(0) + self.program["tex"] = 0 + + self.quad.render(self.program) + + diff --git a/src/text.py b/src/text.py new file mode 100644 index 0000000..1d4c47d --- /dev/null +++ b/src/text.py @@ -0,0 +1,141 @@ + +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 + +# 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, 0 ), + 'h': Character(True, 104, 5, 0 ), + 'i': Character(True, 105, 2, 0 ), + 'j': Character(True, 106, 3, 0 ), + '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, 3, 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 , 3, 0), + 'β': Character(True, 95 , 3, 0), + 'γ': Character(True, 96 , 3, 0), + 'Ω': Character(True, 127, 3, 0), +}