diff --git a/assets/SproutLandsUI/Spritesheets/Setting menu.png b/assets/SproutLandsUI/Spritesheets/Settingmenu.png similarity index 100% rename from assets/SproutLandsUI/Spritesheets/Setting menu.png rename to assets/SproutLandsUI/Spritesheets/Settingmenu.png diff --git a/assets/SproutLandsUI/Spritesheets/UIBigPlayButton.png b/assets/SproutLandsUI/Spritesheets/UIBigPlayButton.png index 6e5ac27..1510d26 100644 Binary files a/assets/SproutLandsUI/Spritesheets/UIBigPlayButton.png and b/assets/SproutLandsUI/Spritesheets/UIBigPlayButton.png differ diff --git a/assets/SproutLandsUI/fonts/pixelFont-7-8x14-sproutLands.fnt b/assets/SproutLandsUI/fonts/pixelFont-7-8x14-sproutLands.fnt new file mode 100644 index 0000000..ac01d29 --- /dev/null +++ b/assets/SproutLandsUI/fonts/pixelFont-7-8x14-sproutLands.fnt @@ -0,0 +1,95 @@ +info face="pixelFont-7-8x14-sproutLands" size=72 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=1 aa=1 padding=1,1,1,1 spacing=1,1 +common lineHeight=72 base=56 scaleW=434 scaleH=434 pages=1 packed=0 +page id=0 file="pixelFont-7-8x14-sproutLands.png" +chars count=91 +char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=16 page=0 chnl=15 +char id=33 x=57 y=55 width=10 height=58 xoffset=11 yoffset=-1 xadvance=28 page=0 chnl=15 +char id=34 x=71 y=413 width=22 height=14 xoffset=-1 yoffset=-1 xadvance=28 page=0 chnl=15 +char id=35 x=0 y=220 width=40 height=51 xoffset=-2 yoffset=17 xadvance=36 page=0 chnl=15 +char id=36 x=0 y=280 width=34 height=62 xoffset=1 yoffset=13 xadvance=36 page=0 chnl=15 +char id=37 x=0 y=165 width=54 height=54 xoffset=3 yoffset=16 xadvance=60 page=0 chnl=15 +char id=38 x=0 y=110 width=55 height=54 xoffset=1 yoffset=16 xadvance=56 page=0 chnl=15 +char id=39 x=57 y=114 width=10 height=14 xoffset=-1 yoffset=-1 xadvance=16 page=0 chnl=15 +char id=40 x=416 y=234 width=14 height=58 xoffset=-1 yoffset=-1 xadvance=20 page=0 chnl=15 +char id=41 x=416 y=293 width=14 height=58 xoffset=-1 yoffset=-1 xadvance=20 page=0 chnl=15 +char id=42 x=0 y=402 width=26 height=26 xoffset=-1 yoffset=15 xadvance=32 page=0 chnl=15 +char id=43 x=351 y=389 width=26 height=26 xoffset=-1 yoffset=15 xadvance=32 page=0 chnl=15 +char id=44 x=106 y=424 width=14 height=10 xoffset=-1 yoffset=47 xadvance=20 page=0 chnl=15 +char id=45 x=106 y=413 width=26 height=10 xoffset=-1 yoffset=23 xadvance=32 page=0 chnl=15 +char id=46 x=57 y=129 width=10 height=10 xoffset=-1 yoffset=47 xadvance=16 page=0 chnl=15 +char id=47 x=386 y=132 width=26 height=58 xoffset=3 yoffset=-1 xadvance=36 page=0 chnl=15 +char id=48 x=0 y=343 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=49 x=71 y=0 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=50 x=71 y=59 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=51 x=71 y=118 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=52 x=71 y=177 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=53 x=71 y=236 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=54 x=71 y=295 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=55 x=71 y=354 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=56 x=106 y=0 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=57 x=106 y=59 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=58 x=416 y=183 width=18 height=50 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=15 +char id=59 x=416 y=128 width=18 height=54 xoffset=-1 yoffset=3 xadvance=24 page=0 chnl=15 +char id=61 x=386 y=191 width=26 height=22 xoffset=-1 yoffset=19 xadvance=32 page=0 chnl=15 +char id=63 x=351 y=177 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=64 x=0 y=55 width=56 height=54 xoffset=5 yoffset=16 xadvance=67 page=0 chnl=15 +char id=65 x=211 y=354 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=66 x=246 y=0 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=67 x=246 y=59 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=68 x=246 y=118 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=69 x=246 y=177 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=70 x=246 y=236 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=71 x=246 y=295 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=72 x=246 y=354 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=73 x=281 y=0 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=74 x=281 y=59 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=75 x=351 y=330 width=30 height=58 xoffset=-1 yoffset=-1 xadvance=36 page=0 chnl=15 +char id=76 x=281 y=118 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=77 x=281 y=177 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=78 x=281 y=236 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=79 x=281 y=295 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=80 x=281 y=354 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=81 x=316 y=0 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=82 x=316 y=59 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=83 x=316 y=118 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=84 x=316 y=177 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=85 x=316 y=236 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=86 x=316 y=295 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=87 x=316 y=354 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=88 x=351 y=0 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=89 x=351 y=59 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=90 x=351 y=118 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=91 x=416 y=0 width=18 height=63 xoffset=5 yoffset=17 xadvance=24 page=0 chnl=15 +char id=93 x=416 y=64 width=18 height=63 xoffset=1 yoffset=17 xadvance=24 page=0 chnl=15 +char id=94 x=351 y=236 width=32 height=34 xoffset=1 yoffset=16 xadvance=34 page=0 chnl=15 +char id=95 x=0 y=272 width=40 height=7 xoffset=-2 yoffset=70 xadvance=36 page=0 chnl=15 +char id=97 x=106 y=118 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=98 x=106 y=177 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=99 x=106 y=236 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=100 x=106 y=295 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=101 x=106 y=354 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=102 x=141 y=0 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=103 x=141 y=59 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=104 x=141 y=118 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=105 x=141 y=177 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=106 x=141 y=236 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=107 x=351 y=271 width=30 height=58 xoffset=-1 yoffset=-1 xadvance=36 page=0 chnl=15 +char id=108 x=141 y=295 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=109 x=141 y=354 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=110 x=176 y=0 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=111 x=176 y=59 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=112 x=176 y=118 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=113 x=176 y=177 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=114 x=176 y=236 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=115 x=176 y=295 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=116 x=176 y=354 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=117 x=211 y=0 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=118 x=211 y=59 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=119 x=211 y=118 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=120 x=211 y=177 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=121 x=211 y=236 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=122 x=211 y=295 width=34 height=58 xoffset=-1 yoffset=-1 xadvance=40 page=0 chnl=15 +char id=123 x=386 y=0 width=29 height=65 xoffset=3 yoffset=16 xadvance=35 page=0 chnl=15 +char id=124 x=57 y=140 width=8 height=52 xoffset=3 yoffset=16 xadvance=15 page=0 chnl=15 +char id=125 x=386 y=66 width=29 height=65 xoffset=3 yoffset=16 xadvance=35 page=0 chnl=15 +char id=8470 x=0 y=0 width=70 height=54 xoffset=-1 yoffset=16 xadvance=69 page=0 chnl=15 diff --git a/assets/SproutLandsUI/fonts/pixelFont-7-8x14-sproutLands.png b/assets/SproutLandsUI/fonts/pixelFont-7-8x14-sproutLands.png new file mode 100644 index 0000000..ba97131 Binary files /dev/null and b/assets/SproutLandsUI/fonts/pixelFont-7-8x14-sproutLands.png differ diff --git a/assets/brackeys_platformer_assets/LICENSE & CREDITS.txt b/assets/brackeys_platformer_assets/LICENSE & CREDITS.txt new file mode 100644 index 0000000..8c53da4 --- /dev/null +++ b/assets/brackeys_platformer_assets/LICENSE & CREDITS.txt @@ -0,0 +1,26 @@ +All assets in the pack have been repackaged and many have been modified by Brackeys. + + +LICENSE for all assets: + +Creative Commons Zero (CC0) + + +CREDIT: + +SPRITES by analogStudios_: +knight (https://analogstudios.itch.io/camelot) +slime (https://analogstudios.itch.io/dungeonsprites) +platforms and coin (https://analogstudios.itch.io/four-seasons-platformer-sprites) + +SPRITES by RottingPixels: +world_tileset and fruit (https://rottingpixels.itch.io/four-seasons-platformer-tileset-16x16free) + + +WORLD TILESET originally + +SOUNDS by Brackeys, Asbjørn Thirslund + +MUSIC by Brackeys, Sofia Thirslund + +FONTS by Jayvee Enaguas - HarvettFox96 - (https://www.dafont.com/pixel-operator.font?l[]=10&l[]=1) \ No newline at end of file diff --git a/assets/brackeys_platformer_assets/fonts/PixelOperator8-Bold.ttf b/assets/brackeys_platformer_assets/fonts/PixelOperator8-Bold.ttf new file mode 100644 index 0000000..10225eb Binary files /dev/null and b/assets/brackeys_platformer_assets/fonts/PixelOperator8-Bold.ttf differ diff --git a/assets/brackeys_platformer_assets/fonts/PixelOperator8.ttf b/assets/brackeys_platformer_assets/fonts/PixelOperator8.ttf new file mode 100644 index 0000000..f9146ac Binary files /dev/null and b/assets/brackeys_platformer_assets/fonts/PixelOperator8.ttf differ diff --git a/assets/brackeys_platformer_assets/music/time_for_adventure.mp3 b/assets/brackeys_platformer_assets/music/time_for_adventure.mp3 new file mode 100644 index 0000000..2ba9940 Binary files /dev/null and b/assets/brackeys_platformer_assets/music/time_for_adventure.mp3 differ diff --git a/assets/brackeys_platformer_assets/sounds/coin.wav b/assets/brackeys_platformer_assets/sounds/coin.wav new file mode 100644 index 0000000..0509182 Binary files /dev/null and b/assets/brackeys_platformer_assets/sounds/coin.wav differ diff --git a/assets/brackeys_platformer_assets/sounds/explosion.wav b/assets/brackeys_platformer_assets/sounds/explosion.wav new file mode 100644 index 0000000..8a67b16 Binary files /dev/null and b/assets/brackeys_platformer_assets/sounds/explosion.wav differ diff --git a/assets/brackeys_platformer_assets/sounds/hurt.wav b/assets/brackeys_platformer_assets/sounds/hurt.wav new file mode 100644 index 0000000..b46ecd7 Binary files /dev/null and b/assets/brackeys_platformer_assets/sounds/hurt.wav differ diff --git a/assets/brackeys_platformer_assets/sounds/jump.wav b/assets/brackeys_platformer_assets/sounds/jump.wav new file mode 100644 index 0000000..611bddf Binary files /dev/null and b/assets/brackeys_platformer_assets/sounds/jump.wav differ diff --git a/assets/brackeys_platformer_assets/sounds/power_up.wav b/assets/brackeys_platformer_assets/sounds/power_up.wav new file mode 100644 index 0000000..d807e3f Binary files /dev/null and b/assets/brackeys_platformer_assets/sounds/power_up.wav differ diff --git a/assets/brackeys_platformer_assets/sounds/tap.wav b/assets/brackeys_platformer_assets/sounds/tap.wav new file mode 100644 index 0000000..e9dc6ab Binary files /dev/null and b/assets/brackeys_platformer_assets/sounds/tap.wav differ diff --git a/assets/brackeys_platformer_assets/sprites/coin.png b/assets/brackeys_platformer_assets/sprites/coin.png new file mode 100644 index 0000000..01ae33d Binary files /dev/null and b/assets/brackeys_platformer_assets/sprites/coin.png differ diff --git a/assets/brackeys_platformer_assets/sprites/fruit.png b/assets/brackeys_platformer_assets/sprites/fruit.png new file mode 100644 index 0000000..b9cc7d6 Binary files /dev/null and b/assets/brackeys_platformer_assets/sprites/fruit.png differ diff --git a/assets/brackeys_platformer_assets/sprites/knight.png b/assets/brackeys_platformer_assets/sprites/knight.png new file mode 100644 index 0000000..5b0eb4f Binary files /dev/null and b/assets/brackeys_platformer_assets/sprites/knight.png differ diff --git a/assets/brackeys_platformer_assets/sprites/platforms.png b/assets/brackeys_platformer_assets/sprites/platforms.png new file mode 100644 index 0000000..9be41db Binary files /dev/null and b/assets/brackeys_platformer_assets/sprites/platforms.png differ diff --git a/assets/brackeys_platformer_assets/sprites/slime_green.png b/assets/brackeys_platformer_assets/sprites/slime_green.png new file mode 100644 index 0000000..a21cb6f Binary files /dev/null and b/assets/brackeys_platformer_assets/sprites/slime_green.png differ diff --git a/assets/brackeys_platformer_assets/sprites/slime_purple.png b/assets/brackeys_platformer_assets/sprites/slime_purple.png new file mode 100644 index 0000000..76f564e Binary files /dev/null and b/assets/brackeys_platformer_assets/sprites/slime_purple.png differ diff --git a/assets/brackeys_platformer_assets/sprites/world_tileset.png b/assets/brackeys_platformer_assets/sprites/world_tileset.png new file mode 100644 index 0000000..36bbf07 Binary files /dev/null and b/assets/brackeys_platformer_assets/sprites/world_tileset.png differ diff --git a/src/engine/gamegui.h b/src/engine/gamegui.h index 3a95620..cedba5e 100644 --- a/src/engine/gamegui.h +++ b/src/engine/gamegui.h @@ -2,47 +2,98 @@ #define GAMEGUI_H #include "sprite.h" +#include + +typedef enum { + NOT_CLICKED, + CLICKED +} ButtonState; typedef struct { - int state; - Rectangle textureRecs[2]; - Rectangle buttonBounds; - Texture2D texture; + Sprite sprite; + Vector2 notClicked; + Vector2 clicked; } ImageButton; -void initImageButton(ImageButton *b, Rectangle textureRecs[2], Rectangle buttonBounds, Texture2D texture){ - b->textureRecs[0] = textureRecs[0]; - b->textureRecs[1] = textureRecs[1]; - b->buttonBounds = buttonBounds; - b->texture = texture; - b->state = 0; +typedef struct +{ + Sprite sprite; +} ImageElement; + +ImageButton CreateImageButton(ButtonState state, Texture2D *texture, const TextureAsset *asset, Vector2 *source, Vector2 *clicked, Rectangle *destRec){ + return (ImageButton){ + .sprite = { + .texture = *texture, + .sourceRec = (Rectangle){ source->x, source->y, asset->frameWidth, asset->frameHeight}, + .destRec = *destRec, + .frameSize = (Vector2){asset->frameWidth, asset->frameHeight}, + .origin = (Vector2){0.0f, 0.0f}, + .rotation = 0.0f, + .color = WHITE + }, + .notClicked = (Vector2){source->x, source->y}, + .clicked = *clicked + }; +} + +ImageElement CreateImageElement(Texture2D *texture, const TextureAsset *asset, Vector2 *source, Rectangle *destRec){ + return (ImageElement){ + .sprite = { + .texture = *texture, + .sourceRec = (Rectangle){ source->x, source->y, asset->frameWidth, asset->frameHeight}, + .destRec = *destRec, + .frameSize = (Vector2){asset->frameWidth, asset->frameHeight}, + .origin = (Vector2){0.0f, 0.0f}, + .rotation = 0.0f, + .color = WHITE + } + }; +} + +void PrintImageButton(const ImageButton btn) { + printf("ImageButton:\n"); + printf(" Sprite.texture: id = %d\n", btn.sprite.texture.id); + printf(" Sprite.sourceRec: x = %f, y = %f, width = %f, height = %f\n", + btn.sprite.sourceRec.x, btn.sprite.sourceRec.y, + btn.sprite.sourceRec.width, btn.sprite.sourceRec.height); + printf(" Sprite.destRec: x = %f, y = %f, width = %f, height = %f\n", + btn.sprite.destRec.x, btn.sprite.destRec.y, + btn.sprite.destRec.width, btn.sprite.destRec.height); + printf(" Sprite.frameSize: x = %f, y = %f\n", + btn.sprite.frameSize.x, btn.sprite.frameSize.y); + printf(" Sprite.origin: x = %f, y = %f\n", + btn.sprite.origin.x, btn.sprite.origin.y); + printf(" Sprite.rotation: %f\n", btn.sprite.rotation); + printf(" Sprite.color: r = %d, g = %d, b = %d, a = %d\n", + btn.sprite.color.r, btn.sprite.color.g, + btn.sprite.color.b, btn.sprite.color.a); + printf(" notClicked: x = %f, y = %f\n", btn.notClicked.x, btn.notClicked.y); + printf(" clicked: x = %f, y = %f\n", btn.clicked.x, btn.clicked.y); } int isImageButtonClicked(ImageButton *b){ - Vector2 mousePoint = GetMousePosition(); - if (CheckCollisionPointRec(mousePoint, b->buttonBounds)) { - if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) b->state = 1; + if (CheckCollisionPointRec(GetMousePosition(), b->sprite.destRec)) { + if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)){ + UpdateSpriteSourceRec(&b->sprite, &b->clicked); + } if (IsMouseButtonReleased(MOUSE_LEFT_BUTTON)) { - b->state = 0; + UpdateSpriteSourceRec(&b->sprite, &b->notClicked); return true; } } else { - b->state = 0; + UpdateSpriteSourceRec(&b->sprite, &b->notClicked); } return false; } void renderImageButton(ImageButton *b) { - Sprite sprite; - sprite.texture = b->texture; - sprite.sourceRec = b->textureRecs[b->state]; - sprite.destRec = b->buttonBounds; - sprite.origin = (Vector2){ 0, 0 }; - sprite.rotation = 0.0f; - sprite.color = WHITE; - RenderSprite(&sprite); + RenderSprite(&b->sprite); +} + +void renderImageElement(ImageElement *e){ + RenderSprite(&e->sprite); } diff --git a/src/game/button.h b/src/game/button.h new file mode 100644 index 0000000..0d817b4 --- /dev/null +++ b/src/game/button.h @@ -0,0 +1,20 @@ +// initButton(&m->startButton, "Start Game", GetScreenWidth() / 10, GetScreenHeight() / 20, GetScreenWidth() / 2, GetScreenHeight() / 2); +// initButton(&m->quitButton, "Quit Game", GetScreenWidth() / 10, GetScreenHeight() / 20, GetScreenWidth() / 2, +// GetScreenHeight() / 2 + (GetScreenHeight() / 20 * 2)); + +// if (isButtonClicked(&m->startButton)) { +// state->gameStarted = true; +// m->startButton.text = "Continue"; +// state->currentScreen = GAMEPLAY; +// } +// if (isButtonClicked(&m->quitButton) || (WindowShouldClose() && !IsKeyPressed(KEY_ESCAPE))) { +// state->running = false; +// } + +// if (state->gameStarted){ +// if (IsKeyPressed(KEY_ESCAPE)){ +// state->currentScreen = GAMEPLAY; +// } +// } +// renderButton(&m->startButton); +// renderButton(&m->quitButton); \ No newline at end of file diff --git a/src/game/colors.h b/src/game/colors.h new file mode 100644 index 0000000..0e0822e --- /dev/null +++ b/src/game/colors.h @@ -0,0 +1,7 @@ +#ifndef COLORS_H +#define COLORS_H + +#define TEXT_COLOR_DARK (Color){ 182, 137, 98, 255} +#define TEXT_COLOR_LIGHT (Color){ 243, 229, 194, 255} + +#endif // COLORS_H diff --git a/src/game/game.h b/src/game/game.h index ee6436f..eb21544 100644 --- a/src/game/game.h +++ b/src/game/game.h @@ -63,7 +63,7 @@ void InitGame(GameState* g, Display *display){ g->bee1 = CreateBee(FLYING, g->textures[BEE], g->assets.textureAssets[BEE].frameWidth, 4, 10, g->hive.position, 10.0f, &g->flowers, &g->hive); // I/O - g->camera = CreateCamera(display->width, display->height, g->player.physics.position, 5.0f); + g->camera = CreateCamera(display->width, display->height, g->player.physics.position, 10.0f); g->mouse = CreateMouse(0.10f, 5.0f, 10.0f); } diff --git a/src/game/hive.h b/src/game/hive.h index 0d70ce5..10b61f0 100644 --- a/src/game/hive.h +++ b/src/game/hive.h @@ -10,7 +10,7 @@ Object CreateHive(Texture2D texture, float frameWidth){ .destRec = (Rectangle){0.0f, 0.0f, frameWidth, frameWidth}, .origin = (Vector2){frameWidth / 2, frameWidth / 2}, .rotation = 0.0f, - .color = WHITE, + .color = WHITE }, .position = (Vector2){0.0f, 0.0f} }; diff --git a/src/game/menu.h b/src/game/menu.h index 4c877be..daeaf8b 100644 --- a/src/game/menu.h +++ b/src/game/menu.h @@ -6,14 +6,14 @@ #include "../engine/asset.h" #include "../engine/gamegui.h" #include "menuassets.h" +#include "colors.h" typedef struct { Assets assets; Texture2D textures[MENU_TEX_COUNT]; - Button startButton; - Button quitButton; - ImageButton newStartButton; - ImageButton newQuitButton; + ImageElement board; + ImageButton playButton; + ImageButton quitButton; } MenuState; void InitMenu(MenuState *m){ @@ -23,75 +23,75 @@ void InitMenu(MenuState *m){ for (int i = 0; i < MENU_TEX_COUNT; i++){ m->textures[i] = LoadTexture(m->assets.textureAssets[i].path); } + int menuScale = 4; + int screenWidth = GetScreenWidth(); + int screenHeight = GetScreenHeight(); + Vector2 screenCenter = {screenWidth / 2, screenHeight / 2}; - Rectangle startButtonBounds = { - GetScreenWidth() / 2 - (GetScreenWidth() / 10) / 2, - GetScreenHeight() / 2 - (GetScreenHeight() / 20) / 2, - GetScreenWidth() / 10, - GetScreenHeight() / 20 + int boardWidth = screenWidth / menuScale * 3.0f; + float boardScaleFactor = (float)boardWidth / m->assets.textureAssets[BOARD].frameWidth; + int boardHeight = (int)(m->assets.textureAssets[BOARD].frameHeight * boardScaleFactor); + + Vector2 boardSource = {128.0f,0.0f}; + Rectangle boardDestRec = { + .x = screenCenter.x - (boardWidth / 2), + .y = screenCenter.y - (boardHeight / 2), + .width = boardWidth, + .height = boardHeight }; - Rectangle quitButtonBounds = { - GetScreenWidth() / 2 - (GetScreenWidth() / 10) / 2, - GetScreenHeight() / 2 + (GetScreenHeight() / 10) / 2, - GetScreenWidth() / 10, - GetScreenHeight() / 20 + m->board = CreateImageElement(&m->textures[BOARD], &m->assets.textureAssets[BOARD], &boardSource, &boardDestRec); + + int buttonWidth = screenWidth / menuScale; + float buttonScaleFactor = (float)buttonWidth / m->assets.textureAssets[BIG_BUTTONS].frameWidth; + int buttonHeight = (int)(m->assets.textureAssets[BIG_BUTTONS].frameHeight * buttonScaleFactor); + int buttonSpacing = buttonHeight; + + Vector2 playButtonNotPressed = { 0.0f, 96.0f}; + Vector2 quitButtonNotPressed = { 0.0f, 0.0f}; + Vector2 playButtonPressed = { 96.0f, 96.0f}; + Vector2 quitButtonPressed = { 96.0f, 0.0f}; + + Rectangle playButtonDestRec = { + .x = screenCenter.x - (buttonWidth / 2), + .y = screenCenter.y - (buttonHeight / 2), + .width = buttonWidth, + .height = buttonHeight }; - Rectangle playTexRecs[2] = { - { 0.0f, 96.0f, m->assets.textureAssets[BIG_BUTTONS].frameWidth, m->assets.textureAssets[BIG_BUTTONS].frameHeight }, - { m->assets.textureAssets[BIG_BUTTONS].frameWidth, 96.0f, m->assets.textureAssets[BIG_BUTTONS].frameWidth, m->assets.textureAssets[BIG_BUTTONS].frameHeight } + Rectangle quitButtonDestRec = { + .x = screenCenter.x - (buttonWidth / 2), + .y = screenCenter.y - (buttonHeight / 2) + buttonSpacing, + .width = buttonWidth, + .height = buttonHeight }; - Rectangle emptyTexRecs[2] = { - { 0.0f, 0.0f, m->assets.textureAssets[BIG_BUTTONS].frameWidth, m->assets.textureAssets[BIG_BUTTONS].frameHeight }, - { m->assets.textureAssets[BIG_BUTTONS].frameWidth, 0.0f, m->assets.textureAssets[BIG_BUTTONS].frameWidth, m->assets.textureAssets[BIG_BUTTONS].frameHeight } - }; - initImageButton(&m->newStartButton, playTexRecs, startButtonBounds, m->textures[BIG_BUTTONS]); - initImageButton(&m->newQuitButton, emptyTexRecs, quitButtonBounds, m->textures[BIG_BUTTONS]); - // initButton(&m->startButton, "Start Game", GetScreenWidth() / 10, GetScreenHeight() / 20, GetScreenWidth() / 2, GetScreenHeight() / 2); - // initButton(&m->quitButton, "Quit Game", GetScreenWidth() / 10, GetScreenHeight() / 20, GetScreenWidth() / 2, - // GetScreenHeight() / 2 + (GetScreenHeight() / 20 * 2)); + m->playButton = CreateImageButton(NOT_CLICKED, &m->textures[BIG_BUTTONS], &m->assets.textureAssets[BIG_BUTTONS], &playButtonNotPressed, &playButtonPressed, &playButtonDestRec); + m->quitButton = CreateImageButton(NOT_CLICKED, &m->textures[BIG_BUTTONS], &m->assets.textureAssets[BIG_BUTTONS], &quitButtonNotPressed, &quitButtonPressed, &quitButtonDestRec); } void UpdateMenu(MenuState *m, State *state){ - if (isImageButtonClicked(&m->newStartButton)){ + if (isImageButtonClicked(&m->playButton)){ state->gameStarted = true; - m->startButton.text = "Continue"; state->currentScreen = GAMEPLAY; } - if (isImageButtonClicked(&m->newQuitButton) || (WindowShouldClose() && !IsKeyPressed(KEY_ESCAPE))) { + if (isImageButtonClicked(&m->quitButton) || (WindowShouldClose() && !IsKeyPressed(KEY_ESCAPE))) { state->running = false; } - - // if (isButtonClicked(&m->startButton)) { - // state->gameStarted = true; - // m->startButton.text = "Continue"; - // state->currentScreen = GAMEPLAY; - // } - // if (isButtonClicked(&m->quitButton) || (WindowShouldClose() && !IsKeyPressed(KEY_ESCAPE))) { - // state->running = false; - // } - - // if (state->gameStarted){ - // if (IsKeyPressed(KEY_ESCAPE)){ - // state->currentScreen = GAMEPLAY; - // } - // } - } -void RenderMenu(MenuState *m){ +void RenderMenu(MenuState *m, Font *font, const char* name){ BeginDrawing(); ClearBackground(WHITE); - // renderButton(&m->startButton); - // renderButton(&m->quitButton); - renderImageButton(&m->newStartButton); - renderImageButton(&m->newQuitButton); + renderImageElement(&m->board); + renderImageButton(&m->playButton); + renderImageButton(&m->quitButton); + int textWidth = MeasureText(name, font->baseSize); + DrawTextEx(*font, name, (Vector2){ GetScreenWidth() / 2 - textWidth / 2, textWidth / 4}, (float)font->baseSize, 2, WHITE); DrawFPS(10, 10); EndDrawing(); } diff --git a/src/game/menuassets.h b/src/game/menuassets.h index 0743ce8..9b72502 100644 --- a/src/game/menuassets.h +++ b/src/game/menuassets.h @@ -4,11 +4,13 @@ typedef enum { BIG_BUTTONS, + BOARD, MENU_TEX_COUNT } MenuTextureID; const TextureAsset menuTextureAssets[MENU_TEX_COUNT] = { - {"assets/SproutLandsUI/Spritesheets/UIBigPlayButton.png", 96.0f, 32.0f, 180.0f} + {"assets/SproutLandsUI/Spritesheets/UIBigPlayButton.png", 96.0f, 32.0f, 180.0f}, + {"assets/SproutLandsUI/Spritesheets/Settingmenu.png", 128.0f, 144.0f, 180.0f}, }; #endif // MENUASSETS_H diff --git a/src/main.c b/src/main.c index 1e7cdbe..557b64e 100644 --- a/src/main.c +++ b/src/main.c @@ -9,9 +9,11 @@ #include "game/menu.h" #include "game/game.h" + typedef struct { State state; Display display; + Font font; LogoState logo; GameState game; MenuState menu; @@ -19,17 +21,23 @@ typedef struct { int main(void) { + Display display = { + .name = "The Last Hive", + .width = 1280, + .height = 720 + }; + + InitWindow(display.width, display.height, display.name); + InitAudioDevice(); + Application app; app.state.currentScreen = MENU; app.state.running = true; app.state.gameStarted = false; - app.display.name = "The Last Hive"; - app.display.width = 1280; - app.display.height = 720; + app.display = display; + app.font = LoadFont("assets/SproutLandsUI/fonts/pixelFont-7-8x14-sproutLands.fnt"); - InitWindow(app.display.width, app.display.height, app.display.name); - InitAudioDevice(); - + SetTextureFilter(app.font.texture, TEXTURE_FILTER_POINT); SetTraceLogLevel(LOG_NONE); InitLogo(&app.logo); @@ -48,7 +56,7 @@ int main(void) case MENU: { UpdateMenu(&app.menu, &app.state); - RenderMenu(&app.menu); + RenderMenu(&app.menu, &app.font, app.display.name); }break; case GAMEPLAY: { @@ -59,6 +67,7 @@ int main(void) } } CleanupGame(&app.game); + UnloadFont(app.font); CloseWindow(); return 0; }