diff --git a/src/de/miaurizius/jgame2d/core/GamePanel.java b/src/de/miaurizius/jgame2d/core/GamePanel.java index 258b1c7..8f37344 100644 --- a/src/de/miaurizius/jgame2d/core/GamePanel.java +++ b/src/de/miaurizius/jgame2d/core/GamePanel.java @@ -148,6 +148,7 @@ public class GamePanel extends JPanel implements Runnable { } } for(Entity entity : iTile[currentMap.getIndex()]) if(entity != null) entity.update(); + eManager.update(); break; case PAUSE: break; diff --git a/src/de/miaurizius/jgame2d/core/UI.java b/src/de/miaurizius/jgame2d/core/UI.java index 40af2e0..bb862ed 100644 --- a/src/de/miaurizius/jgame2d/core/UI.java +++ b/src/de/miaurizius/jgame2d/core/UI.java @@ -194,7 +194,11 @@ public class UI { for(int i = 0; i < entity.inventory.size(); i++) { // EQUIP CURSOR - if(entity.inventory.get(i) == entity.currentWeapon || entity.inventory.get(i) == entity.currentShield) { + if( + entity.inventory.get(i) == entity.currentWeapon || + entity.inventory.get(i) == entity.currentShield || + entity.inventory.get(i) == entity.currentLight + ) { graphics2d.setColor(new Color(240, 190,90)); graphics2d.fillRoundRect(slotX, slotY, panel.tileSize, panel.tileSize, 10, 10); } diff --git a/src/de/miaurizius/jgame2d/core/enums/EntityType.java b/src/de/miaurizius/jgame2d/core/enums/EntityType.java index ad7bcb8..6ff2433 100644 --- a/src/de/miaurizius/jgame2d/core/enums/EntityType.java +++ b/src/de/miaurizius/jgame2d/core/enums/EntityType.java @@ -10,6 +10,7 @@ public enum EntityType { PICKUP, PROJECTILE, WEAPON, + LIGHT, SHIELD; public enum WeaponType { diff --git a/src/de/miaurizius/jgame2d/core/handlers/AssetSetter.java b/src/de/miaurizius/jgame2d/core/handlers/AssetSetter.java index 1ab7a68..639d59e 100644 --- a/src/de/miaurizius/jgame2d/core/handlers/AssetSetter.java +++ b/src/de/miaurizius/jgame2d/core/handlers/AssetSetter.java @@ -54,6 +54,11 @@ public class AssetSetter { panel.obj[Map.OVERWORLD.getIndex()][i].worldX = panel.tileSize*17; panel.obj[Map.OVERWORLD.getIndex()][i].worldY = panel.tileSize*21; i++; + + panel.obj[Map.OVERWORLD.getIndex()][i] = new LanternObj(panel); + panel.obj[Map.OVERWORLD.getIndex()][i].worldX = panel.tileSize*18; + panel.obj[Map.OVERWORLD.getIndex()][i].worldY = panel.tileSize*20; + i++; } public void setNPC() { diff --git a/src/de/miaurizius/jgame2d/entity/Entity.java b/src/de/miaurizius/jgame2d/entity/Entity.java index 5445d06..e572d12 100644 --- a/src/de/miaurizius/jgame2d/entity/Entity.java +++ b/src/de/miaurizius/jgame2d/entity/Entity.java @@ -70,6 +70,7 @@ public class Entity { public int mana; public Entity currentWeapon; public Entity currentShield; + public Entity currentLight; public Projectile projectile; public ArrayList inventory = new ArrayList<>(); public final int maxInvSize = 20; @@ -85,6 +86,7 @@ public class Entity { public int knockbackVal; public boolean stackable; public int amt = 1; + public float lightRadius; public Entity(GamePanel panel) { this.panel = panel; diff --git a/src/de/miaurizius/jgame2d/entity/Player.java b/src/de/miaurizius/jgame2d/entity/Player.java index 0830912..aff3569 100644 --- a/src/de/miaurizius/jgame2d/entity/Player.java +++ b/src/de/miaurizius/jgame2d/entity/Player.java @@ -20,6 +20,7 @@ public class Player extends Entity { // STATE public boolean attackCancel; + public boolean lightUpdated; public Player(GamePanel panel, KeyHandler keyH) { super(panel); @@ -289,6 +290,10 @@ public class Player extends Entity { currentShield = selectedItem; getDefense(); } + if(selectedItem.type == EntityType.LIGHT) { + if(currentLight == selectedItem) currentLight = null; else currentLight = selectedItem; + lightUpdated = true; + } if(selectedItem.consumable) if(selectedItem.use(this)) if(selectedItem.amt > 1) selectedItem.amt--; else inventory.remove(selectedItem); diff --git a/src/de/miaurizius/jgame2d/entity/item/LanternObj.java b/src/de/miaurizius/jgame2d/entity/item/LanternObj.java new file mode 100644 index 0000000..37e6f5d --- /dev/null +++ b/src/de/miaurizius/jgame2d/entity/item/LanternObj.java @@ -0,0 +1,19 @@ +package de.miaurizius.jgame2d.entity.item; + +import de.miaurizius.jgame2d.core.GamePanel; +import de.miaurizius.jgame2d.core.enums.EntityType; +import de.miaurizius.jgame2d.entity.Entity; + +public class LanternObj extends Entity { + + public LanternObj(GamePanel panel) { + super(panel); + type = EntityType.LIGHT; + name = "Lantern"; + down1 = initEntitySprites("objects/lantern"); + description = "[" + name + "]\nA lantern that lights up\nthe surrounding area."; + price = 100; + lightRadius = 250; + } + +} diff --git a/src/de/miaurizius/jgame2d/environment/EnvironmentManager.java b/src/de/miaurizius/jgame2d/environment/EnvironmentManager.java index da607d7..e4fb669 100644 --- a/src/de/miaurizius/jgame2d/environment/EnvironmentManager.java +++ b/src/de/miaurizius/jgame2d/environment/EnvironmentManager.java @@ -13,12 +13,16 @@ public class EnvironmentManager { this.panel = panel; } - public void setup() { - lighting = new Lighting(panel, 300); - } - public void draw(Graphics2D g2) { lighting.draw(g2); } + // SETTING THINGS UP + public void setup() { + lighting = new Lighting(panel); + } + public void update() { + lighting.update(); + } + } diff --git a/src/de/miaurizius/jgame2d/environment/Lighting.java b/src/de/miaurizius/jgame2d/environment/Lighting.java index 7fc1339..3bb3b8b 100644 --- a/src/de/miaurizius/jgame2d/environment/Lighting.java +++ b/src/de/miaurizius/jgame2d/environment/Lighting.java @@ -10,45 +10,63 @@ public class Lighting { GamePanel panel; BufferedImage darknessFilter; - public Lighting(GamePanel panel, int circleSize) { + public Lighting(GamePanel panel) { this.panel = panel; + setLightSource(); + } + + public void draw(Graphics2D g2) { + g2.drawImage(darknessFilter, 0, 0, null); + } + public void update() { + if(!panel.player.lightUpdated) return; + setLightSource(); + panel.player.lightUpdated = false; + } + + // ... + public void setLightSource() { darknessFilter = new BufferedImage(panel.screenWidth, panel.screenHeight, BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = darknessFilter.createGraphics(); int centerX = panel.player.screenX + panel.tileSize/2; int centerY = panel.player.screenY + panel.tileSize/2; - RadialGradientPaint gPaint = getRadialGradientPaint((float) circleSize, centerX, centerY); + RadialGradientPaint gPaint = getRadialGradientPaint(centerX, centerY); g2.setPaint(gPaint); + g2.fillRect(0, 0, panel.screenWidth, panel.screenHeight); g2.dispose(); } - private static RadialGradientPaint getRadialGradientPaint(float circleSize, int centerX, int centerY) { + // UTILITY + private RadialGradientPaint getRadialGradientPaint(int centerX, int centerY) { Color[] color = new Color[] { - new Color(0, 0, 0, 0.1f), - new Color(0, 0, 0, 0.42f), - new Color(0, 0, 0, 0.52f), - new Color(0, 0, 0, 0.61f), - new Color(0, 0, 0, 0.69f), - new Color(0, 0, 0, 0.76f), - new Color(0, 0, 0, 0.82f), - new Color(0, 0, 0, 0.87f), - new Color(0, 0, 0, 0.91f), - new Color(0, 0, 0, 0.94f), - new Color(0, 0, 0, 0.96f), - new Color(0, 0, 0, 0.97f) + new Color(0, 0, 0, 0.1f), + new Color(0, 0, 0, 0.42f), + new Color(0, 0, 0, 0.52f), + new Color(0, 0, 0, 0.61f), + new Color(0, 0, 0, 0.69f), + new Color(0, 0, 0, 0.76f), + new Color(0, 0, 0, 0.82f), + new Color(0, 0, 0, 0.87f), + new Color(0, 0, 0, 0.91f), + new Color(0, 0, 0, 0.94f), + new Color(0, 0, 0, 0.96f), + new Color(0, 0, 0, 0.97f) }; + final int lim = 3; + if(panel.player.currentLight == null) { + for(int i = 0; i < lim; i++) { + color[i] = color[lim]; + } + } + float[] fraction = new float[] { - 0f, 0.4f, 0.5f, 0.6f, 0.65f, 0.7f, 0.75f, 0.8f, 0.85f, 0.9f, 0.95f, 1f + 0f, 0.4f, 0.5f, 0.6f, 0.65f, 0.7f, 0.75f, 0.8f, 0.85f, 0.9f, 0.95f, 1f }; - - return new RadialGradientPaint(centerX, centerY, (circleSize /2), fraction, color); - } - - public void draw(Graphics2D g2) { - g2.drawImage(darknessFilter, 0, 0, null); + return new RadialGradientPaint(centerX, centerY, (panel.player.currentLight == null ? 75 : panel.player.currentLight.lightRadius), fraction, color); } }