add lantern object and implement light management in player and environment
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ public enum EntityType {
|
||||
PICKUP,
|
||||
PROJECTILE,
|
||||
WEAPON,
|
||||
LIGHT,
|
||||
SHIELD;
|
||||
|
||||
public enum WeaponType {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -70,6 +70,7 @@ public class Entity {
|
||||
public int mana;
|
||||
public Entity currentWeapon;
|
||||
public Entity currentShield;
|
||||
public Entity currentLight;
|
||||
public Projectile projectile;
|
||||
public ArrayList<Entity> 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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
19
src/de/miaurizius/jgame2d/entity/item/LanternObj.java
Normal file
19
src/de/miaurizius/jgame2d/entity/item/LanternObj.java
Normal file
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user