Эх сурвалжийг харах

fog, preRender and postRender function for tiles, global alpha regulation in renderer

Kajetan Johannes Hammerle 6 жил өмнө
parent
commit
602e9cd5d3
41 өөрчлөгдсөн 111 нэмэгдсэн , 0 устгасан
  1. BIN
      resources/fog/fog.png
  2. BIN
      resources/fog/fog_f1.png
  3. BIN
      resources/fog/fog_f10.png
  4. BIN
      resources/fog/fog_f11.png
  5. BIN
      resources/fog/fog_f12.png
  6. BIN
      resources/fog/fog_f13.png
  7. BIN
      resources/fog/fog_f14.png
  8. BIN
      resources/fog/fog_f15.png
  9. BIN
      resources/fog/fog_f16.png
  10. BIN
      resources/fog/fog_f17.png
  11. BIN
      resources/fog/fog_f18.png
  12. BIN
      resources/fog/fog_f19.png
  13. BIN
      resources/fog/fog_f2.png
  14. BIN
      resources/fog/fog_f20.png
  15. BIN
      resources/fog/fog_f21.png
  16. BIN
      resources/fog/fog_f22.png
  17. BIN
      resources/fog/fog_f23.png
  18. BIN
      resources/fog/fog_f24.png
  19. BIN
      resources/fog/fog_f25.png
  20. BIN
      resources/fog/fog_f26.png
  21. BIN
      resources/fog/fog_f27.png
  22. BIN
      resources/fog/fog_f28.png
  23. BIN
      resources/fog/fog_f29.png
  24. BIN
      resources/fog/fog_f3.png
  25. BIN
      resources/fog/fog_f30.png
  26. BIN
      resources/fog/fog_f31.png
  27. BIN
      resources/fog/fog_f32.png
  28. BIN
      resources/fog/fog_f4.png
  29. BIN
      resources/fog/fog_f5.png
  30. BIN
      resources/fog/fog_f6.png
  31. BIN
      resources/fog/fog_f7.png
  32. BIN
      resources/fog/fog_f8.png
  33. BIN
      resources/fog/fog_f9.png
  34. 20 0
      src/me/hammerle/supersnuvi/gamelogic/Level.java
  35. 6 0
      src/me/hammerle/supersnuvi/gamelogic/StateRenderer.java
  36. 2 0
      src/me/hammerle/supersnuvi/javafx/IJavaRenderer.java
  37. 7 0
      src/me/hammerle/supersnuvi/javafx/JavaRenderer.java
  38. 6 0
      src/me/hammerle/supersnuvi/rendering/Game.java
  39. 2 0
      src/me/hammerle/supersnuvi/rendering/IRenderer.java
  40. 59 0
      src/me/hammerle/supersnuvi/tiles/FogTile.java
  41. 9 0
      src/me/hammerle/supersnuvi/tiles/Tile.java

BIN
resources/fog/fog.png


BIN
resources/fog/fog_f1.png


BIN
resources/fog/fog_f10.png


BIN
resources/fog/fog_f11.png


BIN
resources/fog/fog_f12.png


BIN
resources/fog/fog_f13.png


BIN
resources/fog/fog_f14.png


BIN
resources/fog/fog_f15.png


BIN
resources/fog/fog_f16.png


BIN
resources/fog/fog_f17.png


BIN
resources/fog/fog_f18.png


BIN
resources/fog/fog_f19.png


BIN
resources/fog/fog_f2.png


BIN
resources/fog/fog_f20.png


BIN
resources/fog/fog_f21.png


BIN
resources/fog/fog_f22.png


BIN
resources/fog/fog_f23.png


BIN
resources/fog/fog_f24.png


BIN
resources/fog/fog_f25.png


BIN
resources/fog/fog_f26.png


BIN
resources/fog/fog_f27.png


BIN
resources/fog/fog_f28.png


BIN
resources/fog/fog_f29.png


BIN
resources/fog/fog_f3.png


BIN
resources/fog/fog_f30.png


BIN
resources/fog/fog_f31.png


BIN
resources/fog/fog_f32.png


BIN
resources/fog/fog_f4.png


BIN
resources/fog/fog_f5.png


BIN
resources/fog/fog_f6.png


BIN
resources/fog/fog_f7.png


BIN
resources/fog/fog_f8.png


BIN
resources/fog/fog_f9.png


+ 20 - 0
src/me/hammerle/supersnuvi/gamelogic/Level.java

@@ -81,6 +81,22 @@ public final class Level
             spawns.add(new Point(5, 5));
         }
         
+        /*if(name.equals("00-Tech Demo"))
+        {
+            data.addLayer();
+            int index = data.getLayers() - 1;
+            data.clearLayer(index);
+            int width = data.getWidth();
+            int height = data.getHeight();
+            for(int x = 10; x < width; x++)
+            {
+                for(int y = 0; y < height; y++)
+                {
+                    data.setTile(index, x, y, 224 + Math.min(15, x - 10));
+                }
+            }
+        }*/
+        
         resetLevel();
         
         //Entity test = EntityBuilder.buildTest(this, 100, 100);
