Nine slices panelek
This commit is contained in:
BIN
res/sprite/panel.png
Normal file
BIN
res/sprite/panel.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 349 B |
@@ -7,4 +7,5 @@ sprites = {
|
|||||||
"louisb": arcade.load_texture("res/sprite/louisb.png"),
|
"louisb": arcade.load_texture("res/sprite/louisb.png"),
|
||||||
"cursor": arcade.load_texture("res/sprite/handcursor.png"),
|
"cursor": arcade.load_texture("res/sprite/handcursor.png"),
|
||||||
"font": arcade.load_spritesheet("res/sprite/font.png"),
|
"font": arcade.load_spritesheet("res/sprite/font.png"),
|
||||||
|
"panel": arcade.load_spritesheet("res/sprite/panel.png"),
|
||||||
}
|
}
|
||||||
|
|||||||
15
src/gamestates/menu.py
Normal file
15
src/gamestates/menu.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import arcade
|
||||||
|
import assets
|
||||||
|
import text
|
||||||
|
|
||||||
|
text = text.TextRenderer(0, 100, 200)
|
||||||
|
|
||||||
|
def switch():
|
||||||
|
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):
|
||||||
|
text.render()
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
import arcade
|
import arcade
|
||||||
import assets
|
import assets
|
||||||
import text
|
import text
|
||||||
|
import renderers
|
||||||
|
|
||||||
text = text.TextRenderer(0, 100, 200)
|
text = text.TextRenderer(6, 186, 210)
|
||||||
|
panel = renderers.NineSlicesPanel(0,100,230,100);
|
||||||
|
|
||||||
def switch():
|
def switch():
|
||||||
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.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.")
|
||||||
@@ -12,4 +14,10 @@ def update(dt):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def draw(game):
|
def draw(game):
|
||||||
|
arcade.draw_rect_filled(
|
||||||
|
arcade.LBWH(0, 0, game.screen_width, game.screen_height),
|
||||||
|
arcade.color.RED,
|
||||||
|
)
|
||||||
|
|
||||||
|
panel.render()
|
||||||
text.render()
|
text.render()
|
||||||
|
|||||||
111
src/renderers.py
111
src/renderers.py
@@ -1,5 +1,7 @@
|
|||||||
import arcade
|
import arcade
|
||||||
|
import assets
|
||||||
|
|
||||||
|
# !!! CHATGPT !!!
|
||||||
class TextureRenderer:
|
class TextureRenderer:
|
||||||
def __init__(self, ctx):
|
def __init__(self, ctx):
|
||||||
self.ctx = ctx
|
self.ctx = ctx
|
||||||
@@ -56,4 +58,113 @@ class TextureRenderer:
|
|||||||
|
|
||||||
self.quad.render(self.program)
|
self.quad.render(self.program)
|
||||||
|
|
||||||
|
# !!! CHATGPT !!!
|
||||||
|
class NineSlicesPanel:
|
||||||
|
SLICE_SIZE = 16
|
||||||
|
|
||||||
|
def __init__(self, x, y, w, h):
|
||||||
|
self.x = x
|
||||||
|
self.y = y
|
||||||
|
self.w = w
|
||||||
|
self.h = h
|
||||||
|
|
||||||
|
self.sprites = []
|
||||||
|
self.rebuild()
|
||||||
|
|
||||||
|
def rebuild(self):
|
||||||
|
self.sprites.clear()
|
||||||
|
|
||||||
|
sheet = assets.sprites["panel"]
|
||||||
|
s = self.SLICE_SIZE
|
||||||
|
|
||||||
|
# Crop a specific sub-region from the spritesheet
|
||||||
|
def tex(col, row, w=s, h=s):
|
||||||
|
return sheet.get_texture(
|
||||||
|
arcade.LBWH(col * s, row * s, w, h)
|
||||||
|
)
|
||||||
|
|
||||||
|
# Base 9-slice textures
|
||||||
|
textures = {
|
||||||
|
"bl": tex(0, 2),
|
||||||
|
"b": tex(1, 0),
|
||||||
|
"br": tex(2, 2),
|
||||||
|
"l": tex(0, 1),
|
||||||
|
"c": tex(1, 1),
|
||||||
|
"r": tex(2, 1),
|
||||||
|
"tl": tex(0, 0),
|
||||||
|
"t": tex(1, 2),
|
||||||
|
"tr": tex(2, 0),
|
||||||
|
}
|
||||||
|
|
||||||
|
def add(texture, x, y, w, h):
|
||||||
|
if w > 0 and h > 0:
|
||||||
|
self.sprites.append((
|
||||||
|
texture,
|
||||||
|
arcade.XYWH(x + w / 2, y + h / 2, w, h)
|
||||||
|
))
|
||||||
|
|
||||||
|
# Corners
|
||||||
|
add(textures["bl"], self.x, self.y, s, s)
|
||||||
|
add(textures["br"], self.x + self.w - s, self.y, s, s)
|
||||||
|
add(textures["tl"], self.x, self.y + self.h - s, s, s)
|
||||||
|
add(textures["tr"], self.x + self.w - s, self.y + self.h - s, s, s)
|
||||||
|
|
||||||
|
middle_w = self.w - s * 2
|
||||||
|
middle_h = self.h - s * 2
|
||||||
|
|
||||||
|
# Tile horizontal edges
|
||||||
|
def tile_horizontal(col, row, x, y, width):
|
||||||
|
curr_x = x
|
||||||
|
rem_w = width
|
||||||
|
while rem_w > 0:
|
||||||
|
tile_w = min(s, rem_w)
|
||||||
|
t = tex(col, row, tile_w, s)
|
||||||
|
add(t, curr_x, y, tile_w, s)
|
||||||
|
curr_x += tile_w
|
||||||
|
rem_w -= tile_w
|
||||||
|
|
||||||
|
# Tile vertical edges
|
||||||
|
def tile_vertical(col, row, x, y, height):
|
||||||
|
curr_y = y
|
||||||
|
rem_h = height
|
||||||
|
while rem_h > 0:
|
||||||
|
tile_h = min(s, rem_h)
|
||||||
|
# Crop from top of sprite when filling upwards
|
||||||
|
t = tex(col, row, s, tile_h)
|
||||||
|
add(t, x, curr_y, s, tile_h)
|
||||||
|
curr_y += tile_h
|
||||||
|
rem_h -= tile_h
|
||||||
|
|
||||||
|
# Render borders
|
||||||
|
tile_horizontal(1, 2, self.x + s, self.y, middle_w) # Bottom
|
||||||
|
tile_horizontal(1, 0, self.x + s, self.y + self.h - s, middle_w) # Top
|
||||||
|
tile_vertical(0, 1, self.x, self.y + s, middle_h) # Left
|
||||||
|
tile_vertical(2, 1, self.x + self.w - s, self.y + s, middle_h) # Right
|
||||||
|
|
||||||
|
# Render center grid
|
||||||
|
curr_y = self.y + s
|
||||||
|
rem_h = middle_h
|
||||||
|
|
||||||
|
while rem_h > 0:
|
||||||
|
tile_h = min(s, rem_h)
|
||||||
|
curr_x = self.x + s
|
||||||
|
rem_w = middle_w
|
||||||
|
|
||||||
|
while rem_w > 0:
|
||||||
|
tile_w = min(s, rem_w)
|
||||||
|
t = tex(1, 1, tile_w, tile_h)
|
||||||
|
add(t, curr_x, curr_y, tile_w, tile_h)
|
||||||
|
|
||||||
|
curr_x += tile_w
|
||||||
|
rem_w -= tile_w
|
||||||
|
|
||||||
|
curr_y += tile_h
|
||||||
|
rem_h -= tile_h
|
||||||
|
|
||||||
|
def render(self):
|
||||||
|
for texture, rect in self.sprites:
|
||||||
|
arcade.draw_texture_rect(
|
||||||
|
texture,
|
||||||
|
rect,
|
||||||
|
pixelated=True
|
||||||
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user