diff --git a/assets/data/battery.json b/assets/data/battery.json index 4d79044..8599ee9 100644 --- a/assets/data/battery.json +++ b/assets/data/battery.json @@ -1,8 +1,4 @@ { - "single": [ - "sprites/battery/label.png" - ], - "ranges": [ - { "base": "sprites/battery/", "start": 0, "end": 4 } - ] + "flashlightLabel": "sprites/battery/label.png", + "stages": { "base": "sprites/battery/", "start": 0, "end": 4 } } diff --git a/assets/data/cameras.json b/assets/data/cameras.json index e41ef0e..bd415c7 100644 --- a/assets/data/cameras.json +++ b/assets/data/cameras.json @@ -1,36 +1,38 @@ { - "single": [ - "sprites/cameras/utils/Map.png", - "sprites/cameras/utils/Border.png", - "sprites/cameras/utils/1.png", - "sprites/cameras/utils/2.png", - "sprites/cameras/Labels/13.png", - "sprites/cameras/Labels/14.png", - "sprites/cameras/Labels/18.png", - "sprites/cameras/Labels/16.png", - "sprites/cameras/Labels/17.png", - "sprites/cameras/Labels/15.png" - ], - "ranges": [ - { "base": "sprites/cameras/Labels/", "start": 1, "end": 12 }, - { "base": "sprites/cameras/mangle/", "start": 0, "end": 3 }, - { "base": "sprites/cameras/static/", "start": 1, "end": 6 }, - { "base": "sprites/cameras/static/", "start": 10, "end": 13 }, - { "base": "sprites/cameras/static/s2/", "start": 1, "end": 5 }, - { "base": "sprites/cameras/music_box_timer/", "start": 1, "end": 21 } - ], + "utils": { + "map": "sprites/cameras/utils/Map.png", + "borderline": "sprites/cameras/utils/Border.png", + "recordSprite": "sprites/cameras/utils/1.png", + "signalInterrupted": "sprites/cameras/utils/2.png" + }, + "labels": { + "roomButtonUnselected": "sprites/cameras/labels/13.png", + "roomButtonSelected": "sprites/cameras/labels/14.png", + "clicknhold": "sprites/cameras/labels/18.png", + "musicBoxButtonOff": "sprites/cameras/labels/16.png", + "musicBoxButtonOn": "sprites/cameras/labels/17.png", + "musicBoxLabel": "sprites/cameras/labels/15.png", + "roomLabels": { "base": "sprites/cameras/labels/", "start": 1, "end": 12 } + }, + "ranges": { + "mangle": { "base": "sprites/cameras/mangle/", "start": 0, "end": 3 }, + "staticA": { "base": "sprites/cameras/static/", "start": 1, "end": 6 }, + "staticB": { "base": "sprites/cameras/static/", "start": 10, "end": 13 }, + "staticStripes": { "base": "sprites/cameras/static/s2/", "start": 1, "end": 5 }, + "musicBoxTimer": { "base": "sprites/cameras/music_box_timer/", "start": 1, "end": 21 } + }, "locations": [ - { "name": "PartyRoom1", "frameCount": 4 }, - { "name": "PartyRoom2", "frameCount": 5 }, - { "name": "PartyRoom3", "frameCount": 5 }, - { "name": "PartyRoom4", "frameCount": 7 }, - { "name": "PrizeCorner", "frameCount": 6 }, - { "name": "RightAirVent", "frameCount": 5 }, - { "name": "LeftAirVent", "frameCount": 6 }, - { "name": "GameArea", "frameCount": 6 }, - { "name": "KidsCove", "frameCount": 3 }, - { "name": "PartsnService", "frameCount": 7 }, - { "name": "ShowStage", "frameCount": 7 }, - { "name": "MainHall", "frameCount": 6 } + { "name": "PartyRoom1", "base": "sprites/cameras/locations/PartyRoom1/", "frameCount": 4 }, + { "name": "PartyRoom2", "base": "sprites/cameras/locations/PartyRoom2/", "frameCount": 5 }, + { "name": "PartyRoom3", "base": "sprites/cameras/locations/PartyRoom3/", "frameCount": 5 }, + { "name": "PartyRoom4", "base": "sprites/cameras/locations/PartyRoom4/", "frameCount": 7 }, + { "name": "PrizeCorner", "base": "sprites/cameras/locations/PrizeCorner/", "frameCount": 6 }, + { "name": "RightAirVent", "base": "sprites/cameras/locations/RightAirVent/", "frameCount": 5 }, + { "name": "LeftAirVent", "base": "sprites/cameras/locations/LeftAirVent/", "frameCount": 6 }, + { "name": "GameArea", "base": "sprites/cameras/locations/GameArea/", "frameCount": 6 }, + { "name": "KidsCove", "base": "sprites/cameras/locations/KidsCove/", "frameCount": 3 }, + { "name": "PartsnService", "base": "sprites/cameras/locations/PartsnService/", "frameCount": 7 }, + { "name": "ShowStage", "base": "sprites/cameras/locations/ShowStage/", "frameCount": 7 }, + { "name": "MainHall", "base": "sprites/cameras/locations/MainHall/", "frameCount": 6 } ] } diff --git a/assets/data/custom_night.json b/assets/data/custom_night.json index 3df7722..253d09a 100644 --- a/assets/data/custom_night.json +++ b/assets/data/custom_night.json @@ -1,17 +1,15 @@ { - "single": [ - "sprites/custom_night/labels/1.png", - "sprites/custom_night/labels/2.png", - "sprites/custom_night/labels/3.png", - "sprites/custom_night/labels/4.png", - "sprites/custom_night/labels/5.png", - "sprites/custom_night/labels/6.png", - "sprites/custom_night/labels/7.png" - ], - "ranges": [ - { "base": "sprites/custom_night/icons/", "start": 1, "end": 10 }, - { "base": "sprites/custom_night/names/", "start": 1, "end": 10 }, - { "base": "sprites/custom_night/modes/", "start": 1, "end": 10 }, - { "base": "sprites/custom_night/rewards/", "start": 0, "end": 8 } - ] + "labels": { + "title": "sprites/custom_night/labels/1.png", + "arrowRight": "sprites/custom_night/labels/2.png", + "arrowLeft": "sprites/custom_night/labels/3.png", + "readyButton": "sprites/custom_night/labels/4.png", + "arrowRight2": "sprites/custom_night/labels/5.png", + "arrowLeft2": "sprites/custom_night/labels/6.png", + "levelInfo": "sprites/custom_night/labels/7.png" + }, + "icons": { "base": "sprites/custom_night/icons/", "start": 1, "end": 10 }, + "names": { "base": "sprites/custom_night/names/", "start": 1, "end": 10 }, + "modes": { "base": "sprites/custom_night/modes/", "start": 1, "end": 10 }, + "rewards": { "base": "sprites/custom_night/rewards/", "start": 0, "end": 8 } } diff --git a/assets/data/cutscenes.json b/assets/data/cutscenes.json index ed59400..0f47111 100644 --- a/assets/data/cutscenes.json +++ b/assets/data/cutscenes.json @@ -1,15 +1,11 @@ { - "single": [ - "sprites/cutscenes/30.png", - "sprites/cutscenes/40.png", - "sprites/cutscenes/1.png", - "sprites/cutscenes/0.png", - "sprites/cutscenes/2.png", - "sprites/cutscenes/3.png", - "sprites/cutscenes/4.png" - ], - "ranges": [ - { "base": "sprites/cutscenes/", "start": 10, "end": 12 }, - { "base": "sprites/cutscenes/", "start": 20, "end": 22 } - ] + "freddy": "sprites/cutscenes/30.png", + "puppet": "sprites/cutscenes/40.png", + "background": "sprites/cutscenes/1.png", + "black": "sprites/cutscenes/0.png", + "mask": "sprites/cutscenes/2.png", + "errImg": "sprites/cutscenes/3.png", + "itsMe": "sprites/cutscenes/4.png", + "chica": { "base": "sprites/cutscenes/", "start": 10, "end": 12 }, + "bonnie": { "base": "sprites/cutscenes/", "start": 20, "end": 22 } } diff --git a/assets/data/jumpscares.json b/assets/data/jumpscares.json index 304733c..21539ae 100644 --- a/assets/data/jumpscares.json +++ b/assets/data/jumpscares.json @@ -1,14 +1,12 @@ { - "ranges": [ - { "base": "sprites/jumpscares/puppet/", "start": 1, "end": 15 }, - { "base": "sprites/jumpscares/toy_bonnie/", "start": 1, "end": 13 }, - { "base": "sprites/jumpscares/toy_chica/", "start": 1, "end": 13 }, - { "base": "sprites/jumpscares/toy_freddy/", "start": 1, "end": 12 }, - { "base": "sprites/jumpscares/withered_freddy/", "start": 1, "end": 13 }, - { "base": "sprites/jumpscares/withered_bonnie/", "start": 1, "end": 16 }, - { "base": "sprites/jumpscares/withered_chica/", "start": 1, "end": 12 }, - { "base": "sprites/jumpscares/withered_foxy/", "start": 1, "end": 14 }, - { "base": "sprites/jumpscares/mangle/", "start": 1, "end": 16 }, - { "base": "sprites/jumpscares/withered_golden_freddy/", "start": 1, "end": 13 } - ] + "puppet": { "base": "sprites/jumpscares/puppet/", "start": 1, "end": 15 }, + "toyBonnie": { "base": "sprites/jumpscares/toy_bonnie/", "start": 1, "end": 13 }, + "toyChica": { "base": "sprites/jumpscares/toy_chica/", "start": 1, "end": 13 }, + "toyFreddy": { "base": "sprites/jumpscares/toy_freddy/", "start": 1, "end": 12 }, + "witheredFreddy": { "base": "sprites/jumpscares/withered_freddy/", "start": 1, "end": 13 }, + "witheredBonnie": { "base": "sprites/jumpscares/withered_bonnie/", "start": 1, "end": 16 }, + "witheredChica": { "base": "sprites/jumpscares/withered_chica/", "start": 1, "end": 12 }, + "foxy": { "base": "sprites/jumpscares/withered_foxy/", "start": 1, "end": 14 }, + "mangle": { "base": "sprites/jumpscares/mangle/", "start": 1, "end": 16 }, + "goldenFreddy": { "base": "sprites/jumpscares/withered_golden_freddy/", "start": 1, "end": 13 } } diff --git a/assets/data/mask.json b/assets/data/mask.json index f117504..739f500 100644 --- a/assets/data/mask.json +++ b/assets/data/mask.json @@ -1,8 +1,4 @@ { - "single": [ - "sprites/mask/button.png" - ], - "ranges": [ - { "base": "sprites/mask/", "start": 1, "end": 10 } - ] + "button": "sprites/mask/button.png", + "sprites": { "base": "sprites/mask/", "start": 1, "end": 10 } } diff --git a/assets/data/menu.json b/assets/data/menu.json index c4ed8d6..d7de80d 100644 --- a/assets/data/menu.json +++ b/assets/data/menu.json @@ -1,40 +1,46 @@ { - "single": [ - "sprites/menu/logos/2.png", - "sprites/menu/logos/1.png", - "sprites/menu/logos/10.png", - "sprites/menu/logos/3.png", - "sprites/menu/logos/5.png", - "sprites/menu/logos/6.png", - "sprites/menu/logos/7.png", - "sprites/menu/logos/9.png", - "sprites/menu/logos/8.png", - "sprites/menu/logos/12.png", - "sprites/menu/logos/13.png", - "sprites/menu/logos/14.png", - "sprites/menu/logos/15.png", - "sprites/menu/logos/16.png", - "sprites/menu/logos/17.png", - "sprites/menu/logos/11.png", - "sprites/menu/logos/0.png", - "sprites/menu/nights/8.png", - "sprites/menu/nights/9.png", - "sprites/menu/nights/10.png", - "sprites/menu/nights/11.png", - "sprites/menu/nights/12.png", - "sprites/menu/paychecks/1.png", - "sprites/menu/paychecks/2.png", - "sprites/menu/paychecks/3.png", - "sprites/menu/paychecks/4.png", - "sprites/menu/misc/4.png", - "sprites/menu/misc/5.png" - ], - "ranges": [ - { "base": "sprites/menu/misc/", "start": 0, "end": 3 }, - { "base": "sprites/menu/nights/", "start": 1, "end": 7 }, - { "base": "sprites/menu/sprinkles/", "start": 0, "end": 4 }, - { "base": "sprites/menu/sprinkles/", "start": 10, "end": 14 }, - { "base": "sprites/menu/sprinkles/", "start": 20, "end": 24 }, - { "base": "sprites/menu/sprinkles/", "start": 30, "end": 34 } - ] + "logos": { + "title": "sprites/menu/logos/2.png", + "scottCredits": "sprites/menu/logos/1.png", + "selScottCredits": "sprites/menu/logos/10.png", + "optionSelected": "sprites/menu/logos/3.png", + "newGame": "sprites/menu/logos/5.png", + "continueGame": "sprites/menu/logos/6.png", + "deleteData": "sprites/menu/logos/7.png", + "version": "sprites/menu/logos/9.png", + "nightLabel2": "sprites/menu/logos/8.png", + "escToReturn": "sprites/menu/logos/12.png", + "extras": "sprites/menu/logos/13.png", + "animatronics": "sprites/menu/logos/14.png", + "jumpscares": "sprites/menu/logos/15.png", + "minigames": "sprites/menu/logos/16.png", + "selSquare": "sprites/menu/logos/17.png", + "realTimeButton": "sprites/menu/logos/11.png", + "loadingIcon": "sprites/menu/logos/0.png" + }, + "nights": { + "nightSix": "sprites/menu/nights/11.png", + "customNight": "sprites/menu/nights/12.png", + "lostScreen": "sprites/menu/nights/9.png", + "gameOver": "sprites/menu/nights/10.png", + "realTimeNight": "sprites/menu/nights/8.png", + "night12am": { "base": "sprites/menu/nights/", "start": 1, "end": 7 } + }, + "paychecks": { + "newspaper": "sprites/menu/paychecks/1.png", + "nightFive": "sprites/menu/paychecks/2.png", + "nightSix": "sprites/menu/paychecks/3.png", + "nightSeven":"sprites/menu/paychecks/4.png" + }, + "misc": { + "star": "sprites/menu/misc/4.png", + "blueStar": "sprites/menu/misc/5.png", + "background": { "base": "sprites/menu/misc/", "start": 0, "end": 3 } + }, + "ranges": { + "confettiBlue": { "base": "sprites/menu/sprinkles/", "start": 0, "end": 4 }, + "confettiGreen": { "base": "sprites/menu/sprinkles/", "start": 10, "end": 14 }, + "confettiYellow": { "base": "sprites/menu/sprinkles/", "start": 20, "end": 24 }, + "confettiPink": { "base": "sprites/menu/sprinkles/", "start": 30, "end": 34 } + } } diff --git a/assets/data/minigames.json b/assets/data/minigames.json index e285172..9bfd0af 100644 --- a/assets/data/minigames.json +++ b/assets/data/minigames.json @@ -1,54 +1,55 @@ { - "single": [ - "sprites/minigames/GG_GL/4.png", - "sprites/minigames/GG_GL/7.png", - "sprites/minigames/GG_GL/6.png", - "sprites/minigames/GG_GL/10.png", - "sprites/minigames/GG_GL/11.png", - "sprites/minigames/GG_GL/0.png", - "sprites/minigames/GG_GL/1.png", - "sprites/minigames/GG_GL/2.png", - "sprites/minigames/GG_GL/3.png", - - "sprites/minigames/SAVE THEM/10.png", - "sprites/minigames/SAVE THEM/11.png", - "sprites/minigames/SAVE THEM/12.png", - "sprites/minigames/SAVE THEM/13.png", - "sprites/minigames/SAVE THEM/14.png", - "sprites/minigames/SAVE THEM/15.png", - "sprites/minigames/SAVE THEM/16.png", - "sprites/minigames/SAVE THEM/20.png", - "sprites/minigames/SAVE THEM/21.png", - "sprites/minigames/SAVE THEM/22.png", - "sprites/minigames/SAVE THEM/23.png", - "sprites/minigames/SAVE THEM/24.png", - "sprites/minigames/SAVE THEM/27.png", - "sprites/minigames/SAVE THEM/31.png", - "sprites/minigames/SAVE THEM/30.png", - - "sprites/minigames/Go! Go! Go!/4.png", - "sprites/minigames/Go! Go! Go!/20.png", - "sprites/minigames/Go! Go! Go!/21.png", - "sprites/minigames/Go! Go! Go!/22.png", - "sprites/minigames/Go! Go! Go!/23.png", - "sprites/minigames/Go! Go! Go!/31.png", - "sprites/minigames/Go! Go! Go!/32.png", - "sprites/minigames/Go! Go! Go!/33.png", - - "sprites/minigames/TCTTC/17.png", - "sprites/minigames/TCTTC/30.png", - "sprites/minigames/TCTTC/31.png" - ], - "ranges": [ - { "base": "sprites/minigames/SAVE THEM/", "start": 0, "end": 5 }, - { "base": "sprites/minigames/SAVE THEM/", "start": 25, "end": 26 }, - { "base": "sprites/minigames/Go! Go! Go!/", "start": 0, "end": 1 }, - { "base": "sprites/minigames/Go! Go! Go!/", "start": 10, "end": 17 }, - { "base": "sprites/minigames/TCTTC/", "start": 0, "end": 1 }, - { "base": "sprites/minigames/TCTTC/", "start": 10, "end": 16 }, - { "base": "sprites/minigames/TCTTC/", "start": 20, "end": 25 }, - { "base": "sprites/minigames/screenshots/", "start": 0, "end": 3 }, - { "base": "sprites/rare/", "start": 1, "end": 3 }, - { "base": "sprites/animatronics/", "start": 0, "end": 8 } - ] + "giveGifts": { + "puppet": "sprites/minigames/GG_GL/4.png", + "soul": "sprites/minigames/GG_GL/7.png", + "gift": "sprites/minigames/GG_GL/6.png", + "giveGifts": "sprites/minigames/GG_GL/10.png", + "giveLife": "sprites/minigames/GG_GL/11.png", + "chicaMask": "sprites/minigames/GG_GL/0.png", + "fredMask": "sprites/minigames/GG_GL/1.png", + "bonnieMask": "sprites/minigames/GG_GL/2.png", + "foxyMask": "sprites/minigames/GG_GL/3.png" + }, + "saveThem": { + "table": "sprites/minigames/SAVE THEM/10.png", + "desk": "sprites/minigames/SAVE THEM/11.png", + "scenery": "sprites/minigames/SAVE THEM/12.png", + "dust": "sprites/minigames/SAVE THEM/13.png", + "floor1": "sprites/minigames/SAVE THEM/14.png", + "floor2": "sprites/minigames/SAVE THEM/15.png", + "wasd": "sprites/minigames/SAVE THEM/16.png", + "suit1": "sprites/minigames/SAVE THEM/20.png", + "suit2": "sprites/minigames/SAVE THEM/21.png", + "suit3": "sprites/minigames/SAVE THEM/22.png", + "suitGr1": "sprites/minigames/SAVE THEM/23.png", + "suitGr2": "sprites/minigames/SAVE THEM/24.png", + "sadSoul": "sprites/minigames/SAVE THEM/27.png", + "blood": "sprites/minigames/SAVE THEM/31.png", + "bigGift": "sprites/minigames/SAVE THEM/30.png", + "freddyWalking": { "base": "sprites/minigames/SAVE THEM/", "start": 0, "end": 5 }, + "endoAnim": { "base": "sprites/minigames/SAVE THEM/", "start": 25, "end": 26 } + }, + "foxyGoGo": { + "courtain": "sprites/minigames/Go! Go! Go!/4.png", + "sadChild": "sprites/minigames/Go! Go! Go!/20.png", + "happyChild": "sprites/minigames/Go! Go! Go!/21.png", + "arrow": "sprites/minigames/Go! Go! Go!/22.png", + "purpleGuy": "sprites/minigames/Go! Go! Go!/23.png", + "getReady": "sprites/minigames/Go! Go! Go!/31.png", + "go": "sprites/minigames/Go! Go! Go!/32.png", + "hurray": "sprites/minigames/Go! Go! Go!/33.png", + "foxyAnim": { "base": "sprites/minigames/Go! Go! Go!/", "start": 0, "end": 1 }, + "confetti": { "base": "sprites/minigames/Go! Go! Go!/", "start": 10, "end": 17 } + }, + "tcttc": { + "deadChild": "sprites/minigames/TCTTC/17.png", + "car": "sprites/minigames/TCTTC/30.png", + "label": "sprites/minigames/TCTTC/31.png", + "cakeFreddy": { "base": "sprites/minigames/TCTTC/", "start": 0, "end": 1 }, + "childCrying": { "base": "sprites/minigames/TCTTC/", "start": 10, "end": 16 }, + "child": { "base": "sprites/minigames/TCTTC/", "start": 20, "end": 25 } + }, + "screenshots": { "base": "sprites/minigames/screenshots/", "start": 0, "end": 3 }, + "rare": { "base": "sprites/rare/", "start": 1, "end": 3 }, + "animatronics": { "base": "sprites/animatronics/", "start": 0, "end": 8 } } diff --git a/assets/data/monitor.json b/assets/data/monitor.json index d59cca4..15660ca 100644 --- a/assets/data/monitor.json +++ b/assets/data/monitor.json @@ -1,8 +1,4 @@ { - "single": [ - "sprites/monitor/button.png" - ], - "ranges": [ - { "base": "sprites/monitor/", "start": 1, "end": 11 } - ] + "button": "sprites/monitor/button.png", + "sprites": { "base": "sprites/monitor/", "start": 1, "end": 11 } } diff --git a/assets/data/numbers.json b/assets/data/numbers.json index 504044a..74f88dc 100644 --- a/assets/data/numbers.json +++ b/assets/data/numbers.json @@ -1,17 +1,14 @@ { - "single": [ - "sprites/numbers/1rst/medium/dot.png", - "sprites/clock/20.png", - "sprites/clock/2.png", - "sprites/clock/1.png" - ], - "ranges": [ - { "base": "sprites/numbers/1rst/medium/", "start": 0, "end": 9 }, - { "base": "sprites/numbers/1rst/small/", "start": 0, "end": 9 }, - { "base": "sprites/numbers/1rst/big/", "start": 0, "end": 9 }, - { "base": "sprites/numbers/2nd/medium/", "start": 0, "end": 9 }, - { "base": "sprites/numbers/2nd/small/", "start": 0, "end": 9 }, - { "base": "sprites/clock/", "start": 3, "end": 7 }, - { "base": "sprites/clock/", "start": 8, "end": 13 } - ] + "dots": "sprites/numbers/1rst/medium/dot.png", + "nightLabel": "sprites/clock/20.png", + "amLabel": "sprites/clock/2.png", + "bigAm": "sprites/clock/1.png", + + "medium": { "base": "sprites/numbers/1rst/medium/", "start": 0, "end": 9 }, + "small": { "base": "sprites/numbers/1rst/small/", "start": 0, "end": 9 }, + "big": { "base": "sprites/numbers/1rst/big/", "start": 0, "end": 9 }, + "medium2": { "base": "sprites/numbers/2nd/medium/", "start": 0, "end": 9 }, + "small2": { "base": "sprites/numbers/2nd/small/", "start": 0, "end": 9 }, + "fiveAnimation": { "base": "sprites/clock/", "start": 3, "end": 7 }, + "sixAnimation": { "base": "sprites/clock/", "start": 8, "end": 13 } } diff --git a/assets/data/office.json b/assets/data/office.json index 5d01c5c..0c325d0 100644 --- a/assets/data/office.json +++ b/assets/data/office.json @@ -1,27 +1,33 @@ { - "background": "sprites/office/office.png", - "single": [ - "sprites/office/utils/3.png", - "sprites/office/utils/4.png", - "sprites/office/utils/1.png", - "sprites/office/utils/2.png", - "sprites/office/utils/20.png", - "sprites/office/utils/40.png", - "sprites/office/inside/8.png", - "sprites/office/inside/DWARF.png", - "sprites/office/inside/10.png", - "sprites/office/inside/3.png", - "sprites/office/inside/6.png", - "sprites/office/inside/7.png", - "sprites/office/inside/5.png" - ], - "ranges": [ - { "base": "sprites/office/inside/", "start": 0, "end": 4 }, - { "base": "sprites/office/hallway/", "start": 0, "end": 10 }, - { "base": "sprites/office/right_vents/", "start": 0, "end": 2 }, - { "base": "sprites/office/left_vents/", "start": 0, "end": 2 }, - { "base": "sprites/office/utils/", "start": 10, "end": 13 }, - { "base": "sprites/office/utils/", "start": 24, "end": 25 }, - { "base": "sprites/office/utils/", "start": 30, "end": 31 } - ] + "bg": "sprites/office/office.png", + + "ventButtons": { + "leftOff": "sprites/office/utils/1.png", + "leftOn": "sprites/office/utils/2.png", + "rightOff": "sprites/office/utils/3.png", + "rightOn": "sprites/office/utils/4.png" + }, + + "telephoneMute": "sprites/office/utils/20.png", + "ctrlAdv": "sprites/office/utils/40.png", + + "easterEggs": { + "balloonGirl": "sprites/office/inside/8.png", + "dwarf": "sprites/office/inside/DWARF.png", + "plastic": "sprites/office/inside/10.png", + "bunny": "sprites/office/inside/3.png", + "goldenFreddy": "sprites/office/inside/6.png", + "mangle": "sprites/office/inside/7.png", + "balloonBoy": "sprites/office/inside/5.png" + }, + + "ranges": { + "inside": { "base": "sprites/office/inside/", "start": 0, "end": 4 }, + "hallway": { "base": "sprites/office/hallway/", "start": 0, "end": 10 }, + "rightVents": { "base": "sprites/office/right_vents/", "start": 0, "end": 2 }, + "leftVents": { "base": "sprites/office/left_vents/", "start": 0, "end": 2 }, + "desk": { "base": "sprites/office/utils/", "start": 10, "end": 13 }, + "warnBig": { "base": "sprites/office/utils/", "start": 24, "end": 25 }, + "warnSmall": { "base": "sprites/office/utils/", "start": 30, "end": 31 } + } } diff --git a/core/src/main/java/io/github/eldek0/asset/GameAssetManager.java b/core/src/main/java/io/github/eldek0/asset/GameAssetManager.java index 398d6c6..1033c16 100644 --- a/core/src/main/java/io/github/eldek0/asset/GameAssetManager.java +++ b/core/src/main/java/io/github/eldek0/asset/GameAssetManager.java @@ -2,395 +2,149 @@ package io.github.eldek0.asset; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.assets.AssetManager; -import com.badlogic.gdx.audio.Music; -import com.badlogic.gdx.audio.Sound; import com.badlogic.gdx.files.FileHandle; -import com.badlogic.gdx.graphics.Texture; -import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.Json; +import io.github.eldek0.asset.group.*; + public class GameAssetManager { + private static final String DATA = "data/"; + private final AssetManager manager = new AssetManager(); - private final Json json = new Json(); + private final Json json = new Json(); - // ========================================================= - // DATA CLASSES - // ========================================================= + // ---- Typed asset groups (public, acceso directo) ---- + public MonitorAssets monitor; + public OfficeAssets office; + public MaskAssets mask; + public CameraAssets cameras; + public BatteryAssets battery; + public NumbersAssets numbers; + public CustomNightAssets customNight; + public JumpscareAssets jumpscares; + public CutsceneAssets cutscenes; + public MinigameAssets minigames; + public MenuAssets menu; - public static class AssetGroupData { - public String background; - public Array single; - public Array ranges; - public Array locations; - public Array sounds; - public Array music; - } - - public static class FrameRangeData { - public String base; - public int start; - public int end; - /** Optional: custom extension, defaults to "png" */ - public String ext = "png"; - } - - public static class CameraLocationData { - public String name; - public int frameCount; - /** Base path override; if null defaults to "sprites/cameras/locations//" */ - public String basePath; - } - - public static class SoundData { - public String path; - } - - public static class MusicData { - public String path; - } - - // ========================================================= - // PATHS — kept as constants for use elsewhere in the codebase - // ========================================================= - - public static final String DATA_PATH = "data/"; - - // Monitor - public static final String MONITOR_PATH = "sprites/monitor/"; - public static final String MONITOR_BUTTON = MONITOR_PATH + "button.png"; - - // Office - public static final String OFFICE_PATH = "sprites/office/"; - public static final String OFFICE_INSIDE_PATH = OFFICE_PATH + "inside/"; - public static final String OFFICE_HALLWAY_PATH = OFFICE_PATH + "hallway/"; - public static final String OFFICE_RVENTS_PATH = OFFICE_PATH + "right_vents/"; - public static final String OFFICE_LVENTS_PATH = OFFICE_PATH + "left_vents/"; - public static final String OFFICE_UTILS_PATH = OFFICE_PATH + "utils/"; - - public static final String OFFICE_BG = OFFICE_PATH + "office.png"; - public static final String RIGHT_VENT_BUTTON_OFF = OFFICE_UTILS_PATH + "3.png"; - public static final String RIGHT_VENT_BUTTON_ON = OFFICE_UTILS_PATH + "4.png"; - public static final String LEFT_VENT_BUTTON_OFF = OFFICE_UTILS_PATH + "1.png"; - public static final String LEFT_VENT_BUTTON_ON = OFFICE_UTILS_PATH + "2.png"; - public static final String TELEPHONE_MUTE = OFFICE_UTILS_PATH + "20.png"; - public static final String CTRL_ADV = OFFICE_UTILS_PATH + "40.png"; - public static final String BALLOON_GIRL = OFFICE_INSIDE_PATH + "8.png"; - public static final String DWARF = OFFICE_INSIDE_PATH + "DWARF.png"; - public static final String PLASTIC = OFFICE_INSIDE_PATH + "10.png"; - public static final String OFFICE_BUNNY = OFFICE_INSIDE_PATH + "3.png"; - public static final String OFFICE_GOLDEN_FREDDY = OFFICE_INSIDE_PATH + "6.png"; - public static final String OFFICE_MANGLE = OFFICE_INSIDE_PATH + "7.png"; - public static final String OFFICE_BALLOON_BOY = OFFICE_INSIDE_PATH + "5.png"; - - // Mask - public static final String MASK_PATH = "sprites/mask/"; - public static final String MASK_BUTTON = MASK_PATH + "button.png"; - - // Cameras - public static final String CAM_PATH = "sprites/cameras/"; - public static final String CAM_UTILS_PATH = CAM_PATH + "utils/"; - public static final String CAM_LABELS_PATH = CAM_PATH + "Labels/"; - public static final String CAM_STATIC_PATH = CAM_PATH + "static/"; - public static final String CAM_LOC_PATH = CAM_PATH + "locations/"; - public static final String CAM_MANGLE_PATH = CAM_PATH + "mangle/"; - - public static final String CAMERA_MAP = CAM_UTILS_PATH + "Map.png"; - public static final String CAMERA_BORDERLINE = CAM_UTILS_PATH + "Border.png"; - public static final String CAMERA_RECORD_SPRITE = CAM_UTILS_PATH + "1.png"; - public static final String CAMERA_SIGNAL_INTERRUPTED = CAM_UTILS_PATH + "2.png"; - public static final String ROOM_BUTTON_UNSELECTED = CAM_LABELS_PATH + "13.png"; - public static final String ROOM_BUTTON_SELECTED = CAM_LABELS_PATH + "14.png"; - public static final String CLICKNHOLD = CAM_LABELS_PATH + "18.png"; - public static final String MUSIC_BOX_BUTTON_OFF = CAM_LABELS_PATH + "16.png"; - public static final String MUSIC_BOX_BUTTON_ON = CAM_LABELS_PATH + "17.png"; - public static final String MUSIC_BOX_LABEL = CAM_LABELS_PATH + "15.png"; - - // Battery - public static final String BATTERY_PATH = "sprites/battery/"; - public static final String FLASHLIGHT_LABEL = BATTERY_PATH + "label.png"; - - // Menu - public static final String MENU_PATH = "sprites/menu/"; - public static final String MENU_MISC_PATH = MENU_PATH + "misc/"; - public static final String MENU_LOGOS_PATH = MENU_PATH + "logos/"; - public static final String MENU_NIGHTS_PATH = MENU_PATH + "nights/"; - public static final String MENU_SPRINKLES_PATH = MENU_PATH + "sprinkles/"; - public static final String MENU_PAYCHECKS_PATH = MENU_PATH + "paychecks/"; - - public static final String FNAF_TITLE = MENU_LOGOS_PATH + "2.png"; - public static final String SCOTT_CREDITS = MENU_LOGOS_PATH + "1.png"; - public static final String SEL_SCOTT_CREDITS = MENU_LOGOS_PATH + "10.png"; - public static final String OPTION_SELECTED = MENU_LOGOS_PATH + "3.png"; - public static final String NEW_GAME_OPTION = MENU_LOGOS_PATH + "5.png"; - public static final String CONTINUE_OPTION = MENU_LOGOS_PATH + "6.png"; - public static final String DELETE_DATA_LABEL = MENU_LOGOS_PATH + "7.png"; - public static final String VERSION = MENU_LOGOS_PATH + "9.png"; - public static final String NIGHT_LABEL_2 = MENU_LOGOS_PATH + "8.png"; - public static final String ESC_TO_RETURN = MENU_LOGOS_PATH + "12.png"; - public static final String EXTRAS_BUTTON = MENU_LOGOS_PATH + "13.png"; - public static final String ANIMATRONICS_BUTTON= MENU_LOGOS_PATH + "14.png"; - public static final String JUMPSCARES_BUTTON = MENU_LOGOS_PATH + "15.png"; - public static final String MINIGAMES_BUTTON = MENU_LOGOS_PATH + "16.png"; - public static final String SEL_SQUARE = MENU_LOGOS_PATH + "17.png"; - public static final String REAL_TIME_BUTTON = MENU_LOGOS_PATH + "11.png"; - public static final String LOADING_ICON = MENU_LOGOS_PATH + "0.png"; - - public static final String NIGHT_SIX_OPTION = MENU_NIGHTS_PATH + "11.png"; - public static final String CUSTOM_NIGHT_OPTION = MENU_NIGHTS_PATH + "12.png"; - public static final String LOST_SCREEN = MENU_NIGHTS_PATH + "9.png"; - public static final String GAME_OVER = MENU_NIGHTS_PATH + "10.png"; - public static final String REAL_TIME_NIGHT = MENU_NIGHTS_PATH + "8.png"; - - public static final String STAR = MENU_MISC_PATH + "4.png"; - public static final String BLUE_STAR = MENU_MISC_PATH + "5.png"; - - public static final String NEWSPAPER = MENU_PAYCHECKS_PATH + "1.png"; - public static final String NIGHT_FIVE_PAYCHECK = MENU_PAYCHECKS_PATH + "2.png"; - public static final String NIGHT_SIX_PAYCHECK = MENU_PAYCHECKS_PATH + "3.png"; - public static final String NIGHT_SEVEN_PAYCHECK= MENU_PAYCHECKS_PATH + "4.png"; - - // Numbers & Clock - public static final String NUMBERS_PATH = "sprites/numbers/"; - public static final String CLOCK_PATH = "sprites/clock/"; - public static final String DOTS = NUMBERS_PATH + "1rst/medium/dot.png"; - public static final String NIGHT_LABEL = CLOCK_PATH + "20.png"; - public static final String AM_LABEL = CLOCK_PATH + "2.png"; - public static final String BIG_AM = CLOCK_PATH + "1.png"; - - // Custom Night - public static final String CN_PATH = "sprites/custom_night/"; - public static final String CN_ICONS_PATH = CN_PATH + "icons/"; - public static final String CN_NAMES_PATH = CN_PATH + "names/"; - public static final String CN_LABELS_PATH = CN_PATH + "labels/"; - public static final String CN_MODES_PATH = CN_PATH + "modes/"; - public static final String CN_REWARDS_PATH = CN_PATH + "rewards/"; - - public static final String CUSTOM_NIGHT_TITLE = CN_LABELS_PATH + "1.png"; - public static final String ARROW_RIGHT = CN_LABELS_PATH + "2.png"; - public static final String ARROW_LEFT = CN_LABELS_PATH + "3.png"; - public static final String READY_BUTTON = CN_LABELS_PATH + "4.png"; - public static final String ARROW_RIGHT2 = CN_LABELS_PATH + "5.png"; - public static final String ARROW_LEFT2 = CN_LABELS_PATH + "6.png"; - public static final String CUSTOM_NIGHT_LEVEL_INFO = CN_LABELS_PATH + "7.png"; - - // Jumpscares - public static final String JS_PATH = "sprites/jumpscares/"; - - // Cutscenes - public static final String CS_PATH = "sprites/cutscenes/"; - public static final String CUTSCENE_FREDDY = CS_PATH + "30.png"; - public static final String CUTSCENE_PUPPET = CS_PATH + "40.png"; - public static final String CUTSCENE_BACKGROUND = CS_PATH + "1.png"; - public static final String CUTSCENE_BLACK = CS_PATH + "0.png"; - public static final String CUTSCENE_MASK = CS_PATH + "2.png"; - public static final String ERR_IMG = CS_PATH + "3.png"; - public static final String ITS_ME = CS_PATH + "4.png"; - - // Minigames - public static final String MG_PATH = "sprites/minigames/"; - public static final String MG_GGGL_PATH = MG_PATH + "GG_GL/"; - public static final String MG_SAVETHEM_PATH = MG_PATH + "SAVE THEM/"; - public static final String MG_FOXY_PATH = MG_PATH + "Go! Go! Go!/"; - public static final String MG_TCTTC_PATH = MG_PATH + "TCTTC/"; - public static final String MG_SCREENS_PATH = MG_PATH + "screenshots/"; - - public static final String PUPPET_MINIGAME = MG_GGGL_PATH + "4.png"; - public static final String SOUL = MG_GGGL_PATH + "7.png"; - public static final String GIFT = MG_GGGL_PATH + "6.png"; - public static final String GIVE_GIFTS = MG_GGGL_PATH + "10.png"; - public static final String GIVE_LIFE = MG_GGGL_PATH + "11.png"; - public static final String CHICA_MASK = MG_GGGL_PATH + "0.png"; - public static final String FRED_MASK = MG_GGGL_PATH + "1.png"; - public static final String BONNIE_MASK = MG_GGGL_PATH + "2.png"; - public static final String FOXY_MASK = MG_GGGL_PATH + "3.png"; - - public static final String TABLE = MG_SAVETHEM_PATH + "10.png"; - public static final String DESK_MIN = MG_SAVETHEM_PATH + "11.png"; - public static final String SCENEARY = MG_SAVETHEM_PATH + "12.png"; - public static final String DUST = MG_SAVETHEM_PATH + "13.png"; - public static final String FLOOR1 = MG_SAVETHEM_PATH + "14.png"; - public static final String FLOOR2 = MG_SAVETHEM_PATH + "15.png"; - public static final String WASD = MG_SAVETHEM_PATH + "16.png"; - public static final String SUIT1 = MG_SAVETHEM_PATH + "20.png"; - public static final String SUIT2 = MG_SAVETHEM_PATH + "21.png"; - public static final String SUIT3 = MG_SAVETHEM_PATH + "22.png"; - public static final String SUIT_GR_1 = MG_SAVETHEM_PATH + "23.png"; - public static final String SUIT_GR_2 = MG_SAVETHEM_PATH + "24.png"; - public static final String SAD_SOUL = MG_SAVETHEM_PATH + "27.png"; - public static final String BLOOD = MG_SAVETHEM_PATH + "31.png"; - public static final String BIG_GIFT = MG_SAVETHEM_PATH + "30.png"; - - public static final String COURTAIN = MG_FOXY_PATH + "4.png"; - public static final String SAD_CHILD = MG_FOXY_PATH + "20.png"; - public static final String HAPPY_CHILD = MG_FOXY_PATH + "21.png"; - public static final String ARROW_MIN = MG_FOXY_PATH + "22.png"; - public static final String PURPLE_GUY = MG_FOXY_PATH + "23.png"; - public static final String GET_READY_TXT = MG_FOXY_PATH + "31.png"; - public static final String GO_TXT = MG_FOXY_PATH + "32.png"; - public static final String HURRAY_TXT = MG_FOXY_PATH + "33.png"; - - public static final String DEAD_CHILD = MG_TCTTC_PATH + "17.png"; - public static final String CAR = MG_TCTTC_PATH + "30.png"; - public static final String TAKE_CAKE_TO_THE_CHILDREN_LABEL = MG_TCTTC_PATH + "31.png"; - - // Rare / Animatronics - public static final String RARE_PATH = "sprites/rare/"; - public static final String ANIMATRONICS_PATH = "sprites/animatronics/"; + // ---- Cached JSON data (needed for fetch step) ---- + private MonitorAssets.Data monitorData; + private OfficeAssets.Data officeData; + private MaskAssets.Data maskData; + private CameraAssets.Data cameraData; + private BatteryAssets.Data batteryData; + private NumbersAssets.Data numbersData; + private CustomNightAssets.Data customNightData; + private JumpscareAssets.Data jumpscareData; + private CutsceneAssets.Data cutsceneData; + private MinigameAssets.Data minigameData; + private MenuAssets.Data menuData; // ========================================================= // LOAD ENTRY POINTS // ========================================================= + /** Queue all menu assets for async loading. Call update() each frame until done. */ public void loadMenuAssets() { - loadGroup("menu.json"); - } - - public void loadGameAssets() { - String[] groups = { - "monitor.json", - "office.json", - "mask.json", - "cameras.json", - "battery.json", - "numbers.json", - "custom_night.json", - "jumpscares.json", - "cutscenes.json", - "minigames.json", - "misc.json" - }; - for (String g : groups) { - loadGroup(g); - } - } - - // ========================================================= - // CORE LOADER - // ========================================================= - - private void loadGroup(String filename) { - FileHandle file = Gdx.files.internal(DATA_PATH + filename); - - if (!file.exists()) { - Gdx.app.error("GameAssetManager", "JSON not found: " + DATA_PATH + filename); - return; - } - json.setIgnoreUnknownFields(true); - AssetGroupData group = json.fromJson(AssetGroupData.class, file); - - // Single background texture - if (group.background != null) { - loadTexture(group.background); - } - - // Individual paths - if (group.single != null) { - for (String path : group.single) { - loadTexture(path); - } - } - - // Numbered frame ranges - if (group.ranges != null) { - for (FrameRangeData range : group.ranges) { - for (int i = range.start; i <= range.end; i++) { - loadTexture(range.base + i + "." + range.ext); - } - } - } - - // Camera locations (frames + label) - if (group.locations != null) { - for (CameraLocationData loc : group.locations) { - String base = (loc.basePath != null) - ? loc.basePath - : CAM_LOC_PATH + loc.name + "/"; - for (int i = 0; i < loc.frameCount; i++) { - loadTexture(base + i + ".png"); - } - loadTexture(base + "label.png"); - } - } - - // Sounds - if (group.sounds != null) { - for (SoundData s : group.sounds) { - if (!manager.isLoaded(s.path)) { - manager.load(s.path, Sound.class); - } - } - } - - // Music - if (group.music != null) { - for (MusicData m : group.music) { - if (!manager.isLoaded(m.path)) { - manager.load(m.path, Music.class); - } - } - } + menuData = load("menu.json", MenuAssets.Data.class); + menu = new MenuAssets(); + menu.queue(manager, menuData); } - /** Loads a texture only if not already queued/loaded (avoids duplicates). */ - private void loadTexture(String path) { - if (!manager.isLoaded(path) && !manager.containsAsset(path)) { - manager.load(path, Texture.class); - } + /** Queue all in-game assets for async loading. Call update() each frame until done. */ + public void loadGameAssets() { + json.setIgnoreUnknownFields(true); + + monitorData = load("monitor.json", MonitorAssets.Data.class); + officeData = load("office.json", OfficeAssets.Data.class); + maskData = load("mask.json", MaskAssets.Data.class); + cameraData = load("cameras.json", CameraAssets.Data.class); + batteryData = load("battery.json", BatteryAssets.Data.class); + numbersData = load("numbers.json", NumbersAssets.Data.class); + customNightData = load("custom_night.json", CustomNightAssets.Data.class); + jumpscareData = load("jumpscares.json", JumpscareAssets.Data.class); + cutsceneData = load("cutscenes.json", CutsceneAssets.Data.class); + minigameData = load("minigames.json", MinigameAssets.Data.class); + + Gdx.app.log("DEBUG monitor", json.toJson(monitorData)); + Gdx.app.log("DEBUG office", json.toJson(officeData)); + Gdx.app.log("DEBUG mask", json.toJson(maskData)); + Gdx.app.log("DEBUG cameras", json.toJson(cameraData)); + Gdx.app.log("DEBUG battery", json.toJson(batteryData)); + Gdx.app.log("DEBUG numbers", json.toJson(numbersData)); + Gdx.app.log("DEBUG customNight", json.toJson(customNightData)); + Gdx.app.log("DEBUG jumpscares", json.toJson(jumpscareData)); + Gdx.app.log("DEBUG cutscenes", json.toJson(cutsceneData)); + Gdx.app.log("DEBUG minigames", json.toJson(minigameData)); + + monitor = new MonitorAssets(); monitor.queue(manager, monitorData); + office = new OfficeAssets(); office.queue(manager, officeData); + mask = new MaskAssets(); mask.queue(manager, maskData); + cameras = new CameraAssets(); cameras.queue(manager, cameraData); + battery = new BatteryAssets(); battery.queue(manager, batteryData); + numbers = new NumbersAssets(); numbers.queue(manager, numbersData); + customNight = new CustomNightAssets(); customNight.queue(manager, customNightData); + jumpscares = new JumpscareAssets(); jumpscares.queue(manager, jumpscareData); + cutscenes = new CutsceneAssets(); cutscenes.queue(manager, cutsceneData); + minigames = new MinigameAssets(); minigames.queue(manager, minigameData); } // ========================================================= - // GETTERS + // GAME LOOP — call in render() // ========================================================= - public Texture getTexture(String path) { - return manager.get(path, Texture.class); - } - - public Sound getSound(String path) { - return manager.get(path, Sound.class); - } - - public Music getMusic(String path) { - return manager.get(path, Music.class); - } - /** - * Returns numbered frames from start to end inclusive. - * Example: getFrames("sprites/monitor/", 1, 11) + * Advances async loading. Returns true when everything is done. + * On completion, fetches all typed references automatically. */ - public Texture[] getFrames(String basePath, int start, int end) { - Texture[] frames = new Texture[end - start + 1]; - for (int i = start; i <= end; i++) { - frames[i - start] = manager.get(basePath + i + ".png", Texture.class); + public boolean update() { + if (!manager.update()) return false; + fetchAll(); + return true; + } + + // ========================================================= + // FETCH — runs once after AssetManager finishes + // ========================================================= + + private boolean fetched = false; + + private void fetchAll() { + if (fetched) return; + fetched = true; + + if (menuData != null) menu.fetch(manager, menuData); + if (monitorData != null) monitor.fetch(manager, monitorData); + if (officeData != null) office.fetch(manager, officeData); + if (maskData != null) mask.fetch(manager, maskData); + if (cameraData != null) cameras.fetch(manager, cameraData); + if (batteryData != null) battery.fetch(manager, batteryData); + if (numbersData != null) numbers.fetch(manager, numbersData); + if (customNightData != null) customNight.fetch(manager, customNightData); + if (jumpscareData != null) jumpscares.fetch(manager, jumpscareData); + if (cutsceneData != null) cutscenes.fetch(manager, cutsceneData); + if (minigameData != null) minigames.fetch(manager, minigameData); + } + + // ========================================================= + // HELPERS + // ========================================================= + + private T load(String filename, Class type) { + FileHandle file = Gdx.files.internal(DATA + filename); + if (!file.exists()) { + Gdx.app.error("GameAssetManager", "JSON not found: " + DATA + filename); + return null; } - return frames; - } - - /** - * Returns frames for a camera location (0 to frameCount-1). - * Example: getCameraFrames("ShowStage", 7) - */ - public Texture[] getCameraFrames(String locationName, int frameCount) { - return getFrames(CAM_LOC_PATH + locationName + "/", 0, frameCount - 1); - } - - public Texture getCameraLabel(String locationName) { - return manager.get(CAM_LOC_PATH + locationName + "/label.png", Texture.class); + return json.fromJson(type, file); } // ========================================================= - // STATE & LIFECYCLE + // LIFECYCLE // ========================================================= - /** Call this in your render loop during loading. Returns true when done. */ - public boolean update() { return manager.update(); } - - /** Blocks until everything is loaded. Use only for quick loads. */ - public void finishLoading() { manager.finishLoading(); } - public float getProgress() { return manager.getProgress(); } - - public void dispose() { manager.dispose(); } + public void finishLoading(){ manager.finishLoading(); fetchAll(); } + public void dispose() { manager.dispose(); } } diff --git a/core/src/main/java/io/github/eldek0/asset/group/AssetBundle.java b/core/src/main/java/io/github/eldek0/asset/group/AssetBundle.java new file mode 100644 index 0000000..1a0041b --- /dev/null +++ b/core/src/main/java/io/github/eldek0/asset/group/AssetBundle.java @@ -0,0 +1,44 @@ +package io.github.eldek0.asset.group; + +import com.badlogic.gdx.assets.AssetManager; + +/** + * Common contract for all typed asset groups. + *

+ * Lifecycle: + *

+ *   bundle.queue(manager, data);   // enqueue paths into AssetManager
+ *   while (!manager.update()) {}   // async loading in render loop
+ *   bundle.fetch(manager, data);   // grab Texture/Sound refs once loaded
+ *   ...
+ *   bundle.dispose(manager);       // unload from AssetManager when done
+ * 
+ * + * @param The JSON data class that describes what to load. + */ +public interface AssetBundle { + + /** + * Enqueues all assets described by {@code data} into the AssetManager. + * Call this before starting the loading loop. + */ + void queue(AssetManager manager, D data); + + /** + * Fetches all loaded assets from the AssetManager into typed fields. + * Call this only after {@code manager.update()} returns true (or finishLoading()). + */ + void fetch(AssetManager manager, D data); + + /** + * Unloads all assets owned by this bundle from the AssetManager. + * Call this when the screen/state that owns this bundle is disposed. + */ + void dispose(AssetManager manager, D data); + + /** + * Returns true if every asset in this bundle has been loaded by the AssetManager. + * Useful for fine-grained loading checks. + */ + boolean isLoaded(AssetManager manager, D data); +} diff --git a/core/src/main/java/io/github/eldek0/asset/group/BatteryAssets.java b/core/src/main/java/io/github/eldek0/asset/group/BatteryAssets.java new file mode 100644 index 0000000..f812909 --- /dev/null +++ b/core/src/main/java/io/github/eldek0/asset/group/BatteryAssets.java @@ -0,0 +1,55 @@ +package io.github.eldek0.asset.group; + +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Texture; + +public class BatteryAssets implements AssetBundle { + + public static class Data { + public String flashlightLabel; + public FrameRange stages; + + public static class FrameRange { + public String base; + public int start, end; + } + } + + public Texture flashlightLabel; + public Texture[] stages; + + @Override + public void queue(AssetManager manager, Data data) { + manager.load(data.flashlightLabel, Texture.class); + for (int i = data.stages.start; i <= data.stages.end; i++) + manager.load(data.stages.base + i + ".png", Texture.class); + } + + @Override + public void fetch(AssetManager manager, Data data) { + flashlightLabel = manager.get(data.flashlightLabel, Texture.class); + stages = fetchRange(manager, data.stages); + } + + @Override + public void dispose(AssetManager manager, Data data) { + manager.unload(data.flashlightLabel); + for (int i = data.stages.start; i <= data.stages.end; i++) + manager.unload(data.stages.base + i + ".png"); + } + + @Override + public boolean isLoaded(AssetManager manager, Data data) { + if (!manager.isLoaded(data.flashlightLabel)) return false; + for (int i = data.stages.start; i <= data.stages.end; i++) + if (!manager.isLoaded(data.stages.base + i + ".png")) return false; + return true; + } + + private Texture[] fetchRange(AssetManager m, Data.FrameRange r) { + Texture[] arr = new Texture[r.end - r.start + 1]; + for (int i = r.start; i <= r.end; i++) + arr[i - r.start] = m.get(r.base + i + ".png", Texture.class); + return arr; + } +} diff --git a/core/src/main/java/io/github/eldek0/asset/group/CameraAssets.java b/core/src/main/java/io/github/eldek0/asset/group/CameraAssets.java new file mode 100644 index 0000000..af85661 --- /dev/null +++ b/core/src/main/java/io/github/eldek0/asset/group/CameraAssets.java @@ -0,0 +1,189 @@ +package io.github.eldek0.asset.group; + +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.utils.Array; + +import java.util.LinkedHashMap; +import java.util.Map; + +public class CameraAssets implements AssetBundle { + + public static class Data { + public Utils utils; + public Labels labels; + public Ranges ranges; + public Array locations; + + public static class Utils { + public String map, borderline, recordSprite, signalInterrupted; + } + public static class Labels { + public String roomButtonUnselected, roomButtonSelected; + public String clicknhold; + public String musicBoxButtonOff, musicBoxButtonOn, musicBoxLabel; + public FrameRange roomLabels; + } + public static class Ranges { + public FrameRange mangle, staticA, staticB, staticStripes, musicBoxTimer; + } + public static class Location { + public String name, base; + public int frameCount; + } + public static class FrameRange { + public String base; + public int start, end; + } + } + + public Texture map, borderline, recordSprite, signalInterrupted; + public Texture roomButtonUnselected, roomButtonSelected; + public Texture clicknhold; + public Texture musicBoxButtonOff, musicBoxButtonOn, musicBoxLabel; + public Texture[] roomLabels, mangle, staticA, staticB, staticStripes, musicBoxTimer; + + public Map locationFrames = new LinkedHashMap<>(); + public Map locationLabels = new LinkedHashMap<>(); + + @Override + public void queue(AssetManager manager, Data d) { + manager.load(d.utils.map, Texture.class); + manager.load(d.utils.borderline, Texture.class); + manager.load(d.utils.recordSprite, Texture.class); + manager.load(d.utils.signalInterrupted, Texture.class); + + manager.load(d.labels.roomButtonUnselected, Texture.class); + manager.load(d.labels.roomButtonSelected, Texture.class); + manager.load(d.labels.clicknhold, Texture.class); + manager.load(d.labels.musicBoxButtonOff, Texture.class); + manager.load(d.labels.musicBoxButtonOn, Texture.class); + manager.load(d.labels.musicBoxLabel, Texture.class); + queueRange(manager, d.labels.roomLabels); + + queueRange(manager, d.ranges.mangle); + queueRange(manager, d.ranges.staticA); + queueRange(manager, d.ranges.staticB); + queueRange(manager, d.ranges.staticStripes); + queueRange(manager, d.ranges.musicBoxTimer); + + for (Data.Location loc : d.locations) { + for (int i = 0; i < loc.frameCount; i++) + manager.load(loc.base + i + ".png", Texture.class); + manager.load(loc.base + "label.png", Texture.class); + } + } + + @Override + public void fetch(AssetManager manager, Data d) { + map = manager.get(d.utils.map, Texture.class); + borderline = manager.get(d.utils.borderline, Texture.class); + recordSprite = manager.get(d.utils.recordSprite, Texture.class); + signalInterrupted = manager.get(d.utils.signalInterrupted, Texture.class); + + roomButtonUnselected = manager.get(d.labels.roomButtonUnselected, Texture.class); + roomButtonSelected = manager.get(d.labels.roomButtonSelected, Texture.class); + clicknhold = manager.get(d.labels.clicknhold, Texture.class); + musicBoxButtonOff = manager.get(d.labels.musicBoxButtonOff, Texture.class); + musicBoxButtonOn = manager.get(d.labels.musicBoxButtonOn, Texture.class); + musicBoxLabel = manager.get(d.labels.musicBoxLabel, Texture.class); + roomLabels = fetchRange(manager, d.labels.roomLabels); + + mangle = fetchRange(manager, d.ranges.mangle); + staticA = fetchRange(manager, d.ranges.staticA); + staticB = fetchRange(manager, d.ranges.staticB); + staticStripes = fetchRange(manager, d.ranges.staticStripes); + musicBoxTimer = fetchRange(manager, d.ranges.musicBoxTimer); + + for (Data.Location loc : d.locations) { + Texture[] frames = new Texture[loc.frameCount]; + for (int i = 0; i < loc.frameCount; i++) + frames[i] = manager.get(loc.base + i + ".png", Texture.class); + locationFrames.put(loc.name, frames); + locationLabels.put(loc.name, manager.get(loc.base + "label.png", Texture.class)); + } + } + + @Override + public void dispose(AssetManager manager, Data d) { + manager.unload(d.utils.map); + manager.unload(d.utils.borderline); + manager.unload(d.utils.recordSprite); + manager.unload(d.utils.signalInterrupted); + + manager.unload(d.labels.roomButtonUnselected); + manager.unload(d.labels.roomButtonSelected); + manager.unload(d.labels.clicknhold); + manager.unload(d.labels.musicBoxButtonOff); + manager.unload(d.labels.musicBoxButtonOn); + manager.unload(d.labels.musicBoxLabel); + disposeRange(manager, d.labels.roomLabels); + + disposeRange(manager, d.ranges.mangle); + disposeRange(manager, d.ranges.staticA); + disposeRange(manager, d.ranges.staticB); + disposeRange(manager, d.ranges.staticStripes); + disposeRange(manager, d.ranges.musicBoxTimer); + + for (Data.Location loc : d.locations) { + for (int i = 0; i < loc.frameCount; i++) + manager.unload(loc.base + i + ".png"); + manager.unload(loc.base + "label.png"); + } + locationFrames.clear(); + locationLabels.clear(); + } + + @Override + public boolean isLoaded(AssetManager manager, Data d) { + if (!manager.isLoaded(d.utils.map)) return false; + if (!manager.isLoaded(d.utils.borderline)) return false; + if (!manager.isLoaded(d.utils.recordSprite)) return false; + if (!manager.isLoaded(d.utils.signalInterrupted)) return false; + + if (!manager.isLoaded(d.labels.roomButtonUnselected)) return false; + if (!manager.isLoaded(d.labels.roomButtonSelected)) return false; + if (!manager.isLoaded(d.labels.clicknhold)) return false; + if (!manager.isLoaded(d.labels.musicBoxButtonOff)) return false; + if (!manager.isLoaded(d.labels.musicBoxButtonOn)) return false; + if (!manager.isLoaded(d.labels.musicBoxLabel)) return false; + if (!isRangeLoaded(manager, d.labels.roomLabels)) return false; + + if (!isRangeLoaded(manager, d.ranges.mangle)) return false; + if (!isRangeLoaded(manager, d.ranges.staticA)) return false; + if (!isRangeLoaded(manager, d.ranges.staticB)) return false; + if (!isRangeLoaded(manager, d.ranges.staticStripes)) return false; + if (!isRangeLoaded(manager, d.ranges.musicBoxTimer)) return false; + + for (Data.Location loc : d.locations) { + for (int i = 0; i < loc.frameCount; i++) + if (!manager.isLoaded(loc.base + i + ".png")) return false; + if (!manager.isLoaded(loc.base + "label.png")) return false; + } + return true; + } + + public Texture[] getLocationFrames(String name) { return locationFrames.get(name); } + public Texture getLocationLabel(String name) { return locationLabels.get(name); } + + private void queueRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.load(r.base + i + ".png", Texture.class); + } + + private Texture[] fetchRange(AssetManager m, Data.FrameRange r) { + Texture[] arr = new Texture[r.end - r.start + 1]; + for (int i = r.start; i <= r.end; i++) + arr[i - r.start] = m.get(r.base + i + ".png", Texture.class); + return arr; + } + + private void disposeRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.unload(r.base + i + ".png"); + } + + private boolean isRangeLoaded(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) + if (!m.isLoaded(r.base + i + ".png")) return false; + return true; + } +} diff --git a/core/src/main/java/io/github/eldek0/asset/group/CustomNightAssets.java b/core/src/main/java/io/github/eldek0/asset/group/CustomNightAssets.java new file mode 100644 index 0000000..b319569 --- /dev/null +++ b/core/src/main/java/io/github/eldek0/asset/group/CustomNightAssets.java @@ -0,0 +1,106 @@ +package io.github.eldek0.asset.group; + +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Texture; + +public class CustomNightAssets implements AssetBundle { + + public static class Data { + public Labels labels; + public FrameRange icons, names, modes, rewards; + + public static class Labels { + public String title, arrowRight, arrowLeft, readyButton; + public String arrowRight2, arrowLeft2, levelInfo; + } + public static class FrameRange { + public String base; + public int start, end; + } + } + + public Texture title, arrowRight, arrowLeft, readyButton; + public Texture arrowRight2, arrowLeft2, levelInfo; + public Texture[] icons, names, modes, rewards; + + @Override + public void queue(AssetManager manager, Data d) { + manager.load(d.labels.title, Texture.class); + manager.load(d.labels.arrowRight, Texture.class); + manager.load(d.labels.arrowLeft, Texture.class); + manager.load(d.labels.readyButton, Texture.class); + manager.load(d.labels.arrowRight2, Texture.class); + manager.load(d.labels.arrowLeft2, Texture.class); + manager.load(d.labels.levelInfo, Texture.class); + queueRange(manager, d.icons); + queueRange(manager, d.names); + queueRange(manager, d.modes); + queueRange(manager, d.rewards); + } + + @Override + public void fetch(AssetManager manager, Data d) { + title = manager.get(d.labels.title, Texture.class); + arrowRight = manager.get(d.labels.arrowRight, Texture.class); + arrowLeft = manager.get(d.labels.arrowLeft, Texture.class); + readyButton = manager.get(d.labels.readyButton, Texture.class); + arrowRight2 = manager.get(d.labels.arrowRight2, Texture.class); + arrowLeft2 = manager.get(d.labels.arrowLeft2, Texture.class); + levelInfo = manager.get(d.labels.levelInfo, Texture.class); + icons = fetchRange(manager, d.icons); + names = fetchRange(manager, d.names); + modes = fetchRange(manager, d.modes); + rewards = fetchRange(manager, d.rewards); + } + + @Override + public void dispose(AssetManager manager, Data d) { + manager.unload(d.labels.title); + manager.unload(d.labels.arrowRight); + manager.unload(d.labels.arrowLeft); + manager.unload(d.labels.readyButton); + manager.unload(d.labels.arrowRight2); + manager.unload(d.labels.arrowLeft2); + manager.unload(d.labels.levelInfo); + disposeRange(manager, d.icons); + disposeRange(manager, d.names); + disposeRange(manager, d.modes); + disposeRange(manager, d.rewards); + } + + @Override + public boolean isLoaded(AssetManager manager, Data d) { + return manager.isLoaded(d.labels.title) + && manager.isLoaded(d.labels.arrowRight) + && manager.isLoaded(d.labels.arrowLeft) + && manager.isLoaded(d.labels.readyButton) + && manager.isLoaded(d.labels.arrowRight2) + && manager.isLoaded(d.labels.arrowLeft2) + && manager.isLoaded(d.labels.levelInfo) + && isRangeLoaded(manager, d.icons) + && isRangeLoaded(manager, d.names) + && isRangeLoaded(manager, d.modes) + && isRangeLoaded(manager, d.rewards); + } + + private void queueRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.load(r.base + i + ".png", Texture.class); + } + + private Texture[] fetchRange(AssetManager m, Data.FrameRange r) { + Texture[] arr = new Texture[r.end - r.start + 1]; + for (int i = r.start; i <= r.end; i++) + arr[i - r.start] = m.get(r.base + i + ".png", Texture.class); + return arr; + } + + private void disposeRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.unload(r.base + i + ".png"); + } + + private boolean isRangeLoaded(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) + if (!m.isLoaded(r.base + i + ".png")) return false; + return true; + } +} diff --git a/core/src/main/java/io/github/eldek0/asset/group/CutsceneAssets.java b/core/src/main/java/io/github/eldek0/asset/group/CutsceneAssets.java new file mode 100644 index 0000000..d4502c5 --- /dev/null +++ b/core/src/main/java/io/github/eldek0/asset/group/CutsceneAssets.java @@ -0,0 +1,93 @@ +package io.github.eldek0.asset.group; + +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Texture; + +public class CutsceneAssets implements AssetBundle { + + public static class Data { + public String freddy, puppet, background, black, mask, errImg, itsMe; + public FrameRange chica, bonnie; + + public static class FrameRange { + public String base; + public int start, end; + } + } + + public Texture freddy, puppet, background, black, mask, errImg, itsMe; + public Texture[] chica, bonnie; + + @Override + public void queue(AssetManager manager, Data d) { + manager.load(d.freddy, Texture.class); + manager.load(d.puppet, Texture.class); + manager.load(d.background, Texture.class); + manager.load(d.black, Texture.class); + manager.load(d.mask, Texture.class); + manager.load(d.errImg, Texture.class); + manager.load(d.itsMe, Texture.class); + queueRange(manager, d.chica); + queueRange(manager, d.bonnie); + } + + @Override + public void fetch(AssetManager manager, Data d) { + freddy = manager.get(d.freddy, Texture.class); + puppet = manager.get(d.puppet, Texture.class); + background = manager.get(d.background, Texture.class); + black = manager.get(d.black, Texture.class); + mask = manager.get(d.mask, Texture.class); + errImg = manager.get(d.errImg, Texture.class); + itsMe = manager.get(d.itsMe, Texture.class); + chica = fetchRange(manager, d.chica); + bonnie = fetchRange(manager, d.bonnie); + } + + @Override + public void dispose(AssetManager manager, Data d) { + manager.unload(d.freddy); + manager.unload(d.puppet); + manager.unload(d.background); + manager.unload(d.black); + manager.unload(d.mask); + manager.unload(d.errImg); + manager.unload(d.itsMe); + disposeRange(manager, d.chica); + disposeRange(manager, d.bonnie); + } + + @Override + public boolean isLoaded(AssetManager manager, Data d) { + return manager.isLoaded(d.freddy) + && manager.isLoaded(d.puppet) + && manager.isLoaded(d.background) + && manager.isLoaded(d.black) + && manager.isLoaded(d.mask) + && manager.isLoaded(d.errImg) + && manager.isLoaded(d.itsMe) + && isRangeLoaded(manager, d.chica) + && isRangeLoaded(manager, d.bonnie); + } + + private void queueRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.load(r.base + i + ".png", Texture.class); + } + + private Texture[] fetchRange(AssetManager m, Data.FrameRange r) { + Texture[] arr = new Texture[r.end - r.start + 1]; + for (int i = r.start; i <= r.end; i++) + arr[i - r.start] = m.get(r.base + i + ".png", Texture.class); + return arr; + } + + private void disposeRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.unload(r.base + i + ".png"); + } + + private boolean isRangeLoaded(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) + if (!m.isLoaded(r.base + i + ".png")) return false; + return true; + } +} diff --git a/core/src/main/java/io/github/eldek0/asset/group/JumpscareAssets.java b/core/src/main/java/io/github/eldek0/asset/group/JumpscareAssets.java new file mode 100644 index 0000000..598d6fd --- /dev/null +++ b/core/src/main/java/io/github/eldek0/asset/group/JumpscareAssets.java @@ -0,0 +1,99 @@ +package io.github.eldek0.asset.group; + +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Texture; + +public class JumpscareAssets implements AssetBundle { + + public static class Data { + public FrameRange puppet, toyBonnie, toyChica, toyFreddy; + public FrameRange witheredFreddy, witheredBonnie, witheredChica; + public FrameRange foxy, mangle, goldenFreddy; + + public static class FrameRange { + public String base; + public int start, end; + } + } + + public Texture[] puppet, toyBonnie, toyChica, toyFreddy; + public Texture[] witheredFreddy, witheredBonnie, witheredChica; + public Texture[] foxy, mangle, goldenFreddy; + + @Override + public void queue(AssetManager manager, Data d) { + queueRange(manager, d.puppet); + queueRange(manager, d.toyBonnie); + queueRange(manager, d.toyChica); + queueRange(manager, d.toyFreddy); + queueRange(manager, d.witheredFreddy); + queueRange(manager, d.witheredBonnie); + queueRange(manager, d.witheredChica); + queueRange(manager, d.foxy); + queueRange(manager, d.mangle); + queueRange(manager, d.goldenFreddy); + } + + @Override + public void fetch(AssetManager manager, Data d) { + puppet = fetchRange(manager, d.puppet); + toyBonnie = fetchRange(manager, d.toyBonnie); + toyChica = fetchRange(manager, d.toyChica); + toyFreddy = fetchRange(manager, d.toyFreddy); + witheredFreddy = fetchRange(manager, d.witheredFreddy); + witheredBonnie = fetchRange(manager, d.witheredBonnie); + witheredChica = fetchRange(manager, d.witheredChica); + foxy = fetchRange(manager, d.foxy); + mangle = fetchRange(manager, d.mangle); + goldenFreddy = fetchRange(manager, d.goldenFreddy); + } + + @Override + public void dispose(AssetManager manager, Data d) { + disposeRange(manager, d.puppet); + disposeRange(manager, d.toyBonnie); + disposeRange(manager, d.toyChica); + disposeRange(manager, d.toyFreddy); + disposeRange(manager, d.witheredFreddy); + disposeRange(manager, d.witheredBonnie); + disposeRange(manager, d.witheredChica); + disposeRange(manager, d.foxy); + disposeRange(manager, d.mangle); + disposeRange(manager, d.goldenFreddy); + } + + @Override + public boolean isLoaded(AssetManager manager, Data d) { + return isRangeLoaded(manager, d.puppet) + && isRangeLoaded(manager, d.toyBonnie) + && isRangeLoaded(manager, d.toyChica) + && isRangeLoaded(manager, d.toyFreddy) + && isRangeLoaded(manager, d.witheredFreddy) + && isRangeLoaded(manager, d.witheredBonnie) + && isRangeLoaded(manager, d.witheredChica) + && isRangeLoaded(manager, d.foxy) + && isRangeLoaded(manager, d.mangle) + && isRangeLoaded(manager, d.goldenFreddy); + } + + private void queueRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.load(r.base + i + ".png", Texture.class); + } + + private Texture[] fetchRange(AssetManager m, Data.FrameRange r) { + Texture[] arr = new Texture[r.end - r.start + 1]; + for (int i = r.start; i <= r.end; i++) + arr[i - r.start] = m.get(r.base + i + ".png", Texture.class); + return arr; + } + + private void disposeRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.unload(r.base + i + ".png"); + } + + private boolean isRangeLoaded(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) + if (!m.isLoaded(r.base + i + ".png")) return false; + return true; + } +} diff --git a/core/src/main/java/io/github/eldek0/asset/group/MaskAssets.java b/core/src/main/java/io/github/eldek0/asset/group/MaskAssets.java new file mode 100644 index 0000000..2bbf48f --- /dev/null +++ b/core/src/main/java/io/github/eldek0/asset/group/MaskAssets.java @@ -0,0 +1,55 @@ +package io.github.eldek0.asset.group; + +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Texture; + +public class MaskAssets implements AssetBundle { + + public static class Data { + public String button; + public FrameRange sprites; + + public static class FrameRange { + public String base; + public int start, end; + } + } + + public Texture button; + public Texture[] sprites; + + @Override + public void queue(AssetManager manager, Data data) { + manager.load(data.button, Texture.class); + for (int i = data.sprites.start; i <= data.sprites.end; i++) + manager.load(data.sprites.base + i + ".png", Texture.class); + } + + @Override + public void fetch(AssetManager manager, Data data) { + button = manager.get(data.button, Texture.class); + sprites = fetchRange(manager, data.sprites); + } + + @Override + public void dispose(AssetManager manager, Data data) { + manager.unload(data.button); + for (int i = data.sprites.start; i <= data.sprites.end; i++) + manager.unload(data.sprites.base + i + ".png"); + } + + @Override + public boolean isLoaded(AssetManager manager, Data data) { + if (!manager.isLoaded(data.button)) return false; + for (int i = data.sprites.start; i <= data.sprites.end; i++) + if (!manager.isLoaded(data.sprites.base + i + ".png")) return false; + return true; + } + + private Texture[] fetchRange(AssetManager m, Data.FrameRange r) { + Texture[] arr = new Texture[r.end - r.start + 1]; + for (int i = r.start; i <= r.end; i++) + arr[i - r.start] = m.get(r.base + i + ".png", Texture.class); + return arr; + } +} diff --git a/core/src/main/java/io/github/eldek0/asset/group/MenuAssets.java b/core/src/main/java/io/github/eldek0/asset/group/MenuAssets.java new file mode 100644 index 0000000..e63cbc8 --- /dev/null +++ b/core/src/main/java/io/github/eldek0/asset/group/MenuAssets.java @@ -0,0 +1,214 @@ +package io.github.eldek0.asset.group; + +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Texture; + +public class MenuAssets implements AssetBundle { + + public static class Data { + public Logos logos; + public Nights nights; + public Paychecks paychecks; + public Misc misc; + public Ranges ranges; + + public static class Logos { + public String title, scottCredits, selScottCredits; + public String optionSelected, newGame, continueGame, deleteData; + public String version, nightLabel2, escToReturn; + public String extras, animatronics, jumpscares, minigames; + public String selSquare, realTimeButton, loadingIcon; + } + public static class Nights { + public String nightSix, customNight, lostScreen, gameOver, realTimeNight; + public FrameRange night12am; + } + public static class Paychecks { + public String newspaper, nightFive, nightSix, nightSeven; + } + public static class Misc { + public String star, blueStar; + public FrameRange background; + } + public static class Ranges { + public FrameRange confettiBlue, confettiGreen, confettiYellow, confettiPink; + } + public static class FrameRange { + public String base; + public int start, end; + } + } + + public Texture title, scottCredits, selScottCredits; + public Texture optionSelected, newGame, continueGame, deleteData; + public Texture version, nightLabel2, escToReturn; + public Texture extras, animatronics, jumpscares, minigames; + public Texture selSquare, realTimeButton, loadingIcon; + public Texture nightSixOption, customNightOption, lostScreen, gameOver, realTimeNight; + public Texture[] night12am; + public Texture newspaper, nightFivePaycheck, nightSixPaycheck, nightSevenPaycheck; + public Texture star, blueStar; + public Texture[] background; + public Texture[] confettiBlue, confettiGreen, confettiYellow, confettiPink; + + @Override + public void queue(AssetManager manager, Data d) { + Data.Logos l = d.logos; + manager.load(l.title, Texture.class); manager.load(l.scottCredits, Texture.class); + manager.load(l.selScottCredits, Texture.class); manager.load(l.optionSelected, Texture.class); + manager.load(l.newGame, Texture.class); manager.load(l.continueGame, Texture.class); + manager.load(l.deleteData, Texture.class); manager.load(l.version, Texture.class); + manager.load(l.nightLabel2, Texture.class); manager.load(l.escToReturn, Texture.class); + manager.load(l.extras, Texture.class); manager.load(l.animatronics, Texture.class); + manager.load(l.jumpscares, Texture.class); manager.load(l.minigames, Texture.class); + manager.load(l.selSquare, Texture.class); manager.load(l.realTimeButton, Texture.class); + manager.load(l.loadingIcon, Texture.class); + + Data.Nights n = d.nights; + manager.load(n.nightSix, Texture.class); manager.load(n.customNight, Texture.class); + manager.load(n.lostScreen, Texture.class); manager.load(n.gameOver, Texture.class); + manager.load(n.realTimeNight, Texture.class); + queueRange(manager, n.night12am); + + Data.Paychecks p = d.paychecks; + manager.load(p.newspaper, Texture.class); manager.load(p.nightFive, Texture.class); + manager.load(p.nightSix, Texture.class); manager.load(p.nightSeven, Texture.class); + + manager.load(d.misc.star, Texture.class); manager.load(d.misc.blueStar, Texture.class); + queueRange(manager, d.misc.background); + + queueRange(manager, d.ranges.confettiBlue); + queueRange(manager, d.ranges.confettiGreen); + queueRange(manager, d.ranges.confettiYellow); + queueRange(manager, d.ranges.confettiPink); + } + + @Override + public void fetch(AssetManager manager, Data d) { + Data.Logos l = d.logos; + title = manager.get(l.title, Texture.class); + scottCredits = manager.get(l.scottCredits, Texture.class); + selScottCredits = manager.get(l.selScottCredits, Texture.class); + optionSelected = manager.get(l.optionSelected, Texture.class); + newGame = manager.get(l.newGame, Texture.class); + continueGame = manager.get(l.continueGame, Texture.class); + deleteData = manager.get(l.deleteData, Texture.class); + version = manager.get(l.version, Texture.class); + nightLabel2 = manager.get(l.nightLabel2, Texture.class); + escToReturn = manager.get(l.escToReturn, Texture.class); + extras = manager.get(l.extras, Texture.class); + animatronics = manager.get(l.animatronics, Texture.class); + jumpscares = manager.get(l.jumpscares, Texture.class); + minigames = manager.get(l.minigames, Texture.class); + selSquare = manager.get(l.selSquare, Texture.class); + realTimeButton = manager.get(l.realTimeButton, Texture.class); + loadingIcon = manager.get(l.loadingIcon, Texture.class); + + Data.Nights n = d.nights; + nightSixOption = manager.get(n.nightSix, Texture.class); + customNightOption = manager.get(n.customNight, Texture.class); + lostScreen = manager.get(n.lostScreen, Texture.class); + gameOver = manager.get(n.gameOver, Texture.class); + realTimeNight = manager.get(n.realTimeNight, Texture.class); + night12am = fetchRange(manager, n.night12am); + + Data.Paychecks p = d.paychecks; + newspaper = manager.get(p.newspaper, Texture.class); + nightFivePaycheck = manager.get(p.nightFive, Texture.class); + nightSixPaycheck = manager.get(p.nightSix, Texture.class); + nightSevenPaycheck = manager.get(p.nightSeven, Texture.class); + + star = manager.get(d.misc.star, Texture.class); + blueStar = manager.get(d.misc.blueStar, Texture.class); + background = fetchRange(manager, d.misc.background); + + confettiBlue = fetchRange(manager, d.ranges.confettiBlue); + confettiGreen = fetchRange(manager, d.ranges.confettiGreen); + confettiYellow = fetchRange(manager, d.ranges.confettiYellow); + confettiPink = fetchRange(manager, d.ranges.confettiPink); + } + + @Override + public void dispose(AssetManager manager, Data d) { + Data.Logos l = d.logos; + manager.unload(l.title); manager.unload(l.scottCredits); + manager.unload(l.selScottCredits); manager.unload(l.optionSelected); + manager.unload(l.newGame); manager.unload(l.continueGame); + manager.unload(l.deleteData); manager.unload(l.version); + manager.unload(l.nightLabel2); manager.unload(l.escToReturn); + manager.unload(l.extras); manager.unload(l.animatronics); + manager.unload(l.jumpscares); manager.unload(l.minigames); + manager.unload(l.selSquare); manager.unload(l.realTimeButton); + manager.unload(l.loadingIcon); + + Data.Nights n = d.nights; + manager.unload(n.nightSix); manager.unload(n.customNight); + manager.unload(n.lostScreen); manager.unload(n.gameOver); + manager.unload(n.realTimeNight); + disposeRange(manager, n.night12am); + + Data.Paychecks p = d.paychecks; + manager.unload(p.newspaper); manager.unload(p.nightFive); + manager.unload(p.nightSix); manager.unload(p.nightSeven); + + manager.unload(d.misc.star); manager.unload(d.misc.blueStar); + disposeRange(manager, d.misc.background); + + disposeRange(manager, d.ranges.confettiBlue); + disposeRange(manager, d.ranges.confettiGreen); + disposeRange(manager, d.ranges.confettiYellow); + disposeRange(manager, d.ranges.confettiPink); + } + + @Override + public boolean isLoaded(AssetManager manager, Data d) { + Data.Logos l = d.logos; + if (!manager.isLoaded(l.title) || !manager.isLoaded(l.scottCredits) ) return false; + if (!manager.isLoaded(l.selScottCredits)|| !manager.isLoaded(l.optionSelected) ) return false; + if (!manager.isLoaded(l.newGame) || !manager.isLoaded(l.continueGame) ) return false; + if (!manager.isLoaded(l.deleteData) || !manager.isLoaded(l.version) ) return false; + if (!manager.isLoaded(l.nightLabel2) || !manager.isLoaded(l.escToReturn) ) return false; + if (!manager.isLoaded(l.extras) || !manager.isLoaded(l.animatronics) ) return false; + if (!manager.isLoaded(l.jumpscares) || !manager.isLoaded(l.minigames) ) return false; + if (!manager.isLoaded(l.selSquare) || !manager.isLoaded(l.realTimeButton) ) return false; + if (!manager.isLoaded(l.loadingIcon)) return false; + + Data.Nights n = d.nights; + if (!manager.isLoaded(n.nightSix) || !manager.isLoaded(n.customNight) ) return false; + if (!manager.isLoaded(n.lostScreen) || !manager.isLoaded(n.gameOver) ) return false; + if (!manager.isLoaded(n.realTimeNight) || !isRangeLoaded(manager, n.night12am)) return false; + + Data.Paychecks p = d.paychecks; + if (!manager.isLoaded(p.newspaper) || !manager.isLoaded(p.nightFive)) return false; + if (!manager.isLoaded(p.nightSix) || !manager.isLoaded(p.nightSeven)) return false; + + if (!manager.isLoaded(d.misc.star) || !manager.isLoaded(d.misc.blueStar)) return false; + if (!isRangeLoaded(manager, d.misc.background)) return false; + + return isRangeLoaded(manager, d.ranges.confettiBlue) + && isRangeLoaded(manager, d.ranges.confettiGreen) + && isRangeLoaded(manager, d.ranges.confettiYellow) + && isRangeLoaded(manager, d.ranges.confettiPink); + } + + private void queueRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.load(r.base + i + ".png", Texture.class); + } + + private Texture[] fetchRange(AssetManager m, Data.FrameRange r) { + Texture[] arr = new Texture[r.end - r.start + 1]; + for (int i = r.start; i <= r.end; i++) + arr[i - r.start] = m.get(r.base + i + ".png", Texture.class); + return arr; + } + + private void disposeRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.unload(r.base + i + ".png"); + } + + private boolean isRangeLoaded(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) + if (!m.isLoaded(r.base + i + ".png")) return false; + return true; + } +} diff --git a/core/src/main/java/io/github/eldek0/asset/group/MinigameAssets.java b/core/src/main/java/io/github/eldek0/asset/group/MinigameAssets.java new file mode 100644 index 0000000..08fa9a7 --- /dev/null +++ b/core/src/main/java/io/github/eldek0/asset/group/MinigameAssets.java @@ -0,0 +1,247 @@ +package io.github.eldek0.asset.group; + +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Texture; + +public class MinigameAssets implements AssetBundle { + + public static class Data { + public GiveGifts giveGifts; + public SaveThem saveThem; + public FoxyGoGo foxyGoGo; + public Tcttc tcttc; + public FrameRange screenshots, rare, animatronics; + + public static class GiveGifts { + public String puppet, soul, gift, giveGifts, giveLife; + public String chicaMask, fredMask, bonnieMask, foxyMask; + } + public static class SaveThem { + public String table, desk, scenery, dust, floor1, floor2, wasd; + public String suit1, suit2, suit3, suitGr1, suitGr2, sadSoul, blood, bigGift; + public FrameRange freddyWalking, endoAnim; + } + public static class FoxyGoGo { + public String courtain, sadChild, happyChild, arrow, purpleGuy; + public String getReady, go, hurray; + public FrameRange foxyAnim, confetti; + } + public static class Tcttc { + public String deadChild, car, label; + public FrameRange cakeFreddy, childCrying, child; + } + public static class FrameRange { + public String base; + public int start, end; + } + } + + // Give Gifts Give Life + public Texture puppet, soul, gift, giveGifts, giveLife; + public Texture chicaMask, fredMask, bonnieMask, foxyMask; + + // Save Them + public Texture table, desk, scenery, dust, floor1, floor2, wasd; + public Texture suit1, suit2, suit3, suitGr1, suitGr2, sadSoul, blood, bigGift; + public Texture[] freddyWalking, endoAnim; + + // Foxy Go Go Go + public Texture courtain, sadChild, happyChild, arrow, purpleGuy; + public Texture getReady, go, hurray; + public Texture[] foxyAnim, confetti; + + // Take Cake to the Children + public Texture deadChild, car, label; + public Texture[] cakeFreddy, childCrying, child; + + // Misc + public Texture[] screenshots, rare, animatronics; + + @Override + public void queue(AssetManager manager, Data d) { + Data.GiveGifts g = d.giveGifts; + manager.load(g.puppet, Texture.class); manager.load(g.soul, Texture.class); + manager.load(g.gift, Texture.class); manager.load(g.giveGifts, Texture.class); + manager.load(g.giveLife, Texture.class); manager.load(g.chicaMask, Texture.class); + manager.load(g.fredMask, Texture.class); manager.load(g.bonnieMask, Texture.class); + manager.load(g.foxyMask, Texture.class); + + Data.SaveThem s = d.saveThem; + manager.load(s.table, Texture.class); manager.load(s.desk, Texture.class); + manager.load(s.scenery, Texture.class); manager.load(s.dust, Texture.class); + manager.load(s.floor1, Texture.class); manager.load(s.floor2, Texture.class); + manager.load(s.wasd, Texture.class); manager.load(s.suit1, Texture.class); + manager.load(s.suit2, Texture.class); manager.load(s.suit3, Texture.class); + manager.load(s.suitGr1, Texture.class); manager.load(s.suitGr2, Texture.class); + manager.load(s.sadSoul, Texture.class); manager.load(s.blood, Texture.class); + manager.load(s.bigGift, Texture.class); + queueRange(manager, s.freddyWalking); + queueRange(manager, s.endoAnim); + + Data.FoxyGoGo f = d.foxyGoGo; + manager.load(f.courtain, Texture.class); manager.load(f.sadChild, Texture.class); + manager.load(f.happyChild, Texture.class); manager.load(f.arrow, Texture.class); + manager.load(f.purpleGuy, Texture.class); manager.load(f.getReady, Texture.class); + manager.load(f.go, Texture.class); manager.load(f.hurray, Texture.class); + queueRange(manager, f.foxyAnim); + queueRange(manager, f.confetti); + + Data.Tcttc t = d.tcttc; + manager.load(t.deadChild, Texture.class); + manager.load(t.car, Texture.class); + manager.load(t.label, Texture.class); + queueRange(manager, t.cakeFreddy); + queueRange(manager, t.childCrying); + queueRange(manager, t.child); + + queueRange(manager, d.screenshots); + queueRange(manager, d.rare); + queueRange(manager, d.animatronics); + } + + @Override + public void fetch(AssetManager manager, Data d) { + Data.GiveGifts g = d.giveGifts; + puppet = manager.get(g.puppet, Texture.class); + soul = manager.get(g.soul, Texture.class); + gift = manager.get(g.gift, Texture.class); + giveGifts = manager.get(g.giveGifts, Texture.class); + giveLife = manager.get(g.giveLife, Texture.class); + chicaMask = manager.get(g.chicaMask, Texture.class); + fredMask = manager.get(g.fredMask, Texture.class); + bonnieMask = manager.get(g.bonnieMask, Texture.class); + foxyMask = manager.get(g.foxyMask, Texture.class); + + Data.SaveThem s = d.saveThem; + table = manager.get(s.table, Texture.class); desk = manager.get(s.desk, Texture.class); + scenery = manager.get(s.scenery, Texture.class); dust = manager.get(s.dust, Texture.class); + floor1 = manager.get(s.floor1, Texture.class); floor2 = manager.get(s.floor2, Texture.class); + wasd = manager.get(s.wasd, Texture.class); suit1 = manager.get(s.suit1, Texture.class); + suit2 = manager.get(s.suit2, Texture.class); suit3 = manager.get(s.suit3, Texture.class); + suitGr1 = manager.get(s.suitGr1, Texture.class); suitGr2 = manager.get(s.suitGr2, Texture.class); + sadSoul = manager.get(s.sadSoul, Texture.class); blood = manager.get(s.blood, Texture.class); + bigGift = manager.get(s.bigGift, Texture.class); + freddyWalking = fetchRange(manager, s.freddyWalking); + endoAnim = fetchRange(manager, s.endoAnim); + + Data.FoxyGoGo f = d.foxyGoGo; + courtain = manager.get(f.courtain, Texture.class); + sadChild = manager.get(f.sadChild, Texture.class); + happyChild = manager.get(f.happyChild, Texture.class); + arrow = manager.get(f.arrow, Texture.class); + purpleGuy = manager.get(f.purpleGuy, Texture.class); + getReady = manager.get(f.getReady, Texture.class); + go = manager.get(f.go, Texture.class); + hurray = manager.get(f.hurray, Texture.class); + foxyAnim = fetchRange(manager, f.foxyAnim); + confetti = fetchRange(manager, f.confetti); + + Data.Tcttc t = d.tcttc; + deadChild = manager.get(t.deadChild, Texture.class); + car = manager.get(t.car, Texture.class); + label = manager.get(t.label, Texture.class); + cakeFreddy = fetchRange(manager, t.cakeFreddy); + childCrying = fetchRange(manager, t.childCrying); + child = fetchRange(manager, t.child); + + screenshots = fetchRange(manager, d.screenshots); + rare = fetchRange(manager, d.rare); + animatronics = fetchRange(manager, d.animatronics); + } + + @Override + public void dispose(AssetManager manager, Data d) { + Data.GiveGifts g = d.giveGifts; + manager.unload(g.puppet); manager.unload(g.soul); manager.unload(g.gift); + manager.unload(g.giveGifts); manager.unload(g.giveLife); + manager.unload(g.chicaMask); manager.unload(g.fredMask); + manager.unload(g.bonnieMask); manager.unload(g.foxyMask); + + Data.SaveThem s = d.saveThem; + manager.unload(s.table); manager.unload(s.desk); manager.unload(s.scenery); + manager.unload(s.dust); manager.unload(s.floor1); manager.unload(s.floor2); + manager.unload(s.wasd); manager.unload(s.suit1); manager.unload(s.suit2); + manager.unload(s.suit3); manager.unload(s.suitGr1); manager.unload(s.suitGr2); + manager.unload(s.sadSoul); manager.unload(s.blood); manager.unload(s.bigGift); + disposeRange(manager, s.freddyWalking); + disposeRange(manager, s.endoAnim); + + Data.FoxyGoGo f = d.foxyGoGo; + manager.unload(f.courtain); manager.unload(f.sadChild); manager.unload(f.happyChild); + manager.unload(f.arrow); manager.unload(f.purpleGuy); manager.unload(f.getReady); + manager.unload(f.go); manager.unload(f.hurray); + disposeRange(manager, f.foxyAnim); + disposeRange(manager, f.confetti); + + Data.Tcttc t = d.tcttc; + manager.unload(t.deadChild); manager.unload(t.car); manager.unload(t.label); + disposeRange(manager, t.cakeFreddy); + disposeRange(manager, t.childCrying); + disposeRange(manager, t.child); + + disposeRange(manager, d.screenshots); + disposeRange(manager, d.rare); + disposeRange(manager, d.animatronics); + } + + @Override + public boolean isLoaded(AssetManager manager, Data d) { + Data.GiveGifts g = d.giveGifts; + if (!manager.isLoaded(g.puppet) || !manager.isLoaded(g.soul) ) return false; + if (!manager.isLoaded(g.gift) || !manager.isLoaded(g.giveGifts) ) return false; + if (!manager.isLoaded(g.giveLife)|| !manager.isLoaded(g.chicaMask)) return false; + if (!manager.isLoaded(g.fredMask)||!manager.isLoaded(g.bonnieMask)) return false; + if (!manager.isLoaded(g.foxyMask)) return false; + + Data.SaveThem s = d.saveThem; + if (!manager.isLoaded(s.table) || !manager.isLoaded(s.desk) ) return false; + if (!manager.isLoaded(s.scenery)|| !manager.isLoaded(s.dust) ) return false; + if (!manager.isLoaded(s.floor1) || !manager.isLoaded(s.floor2)) return false; + if (!manager.isLoaded(s.wasd) || !manager.isLoaded(s.suit1) ) return false; + if (!manager.isLoaded(s.suit2) || !manager.isLoaded(s.suit3) ) return false; + if (!manager.isLoaded(s.suitGr1)|| !manager.isLoaded(s.suitGr2)) return false; + if (!manager.isLoaded(s.sadSoul)|| !manager.isLoaded(s.blood) ) return false; + if (!manager.isLoaded(s.bigGift)) return false; + if (!isRangeLoaded(manager, s.freddyWalking)) return false; + if (!isRangeLoaded(manager, s.endoAnim)) return false; + + Data.FoxyGoGo f = d.foxyGoGo; + if (!manager.isLoaded(f.courtain) || !manager.isLoaded(f.sadChild) ) return false; + if (!manager.isLoaded(f.happyChild)|| !manager.isLoaded(f.arrow) ) return false; + if (!manager.isLoaded(f.purpleGuy) || !manager.isLoaded(f.getReady) ) return false; + if (!manager.isLoaded(f.go) || !manager.isLoaded(f.hurray) ) return false; + if (!isRangeLoaded(manager, f.foxyAnim)) return false; + if (!isRangeLoaded(manager, f.confetti)) return false; + + Data.Tcttc t = d.tcttc; + if (!manager.isLoaded(t.deadChild) || !manager.isLoaded(t.car) || !manager.isLoaded(t.label)) return false; + if (!isRangeLoaded(manager, t.cakeFreddy)) return false; + if (!isRangeLoaded(manager, t.childCrying)) return false; + if (!isRangeLoaded(manager, t.child)) return false; + + return isRangeLoaded(manager, d.screenshots) + && isRangeLoaded(manager, d.rare) + && isRangeLoaded(manager, d.animatronics); + } + + private void queueRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.load(r.base + i + ".png", Texture.class); + } + + private Texture[] fetchRange(AssetManager m, Data.FrameRange r) { + Texture[] arr = new Texture[r.end - r.start + 1]; + for (int i = r.start; i <= r.end; i++) + arr[i - r.start] = m.get(r.base + i + ".png", Texture.class); + return arr; + } + + private void disposeRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.unload(r.base + i + ".png"); + } + + private boolean isRangeLoaded(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) + if (!m.isLoaded(r.base + i + ".png")) return false; + return true; + } +} diff --git a/core/src/main/java/io/github/eldek0/asset/group/MonitorAssets.java b/core/src/main/java/io/github/eldek0/asset/group/MonitorAssets.java new file mode 100644 index 0000000..43a44ce --- /dev/null +++ b/core/src/main/java/io/github/eldek0/asset/group/MonitorAssets.java @@ -0,0 +1,61 @@ +package io.github.eldek0.asset.group; + +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Texture; + +public class MonitorAssets implements AssetBundle { + + // ---- JSON data class ---- + public static class Data { + public String button; + public FrameRange sprites; + + public static class FrameRange { + public String base; + public int start, end; + } + } + + // ---- Typed fields ---- + public Texture button; + public Texture[] sprites; + + // ---- AssetBundle ---- + + @Override + public void queue(AssetManager manager, Data data) { + manager.load(data.button, Texture.class); + for (int i = data.sprites.start; i <= data.sprites.end; i++) + manager.load(data.sprites.base + i + ".png", Texture.class); + } + + @Override + public void fetch(AssetManager manager, Data data) { + button = manager.get(data.button, Texture.class); + sprites = fetchRange(manager, data.sprites); + } + + @Override + public void dispose(AssetManager manager, Data data) { + manager.unload(data.button); + for (int i = data.sprites.start; i <= data.sprites.end; i++) + manager.unload(data.sprites.base + i + ".png"); + } + + @Override + public boolean isLoaded(AssetManager manager, Data data) { + if (!manager.isLoaded(data.button)) return false; + for (int i = data.sprites.start; i <= data.sprites.end; i++) + if (!manager.isLoaded(data.sprites.base + i + ".png")) return false; + return true; + } + + // ---- Helpers ---- + + private Texture[] fetchRange(AssetManager m, Data.FrameRange r) { + Texture[] arr = new Texture[r.end - r.start + 1]; + for (int i = r.start; i <= r.end; i++) + arr[i - r.start] = m.get(r.base + i + ".png", Texture.class); + return arr; + } +} diff --git a/core/src/main/java/io/github/eldek0/asset/group/NumbersAssets.java b/core/src/main/java/io/github/eldek0/asset/group/NumbersAssets.java new file mode 100644 index 0000000..61d4c24 --- /dev/null +++ b/core/src/main/java/io/github/eldek0/asset/group/NumbersAssets.java @@ -0,0 +1,103 @@ +package io.github.eldek0.asset.group; + +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Texture; + +public class NumbersAssets implements AssetBundle { + + public static class Data { + public String dots, nightLabel, amLabel, bigAm; + public FrameRange medium, small, big, medium2, small2; + public FrameRange fiveAnimation, sixAnimation; + + public static class FrameRange { + public String base; + public int start, end; + } + } + + public Texture dots, nightLabel, amLabel, bigAm; + public Texture[] medium, small, big, medium2, small2; + public Texture[] fiveAnimation, sixAnimation; + + @Override + public void queue(AssetManager manager, Data d) { + manager.load(d.dots, Texture.class); + manager.load(d.nightLabel, Texture.class); + manager.load(d.amLabel, Texture.class); + manager.load(d.bigAm, Texture.class); + queueRange(manager, d.medium); + queueRange(manager, d.small); + queueRange(manager, d.big); + queueRange(manager, d.medium2); + queueRange(manager, d.small2); + queueRange(manager, d.fiveAnimation); + queueRange(manager, d.sixAnimation); + } + + @Override + public void fetch(AssetManager manager, Data d) { + dots = manager.get(d.dots, Texture.class); + nightLabel = manager.get(d.nightLabel, Texture.class); + amLabel = manager.get(d.amLabel, Texture.class); + bigAm = manager.get(d.bigAm, Texture.class); + medium = fetchRange(manager, d.medium); + small = fetchRange(manager, d.small); + big = fetchRange(manager, d.big); + medium2 = fetchRange(manager, d.medium2); + small2 = fetchRange(manager, d.small2); + fiveAnimation = fetchRange(manager, d.fiveAnimation); + sixAnimation = fetchRange(manager, d.sixAnimation); + } + + @Override + public void dispose(AssetManager manager, Data d) { + manager.unload(d.dots); + manager.unload(d.nightLabel); + manager.unload(d.amLabel); + manager.unload(d.bigAm); + disposeRange(manager, d.medium); + disposeRange(manager, d.small); + disposeRange(manager, d.big); + disposeRange(manager, d.medium2); + disposeRange(manager, d.small2); + disposeRange(manager, d.fiveAnimation); + disposeRange(manager, d.sixAnimation); + } + + @Override + public boolean isLoaded(AssetManager manager, Data d) { + return manager.isLoaded(d.dots) + && manager.isLoaded(d.nightLabel) + && manager.isLoaded(d.amLabel) + && manager.isLoaded(d.bigAm) + && isRangeLoaded(manager, d.medium) + && isRangeLoaded(manager, d.small) + && isRangeLoaded(manager, d.big) + && isRangeLoaded(manager, d.medium2) + && isRangeLoaded(manager, d.small2) + && isRangeLoaded(manager, d.fiveAnimation) + && isRangeLoaded(manager, d.sixAnimation); + } + + private void queueRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.load(r.base + i + ".png", Texture.class); + } + + private Texture[] fetchRange(AssetManager m, Data.FrameRange r) { + Texture[] arr = new Texture[r.end - r.start + 1]; + for (int i = r.start; i <= r.end; i++) + arr[i - r.start] = m.get(r.base + i + ".png", Texture.class); + return arr; + } + + private void disposeRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) m.unload(r.base + i + ".png"); + } + + private boolean isRangeLoaded(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) + if (!m.isLoaded(r.base + i + ".png")) return false; + return true; + } +} diff --git a/core/src/main/java/io/github/eldek0/asset/group/OfficeAssets.java b/core/src/main/java/io/github/eldek0/asset/group/OfficeAssets.java new file mode 100644 index 0000000..1cc9c71 --- /dev/null +++ b/core/src/main/java/io/github/eldek0/asset/group/OfficeAssets.java @@ -0,0 +1,178 @@ +package io.github.eldek0.asset.group; + +import com.badlogic.gdx.assets.AssetManager; +import com.badlogic.gdx.graphics.Texture; + +public class OfficeAssets implements AssetBundle { + + // ---- JSON data class ---- + public static class Data { + public String bg; + public VentButtons ventButtons; + public String telephoneMute; + public String ctrlAdv; + public EasterEggs easterEggs; + public Ranges ranges; + + public static class VentButtons { + public String rightOff, rightOn, leftOff, leftOn; + } + public static class EasterEggs { + public String balloonGirl, dwarf, plastic, bunny, goldenFreddy, mangle, balloonBoy; + } + public static class Ranges { + public FrameRange inside, hallway, rightVents, leftVents, desk, warnBig, warnSmall; + } + public static class FrameRange { + public String base; + public int start, end; + } + } + + // ---- Typed fields ---- + public Texture bg; + public Texture rightVentButtonOff, rightVentButtonOn; + public Texture leftVentButtonOff, leftVentButtonOn; + public Texture telephoneMute, ctrlAdv; + public Texture balloonGirl, dwarf, plastic, bunny, goldenFreddy, mangle, balloonBoy; + public Texture[] inside, hallway, rightVents, leftVents, desk, warnBig, warnSmall; + + // ---- AssetBundle ---- + + @Override + public void queue(AssetManager manager, Data d) { + manager.load(d.bg, Texture.class); + manager.load(d.telephoneMute, Texture.class); + manager.load(d.ctrlAdv, Texture.class); + + manager.load(d.ventButtons.rightOff, Texture.class); + manager.load(d.ventButtons.rightOn, Texture.class); + manager.load(d.ventButtons.leftOff, Texture.class); + manager.load(d.ventButtons.leftOn, Texture.class); + + manager.load(d.easterEggs.balloonGirl, Texture.class); + manager.load(d.easterEggs.dwarf, Texture.class); + manager.load(d.easterEggs.plastic, Texture.class); + manager.load(d.easterEggs.bunny, Texture.class); + manager.load(d.easterEggs.goldenFreddy, Texture.class); + manager.load(d.easterEggs.mangle, Texture.class); + manager.load(d.easterEggs.balloonBoy, Texture.class); + + queueRange(manager, d.ranges.inside); + queueRange(manager, d.ranges.hallway); + queueRange(manager, d.ranges.rightVents); + queueRange(manager, d.ranges.leftVents); + queueRange(manager, d.ranges.desk); + queueRange(manager, d.ranges.warnBig); + queueRange(manager, d.ranges.warnSmall); + } + + @Override + public void fetch(AssetManager manager, Data d) { + bg = manager.get(d.bg, Texture.class); + telephoneMute = manager.get(d.telephoneMute, Texture.class); + ctrlAdv = manager.get(d.ctrlAdv, Texture.class); + + rightVentButtonOff = manager.get(d.ventButtons.rightOff, Texture.class); + rightVentButtonOn = manager.get(d.ventButtons.rightOn, Texture.class); + leftVentButtonOff = manager.get(d.ventButtons.leftOff, Texture.class); + leftVentButtonOn = manager.get(d.ventButtons.leftOn, Texture.class); + + balloonGirl = manager.get(d.easterEggs.balloonGirl, Texture.class); + dwarf = manager.get(d.easterEggs.dwarf, Texture.class); + plastic = manager.get(d.easterEggs.plastic, Texture.class); + bunny = manager.get(d.easterEggs.bunny, Texture.class); + goldenFreddy = manager.get(d.easterEggs.goldenFreddy, Texture.class); + mangle = manager.get(d.easterEggs.mangle, Texture.class); + balloonBoy = manager.get(d.easterEggs.balloonBoy, Texture.class); + + inside = fetchRange(manager, d.ranges.inside); + hallway = fetchRange(manager, d.ranges.hallway); + rightVents = fetchRange(manager, d.ranges.rightVents); + leftVents = fetchRange(manager, d.ranges.leftVents); + desk = fetchRange(manager, d.ranges.desk); + warnBig = fetchRange(manager, d.ranges.warnBig); + warnSmall = fetchRange(manager, d.ranges.warnSmall); + } + + @Override + public void dispose(AssetManager manager, Data d) { + manager.unload(d.bg); + manager.unload(d.telephoneMute); + manager.unload(d.ctrlAdv); + + manager.unload(d.ventButtons.rightOff); + manager.unload(d.ventButtons.rightOn); + manager.unload(d.ventButtons.leftOff); + manager.unload(d.ventButtons.leftOn); + + manager.unload(d.easterEggs.balloonGirl); + manager.unload(d.easterEggs.dwarf); + manager.unload(d.easterEggs.plastic); + manager.unload(d.easterEggs.bunny); + manager.unload(d.easterEggs.goldenFreddy); + manager.unload(d.easterEggs.mangle); + manager.unload(d.easterEggs.balloonBoy); + + disposeRange(manager, d.ranges.inside); + disposeRange(manager, d.ranges.hallway); + disposeRange(manager, d.ranges.rightVents); + disposeRange(manager, d.ranges.leftVents); + disposeRange(manager, d.ranges.desk); + disposeRange(manager, d.ranges.warnBig); + disposeRange(manager, d.ranges.warnSmall); + } + + @Override + public boolean isLoaded(AssetManager manager, Data d) { + if (!manager.isLoaded(d.bg)) return false; + if (!manager.isLoaded(d.telephoneMute)) return false; + if (!manager.isLoaded(d.ctrlAdv)) return false; + + if (!manager.isLoaded(d.ventButtons.rightOff)) return false; + if (!manager.isLoaded(d.ventButtons.rightOn)) return false; + if (!manager.isLoaded(d.ventButtons.leftOff)) return false; + if (!manager.isLoaded(d.ventButtons.leftOn)) return false; + + if (!manager.isLoaded(d.easterEggs.balloonGirl)) return false; + if (!manager.isLoaded(d.easterEggs.dwarf)) return false; + if (!manager.isLoaded(d.easterEggs.plastic)) return false; + if (!manager.isLoaded(d.easterEggs.bunny)) return false; + if (!manager.isLoaded(d.easterEggs.goldenFreddy)) return false; + if (!manager.isLoaded(d.easterEggs.mangle)) return false; + if (!manager.isLoaded(d.easterEggs.balloonBoy)) return false; + + return isRangeLoaded(manager, d.ranges.inside) + && isRangeLoaded(manager, d.ranges.hallway) + && isRangeLoaded(manager, d.ranges.rightVents) + && isRangeLoaded(manager, d.ranges.leftVents) + && isRangeLoaded(manager, d.ranges.desk) + && isRangeLoaded(manager, d.ranges.warnBig) + && isRangeLoaded(manager, d.ranges.warnSmall); + } + + // ---- Range helpers ---- + + private void queueRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) + m.load(r.base + i + ".png", Texture.class); + } + + private Texture[] fetchRange(AssetManager m, Data.FrameRange r) { + Texture[] arr = new Texture[r.end - r.start + 1]; + for (int i = r.start; i <= r.end; i++) + arr[i - r.start] = m.get(r.base + i + ".png", Texture.class); + return arr; + } + + private void disposeRange(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) + m.unload(r.base + i + ".png"); + } + + private boolean isRangeLoaded(AssetManager m, Data.FrameRange r) { + for (int i = r.start; i <= r.end; i++) + if (!m.isLoaded(r.base + i + ".png")) return false; + return true; + } +} diff --git a/core/src/main/java/io/github/eldek0/game/Camera.java b/core/src/main/java/io/github/eldek0/game/Camera.java index 500a1e2..5da1bde 100644 --- a/core/src/main/java/io/github/eldek0/game/Camera.java +++ b/core/src/main/java/io/github/eldek0/game/Camera.java @@ -54,7 +54,7 @@ public class Camera { } private void initButtonScreenRects(){ - Texture btnUnsel = assets.getTexture(CAM_LABELS_PATH + "13.png"); + Texture btnUnsel = assets.cameras.roomButtonUnselected; for (int i = 0; i < CAM_COUNT; i++) { float[] btnPos = BTN_POS[i]; @@ -98,40 +98,42 @@ public class Camera { float xOff = camerasXPosition[idx]; if (!occupiedCamera[idx]) { - Texture frame = getDefaultFrame(inCameraRoom); + Texture frame = getFrame(inCameraRoom, 0); if (frame != null) { batch.draw(frame, xOff, 0); } } } - private Texture getDefaultFrame(int room) { - return switch (room) { - case 1 -> assets.getTexture(CAM_LOC_PATH + "PartyRoom1/0.png"); - case 2 -> assets.getTexture(CAM_LOC_PATH + "PartyRoom2/0.png"); - case 3 -> assets.getTexture(CAM_LOC_PATH + "PartyRoom3/0.png"); - case 4 -> assets.getTexture(CAM_LOC_PATH + "PartyRoom4/0.png"); - case 5 -> assets.getTexture(CAM_LOC_PATH + "LeftAirVent/0.png"); - case 6 -> assets.getTexture(CAM_LOC_PATH + "RightAirVent/0.png"); - case 7 -> assets.getTexture(CAM_LOC_PATH + "MainHall/0.png"); - case 8 -> assets.getTexture(CAM_LOC_PATH + "PartsnService/0.png"); - case 9 -> assets.getTexture(CAM_LOC_PATH + "ShowStage/0.png"); - case 10 -> assets.getTexture(CAM_LOC_PATH + "GameArea/2.png"); - case 11 -> assets.getTexture(CAM_LOC_PATH + "PrizeCorner/0.png"); - case 12 -> assets.getTexture(CAM_LOC_PATH + "KidsCove/0.png"); + private Texture getFrame(int room, int index) { + Texture[] textures = switch (room) { + case 1 -> assets.cameras.getLocationFrames("PartyRoom1"); + case 2 -> assets.cameras.getLocationFrames("PartyRoom2"); + case 3 -> assets.cameras.getLocationFrames("PartyRoom3"); + case 4 -> assets.cameras.getLocationFrames("PartyRoom4"); + case 5 -> assets.cameras.getLocationFrames("LeftAirVent"); + case 6 -> assets.cameras.getLocationFrames("RightAirVent"); + case 7 -> assets.cameras.getLocationFrames("MainHall"); + case 8 -> assets.cameras.getLocationFrames("PartsnService"); + case 9 -> assets.cameras.getLocationFrames("ShowStage"); + case 10 -> assets.cameras.getLocationFrames("GameArea"); + case 11 -> assets.cameras.getLocationFrames("PrizeCorner"); + case 12 -> assets.cameras.getLocationFrames("KidsCove"); default -> null; }; + assert textures != null; + return textures[index]; } public void renderUI(SpriteBatch batch) { if (!gameScene.hud.isInsideCamera()) {return;} // Border overlay - Texture border = assets.getTexture(CAM_UTILS_PATH + "Border.png"); + Texture border = assets.cameras.borderline; batch.draw(border, 0, 0); // Map - Texture map = assets.getTexture(CAM_UTILS_PATH + "Map.png"); + Texture map = assets.cameras.map; batch.draw(map, 550, App.SCREEN_HEIGHT - 310 - map.getHeight()); // Room label @@ -144,13 +146,13 @@ public class Camera { // REC sprite if (recVisible) { - Texture rec = assets.getTexture(CAM_UTILS_PATH + "1.png"); + Texture rec = assets.cameras.recordSprite; batch.draw(rec, 40, App.SCREEN_HEIGHT - 40 - rec.getHeight()); } // Signal interrupted banner if (occupiedCamera[inCameraRoom - 1]) { - Texture sig = assets.getTexture(CAM_UTILS_PATH + "2.png"); + Texture sig = assets.cameras.signalInterrupted; float sx = Gdx.graphics.getWidth() / 2f - sig.getWidth() / 2f; batch.draw(sig, sx, App.SCREEN_HEIGHT - 80 - sig.getHeight()); } @@ -164,8 +166,8 @@ public class Camera { } private void drawCameraButtons(SpriteBatch batch) { - Texture btnUnsel = assets.getTexture(CAM_LABELS_PATH + "13.png"); - Texture btnSel = assets.getTexture(CAM_LABELS_PATH + "14.png"); + Texture btnUnsel = assets.cameras.roomButtonUnselected; + Texture btnSel = assets.cameras.roomButtonSelected; for (int i = 0; i < CAM_COUNT; i++) { Texture btn = (i + 1 == inCameraRoom) ? btnSel : btnUnsel; @@ -176,25 +178,25 @@ public class Camera { float worldY = App.SCREEN_HEIGHT - pyY - btnUnsel.getHeight(); batch.draw(btn, pyX, worldY); - Texture lbl = assets.getTexture(CAM_LABELS_PATH + (i + 1) + ".png"); + Texture lbl = assets.cameras.roomLabels[i]; batch.draw(lbl, pyX + 5, worldY + 7); } } private Texture getRoomLabel(int room) { return switch (room) { - case 1 -> assets.getTexture(CAM_LOC_PATH + "PartyRoom1/label.png"); - case 2 -> assets.getTexture(CAM_LOC_PATH + "PartyRoom2/label.png"); - case 3 -> assets.getTexture(CAM_LOC_PATH + "PartyRoom3/label.png"); - case 4 -> assets.getTexture(CAM_LOC_PATH + "PartyRoom4/label.png"); - case 5 -> assets.getTexture(CAM_LOC_PATH + "LeftAirVent/label.png"); - case 6 -> assets.getTexture(CAM_LOC_PATH + "RightAirVent/label.png"); - case 7 -> assets.getTexture(CAM_LOC_PATH + "MainHall/label.png"); - case 8 -> assets.getTexture(CAM_LOC_PATH + "PartsnService/label.png"); - case 9 -> assets.getTexture(CAM_LOC_PATH + "ShowStage/label.png"); - case 10 -> assets.getTexture(CAM_LOC_PATH + "GameArea/label.png"); - case 11 -> assets.getTexture(CAM_LOC_PATH + "PrizeCorner/label.png"); - case 12 -> assets.getTexture(CAM_LOC_PATH + "KidsCove/label.png"); + case 1 -> assets.cameras.getLocationLabel("PartyRoom1/label.png"); + case 2 -> assets.cameras.getLocationLabel("PartyRoom2/label.png"); + case 3 -> assets.cameras.getLocationLabel("PartyRoom3/label.png"); + case 4 -> assets.cameras.getLocationLabel("PartyRoom4/label.png"); + case 5 -> assets.cameras.getLocationLabel("LeftAirVent/label.png"); + case 6 -> assets.cameras.getLocationLabel("RightAirVent/label.png"); + case 7 -> assets.cameras.getLocationLabel("MainHall/label.png"); + case 8 -> assets.cameras.getLocationLabel("PartsnService/label.png"); + case 9 -> assets.cameras.getLocationLabel("ShowStage/label.png"); + case 10 -> assets.cameras.getLocationLabel("GameArea/label.png"); + case 11 -> assets.cameras.getLocationLabel("PrizeCorner/label.png"); + case 12 -> assets.cameras.getLocationLabel("KidsCove/label.png"); default -> null; }; } @@ -202,7 +204,7 @@ public class Camera { private void updateCameraTimer(int index, float delta) { if (index < 6) return; - Texture sample = getDefaultFrame(index + 1); + Texture sample = getFrame(index + 1, 0); if (sample == null) return; float maxOffset = -(sample.getWidth() - App.SCREEN_WIDTH); diff --git a/core/src/main/java/io/github/eldek0/game/Mask.java b/core/src/main/java/io/github/eldek0/game/Mask.java index e30b3e7..18e0d2b 100644 --- a/core/src/main/java/io/github/eldek0/game/Mask.java +++ b/core/src/main/java/io/github/eldek0/game/Mask.java @@ -19,7 +19,7 @@ public class Mask { public void render(SpriteBatch batch){ inside = hud.isInsideMask(); if (inside){ - batch.draw(Arrays.stream(App.assets.getFrames(GameAssetManager.MASK_PATH, 10, 10)).findFirst().get(), + batch.draw(App.assets.mask.sprites[0], 0, 0); } } diff --git a/core/src/main/java/io/github/eldek0/game/Office.java b/core/src/main/java/io/github/eldek0/game/Office.java index 819b825..e21249a 100644 --- a/core/src/main/java/io/github/eldek0/game/Office.java +++ b/core/src/main/java/io/github/eldek0/game/Office.java @@ -10,55 +10,39 @@ import com.badlogic.gdx.math.Vector2; import io.github.eldek0.App; import io.github.eldek0.ui.HUD; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - import static io.github.eldek0.App.assets; -import static io.github.eldek0.asset.GameAssetManager.*; public class Office { private static final float SPEED = 600; - public static final float MAX_POS_X = assets.getTexture(OFFICE_BG).getWidth() - App.SCREEN_WIDTH; + public static final float MAX_POS_X = assets.office.bg.getWidth() - App.SCREEN_WIDTH; private final HUD hud; - private ShapeRenderer shapeRenderer; + private final ShapeRenderer shapeRenderer; - private int movement = 0; + private int movement = 0; private float positionX = 0; - private boolean rightLight = false; - private boolean leftLight = false; + private boolean rightLight = false; + private boolean leftLight = false; private boolean hallwayLight = false; - private List rightVentFrames; - private List leftVentFrames; - private List hallwayFrames; - public Office(HUD hud) { - this.hud = hud; + this.hud = hud; this.shapeRenderer = new ShapeRenderer(); - this.inputInitialization(); - - rightVentFrames = Arrays.stream(assets.getFrames(OFFICE_RVENTS_PATH, 0, 1)) - .collect(Collectors.toList()); - leftVentFrames = Arrays.stream(assets.getFrames(OFFICE_LVENTS_PATH, 0, 1)) - .collect(Collectors.toList()); - hallwayFrames = Arrays.stream(assets.getFrames(OFFICE_HALLWAY_PATH, 0, 1)) - .collect(Collectors.toList()); } private void handleMovement(int screenX, int screenY) { if (hud.isInsideMask() || hud.isInsideCamera()) return; - Vector2 worldPos = App.convertPosToWorldPos(new Vector2(screenX, screenY)); - float threshold = (float) App.SCREEN_WIDTH / 2 * 0.5f; - if (worldPos.x < threshold) movement = 1; + Vector2 worldPos = App.convertPosToWorldPos(new Vector2(screenX, screenY)); + float threshold = (float) App.SCREEN_WIDTH / 2 * 0.5f; + + if (worldPos.x < threshold) movement = 1; else if (worldPos.x > App.SCREEN_WIDTH - threshold) movement = -1; - else movement = 0; + else movement = 0; } - private void inputInitialization(){ + private void inputInitialization() { Gdx.input.setInputProcessor(new InputAdapter() { @Override public boolean mouseMoved(int screenX, int screenY) { @@ -73,8 +57,8 @@ public class Office { handleMovement(screenX, screenY); Vector2 pos = App.convertPosToWorldPos(new Vector2(screenX, screenY)); - if (!getRightBounds().contains(pos)) rightLight = false; - if (!getLeftBounds().contains(pos)) leftLight = false; + if (!getRightBounds().contains(pos)) rightLight = false; + if (!getLeftBounds().contains(pos)) leftLight = false; if (!getHallwayBounds().contains(pos)) hallwayLight = false; return true; @@ -85,16 +69,16 @@ public class Office { if (hud.isInsideMask() || hud.isInsideCamera()) return false; Vector2 pos = App.convertPosToWorldPos(new Vector2(screenX, screenY)); - if (getRightBounds().contains(pos)) rightLight = true; - if (getLeftBounds().contains(pos)) leftLight = true; + if (getRightBounds().contains(pos)) rightLight = true; + if (getLeftBounds().contains(pos)) leftLight = true; if (getHallwayBounds().contains(pos)) hallwayLight = true; return false; } @Override public boolean touchUp(int screenX, int screenY, int pointer, int button) { - rightLight = false; - leftLight = false; + rightLight = false; + leftLight = false; hallwayLight = false; return false; } @@ -102,14 +86,12 @@ public class Office { } private Rectangle getRightBounds() { - Texture t = assets.getTexture(RIGHT_VENT_BUTTON_OFF); - float lightHeight = App.SCREEN_HEIGHT - 340 - t.getHeight(); + float lightHeight = App.SCREEN_HEIGHT - 340 - assets.office.rightVentButtonOff.getHeight(); return new Rectangle(1440 + positionX, lightHeight, 80, 90); } private Rectangle getLeftBounds() { - Texture t = assets.getTexture(LEFT_VENT_BUTTON_OFF); - float lightHeight = App.SCREEN_HEIGHT - 340 - t.getHeight(); + float lightHeight = App.SCREEN_HEIGHT - 340 - assets.office.leftVentButtonOff.getHeight(); return new Rectangle(100 + positionX, lightHeight, 80, 90); } @@ -118,57 +100,39 @@ public class Office { } public void render(SpriteBatch batch) { - this.renderBackground(batch); + renderBackground(batch); - Texture lightTextureRight; - if (rightLight){lightTextureRight = assets.getTexture(RIGHT_VENT_BUTTON_ON);} - else {lightTextureRight = assets.getTexture(RIGHT_VENT_BUTTON_OFF);} + Texture btnRight = rightLight ? assets.office.rightVentButtonOn : assets.office.rightVentButtonOff; + Texture btnLeft = leftLight ? assets.office.leftVentButtonOn : assets.office.leftVentButtonOff; - Texture lightTextureLeft; - if (leftLight){lightTextureLeft = assets.getTexture(LEFT_VENT_BUTTON_ON);} - else {lightTextureLeft = assets.getTexture(LEFT_VENT_BUTTON_OFF);} + float lightHeight = App.SCREEN_HEIGHT - 360 - btnRight.getHeight(); + batch.draw(btnRight, 1440 + positionX, lightHeight); + batch.draw(btnLeft, 100 + positionX, lightHeight); + } - float lightHeight = App.SCREEN_HEIGHT - 360 - lightTextureRight.getHeight(); - - batch.draw(lightTextureRight, 1440 + positionX, lightHeight); - batch.draw(lightTextureLeft, 100 + positionX, lightHeight); + private void renderBackground(SpriteBatch batch) { + if (rightLight) batch.draw(assets.office.rightVents[0], positionX, 0); + else if (leftLight) batch.draw(assets.office.leftVents[0], positionX, 0); + else if (hallwayLight) batch.draw(assets.office.hallway[0], positionX, 0); + else batch.draw(assets.office.bg, positionX, 0); } public void renderHitboxes(ShapeRenderer shapeRenderer) { if (hud.isInsideMask() || hud.isInsideCamera()) return; shapeRenderer.setColor(1, 0, 0, 1); - Rectangle right = getRightBounds(); - Rectangle left = getLeftBounds(); + Rectangle right = getRightBounds(); + Rectangle left = getLeftBounds(); Rectangle hallway = getHallwayBounds(); - shapeRenderer.rect(right.x, right.y, right.width, right.height); - shapeRenderer.rect(left.x, left.y, left.width, left.height); + shapeRenderer.rect(right.x, right.y, right.width, right.height); + shapeRenderer.rect(left.x, left.y, left.width, left.height); shapeRenderer.rect(hallway.x, hallway.y, hallway.width, hallway.height); } - private void renderBackground(SpriteBatch batch) { - if (rightLight) { - batch.draw(rightVentFrames.get(0), - positionX, 0); - } - else if (leftLight) { - batch.draw(leftVentFrames.get(0), - positionX, 0); - } - else if (hallwayLight) { - batch.draw(hallwayFrames.get(0), - positionX, 0); - } - else { - batch.draw(assets.getTexture(OFFICE_BG), positionX, 0); - } - - } - public void update(float dt) { positionX += SPEED * movement * dt; - if (-positionX < 0) positionX = 0; + if (-positionX < 0) positionX = 0; else if (-positionX > MAX_POS_X) positionX = -MAX_POS_X; } diff --git a/core/src/main/java/io/github/eldek0/ui/CameraButton.java b/core/src/main/java/io/github/eldek0/ui/CameraButton.java index 0b04482..5bd0c55 100644 --- a/core/src/main/java/io/github/eldek0/ui/CameraButton.java +++ b/core/src/main/java/io/github/eldek0/ui/CameraButton.java @@ -8,10 +8,10 @@ import io.github.eldek0.asset.GameAssetManager; public class CameraButton extends Button { public CameraButton(float x, float y) { super(getButtonTexture(), x, y, new Rectangle(x + 10, 0, 480, getButtonTexture().getHeight() + y), - App.assets.getFrames(GameAssetManager.MONITOR_PATH, 1, 10)); + App.assets.monitor.sprites); } private static Texture getButtonTexture() { - return App.assets.getTexture(GameAssetManager.MONITOR_BUTTON); + return App.assets.monitor.button; } } diff --git a/core/src/main/java/io/github/eldek0/ui/MaskButton.java b/core/src/main/java/io/github/eldek0/ui/MaskButton.java index 2d7128a..731ceaf 100644 --- a/core/src/main/java/io/github/eldek0/ui/MaskButton.java +++ b/core/src/main/java/io/github/eldek0/ui/MaskButton.java @@ -8,10 +8,10 @@ import io.github.eldek0.asset.GameAssetManager; public class MaskButton extends Button { public MaskButton(float x, float y) { super(getButtonTexture(), x, y, new Rectangle(x + 10, 0, 480, getButtonTexture().getHeight() + y), - App.assets.getFrames(GameAssetManager.MASK_PATH, 1, 9)); // 10th is not an animation + App.assets.mask.sprites); } private static Texture getButtonTexture() { - return App.assets.getTexture(GameAssetManager.MASK_BUTTON); + return App.assets.mask.button; } }