@@ -209,7 +225,9 @@ public final class Level
                 if(tile != -1)
                 {
                     Tile t = state.getTile(tile);
+                    t.preRender(renderer, x, y);
                     renderer.drawBlockImage(t.getImage(x, y), x, y, t.getRenderOffsetX(), t.getRenderOffsetY());
+                    t.postRender(renderer, x, y);
                 }
             }, startX, endX, startY, endY);
             
@@ -220,7 +238,9 @@ public final class Level
                 if(tile != -1)
                 {
                     Tile t = state.getTile(tile);
+                    t.preRender(renderer, x, y);
                     renderer.drawBlockImage(t.getImage(x, y), x, y, t.getRenderOffsetX(), t.getRenderOffsetY());
+                    t.postRender(renderer, x, y);
                 }
             }, startX, endX, startY, endY);
             

+ 6 - 0
src/me/hammerle/supersnuvi/gamelogic/StateRenderer.java

@@ -138,6 +138,12 @@ public class StateRenderer
         registeredTiles.put(209, new DecoShroomTile("shrooms/shroom2"));
         registeredTiles.put(210, new DecoShroomTile("shrooms/shroom3"));
         registeredTiles.put(211, new DecoShroomTile("shrooms/shroom4"));
+        
+        // fog
+        for(int i = 0; i < 16; i++)
+        {
+            registeredTiles.put(224 + i, new FogTile((i + 1) / 16.0));
+        }
     }
     
     public Tile getTile(int id)

+ 2 - 0
src/me/hammerle/supersnuvi/javafx/IJavaRenderer.java

@@ -26,6 +26,8 @@ public interface IJavaRenderer
     
     public void fillRectangle(double x, double y, double w, double h);
     
+    public void setGlobalAlpha(double alpha);
+    
     // -------------------------------------------------------------------------
     // text rendering
     // -------------------------------------------------------------------------

+ 7 - 0
src/me/hammerle/supersnuvi/javafx/JavaRenderer.java

@@ -208,6 +208,13 @@ public class JavaRenderer extends Application implements IJavaRenderer
         context.fillRect(x, y, w, h);
     }
     
+    
+    @Override
+    public void setGlobalAlpha(double alpha) 
+    {
+        context.setGlobalAlpha(alpha);
+    }
+    
     // -------------------------------------------------------------------------
     // text rendering
     // -------------------------------------------------------------------------

+ 6 - 0
src/me/hammerle/supersnuvi/rendering/Game.java

@@ -222,4 +222,10 @@ public class Game implements IRenderer
         cameraX = x;
         cameraY = y;
     }
+
+    @Override
+    public void setGlobalAlpha(double alpha) 
+    {
+        renderer.setGlobalAlpha(alpha);
+    }
 }

+ 2 - 0
src/me/hammerle/supersnuvi/rendering/IRenderer.java

@@ -28,6 +28,8 @@ public interface IRenderer
     
     public void fillRectangle(double x, double y, double w, double h);
     
+    public void setGlobalAlpha(double alpha);
+    
     // -------------------------------------------------------------------------
     // text rendering
     // -------------------------------------------------------------------------

+ 59 - 0
src/me/hammerle/supersnuvi/tiles/FogTile.java

@@ -0,0 +1,59 @@
+package me.hammerle.supersnuvi.tiles;
+
+import me.hammerle.supersnuvi.javafx.Image;
+import me.hammerle.supersnuvi.rendering.IRenderer;
+import me.hammerle.supersnuvi.util.Utils;
+
+public class FogTile extends Tile
+{
+    private int counter;
+    private int frame;
+    private final double alpha;
+    private final Image[] images;
+    
+    public FogTile(double alpha) 
+    {
+        counter = 0;
+        frame = 0;
+        images = new Image[32];
+        String path = "fog/fog_f";
+        for(int i = 0; i < 32; i++)
+        {
+            images[i] = Utils.getTileImage(path + (i + 1));
+        }
+        this.alpha = alpha;
+    }
+
+    @Override
+    public Image getImage(int x, int y) 
+    {
+        return images[frame];
+    }
+    
+    @Override
+    public void preRender(IRenderer renderer, int x, int y)
+    {
+        renderer.setGlobalAlpha(alpha);
+    }
+    
+    @Override
+    public void postRender(IRenderer renderer, int x, int y)
+    {
+        renderer.setGlobalAlpha(1.0);
+    }
+
+    @Override
+    public void tick() 
+    {
+        counter++;
+        if(counter > 12)
+        {
+            counter = 0;
+            frame++;
+            if(frame >= images.length)
+            {
+                frame = 0;
+            }
+        }
+    }
+}

+ 9 - 0
src/me/hammerle/supersnuvi/tiles/Tile.java

@@ -2,6 +2,7 @@ package me.hammerle.supersnuvi.tiles;
 
 import me.hammerle.supersnuvi.javafx.Image;
 import me.hammerle.supersnuvi.entity.Entity;
+import me.hammerle.supersnuvi.rendering.IRenderer;
 import me.hammerle.supersnuvi.util.CollisionBox;
 import me.hammerle.supersnuvi.util.Face;
 
@@ -16,6 +17,14 @@ public abstract class Tile
         collisionBox = null;
     }
     
+    public void preRender(IRenderer renderer, int x, int y)
+    {
+    }
+    
+    public void postRender(IRenderer renderer, int x, int y)
+    {
+    }
+    
     public abstract Image getImage(int x, int y);
     
     /** Sets the collision box for movement