From 5d1c31cc9cf01acf6fbec8c517b2eee56b8c1cf8 Mon Sep 17 00:00:00 2001 From: Ivan Yuriev Date: Wed, 26 Mar 2025 14:44:39 +0300 Subject: [PATCH] animated deer demo --- assets/{ => sprites}/fallback.png | Bin deer_walking.png | Bin 4310 -> 0 bytes deer_walking_l.png | Bin 3588 -> 0 bytes entity.lua | 13 ------ animation.lua => lib/animation.lua | 8 +++- asset_bundle.lua => lib/asset_bundle.lua | 2 +- lib/entity.lua | 23 ++++++++++ {option => lib}/option.lua | 0 lib/sprite.lua | 35 +++++++++++++++ {vector => lib}/vec3.lua | 2 +- main.lua | 33 ++++++++------ option/option_test.lua | 55 ----------------------- 12 files changed, 86 insertions(+), 85 deletions(-) rename assets/{ => sprites}/fallback.png (100%) delete mode 100644 deer_walking.png delete mode 100644 deer_walking_l.png delete mode 100644 entity.lua rename animation.lua => lib/animation.lua (83%) rename asset_bundle.lua => lib/asset_bundle.lua (98%) create mode 100644 lib/entity.lua rename {option => lib}/option.lua (100%) create mode 100644 lib/sprite.lua rename {vector => lib}/vec3.lua (98%) delete mode 100644 option/option_test.lua diff --git a/assets/fallback.png b/assets/sprites/fallback.png similarity index 100% rename from assets/fallback.png rename to assets/sprites/fallback.png diff --git a/deer_walking.png b/deer_walking.png deleted file mode 100644 index abfb27905e09d02027082e2b4545e66dbf9c76c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4310 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 diff --git a/deer_walking_l.png b/deer_walking_l.png deleted file mode 100644 index 945723d82dcfe745e110462d8c1e510244312930..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3588 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 0 and animation_r or animation_l - love.graphics.draw(animation.spriteSheet, animation:getFrame(), Player.position().x, Player.position().y, 0, 4, 4) + love.graphics.draw(Deer.sprite:getTexture(), Deer.sprite:getQuad(), 200, 200, 0, 4, 4) end function love.conf(t) diff --git a/option/option_test.lua b/option/option_test.lua deleted file mode 100644 index 6a9d7cf..0000000 --- a/option/option_test.lua +++ /dev/null @@ -1,55 +0,0 @@ ---- Tests -local none = None -local none1 = None -local some = Some(42) -local some1 = Some('foo') - -assert(none:is_none()) -assert(none1 == none) - -assert(some:is_some()) -assert(some ~= some1) - -assert(some:unwrap(43) == 42) -assert(some:unwrap() == 42) -assert(none:unwrap(43) == 43) - -assert(some:try( - function(x) - return x + 1 - end -) == 43) -assert(none:try( - function(x) - return x + 1 - end -) == None) - -assert(tostring(some) == "Some(42)") -assert(tostring(none) == "None") - ---- Usage -local function safe_div(a, b) - if (b == 0) then return None end - return Some(a / b) -end - -local res = safe_div(10, 2) -assert(res:is_some()) - -local res1 = safe_div(10, 0) -assert(res1:is_none()) - -local chain = safe_div(10, 2):try( - function(x) - return safe_div(x, 5) - end -) -assert(chain:unwrap(0) == 1) - -local chain1 = safe_div(10, 0):try( - function(x) - return safe_div(x, 5) - end -) -assert(chain1:unwrap(0) == 0)