diff --git a/core/src/main/java/fr/formiko/kokcinelo/App.java b/core/src/main/java/fr/formiko/kokcinelo/App.java index 055c2b71..6814d437 100644 --- a/core/src/main/java/fr/formiko/kokcinelo/App.java +++ b/core/src/main/java/fr/formiko/kokcinelo/App.java @@ -41,7 +41,7 @@ public class App extends Game { private static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); // HTML INCOMPATIBLE private int logLevel = Application.LOG_INFO; private static boolean launchFromLauncher; - public static final List PLAYABLE_LEVELS = List.of("1K", "2K", "2F", "3K", "3F", "4K", "4F", "4A"); + public static final List PLAYABLE_LEVELS = List.of("1K", "2K", "2F", "3K", "3F", "4K", "4F", "4A", "5K", "5F", "5A"); public static List SUPPORTED_LANGUAGES; public static Map LANGUAGES_NAMES; public static Map LANGUAGES_PERCENTAGES; diff --git a/core/src/main/java/fr/formiko/kokcinelo/model/Ant.java b/core/src/main/java/fr/formiko/kokcinelo/model/Ant.java index b5ca5cf9..ac548d75 100644 --- a/core/src/main/java/fr/formiko/kokcinelo/model/Ant.java +++ b/core/src/main/java/fr/formiko/kokcinelo/model/Ant.java @@ -47,7 +47,7 @@ public Ant(Color thoraxColor) { @Override public Set> getCreaturesFriendly() { return Set.of(Ant.class, Aphid.class); } @Override - public Set> getCreaturesFriendlyWithVisibility() { return Set.of(Ant.class, VisibilityAphid.class); } + public Set> getCreaturesFriendlyWithVisibilityWhenFlying() { return Set.of(Aphid.class); } // FUNCTIONS ----------------------------------------------------------------- } diff --git a/core/src/main/java/fr/formiko/kokcinelo/model/Aphid.java b/core/src/main/java/fr/formiko/kokcinelo/model/Aphid.java index 3f9ef062..65c4f598 100644 --- a/core/src/main/java/fr/formiko/kokcinelo/model/Aphid.java +++ b/core/src/main/java/fr/formiko/kokcinelo/model/Aphid.java @@ -14,10 +14,10 @@ * @since 0.1 */ public class Aphid extends Creature { - // private Color color; + private static final Color orrange = new Color(0.86f, 0.50f, 0.1f, 1f); private static final Map, Color> typeColorMap = Map.of(Aphid.class, new Color(0.4f, 1f, 0f, 1f), - SpeedAphid.class, Color.CYAN, HealthAphid.class, Color.RED, ScoreAphid.class, new Color(0.86f, 0.50f, 0.1f, 1f), - BigScoreAphid.class, new Color(0.86f, 0.50f, 0.1f, 1f), VisibilityAphid.class, new Color(0.05f, 0.25f, 0f, 1f)); + SpeedAphid.class, Color.CYAN, HealthAphid.class, Color.RED, ScoreAphid.class, orrange, + BigScoreAphid.class, orrange, FlyingAphid.class, orrange, FlyingBigScoreAphid.class, orrange); // CONSTRUCTORS -------------------------------------------------------------- /** @@ -69,7 +69,7 @@ public Aphid() { @Override public Set> getCreaturesFriendly() { return Set.of(Ant.class, Aphid.class); } @Override - public Set> getCreaturesFriendlyWithVisibility() { return Set.of(Ant.class, Aphid.class); } + public Set> getCreaturesFriendlyWithVisibilityWhenFlying() { return Set.of(Ant.class, Aphid.class); } @Override public String getSpaceActionName() { if (canFly) { diff --git a/core/src/main/java/fr/formiko/kokcinelo/model/Creature.java b/core/src/main/java/fr/formiko/kokcinelo/model/Creature.java index b053b59f..6e21bf66 100644 --- a/core/src/main/java/fr/formiko/kokcinelo/model/Creature.java +++ b/core/src/main/java/fr/formiko/kokcinelo/model/Creature.java @@ -23,8 +23,8 @@ */ public abstract class Creature extends MapItem { public static final List> ORDER = List.of(Ladybug.class, Ant.class, RedAnt.class, GreenAnt.class, Aphid.class, - HealthAphid.class, SpeedAphid.class, ScoreAphid.class, BigScoreAphid.class, VisibilityAphid.class); - protected boolean fliing; + HealthAphid.class, SpeedAphid.class, ScoreAphid.class, BigScoreAphid.class, FlyingAphid.class, FlyingBigScoreAphid.class); + protected boolean flying; protected float maxLifePoints; protected float hitPoints; protected float shootPoints; @@ -62,6 +62,10 @@ protected Creature(String textureName) { } // GET SET ------------------------------------------------------------------- + public boolean canFly() { return canFly; } + public boolean isFlying() { return flying; } + public boolean startFlying() { return flying = true; } + public boolean stopFlying() { return flying = false; } public int getGivenPoints() { return 0; } public float getVisionRadius() { return visionRadius; } public void setVisionRadius(float visionRadius) { this.visionRadius = visionRadius; } @@ -102,7 +106,7 @@ public void setLifePoints(float lifePoints) { public Set> getCreaturesToHunt() { return Set.of(); } public Set> getCreaturesHuntedBy() { return Set.of(); } public Set> getCreaturesFriendly() { return Set.of(getClass()); } - public Set> getCreaturesFriendlyWithVisibility() { return Set.of(getClass()); } + public Set> getCreaturesFriendlyWithVisibilityWhenFlying() { return Set.of(getClass()); } public boolean haveCreatureToHunt() { return Controller.getController().allCreatures().stream().anyMatch(c -> c.isInstanceOf(getCreaturesToHunt())); } @@ -170,7 +174,7 @@ public Set getAllFriendlyWithVisibilityCreature() { Set::addAll); } public boolean isFriendly(Creature c) { return c.isInstanceOf(getCreaturesFriendly()); } - public boolean isFriendlyWithVisibility(Creature c) { return c.isInstanceOf(getCreaturesFriendlyWithVisibility()); } + public boolean isFriendlyWithVisibility(Creature c) { return c.isInstanceOf(getCreaturesFriendlyWithVisibilityWhenFlying()); } // FUNCTIONS ----------------------------------------------------------------- @Override diff --git a/core/src/main/java/fr/formiko/kokcinelo/model/FlyingAphid.java b/core/src/main/java/fr/formiko/kokcinelo/model/FlyingAphid.java new file mode 100644 index 00000000..18beb611 --- /dev/null +++ b/core/src/main/java/fr/formiko/kokcinelo/model/FlyingAphid.java @@ -0,0 +1,12 @@ +package fr.formiko.kokcinelo.model; + +public class FlyingAphid extends Aphid { + public FlyingAphid(){ + super(); + canFly = true; + } + @Override + public int getGivenPoints() { return 10; } + @Override + public void bonusWhenCollectHoneydew(Creature collector) { collector.addScore(2); } +} diff --git a/core/src/main/java/fr/formiko/kokcinelo/model/FlyingBigScoreAphid.java b/core/src/main/java/fr/formiko/kokcinelo/model/FlyingBigScoreAphid.java new file mode 100644 index 00000000..55da3b13 --- /dev/null +++ b/core/src/main/java/fr/formiko/kokcinelo/model/FlyingBigScoreAphid.java @@ -0,0 +1,8 @@ +package fr.formiko.kokcinelo.model; + +public class FlyingBigScoreAphid extends BigScoreAphid { + public FlyingBigScoreAphid() { + super(); + canFly = true; + } +} diff --git a/core/src/main/java/fr/formiko/kokcinelo/model/FlyingLadybug.java b/core/src/main/java/fr/formiko/kokcinelo/model/FlyingLadybug.java new file mode 100644 index 00000000..76862d6f --- /dev/null +++ b/core/src/main/java/fr/formiko/kokcinelo/model/FlyingLadybug.java @@ -0,0 +1,9 @@ +package fr.formiko.kokcinelo.model; + +public class FlyingLadybug extends Ladybug { + public FlyingLadybug(String textureName) { + super(textureName); + canFly = true; + } + public FlyingLadybug() { this("ladybug"); } +} diff --git a/core/src/main/java/fr/formiko/kokcinelo/model/Ladybug.java b/core/src/main/java/fr/formiko/kokcinelo/model/Ladybug.java index 4b341291..6e781bbe 100644 --- a/core/src/main/java/fr/formiko/kokcinelo/model/Ladybug.java +++ b/core/src/main/java/fr/formiko/kokcinelo/model/Ladybug.java @@ -41,7 +41,7 @@ public Ladybug(String textureName) { @Override public Set> getCreaturesFriendly() { return Set.of(Ladybug.class); } @Override - public Set> getCreaturesFriendlyWithVisibility() { return Set.of(Ladybug.class); } + public Set> getCreaturesFriendlyWithVisibilityWhenFlying() { return Set.of(Ladybug.class); } @Override public String getSpaceActionName() { if (canFly) { diff --git a/core/src/main/java/fr/formiko/kokcinelo/model/Level.java b/core/src/main/java/fr/formiko/kokcinelo/model/Level.java index b76c3aa4..7a2c3196 100644 --- a/core/src/main/java/fr/formiko/kokcinelo/model/Level.java +++ b/core/src/main/java/fr/formiko/kokcinelo/model/Level.java @@ -27,14 +27,16 @@ public final class Level { newLevel("3K", Map.of(Aphid.class, 100, Ladybug.class, 1, GreenAnt.class, 3)), newLevel("4K", Map.of(Ladybug.class, 1, RedAnt.class, 2, GreenAnt.class, 2, Aphid.class, 50, ScoreAphid.class, 3, SpeedAphid.class, 10, HealthAphid.class, 10)), - newLevel("5K"), + newLevel("5K", List.of(FlyingLadybug.class), Map.of(FlyingLadybug.class, 1, RedAnt.class, 2, GreenAnt.class, 2, + Aphid.class, 50, FlyingAphid.class, 3, SpeedAphid.class, 10, HealthAphid.class, 10)), newLevel("2F", List.of(RedAnt.class), Map.of(Aphid.class, 100, Ladybug.class, 2, RedAnt.class, 1)), newLevel("3F", List.of(GreenAnt.class), Map.of(Aphid.class, 100, Ladybug.class, 2, GreenAnt.class, 1)), newLevel("4F", List.of(RedAnt.class, GreenAnt.class), Map.of(Ladybug.class, 3, RedAnt.class, 1, GreenAnt.class, 1, Aphid.class, 50, ScoreAphid.class, 3, SpeedAphid.class, 10, HealthAphid.class, 10)), - newLevel("5F"), + newLevel("5F", List.of(RedAnt.class, GreenAnt.class), Map.of(FlyingLadybug.class, 3, RedAnt.class, 1, GreenAnt.class, 1, + Aphid.class, 50, FlyingAphid.class, 3, SpeedAphid.class, 10, HealthAphid.class, 10)), newLevel("4A", List.of(BigScoreAphid.class), Map.of(Ladybug.class, 4, RedAnt.class, 2, Aphid.class, 50, BigScoreAphid.class, 1)), - newLevel("5A")); + newLevel("5A", List.of(FlyingBigScoreAphid.class), Map.of(FlyingLadybug.class, 4, RedAnt.class, 2, Aphid.class, 50, FlyingBigScoreAphid.class, 1))); // @formatter:on private static final Set levelLetters = Set.of("K", "F", "A"); private @Null List nextLevels; // Use getter with lazy initialization. diff --git a/core/src/main/java/fr/formiko/kokcinelo/model/VisibilityAphid.java b/core/src/main/java/fr/formiko/kokcinelo/model/VisibilityAphid.java deleted file mode 100644 index c1236973..00000000 --- a/core/src/main/java/fr/formiko/kokcinelo/model/VisibilityAphid.java +++ /dev/null @@ -1,3 +0,0 @@ -package fr.formiko.kokcinelo.model; - -public class VisibilityAphid extends Aphid {} diff --git a/core/src/main/java/fr/formiko/kokcinelo/tools/Fonts.java b/core/src/main/java/fr/formiko/kokcinelo/tools/Fonts.java index 349cb1c0..d779d26c 100644 --- a/core/src/main/java/fr/formiko/kokcinelo/tools/Fonts.java +++ b/core/src/main/java/fr/formiko/kokcinelo/tools/Fonts.java @@ -4,13 +4,14 @@ import fr.formiko.kokcinelo.model.Aphid; import fr.formiko.kokcinelo.model.BigScoreAphid; import fr.formiko.kokcinelo.model.Creature; +import fr.formiko.kokcinelo.model.FlyingAphid; +import fr.formiko.kokcinelo.model.FlyingBigScoreAphid; import fr.formiko.kokcinelo.model.GreenAnt; import fr.formiko.kokcinelo.model.HealthAphid; import fr.formiko.kokcinelo.model.Ladybug; import fr.formiko.kokcinelo.model.RedAnt; import fr.formiko.kokcinelo.model.ScoreAphid; import fr.formiko.kokcinelo.model.SpeedAphid; -import fr.formiko.kokcinelo.model.VisibilityAphid; import fr.formiko.usual.g; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; @@ -32,10 +33,22 @@ public class Fonts extends BitmapFont { public static final String DEFAULT_COLOR = "[#000000]"; private static String DEFAULT_CHARS; private static EmojiSupport emojiSupport; - private static final Map, String> icons = Map.of(Ant.class, "🐜", Ladybug.class, "🐞", Aphid.class, "🦗", - RedAnt.class, "🕷", GreenAnt.class, "🦂", SpeedAphid.class, "🟦", HealthAphid.class, "🟥", ScoreAphid.class, "🟧", - BigScoreAphid.class, "🟧", VisibilityAphid.class, "🟩"); + private static final Map, String> icons; private static Map, String> iconsTransformed; + static { + icons = new java.util.HashMap<>(); + icons.put(Ant.class, "🐜"); + icons.put(Ladybug.class, "🐞"); + icons.put(Aphid.class, "🦗"); + icons.put(RedAnt.class, "🕷"); + icons.put(GreenAnt.class, "🦂"); + icons.put(SpeedAphid.class, "🟦"); + icons.put(HealthAphid.class, "🟥"); + icons.put(ScoreAphid.class, "🟧"); + icons.put(BigScoreAphid.class, "🟧"); + icons.put(FlyingBigScoreAphid.class, "🔶"); + icons.put(FlyingAphid.class, "🟪"); + } /** * {@summary Load the default font.} diff --git a/core/src/main/java/fr/formiko/kokcinelo/tools/Musics.java b/core/src/main/java/fr/formiko/kokcinelo/tools/Musics.java index e8ecbb27..f704f351 100644 --- a/core/src/main/java/fr/formiko/kokcinelo/tools/Musics.java +++ b/core/src/main/java/fr/formiko/kokcinelo/tools/Musics.java @@ -24,10 +24,13 @@ public class Musics { Map.entry("2K", List.of("Sailors Of The Dvipa", 0.5f)), Map.entry("3K", List.of("Madness", 1f)), Map.entry("4K", List.of("Chase 1", 1f)), + Map.entry("5K", List.of("Chase 1", 1f)), // TODO: Change this music Map.entry("2F", List.of("Hako 1", 1f)), Map.entry("3F", List.of("Hako 2", 0.8f)), Map.entry("4F", List.of("Chase 2", 1f)), - Map.entry("4A", List.of("The great battle", 1f)) + Map.entry("5F", List.of("Chase 2", 1f)), // TODO: Change this music + Map.entry("4A", List.of("The great battle", 1f)), + Map.entry("5A", List.of("The great battle", 1f)) // TODO: Change this music ); // @formatter:on diff --git a/core/src/main/java/fr/formiko/kokcinelo/view/LevelButton.java b/core/src/main/java/fr/formiko/kokcinelo/view/LevelButton.java index f4fdaebb..b8468f8a 100644 --- a/core/src/main/java/fr/formiko/kokcinelo/view/LevelButton.java +++ b/core/src/main/java/fr/formiko/kokcinelo/view/LevelButton.java @@ -6,6 +6,8 @@ import fr.formiko.kokcinelo.model.Aphid; import fr.formiko.kokcinelo.model.BigScoreAphid; import fr.formiko.kokcinelo.model.Creature; +import fr.formiko.kokcinelo.model.FlyingAphid; +import fr.formiko.kokcinelo.model.FlyingBigScoreAphid; import fr.formiko.kokcinelo.model.GreenAnt; import fr.formiko.kokcinelo.model.HealthAphid; import fr.formiko.kokcinelo.model.Ladybug; @@ -303,6 +305,18 @@ private Sprite getSprite() { sprite = Shapes.getCircledSprite(radius, App.GREEN, c, c2, c3, c4); break; } + case "5K": { + c = new Ladybug(); + c.setZoom(ladybugSize); + c2 = new SpeedAphid(); + c2.setZoom(smallAphidSize); + c3 = new HealthAphid(); + c3.setZoom(smallAphidSize); + c4 = new FlyingAphid(); + c4.setZoom(smallAphidSize); + sprite = Shapes.getCircledSprite(radius, App.GREEN, c, c2, c3, c4); + break; + } case "2F": { c = new Ladybug(); c.setZoom(ladybugSize); @@ -331,6 +345,18 @@ private Sprite getSprite() { sprite = Shapes.getCircledSprite(radius, App.GREEN, c, c2, c3, c4); break; } + case "5F": { + c = new Ant(); + c.setZoom(antSize); + c2 = new SpeedAphid(); + c2.setZoom(smallAphidSize); + c3 = new HealthAphid(); + c3.setZoom(smallAphidSize); + c4 = new FlyingAphid(); + c4.setZoom(smallAphidSize); + sprite = Shapes.getCircledSprite(radius, App.GREEN, c, c2, c3, c4); + break; + } case "4A": { c = new BigScoreAphid(); c.setZoom(aphidSize); @@ -339,6 +365,14 @@ private Sprite getSprite() { sprite = Shapes.getCircledSprite(radius, App.GREEN, c, c2); break; } + case "5A": { + c = new FlyingBigScoreAphid(); + c.setZoom(aphidSize); + c2 = new Ladybug(); + c2.setZoom(ladybugSize); + sprite = Shapes.getCircledSprite(radius, App.GREEN, c, c2); + break; + } default: { sprite = new Sprite(Shapes.getCircle(radius, App.GREEN)); } diff --git a/core/src/test/java/fr/formiko/kokcinelo/model/CreatureTest.java b/core/src/test/java/fr/formiko/kokcinelo/model/CreatureTest.java index a5f94af4..874a40c7 100644 --- a/core/src/test/java/fr/formiko/kokcinelo/model/CreatureTest.java +++ b/core/src/test/java/fr/formiko/kokcinelo/model/CreatureTest.java @@ -107,11 +107,11 @@ void testConstructor() { assertDoesNotThrow(() -> new Ladybug()); assertDoesNotThrow(() -> new LadybugSideView()); assertDoesNotThrow(() -> new Aphid()); - assertDoesNotThrow(() -> new VisibilityAphid()); assertDoesNotThrow(() -> new HealthAphid()); assertDoesNotThrow(() -> new SpeedAphid()); assertDoesNotThrow(() -> new ScoreAphid()); assertDoesNotThrow(() -> new BigScoreAphid()); + assertDoesNotThrow(() -> new FlyingAphid()); }