From fc8e190d0a0663e9a6a93b96d96321dd27cf4f63 Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Sun, 2 Jul 2023 21:16:14 +0300 Subject: [PATCH] filled background --- ~/.assets/fondo para itchio.png | Bin 0 -> 9170 bytes ~/V/example_window/draw.v | 42 ++++++++++++++++++++++++++++++++ ~/V/example_window/game.v | 36 ++++++++++++++------------- ~/V/example_window/text.v | 2 -- ~/V/example_window/update.v | 15 ++++++++++++ 5 files changed, 76 insertions(+), 19 deletions(-) create mode 100644 ~/.assets/fondo para itchio.png create mode 100644 ~/V/example_window/draw.v create mode 100644 ~/V/example_window/update.v diff --git a/~/.assets/fondo para itchio.png b/~/.assets/fondo para itchio.png new file mode 100644 index 0000000000000000000000000000000000000000..29bb65597d530775acc8803863919ef6dea4aa9e GIT binary patch literal 9170 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 literal 0 HcmV?d00001 diff --git a/~/V/example_window/draw.v b/~/V/example_window/draw.v new file mode 100644 index 0000000..8072e48 --- /dev/null +++ b/~/V/example_window/draw.v @@ -0,0 +1,42 @@ +import gg +import gx + +fn (game &Game) draw() { + game.gg.begin() + + // draw filled texture + game.draw_bg_texture() + + // draw ui + game.draw_text(gg.window_size().width - 10, 0, 'Lives: ${game.player.lives}', 36, + gx.white, 'right', 'top', true) + + // draw image + game.gg.draw_image(0, game.gg.window_size().height - game.player.image.height, game.player.image.width, + game.player.image.height, game.player.image) + + game.gg.end() +} + +fn (game &Game) draw_bg_texture() { + game.gg.draw_image(game.bg_texture.pos_x - game.bg_texture.image.width, game.bg_texture.pos_y, + game.bg_texture.image.width, game.bg_texture.image.height, game.bg_texture.image) + + for x in 0 .. gg.window_size().width / game.bg_texture.image.width + 3 { + game.gg.draw_image(x * game.bg_texture.image.width + game.bg_texture.pos_x, game.bg_texture.pos_y - game.bg_texture.image.height, + game.bg_texture.image.width, game.bg_texture.image.height, game.bg_texture.image) + + game.gg.draw_image(game.bg_texture.pos_x - game.bg_texture.image.width, game.bg_texture.pos_y - game.bg_texture.image.height, + game.bg_texture.image.width, game.bg_texture.image.height, game.bg_texture.image) + + for y in 0 .. gg.window_size().height / game.bg_texture.image.height + 3 { + game.gg.draw_image(x * game.bg_texture.image.width + game.bg_texture.pos_x, + y * game.bg_texture.image.height + game.bg_texture.pos_y, game.bg_texture.image.width, + game.bg_texture.image.height, game.bg_texture.image) + + game.gg.draw_image(game.bg_texture.pos_x - game.bg_texture.image.width, + y * game.bg_texture.image.height + game.bg_texture.pos_y, game.bg_texture.image.width, + game.bg_texture.image.height, game.bg_texture.image) + } + } +} diff --git a/~/V/example_window/game.v b/~/V/example_window/game.v index c8812d9..f81b804 100644 --- a/~/V/example_window/game.v +++ b/~/V/example_window/game.v @@ -1,5 +1,3 @@ -module main - import os import gg import gx @@ -12,8 +10,16 @@ const ( struct Game { mut: - gg &gg.Context = unsafe { nil } - player Player + gg &gg.Context = unsafe { nil } + player Player + bg_texture BgTexture +} + +struct BgTexture { +mut: + image gg.Image + pos_x f32 + pos_y f32 } struct Player { @@ -25,19 +31,8 @@ mut: } fn frame(mut game Game) { - game.gg.begin() - - game.gg.draw_rect_filled(game.player.pos_x, game.player.pos_y, 50, 50, gx.hex(0x5C7A56FF)) - - // draw ui - game.draw_text(gg.window_size().width - 10, 0, 'Lives: ${game.player.lives}', 36, - gx.white, 'right', 'top', true) - - // draw image - game.gg.draw_image(0, game.gg.window_size().height - game.player.image.height, game.player.image.width, - game.player.image.height, game.player.image) - - game.gg.end() + game.update() + game.draw() } fn main() { @@ -65,6 +60,13 @@ fn main() { lives: 3 } + game.bg_texture = &BgTexture{ + pos_x: 0 + pos_y: 0 + } + + game.bg_texture.image = game.gg.create_image(os.resource_abs_path(os.join_path('..', + '..', '.assets', 'fondo para itchio.png'))) or { panic(err) } game.player.image = game.gg.create_image(os.resource_abs_path(os.join_path('..', '..', '.assets', 'v-logo.png'))) or { panic(err) } diff --git a/~/V/example_window/text.v b/~/V/example_window/text.v index 9f8130c..b6036dc 100644 --- a/~/V/example_window/text.v +++ b/~/V/example_window/text.v @@ -1,5 +1,3 @@ -module main - import gx fn (game &Game) text_format(color gx.Color, size int, h_align gx.HorizontalAlign, v_align gx.VerticalAlign) gx.TextCfg { diff --git a/~/V/example_window/update.v b/~/V/example_window/update.v new file mode 100644 index 0000000..95f60fd --- /dev/null +++ b/~/V/example_window/update.v @@ -0,0 +1,15 @@ +// import gg + +fn (mut game Game) update() { + if game.bg_texture.pos_x >= game.bg_texture.image.width { + game.bg_texture.pos_x = 0 + } else { + game.bg_texture.pos_x += .5 + } + + if game.bg_texture.pos_y >= game.bg_texture.image.height { + game.bg_texture.pos_y = 0 + } else { + game.bg_texture.pos_y += .5 + } +}