From 6eb50465238c24c141c11e8a74d49516ea32b358 Mon Sep 17 00:00:00 2001 From: Derek Christ Date: Sat, 31 May 2025 18:54:22 +0200 Subject: [PATCH] Add spiders --- CMakeLists.txt | 25 +++++++++++++- NOTICE | 2 ++ assets/images/spiders.bmp | Bin 0 -> 8330 bytes src/assets.cpp | 8 +++++ src/assets.hpp | 1 + src/definitions.hpp | 4 +-- src/level.hpp | 67 +++++++++++++++++++++++++++++--------- 7 files changed, 88 insertions(+), 19 deletions(-) create mode 100644 assets/images/spiders.bmp diff --git a/CMakeLists.txt b/CMakeLists.txt index e96b398..cd42a2f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,30 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Option to switch real platform vs. SDL implementation... +include(FetchContent) +FetchContent_Declare( + SDL3 + URL https://github.com/libsdl-org/SDL/releases/download/release-3.2.14/SDL3-3.2.14.tar.gz + OVERRIDE_FIND_PACKAGE +) +FetchContent_MakeAvailable(SDL3) + +FetchContent_Declare( + SDL3_ttf + URL https://github.com/libsdl-org/SDL_ttf/releases/download/release-3.2.2/SDL3_ttf-3.2.2.tar.gz + OVERRIDE_FIND_PACKAGE +) +FetchContent_MakeAvailable(SDL3_ttf) + +FetchContent_Declare( + flecs + URL https://github.com/SanderMertens/flecs/archive/refs/tags/v4.0.5.tar.gz + OVERRIDE_FIND_PACKAGE +) +FetchContent_MakeAvailable(flecs) + find_package(SDL3 CONFIG REQUIRED) +find_package(SDL3_ttf CONFIG REQUIRED) find_package(flecs CONFIG REQUIRED) find_package(spdlog CONFIG REQUIRED) @@ -16,6 +39,6 @@ add_executable(HansTheGatherer src/physics.cpp ) -target_link_libraries(HansTheGatherer SDL3::SDL3 flecs::flecs spdlog::spdlog) +target_link_libraries(HansTheGatherer SDL3::SDL3 SDL3_ttf::SDL3_ttf flecs::flecs spdlog::spdlog) set_property(TARGET HansTheGatherer PROPERTY CXX_STANDARD 20) diff --git a/NOTICE b/NOTICE index e7c6951..b50786c 100644 --- a/NOTICE +++ b/NOTICE @@ -6,3 +6,5 @@ Assets used by this project: URL: https://trashboat93.itch.io/jungle-background-parallax - "Jamaican Sunrise - Reggae" by DavidKBD URL: https://davidkbd.itch.io/tropical-dreams-spring-and-summer-music-pack +- "SPIDER ENEMY PIXEL ART" by camacebra + URL: https://camacebra.itch.io/spider-pixel-art-pack-16x16 \ No newline at end of file diff --git a/assets/images/spiders.bmp b/assets/images/spiders.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5cb2954216440bc3dd0c85c0b51e99d395660f82 GIT binary patch literal 8330 zcmeI0zlvm45XM^#4b8@+5n(a$-+*YK4hw@Ktb!Vw34&lEA~=Rd8|@PqYaj^v8oq|X zf{_n!w|}?&4c`=}PG3+)aBZf#&aL{sbE?j%y7%_ny?1}VTR-;?-`^hO;voBjJaPDb z>Y%xJ=INtwdHgK9-SLmh(`^xTUJaw_W%*V*fQ9j>$A2A{RR ze(&Aoqw`m<_rQ46#K9O0SjNW2_?6dxS?=8V;@U1xEguZn%0E9pU-tX`wOyWCJ{Yk7 zB;UEsi@D!^;qrzUhZu8L<2NtH&p-R|4UsQKo*KV-&G=&EsVl#Wf5bPoUq8LKo-N$3 z-uis`@skIuFvdpiV8rLz*k1eK;kpOpe);k@%Nv*9ufiA`xr6EW7Z(@n9&~(S2Xl(w z#XsUR7kOFxm79Cuy4eHR$jjQVvF9Gh&mO==T-N>;e)d4+Z;3zooFQ{q*J#iF&+mR% z5cU9DV<YTi0mM{>{&RTM+gDTVg8Tx6_k0xL8{^O^It1xEH#F)GL zXYHfOm%QJ9@cSx^$tf|FZ|$Qyeqv_)F8&#x{Ukr@r{>R`_`u}en?E-4vwmy-e{>csg*8cDK*}u$3U3>p9e`{bAfAT%Q z?CqQ*b59KGT7!(Uw>?Ah&fF7I`PrKtKQS|Y7ypc(y$ydPiK**nZxjDW5>xrvnpe8jpEbpJ_G*0gHnDmS&+|`=JT*RhbH*1VPo4Z({2iZpm_u#v ztJCM2RVT*YRj04=yiSZfb^63tofzX*r?2ux*Wgn|n3*lPu06w7-@nbT@%(@N-`)Z1 z?NpW>uCv$qI$USJ4L)mgU-vfiC-#}vJqP2nXIf0E2{(OhgHsaTJ z7qNeb?;O70u&&P#o`Z~yMGTz$;P?H8G0!mHe;CUblU&C5eLtD;#hl`I@sIe%#<`Lo z+}-Zy^}UzpKVxk8JbO6CAm8^J@`dBGi!nBG_v}Y}-%m#Tv$L~xe|&z=_@nqcKJ$>5 zwa@jDe--&(-Kc@=0r2Ey?Q?yM|0?poT5b4{>;bN`b~`@t%g-Jd@kjA@d~45hMO*XC zqxk!m^~C1+d#-5S{n&#PfB(W4n|$jM-SHE{JRQG_f5x}A$rnCC?fd@goa7F+u5WFV zGw~z#zt{N4z1{z|6~5M{x^PdumArs|5^WU;m`ViOZ>@a58VUw7XGOJ zt?4cCZ|VQh{>}O~eboQx{1QX1SwH54&OKlrd*8lSC*PdVxd-H7?Yl?nvRi0YDbs|qK4lQ(TextureAssets{ .background = Texture{.sdl_texture = background, .texture_atlas_layout = background_layout}, .fruits = Texture{.sdl_texture = fruits, .texture_atlas_layout = fruits_layout}, + .spiders = Texture{.sdl_texture = spiders, .texture_atlas_layout = spiders_layout}, .basket = Texture{.sdl_texture = basket, .texture_atlas_layout = basket_layout}}); auto background_music = load_audio(BACKGROUND_MUSIC_DATA, sizeof(BACKGROUND_MUSIC_DATA)); diff --git a/src/assets.hpp b/src/assets.hpp index 9ba327e..99a081c 100644 --- a/src/assets.hpp +++ b/src/assets.hpp @@ -24,6 +24,7 @@ struct TextureAssets { Texture background; Texture fruits; + Texture spiders; Texture basket; }; diff --git a/src/definitions.hpp b/src/definitions.hpp index 939df87..49b5c8d 100644 --- a/src/definitions.hpp +++ b/src/definitions.hpp @@ -16,6 +16,6 @@ struct SdlHandles struct Game { uint32_t ticks; - uint32_t time; - uint32_t score; + int32_t time; + int32_t score; }; diff --git a/src/level.hpp b/src/level.hpp index c76238d..8895c34 100644 --- a/src/level.hpp +++ b/src/level.hpp @@ -12,6 +12,10 @@ struct Fruit { }; +struct Spider +{ +}; + struct Basket { }; @@ -53,23 +57,44 @@ struct LevelModule Game const& game, TextureAssets const& texture_assets) { - if ((game.ticks % 40) == 0) - { - auto fruit = - it.world() - .entity() - .add() - .add() - .set(Position{.x = std::rand() % WINDOW_WIDTH, .y = -16}) - .set(Velocity{.x = 0, .y = 2}) - .set(Sprite{.texture = &texture_assets.fruits, - .texture_atlas_index = - static_cast(game.ticks % 228)}) - .set(Size{.w = 32, .h = 32}); + bool spider = std::rand() % 3 == 0; + int vel = std::rand() % 3 + 1; + if ((game.ticks % 50) == 0) + { + flecs::entity e; + if (!spider) + { + e = it.world() + .entity() + .add() + .add() + .set( + Position{.x = std::rand() % WINDOW_WIDTH, .y = -16}) + .set(Velocity{.x = 0, .y = vel}) + .set( + Sprite{.texture = &texture_assets.fruits, + .texture_atlas_index = + static_cast(std::rand() % 228)}) + .set(Size{.w = 32, .h = 32}); + } + else + { + e = it.world() + .entity() + .add() + .add() + .set( + Position{.x = std::rand() % WINDOW_WIDTH, .y = -16}) + .set(Velocity{.x = 0, .y = vel}) + .set(Sprite{.texture = &texture_assets.spiders, + .texture_atlas_index = + static_cast(std::rand() % 8)}) + .set(Size{.w = 32, .h = 32}); + } it.world() .entity("CollisionBox") - .child_of(fruit) + .child_of(e) .add() .set(Position{.x = 0, .y = 0}) .set(Size{.w = 32, .h = 32}) @@ -86,7 +111,7 @@ struct LevelModule // e.destruct(); // }); - world.system("CollectItem") + world.system("CollectFruit") .term_at(0) .singleton() .each( @@ -96,6 +121,16 @@ struct LevelModule pos.x = 1000; }); + world.system("CollectSpider") + .term_at(0) + .singleton() + .each( + [](flecs::entity e, Game& game, Position& pos, Spider, Collided) + { + game.score -= 50; + pos.x = 1000; + }); + world.system("MoveBasket") .term_at(0) .singleton() @@ -119,4 +154,4 @@ struct LevelModule pos.x = pos.x > WINDOW_WIDTH - size.w ? WINDOW_WIDTH - size.w : pos.x; }); } -}; \ No newline at end of file +};