From cd34e9c7e452d88efd773aae8f5e1da9cb21c5d0 Mon Sep 17 00:00:00 2001 From: Moksh Mehta Date: Sun, 17 Sep 2023 20:44:31 +1000 Subject: [PATCH] Created a method to implement different types of button universally --- source/core/assets/configs/text.json | 7 ++ source/core/assets/images/ui/Button_Bg.png | Bin 0 -> 27269 bytes source/core/assets/images/ui/font.fnt | 99 ++++++++++++++++ source/core/assets/images/ui/font.png | Bin 0 -> 19656 bytes .../components/mainmenu/MainMenuDisplay.java | 20 +++- .../com/csse3200/game/ui/ButtonFactory.java | 108 ++++++++++++++++++ 6 files changed, 230 insertions(+), 4 deletions(-) create mode 100644 source/core/assets/configs/text.json create mode 100644 source/core/assets/images/ui/Button_Bg.png create mode 100644 source/core/assets/images/ui/font.fnt create mode 100644 source/core/assets/images/ui/font.png create mode 100644 source/core/src/main/com/csse3200/game/ui/ButtonFactory.java diff --git a/source/core/assets/configs/text.json b/source/core/assets/configs/text.json new file mode 100644 index 000000000..721a313dc --- /dev/null +++ b/source/core/assets/configs/text.json @@ -0,0 +1,7 @@ +{ + "com.badlogic.gdx.graphics.g2d.BitmapFont": { + "default": { + "file": "images/ui/font.fnt" + } + } +} diff --git a/source/core/assets/images/ui/Button_Bg.png b/source/core/assets/images/ui/Button_Bg.png new file mode 100644 index 0000000000000000000000000000000000000000..71e133831a3d8e06f88101ec7e82f6aebea82232 GIT binary patch literal 27269 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 literal 0 HcmV?d00001 diff --git a/source/core/assets/images/ui/font.fnt b/source/core/assets/images/ui/font.fnt new file mode 100644 index 000000000..1c8e0fa9d --- /dev/null +++ b/source/core/assets/images/ui/font.fnt @@ -0,0 +1,99 @@ +info face="Times New Roman" size=-32 bold=0 italic=0 charset="" unicode=1 stretchH=100 smooth=0 aa=1 padding=0,0,0,0 spacing=0,0 outline=0 +common lineHeight=37 base=29 scaleW=256 scaleH=128 pages=1 packed=0 alphaChnl=0 redChnl=4 greenChnl=4 blueChnl=4 +page id=0 file="font.png" +chars count=95 +char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=8 page=0 chnl=15 +char id=33 x=251 y=20 width=4 height=23 xoffset=4 yoffset=6 xadvance=12 page=0 chnl=15 +char id=34 x=47 y=96 width=9 height=10 xoffset=2 yoffset=6 xadvance=13 page=0 chnl=15 +char id=35 x=151 y=15 width=15 height=23 xoffset=1 yoffset=6 xadvance=17 page=0 chnl=15 +char id=36 x=169 y=77 width=13 height=26 xoffset=2 yoffset=5 xadvance=17 page=0 chnl=15 +char id=37 x=0 y=82 width=25 height=24 xoffset=1 yoffset=6 xadvance=27 page=0 chnl=15 +char id=38 x=21 y=53 width=23 height=24 xoffset=1 yoffset=6 xadvance=25 page=0 chnl=15 +char id=39 x=61 y=96 width=3 height=10 xoffset=1 yoffset=6 xadvance=5 page=0 chnl=15 +char id=40 x=218 y=37 width=9 height=30 xoffset=1 yoffset=6 xadvance=10 page=0 chnl=15 +char id=41 x=225 y=67 width=9 height=30 xoffset=0 yoffset=6 xadvance=10 page=0 chnl=15 +char id=42 x=232 y=0 width=11 height=13 xoffset=2 yoffset=6 xadvance=15 page=0 chnl=15 +char id=43 x=155 y=105 width=17 height=18 xoffset=1 yoffset=10 xadvance=19 page=0 chnl=15 +char id=44 x=56 y=96 width=5 height=9 xoffset=1 yoffset=25 xadvance=8 page=0 chnl=15 +char id=45 x=52 y=24 width=8 height=3 xoffset=1 yoffset=20 xadvance=10 page=0 chnl=15 +char id=46 x=38 y=77 width=3 height=4 xoffset=2 yoffset=25 xadvance=7 page=0 chnl=15 +char id=47 x=198 y=100 width=9 height=23 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=15 +char id=48 x=166 y=15 width=14 height=23 xoffset=1 yoffset=6 xadvance=16 page=0 chnl=15 +char id=49 x=206 y=15 width=10 height=22 xoffset=3 yoffset=7 xadvance=16 page=0 chnl=15 +char id=50 x=141 y=82 width=15 height=23 xoffset=1 yoffset=6 xadvance=16 page=0 chnl=15 +char id=51 x=156 y=82 width=13 height=23 xoffset=1 yoffset=6 xadvance=16 page=0 chnl=15 +char id=52 x=160 y=38 width=14 height=22 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=15 +char id=53 x=184 y=55 width=13 height=22 xoffset=2 yoffset=7 xadvance=16 page=0 chnl=15 +char id=54 x=180 y=15 width=13 height=23 xoffset=1 yoffset=6 xadvance=16 page=0 chnl=15 +char id=55 x=141 y=105 width=14 height=22 xoffset=1 yoffset=7 xadvance=16 page=0 chnl=15 +char id=56 x=186 y=100 width=12 height=23 xoffset=2 yoffset=6 xadvance=16 page=0 chnl=15 +char id=57 x=182 y=77 width=13 height=23 xoffset=1 yoffset=6 xadvance=16 page=0 chnl=15 +char id=58 x=236 y=13 width=3 height=15 xoffset=3 yoffset=14 xadvance=9 page=0 chnl=15 +char id=59 x=251 y=0 width=5 height=20 xoffset=2 yoffset=14 xadvance=9 page=0 chnl=15 +char id=60 x=167 y=60 width=17 height=17 xoffset=1 yoffset=10 xadvance=19 page=0 chnl=15 +char id=61 x=29 y=22 width=17 height=7 xoffset=1 yoffset=15 xadvance=19 page=0 chnl=15 +char id=62 x=174 y=38 width=17 height=17 xoffset=1 yoffset=10 xadvance=19 page=0 chnl=15 +char id=63 x=195 y=77 width=12 height=23 xoffset=1 yoffset=6 xadvance=14 page=0 chnl=15 +char id=64 x=0 y=0 width=29 height=30 xoffset=1 yoffset=6 xadvance=30 page=0 chnl=15 +char id=65 x=0 y=106 width=24 height=22 xoffset=-1 yoffset=7 xadvance=23 page=0 chnl=15 +char id=66 x=71 y=95 width=20 height=22 xoffset=0 yoffset=7 xadvance=22 page=0 chnl=15 +char id=67 x=70 y=71 width=20 height=24 xoffset=1 yoffset=6 xadvance=21 page=0 chnl=15 +char id=68 x=47 y=74 width=23 height=22 xoffset=0 yoffset=7 xadvance=24 page=0 chnl=15 +char id=69 x=90 y=71 width=20 height=22 xoffset=0 yoffset=7 xadvance=20 page=0 chnl=15 +char id=70 x=111 y=44 width=17 height=22 xoffset=0 yoffset=7 xadvance=18 page=0 chnl=15 +char id=71 x=25 y=82 width=22 height=24 xoffset=1 yoffset=6 xadvance=23 page=0 chnl=15 +char id=72 x=48 y=106 width=23 height=22 xoffset=0 yoffset=7 xadvance=24 page=0 chnl=15 +char id=73 x=216 y=15 width=10 height=22 xoffset=0 yoffset=7 xadvance=11 page=0 chnl=15 +char id=74 x=197 y=53 width=12 height=23 xoffset=0 yoffset=7 xadvance=12 page=0 chnl=15 +char id=75 x=24 y=106 width=24 height=22 xoffset=0 yoffset=7 xadvance=24 page=0 chnl=15 +char id=76 x=91 y=46 width=20 height=22 xoffset=0 yoffset=7 xadvance=20 page=0 chnl=15 +char id=77 x=29 y=0 width=28 height=22 xoffset=0 yoffset=7 xadvance=29 page=0 chnl=15 +char id=78 x=57 y=0 width=24 height=22 xoffset=-1 yoffset=7 xadvance=23 page=0 chnl=15 +char id=79 x=78 y=22 width=21 height=24 xoffset=1 yoffset=6 xadvance=23 page=0 chnl=15 +char id=80 x=118 y=22 width=17 height=22 xoffset=0 yoffset=7 xadvance=18 page=0 chnl=15 +char id=81 x=0 y=53 width=21 height=29 xoffset=1 yoffset=6 xadvance=23 page=0 chnl=15 +char id=82 x=81 y=0 width=22 height=22 xoffset=0 yoffset=7 xadvance=21 page=0 chnl=15 +char id=83 x=172 y=103 width=14 height=24 xoffset=2 yoffset=6 xadvance=18 page=0 chnl=15 +char id=84 x=103 y=0 width=18 height=22 xoffset=1 yoffset=7 xadvance=19 page=0 chnl=15 +char id=85 x=30 y=29 width=24 height=23 xoffset=-1 yoffset=7 xadvance=22 page=0 chnl=15 +char id=86 x=44 y=52 width=24 height=22 xoffset=0 yoffset=7 xadvance=24 page=0 chnl=15 +char id=87 x=0 y=30 width=30 height=23 xoffset=0 yoffset=7 xadvance=30 page=0 chnl=15 +char id=88 x=54 y=27 width=24 height=22 xoffset=0 yoffset=7 xadvance=24 page=0 chnl=15 +char id=89 x=68 y=49 width=23 height=22 xoffset=0 yoffset=7 xadvance=23 page=0 chnl=15 +char id=90 x=99 y=22 width=19 height=22 xoffset=0 yoffset=7 xadvance=20 page=0 chnl=15 +char id=91 x=227 y=30 width=8 height=29 xoffset=3 yoffset=7 xadvance=12 page=0 chnl=15 +char id=92 x=209 y=53 width=9 height=23 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=15 +char id=93 x=234 y=59 width=8 height=29 xoffset=1 yoffset=7 xadvance=12 page=0 chnl=15 +char id=94 x=91 y=116 width=15 height=12 xoffset=0 yoffset=6 xadvance=15 page=0 chnl=15 +char id=95 x=52 y=22 width=17 height=2 xoffset=0 yoffset=35 xadvance=17 page=0 chnl=15 +char id=96 x=46 y=22 width=6 height=6 xoffset=1 yoffset=6 xadvance=11 page=0 chnl=15 +char id=97 x=195 y=0 width=13 height=15 xoffset=1 yoffset=14 xadvance=15 page=0 chnl=15 +char id=98 x=128 y=44 width=16 height=23 xoffset=-1 yoffset=6 xadvance=16 page=0 chnl=15 +char id=99 x=208 y=0 width=12 height=15 xoffset=1 yoffset=14 xadvance=14 page=0 chnl=15 +char id=100 x=135 y=15 width=16 height=23 xoffset=1 yoffset=6 xadvance=16 page=0 chnl=15 +char id=101 x=220 y=0 width=12 height=15 xoffset=1 yoffset=14 xadvance=14 page=0 chnl=15 +char id=102 x=193 y=15 width=13 height=23 xoffset=1 yoffset=6 xadvance=10 page=0 chnl=15 +char id=103 x=152 y=60 width=15 height=22 xoffset=1 yoffset=14 xadvance=16 page=0 chnl=15 +char id=104 x=91 y=93 width=17 height=23 xoffset=0 yoffset=6 xadvance=16 page=0 chnl=15 +char id=105 x=243 y=0 width=8 height=23 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=15 +char id=106 x=229 y=97 width=9 height=30 xoffset=-3 yoffset=6 xadvance=9 page=0 chnl=15 +char id=107 x=108 y=93 width=17 height=23 xoffset=0 yoffset=6 xadvance=16 page=0 chnl=15 +char id=108 x=235 y=30 width=9 height=23 xoffset=0 yoffset=6 xadvance=9 page=0 chnl=15 +char id=109 x=110 y=68 width=25 height=15 xoffset=0 yoffset=14 xadvance=24 page=0 chnl=15 +char id=110 x=145 y=0 width=17 height=15 xoffset=0 yoffset=14 xadvance=16 page=0 chnl=15 +char id=111 x=191 y=38 width=14 height=15 xoffset=1 yoffset=14 xadvance=16 page=0 chnl=15 +char id=112 x=125 y=83 width=16 height=22 xoffset=-1 yoffset=14 xadvance=16 page=0 chnl=15 +char id=113 x=125 y=105 width=16 height=22 xoffset=1 yoffset=14 xadvance=16 page=0 chnl=15 +char id=114 x=217 y=107 width=12 height=15 xoffset=0 yoffset=14 xadvance=11 page=0 chnl=15 +char id=115 x=226 y=15 width=10 height=15 xoffset=2 yoffset=14 xadvance=13 page=0 chnl=15 +char id=116 x=207 y=107 width=10 height=20 xoffset=0 yoffset=9 xadvance=10 page=0 chnl=15 +char id=117 x=135 y=67 width=17 height=15 xoffset=-1 yoffset=14 xadvance=15 page=0 chnl=15 +char id=118 x=162 y=0 width=17 height=15 xoffset=-1 yoffset=14 xadvance=16 page=0 chnl=15 +char id=119 x=121 y=0 width=24 height=15 xoffset=0 yoffset=14 xadvance=23 page=0 chnl=15 +char id=120 x=179 y=0 width=16 height=15 xoffset=0 yoffset=14 xadvance=16 page=0 chnl=15 +char id=121 x=144 y=38 width=16 height=22 xoffset=0 yoffset=14 xadvance=16 page=0 chnl=15 +char id=122 x=205 y=38 width=13 height=15 xoffset=1 yoffset=14 xadvance=15 page=0 chnl=15 +char id=123 x=207 y=76 width=9 height=31 xoffset=4 yoffset=6 xadvance=15 page=0 chnl=15 +char id=124 x=238 y=88 width=2 height=30 xoffset=2 yoffset=6 xadvance=7 page=0 chnl=15 +char id=125 x=216 y=76 width=9 height=31 xoffset=3 yoffset=6 xadvance=16 page=0 chnl=15 +char id=126 x=21 y=77 width=17 height=5 xoffset=1 yoffset=18 xadvance=18 page=0 chnl=15 diff --git a/source/core/assets/images/ui/font.png b/source/core/assets/images/ui/font.png new file mode 100644 index 0000000000000000000000000000000000000000..628b02462f984ed86a7a6e15f94b1089b0c68837 GIT binary patch literal 19656 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 P00000NkvXXu0mjf7b1xE literal 0 HcmV?d00001 diff --git a/source/core/src/main/com/csse3200/game/components/mainmenu/MainMenuDisplay.java b/source/core/src/main/com/csse3200/game/components/mainmenu/MainMenuDisplay.java index 6f6d6623d..abdf962e2 100644 --- a/source/core/src/main/com/csse3200/game/components/mainmenu/MainMenuDisplay.java +++ b/source/core/src/main/com/csse3200/game/components/mainmenu/MainMenuDisplay.java @@ -11,6 +11,7 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton; import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener; import com.csse3200.game.services.ServiceLocator; +import com.csse3200.game.ui.ButtonFactory; import com.csse3200.game.ui.UIComponent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,10 +59,21 @@ private void addActors() { title.setHeight(Gdx.graphics.getHeight()); title.setPosition(0, 0); - TextButton startBtn = new TextButton("Start", skin); - TextButton loadBtn = new TextButton("Help", skin); - TextButton settingsBtn = new TextButton("Settings", skin); - TextButton exitBtn = new TextButton("Quit", skin); + // Create an instance of the ButtonFactory class + ButtonFactory buttonFactory = new ButtonFactory(); + +// Create a "Start" TextButton using the default style + TextButton startBtn = buttonFactory.createButton("Start"); + +// Create a "Help" TextButton using the default style + TextButton loadBtn = buttonFactory.createButton("Help"); + +// Create a "Settings" TextButton with a custom image + TextButton settingsBtn = buttonFactory.createCustomButton("Settings", "images/ui/Sprites/UI_Glass_Button_Large_Lock_01a2.png"); + +// Create a "Quit" TextButton with a custom image + TextButton exitBtn = buttonFactory.createCustomButton("Quit", "images/ui/Sprites/UI_Glass_Button_Large_Press_01a2.png"); + // Triggers an event when the button is pressed startBtn.addListener( diff --git a/source/core/src/main/com/csse3200/game/ui/ButtonFactory.java b/source/core/src/main/com/csse3200/game/ui/ButtonFactory.java new file mode 100644 index 000000000..942da7c1a --- /dev/null +++ b/source/core/src/main/com/csse3200/game/ui/ButtonFactory.java @@ -0,0 +1,108 @@ +/** + * The ButtonFactory class is responsible for creating different types of TextButtons + * with customizable styles and properties for use in a LibGDX user interface. + */ +package com.csse3200.game.ui; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.scenes.scene2d.ui.Skin; +import com.badlogic.gdx.scenes.scene2d.ui.TextButton; +import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; + +/** + * This class provides methods for creating various types of TextButtons with different styles. + */ +public class ButtonFactory { + private Skin defaultSkin; + + /** + * Constructs a ButtonFactory and initializes the default skin. + */ + public ButtonFactory() { + defaultSkin = createDefaultSkin(); + } + + /** + * Creates a default skin for TextButtons using a JSON file for configuration. + * + * @return The default Skin object. + */ + private Skin createDefaultSkin() { + Skin skin = new Skin(Gdx.files.internal("configs/text.json")); + + // Load the background image for the default button style + TextureRegionDrawable buttonBackground = new TextureRegionDrawable( + new TextureRegion(new Texture("images/ui/Button_Bg.png")) + ); + + // Define the button style with the background image + TextButton.TextButtonStyle style = new TextButton.TextButtonStyle(); + style.font = skin.getFont("default"); + style.up = new TextureRegionDrawable(new TextureRegion(new Texture("images/ui/Sprites/UI_Glass_Button_Large_Lock_01a1.png"))); // Set the button background to the loaded image + + skin.add("default", style); + return skin; + } + + /** + * Creates a TextButton with the specified text using the default skin. + * + * @param text The text to display on the button. + * @return The created TextButton. + */ + public TextButton createButton(String text) { + TextButton button = new TextButton(text, defaultSkin); + button.getLabel().setFontScale(0.8f); // Adjust text size + button.pad(10f); // Adjust padding + return button; + } + + /** + * Creates a custom TextButton with the specified text and a custom image. + * + * @param text The text to display on the button. + * @param customImagePath The path to the custom image for the button. + * @return The created custom TextButton. + */ + public TextButton createCustomButton(String text, String customImagePath) { + // Create a custom button with a PNG image + Texture customTexture = new Texture(Gdx.files.internal(customImagePath)); + TextureRegionDrawable customDrawable = new TextureRegionDrawable(customTexture); + + TextButton.TextButtonStyle style = new TextButton.TextButtonStyle(); + style.font = defaultSkin.getFont("default"); + style.up = customDrawable; + + TextButton button = new TextButton(text, style); + button.getLabel().setFontScale(0.8f); // Adjust text size + button.pad(10f); // Adjust padding + + return button; + } + + /** + * Creates a custom TextButton with the specified text and an image from a TextureAtlas. + * + * @param text The text to display on the button. + * @param atlasPath The path to the TextureAtlas containing the button image. + * @return The created custom TextButton. + */ + public TextButton createCustomButtonWithAtlas(String text, String atlasPath) { + // Create a custom button with a TextureAtlas + TextureAtlas atlas = new TextureAtlas(Gdx.files.internal(atlasPath)); + Skin customSkin = new Skin(atlas); + + TextButton.TextButtonStyle style = new TextButton.TextButtonStyle(); + style.font = customSkin.getFont("default"); // for custom font if specified in the atlas + style.up = customSkin.getDrawable("button"); // for the button drawable from the atlas + + TextButton button = new TextButton(text, style); + button.getLabel().setFontScale(0.8f); // Adjust text size + button.pad(10f); // Adjust padding + + return button; + } +}