From 11679c2ffdd8151618ac7fb97d781f9f25818680 Mon Sep 17 00:00:00 2001 From: Edward Peterson Date: Fri, 4 Nov 2016 13:54:50 -0400 Subject: [PATCH] Added basic light shader Added dropbox capability --- core/assets/Fragment.frag | 22 +++++++++++++++ core/assets/Vertex.vert | 16 +++++++++++ core/src/com/toasted/chuck/ChuckGame.java | 11 ++++---- .../com/toasted/chuck/EntityController.java | 4 ++- core/src/com/toasted/chuck/EntityPlayer.java | 27 ++++++++++++++++++- core/src/com/toasted/chuck/Graphics.java | 24 ++++++++++++++++- 6 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 core/assets/Fragment.frag create mode 100644 core/assets/Vertex.vert diff --git a/core/assets/Fragment.frag b/core/assets/Fragment.frag new file mode 100644 index 0000000..51f0499 --- /dev/null +++ b/core/assets/Fragment.frag @@ -0,0 +1,22 @@ +//SpriteBatch will use texture unit 0 +uniform sampler2D u_texture; +uniform vec2 u_screenResolution; + +//"in" varyings from our vertex shader +varying vec4 vColor; +varying vec2 vTexCoord; +void main() { + //sample the texture + vec4 texColor = texture2D(u_texture, vTexCoord); + float dx = u_screenResolution.x / 2.0 - gl_FragCoord.x; + float dy = u_screenResolution.y / 2.0 - gl_FragCoord.y; + float dxi = u_screenResolution.x / 2.0; + float dyi = u_screenResolution.y / 2.0; + float dis = sqrt(dx * dx + dy * dy); + float disFull = sqrt(dxi * dxi + dyi * dyi); + float disSq = (1-(dis / disFull)); + texColor.rgb = texColor.rgb * disSq * disSq * disSq * disSq * disSq; + + //final color + gl_FragColor = texColor * vColor; +} \ No newline at end of file diff --git a/core/assets/Vertex.vert b/core/assets/Vertex.vert new file mode 100644 index 0000000..92b9ffd --- /dev/null +++ b/core/assets/Vertex.vert @@ -0,0 +1,16 @@ +attribute vec4 a_position; +attribute vec4 a_color; +attribute vec2 a_texCoord0; + +uniform mat4 u_projTrans; + +varying vec4 vColor; +varying vec2 vTexCoord; +varying vec2 vScreenPos; + +void main() { + vColor = a_color; + vTexCoord = a_texCoord0; + gl_Position = u_projTrans * a_position; + +} diff --git a/core/src/com/toasted/chuck/ChuckGame.java b/core/src/com/toasted/chuck/ChuckGame.java index 65e63a1..13ad923 100644 --- a/core/src/com/toasted/chuck/ChuckGame.java +++ b/core/src/com/toasted/chuck/ChuckGame.java @@ -23,7 +23,7 @@ public class ChuckGame extends ApplicationAdapter implements InputProcessor{ ArrayList entities = new ArrayList(); Comparator zSorter; TiledMap tiledMap; - TiledMapRenderer tmRenderer; + OrthogonalTiledMapRenderer tmRenderer; ArrayList collisions = new ArrayList(); @Override public void create () { @@ -42,7 +42,7 @@ public class ChuckGame extends ApplicationAdapter implements InputProcessor{ }; tiledMap = new TmxMapLoader().load("testmap.tmx"); - tmRenderer = new OrthogonalTiledMapRenderer(tiledMap); + tmRenderer = new OrthogonalTiledMapRenderer(tiledMap, graphics.getBatch()); MapLayer ml = tiledMap.getLayers().get("collisions"); for(MapObject o: ml.getObjects()){ @@ -53,6 +53,7 @@ public class ChuckGame extends ApplicationAdapter implements InputProcessor{ } + } @Override @@ -78,7 +79,7 @@ public class ChuckGame extends ApplicationAdapter implements InputProcessor{ tmRenderer.setView(graphics.cam); tmRenderer.render(); graphics.startSprite(); - +// tmRenderer.getBatch().setShader(graphics.shader); // player.draw(graphics); for(Entity e: entities){ @@ -95,13 +96,13 @@ public class ChuckGame extends ApplicationAdapter implements InputProcessor{ @Override public boolean keyDown(int keycode) { - player.controller.acceptEvent(keycode, true, player, entities); + player.controller.acceptEvent(keycode, true, player, entities, collisions); return false; } @Override public boolean keyUp(int keycode) { - player.controller.acceptEvent(keycode, false, player, entities); + player.controller.acceptEvent(keycode, false, player, entities, collisions); return false; } diff --git a/core/src/com/toasted/chuck/EntityController.java b/core/src/com/toasted/chuck/EntityController.java index f5b7776..743782b 100644 --- a/core/src/com/toasted/chuck/EntityController.java +++ b/core/src/com/toasted/chuck/EntityController.java @@ -2,6 +2,8 @@ package com.toasted.chuck; import java.util.ArrayList; +import com.badlogic.gdx.math.Rectangle; + public interface EntityController { - public void acceptEvent(int keycode, boolean newState, Entity owner, ArrayList entities); + public void acceptEvent(int keycode, boolean newState, Entity owner, ArrayList entities, ArrayList collisions); } diff --git a/core/src/com/toasted/chuck/EntityPlayer.java b/core/src/com/toasted/chuck/EntityPlayer.java index a76f96f..fa1b950 100644 --- a/core/src/com/toasted/chuck/EntityPlayer.java +++ b/core/src/com/toasted/chuck/EntityPlayer.java @@ -30,7 +30,7 @@ public class EntityPlayer extends Entity{ collision = new Rectangle(0, 0, 16, 16); controller = new EntityController(){ - public void acceptEvent(int keycode, boolean newState, Entity owner, ArrayList entities) { + public void acceptEvent(int keycode, boolean newState, Entity owner, ArrayList entities, ArrayList collisions) { if(newState){ @@ -51,6 +51,31 @@ public class EntityPlayer extends Entity{ holding = null; } + break; + case Keys.Z: //Drop the beat + if(holding != null){ + + + Rectangle boxCollision = new Rectangle(holding.collision); + + + boxCollision.x += getDirectionalVector().x * 16; + boxCollision.y += getDirectionalVector().y * 16; + boolean collides = false; + for(Rectangle r: collisions){ + if(r.overlaps(boxCollision)){ + //can't place it here + collides = true; + break; + } + } + if(!collides){ + holding.shouldDrawSelf = true; + holding.position.mulAdd(getDirectionalVector(), 16); + holding = null; + + } + } } if(keycode == Keys.UP || keycode == Keys.DOWN || keycode == Keys.LEFT || keycode == Keys.RIGHT){ lastDirectionalUsed = keycode; diff --git a/core/src/com/toasted/chuck/Graphics.java b/core/src/com/toasted/chuck/Graphics.java index e53d39f..b911803 100644 --- a/core/src/com/toasted/chuck/Graphics.java +++ b/core/src/com/toasted/chuck/Graphics.java @@ -1,21 +1,29 @@ package com.toasted.chuck; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.glutils.ShaderProgram; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; +import com.badlogic.gdx.math.Vector2; public class Graphics { private SpriteBatch spriteBatch; private ShapeRenderer shapeRenderer; OrthographicCamera cam; + + final FileHandle VERTEX = Gdx.files.internal("Vertex.vert"); + final FileHandle FRAGMENT = Gdx.files.internal("Fragment.frag"); + + ShaderProgram shader = new ShaderProgram(VERTEX, FRAGMENT); public Graphics(){ cam = new OrthographicCamera(); spriteBatch = new SpriteBatch(); shapeRenderer = new ShapeRenderer(); - cam.setToOrtho(false, 16 * 32, 9 * 32); + cam.setToOrtho(false, 16 * 28, 9 * 28); } public int getWidth(){ @@ -45,5 +53,19 @@ public class Graphics { public void prepare(){ shapeRenderer.setProjectionMatrix(cam.combined); spriteBatch.setProjectionMatrix(cam.combined); + + System.out.println(shader.getLog()); + spriteBatch.setShader(shader); + System.out.println(shader.getUniforms()); +// for(String s: shader.getUniforms()){ +// System.out.println(s); +// } +// System.out.println(shader.getFragmentShaderSource()); +// shader.begin(); + shader.begin(); + +// shader.setUniform2fv("u_resolution", new float[]{(float) getWidth(), (float) getHeight()}, 0, 2); + shader.setUniformf("u_screenResolution", new Vector2(getWidth(), getHeight())); + } }