add EnvironmentManager and Lighting classes for enhanced environment rendering
This commit is contained in:
@@ -6,6 +6,7 @@ import de.miaurizius.jgame2d.core.enums.Map;
|
||||
import de.miaurizius.jgame2d.core.handlers.*;
|
||||
import de.miaurizius.jgame2d.entity.Entity;
|
||||
import de.miaurizius.jgame2d.entity.Player;
|
||||
import de.miaurizius.jgame2d.environment.EnvironmentManager;
|
||||
import de.miaurizius.jgame2d.tile.TileManager;
|
||||
import de.miaurizius.jgame2d.tile.interactive.InteractiveTile;
|
||||
|
||||
@@ -56,6 +57,7 @@ public class GamePanel extends JPanel implements Runnable {
|
||||
public Sound music = new Sound();
|
||||
public Config config = new Config(this);
|
||||
public PathFinder pFinder = new PathFinder(this);
|
||||
public EnvironmentManager eManager = new EnvironmentManager(this);
|
||||
Thread gameThread;
|
||||
|
||||
// ENTITY AND OBJECT
|
||||
@@ -177,6 +179,10 @@ public class GamePanel extends JPanel implements Runnable {
|
||||
for(Entity entity : entityList) entity.draw(fg2);
|
||||
entityList.clear();
|
||||
|
||||
// ENVIRONMENT
|
||||
eManager.draw(fg2);
|
||||
|
||||
// UI
|
||||
ui.draw(fg2);
|
||||
|
||||
long drawEnd = System.nanoTime();
|
||||
@@ -229,6 +235,7 @@ public class GamePanel extends JPanel implements Runnable {
|
||||
assetSetter.setNPC();
|
||||
assetSetter.setMonster();
|
||||
assetSetter.setITiles();
|
||||
eManager.setup();
|
||||
gameState = GameState.TITLE;
|
||||
|
||||
tempScreen = new BufferedImage(screenWidth, screenHeight, BufferedImage.TYPE_INT_RGB);
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
package de.miaurizius.jgame2d.environment;
|
||||
|
||||
import de.miaurizius.jgame2d.core.GamePanel;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
public class EnvironmentManager {
|
||||
|
||||
GamePanel panel;
|
||||
Lighting lighting;
|
||||
|
||||
public EnvironmentManager(GamePanel panel) {
|
||||
this.panel = panel;
|
||||
}
|
||||
|
||||
public void setup() {
|
||||
lighting = new Lighting(panel, 300);
|
||||
}
|
||||
|
||||
public void draw(Graphics2D g2) {
|
||||
lighting.draw(g2);
|
||||
}
|
||||
|
||||
}
|
||||
69
src/de/miaurizius/jgame2d/environment/Lighting.java
Normal file
69
src/de/miaurizius/jgame2d/environment/Lighting.java
Normal file
@@ -0,0 +1,69 @@
|
||||
package de.miaurizius.jgame2d.environment;
|
||||
|
||||
import de.miaurizius.jgame2d.core.GamePanel;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.geom.Area;
|
||||
import java.awt.geom.Ellipse2D;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
public class Lighting {
|
||||
|
||||
GamePanel panel;
|
||||
BufferedImage darknessFilter;
|
||||
|
||||
public Lighting(GamePanel panel, int circleSize) {
|
||||
this.panel = panel;
|
||||
darknessFilter = new BufferedImage(panel.screenWidth, panel.screenHeight, BufferedImage.TYPE_INT_ARGB);
|
||||
Graphics2D g2 = darknessFilter.createGraphics();
|
||||
|
||||
Area screenArea = new Area(new Rectangle2D.Double(0, 0, panel.screenWidth, panel.screenHeight));
|
||||
int centerX = panel.player.screenX + panel.tileSize/2;
|
||||
int centerY = panel.player.screenY + panel.tileSize/2;
|
||||
|
||||
double x = centerX - (double) circleSize /2;
|
||||
double y = centerY - (double) circleSize /2;
|
||||
|
||||
Shape circleShape = new Ellipse2D.Double(x, y, circleSize, circleSize);
|
||||
Area circleArea = new Area(circleShape);
|
||||
screenArea.subtract(circleArea);
|
||||
|
||||
RadialGradientPaint gPaint = getRadialGradientPaint((float) circleSize, centerX, centerY);
|
||||
g2.setPaint(gPaint);
|
||||
|
||||
g2.fill(circleArea);
|
||||
|
||||
g2.setColor(new Color(0, 0, 0, 0.95F));
|
||||
g2.fill(screenArea);
|
||||
g2.dispose();
|
||||
}
|
||||
|
||||
private static RadialGradientPaint getRadialGradientPaint(float circleSize, 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)
|
||||
};
|
||||
|
||||
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
|
||||
};
|
||||
|
||||
return new RadialGradientPaint(centerX, centerY, (circleSize /2), fraction, color);
|
||||
}
|
||||
|
||||
public void draw(Graphics2D g2) {
|
||||
g2.drawImage(darknessFilter, 0, 0, null);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user