diff --git a/assets/data/config/animatronics.json b/assets/data/config/animatronics.json new file mode 100644 index 0000000..a42d909 --- /dev/null +++ b/assets/data/config/animatronics.json @@ -0,0 +1,5 @@ +{ + "animatronics": [ + "freddy" + ] +} diff --git a/assets/data/config/animatronics/freddy.json b/assets/data/config/animatronics/freddy.json new file mode 100644 index 0000000..f511217 --- /dev/null +++ b/assets/data/config/animatronics/freddy.json @@ -0,0 +1,27 @@ +{ + "id": "freddy", + "displayName": "Freddy Fazbear", + + "inRoom": 9, + "restRoom": 9, + + "color": "#FF5733", + + "movement": { + "type": "SEQUENTIAL", + "path": [9], + "moveIntervalSeconds": 30, + "aiSpeedMultiplier": true + }, + + "attackType": { + "kind": "LIGHT", + "lightLevel": 3 + }, + + "jumpscare": { + "sprite": "freddy_jumpscare", + "sound": "freddy_scream", + "durationSeconds": 2.5 + } +} diff --git a/assets/data/config/night_control.json b/assets/data/config/night_control.json new file mode 100644 index 0000000..3fd97ff --- /dev/null +++ b/assets/data/config/night_control.json @@ -0,0 +1,12 @@ +{ + "nights": [ + { + "night": 1, + "hours": [ + { "hour": 0, "ai": { "freddy": 10 } }, + { "hour": 1, "ai": { "freddy": 11 } }, + { "hour": 2, "ai": { "freddy": 20 } } + ] + } + ] +} diff --git a/core/src/main/java/io/github/eldek0/config/animatronic/AnimatronicConfig.java b/core/src/main/java/io/github/eldek0/config/animatronic/AnimatronicConfig.java new file mode 100644 index 0000000..afe97c0 --- /dev/null +++ b/core/src/main/java/io/github/eldek0/config/animatronic/AnimatronicConfig.java @@ -0,0 +1,12 @@ +package io.github.eldek0.config.animatronic; + +public class AnimatronicConfig { + public String id; + public String displayName; + public int inRoom; + public int restRoom; + public String color; + public AnimatronicMovement movement; + public AttackType attackType; + public Jumpscare jumpscare; +} diff --git a/core/src/main/java/io/github/eldek0/config/animatronic/AnimatronicManifest.java b/core/src/main/java/io/github/eldek0/config/animatronic/AnimatronicManifest.java new file mode 100644 index 0000000..8c5ac1d --- /dev/null +++ b/core/src/main/java/io/github/eldek0/config/animatronic/AnimatronicManifest.java @@ -0,0 +1,5 @@ +package io.github.eldek0.config.animatronic; + +public class AnimatronicManifest { + public String[] animatronics; +} diff --git a/core/src/main/java/io/github/eldek0/config/animatronic/AnimatronicMovement.java b/core/src/main/java/io/github/eldek0/config/animatronic/AnimatronicMovement.java new file mode 100644 index 0000000..3f36dfd --- /dev/null +++ b/core/src/main/java/io/github/eldek0/config/animatronic/AnimatronicMovement.java @@ -0,0 +1,8 @@ +package io.github.eldek0.config.animatronic; + +public class AnimatronicMovement { + public MovementType type; + public int[] path; + public int moveIntervalSeconds; + public boolean aiSpeedMultiplier; +} diff --git a/core/src/main/java/io/github/eldek0/config/animatronic/AttackKind.java b/core/src/main/java/io/github/eldek0/config/animatronic/AttackKind.java new file mode 100644 index 0000000..84b230a --- /dev/null +++ b/core/src/main/java/io/github/eldek0/config/animatronic/AttackKind.java @@ -0,0 +1,8 @@ +package io.github.eldek0.config.animatronic; + +public enum AttackKind { + LIGHT, + MOVE_IN_OFFICE, + IN_OFFICE, + NORMAL +} diff --git a/core/src/main/java/io/github/eldek0/config/animatronic/AttackType.java b/core/src/main/java/io/github/eldek0/config/animatronic/AttackType.java new file mode 100644 index 0000000..b944956 --- /dev/null +++ b/core/src/main/java/io/github/eldek0/config/animatronic/AttackType.java @@ -0,0 +1,16 @@ +package io.github.eldek0.config.animatronic; + +public class AttackType { + public AttackKind kind; + + // If attack kind is IN_OFFICE + public String officeSprite = null; + public String inOfficeAnimatronicSprite = null; + + // If attack kind is LIGHT + public int lightLevel = 2; + + // If attack type is MOVE_IN_OFFICE + public int speed = 2; + +} diff --git a/core/src/main/java/io/github/eldek0/config/animatronic/Jumpscare.java b/core/src/main/java/io/github/eldek0/config/animatronic/Jumpscare.java new file mode 100644 index 0000000..2d1de37 --- /dev/null +++ b/core/src/main/java/io/github/eldek0/config/animatronic/Jumpscare.java @@ -0,0 +1,7 @@ +package io.github.eldek0.config.animatronic; + +public class Jumpscare { + public String sprite; + public String sound; + public float durationSeconds; +} diff --git a/core/src/main/java/io/github/eldek0/config/animatronic/MovementType.java b/core/src/main/java/io/github/eldek0/config/animatronic/MovementType.java new file mode 100644 index 0000000..c5bde8a --- /dev/null +++ b/core/src/main/java/io/github/eldek0/config/animatronic/MovementType.java @@ -0,0 +1,6 @@ +package io.github.eldek0.config.animatronic; + +public enum MovementType { + SEQUENTIAL, + RANDOM +} diff --git a/core/src/main/java/io/github/eldek0/game/Animatronic.java b/core/src/main/java/io/github/eldek0/game/Animatronic.java new file mode 100644 index 0000000..fc947e3 --- /dev/null +++ b/core/src/main/java/io/github/eldek0/game/Animatronic.java @@ -0,0 +1,40 @@ +package io.github.eldek0.game; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.utils.Json; +import io.github.eldek0.config.animatronic.AnimatronicConfig; +import io.github.eldek0.config.animatronic.AnimatronicManifest; + +import java.util.Collection; +import java.util.HashMap; + +public class Animatronic { + private static final String MANIFEST = "data/config/animatronics.json"; + private static final String CONFIG = "data/config/animatronics/"; + + private String[] availableAnimatronics; + + private HashMap data = new HashMap<>(); + + public Animatronic(){ + loadConfig(); + } + + public Collection getAnimatronicsData(){ + return data.values(); + } + + private void loadConfig(){ + Json json = new Json(); + String raw = Gdx.files.internal(MANIFEST).readString(); + AnimatronicManifest manifest = json.fromJson(AnimatronicManifest.class, raw); + availableAnimatronics = manifest.animatronics; + + String rawAnim; + for (String animatronic : availableAnimatronics){ + rawAnim = Gdx.files.internal(CONFIG + animatronic + ".json").readString(); + data.put(animatronic, + json.fromJson(AnimatronicConfig.class, rawAnim)); + } + } +} 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 3e34fc2..b42af85 100644 --- a/core/src/main/java/io/github/eldek0/game/Camera.java +++ b/core/src/main/java/io/github/eldek0/game/Camera.java @@ -2,6 +2,7 @@ package io.github.eldek0.game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; +import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; @@ -10,6 +11,7 @@ import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Json; import io.github.eldek0.App; import io.github.eldek0.config.*; +import io.github.eldek0.config.animatronic.AnimatronicConfig; import io.github.eldek0.screen.GameScene; import io.github.eldek0.ui.SpriteLayout; @@ -138,7 +140,7 @@ public class Camera { this.wideRandomMov = configFile.wideRandomMov; this.layout = new SpriteLayout<>( - configFile.sprites, // 👈 directo + configFile.sprites, CameraSpriteType::valueOf ); @@ -198,8 +200,28 @@ public class Camera { public void renderHitboxes(ShapeRenderer shapeRenderer) { shapeRenderer.setColor(1, 0, 0, 1); - for (Rectangle rect : this.buttonScreenRects){ + CameraConfig config; + Rectangle rect; + for (int i = 0; i