import com.mygdx.manager.GameStateManager; import com.mygdx.manager.MyContactListener; import com.mygdx.manager.MyInput; import static com.mygdx.manager.Box2DVariables.BIT_PLAYER; import static com.mygdx.manager.Box2DVariables.PPM; public class Play extends GameState{ private World world; private Player player; private Box2DDebugRenderer b2d; private OrthographicCamera B2DCAM; private TiledMap tileMap; private OrthogonalTiledMapRenderer orthomap; private MyContactListener cl; private float tileSize; private Sprite sprite; private Viewport viewport; private Texture back; //file name private final String LEVEL_1 ="maps/tilemap_1.tmx"; public Play(GameStateManager gsm) { super(gsm); //setup box2d world=new World(new Vector2(0,-9.8f),true); cl=new MyContactListener(); world.setContactListener(cl); sb=new SpriteBatch(); viewport = new ExtendViewport(MyMainGame.Width, MyMainGame.Height, cam); // sprite=new Sprite(MyMainGame.con.getTexture("sprite"),32,32); //cam=new OrthographicCamera(); b2d=new Box2DDebugRenderer(); //create Player createPlayer(); //create Tiles createTiles(); orthomap = new OrthogonalTiledMapRenderer(tileMap,1/32f); // sb=new SpriteBatch(); //setup Box2D Cam B2DCAM=new OrthographicCamera(); B2DCAM.setToOrtho(false, MyMainGame.Width/PPM,MyMainGame.Height/PPM); //setup hud and cam hud=new OrthographicCamera(); cam=new OrthographicCamera(); cam.setToOrtho(false,10,7); hud.setToOrtho(false,MyMainGame.Width,MyMainGame.Height); /* //TODO - remove me File file = new File(LEVEL_1); if(file.exists()) System.out.println("file exists");*/ } @Override public void init() { } @Override public void update(float dt) { handleInput(); world.step(dt,6,2); player.update(dt); } @Override public void draw() { } @Override public void render() { //clear screen Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT); hud.update(); if (sb == null) { System.out.println("Sb is null"); } // cam.position.set(player.getPosition().x,player.getPosition().y,0 ); sb.setProjectionMatrix(cam.combined); //draw tile map orthomap.setView(cam); orthomap.render(); //draw player sb.setProjectionMatrix(hud.combined); player.render(sb); b2d.render(world,B2DCAM.combined); } @Override public void handleInput() { if(MyInput.isPressed((MyInput.SPACE))){ System.out.println("space pressed"); if(cl.isPlayerOnGround()) System.out.println(cl.isPlayerOnGround()); player.getBody().applyForceToCenter(0,200,true); } } @Override public void dispose() { world.dispose(); b2d.dispose(); tileMap.dispose(); orthomap.dispose(); } private void createPlayer(){ BodyDef bodydef=new BodyDef(); FixtureDef fixdef=new FixtureDef(); PolygonShape shape=new PolygonShape(); //create player bodydef.position.set(60/PPM,200/PPM); bodydef.type= BodyDef.BodyType.DynamicBody; // bodydef.linearVelocity.set(1,0); Body body=world.createBody(bodydef); shape.setAsBox(13/PPM,13/PPM); fixdef.shape=shape; fixdef.filter.categoryBits= BIT_PLAYER; fixdef.filter.maskBits=Box2DVariables.BIT_BLUE; // fixdef.filter.maskBits=Box2DVariables.BIT_GREEN; body.createFixture(fixdef).setUserData("PLAYER"); //create foot sensor shape.setAsBox(13/PPM,2/PPM,new Vector2(0,-13/PPM),0); fixdef.shape=shape; fixdef.filter.categoryBits= BIT_PLAYER; fixdef.filter.maskBits=Box2DVariables.BIT_BLUE; // fixdef.filter.maskBits=Box2DVariables.BIT_GREEN; fixdef.isSensor=true; body.createFixture(fixdef).setUserData("FOOT"); //create Player player=new Player(body); body.setUserData(player); } private void createTiles(){ //load tile map tileMap = new TmxMapLoader().load(LEVEL_1); //orthomap = new OrthogonalTiledMapRenderer(tileMap,1); tileSize=(int)tileMap.getProperties().get("tilewidth", Integer.class); System.out.println("Tile Size " +tileSize); TiledMapTileLayer layer; layer=(TiledMapTileLayer)tileMap.getLayers().get("Blue"); createLayer(layer,Box2DVariables.BIT_BLUE); layer=(TiledMapTileLayer)tileMap.getLayers().get("Green"); createLayer(layer,Box2DVariables.BIT_GREEN); layer=(TiledMapTileLayer)tileMap.getLayers().get("Red"); createLayer(layer,Box2DVariables.BIT_RED); System.out.println("Layer Height " +layer.getHeight()); System.out.println("Layer Width " +layer.getWidth()); } private void createLayer(TiledMapTileLayer layer,short bits){ BodyDef bodydef1=new BodyDef(); FixtureDef fixdef1=new FixtureDef(); //go through cells in layer for(int row=0;row<layer.getHeight();row++){ for(int col=0;col<layer.getWidth();col++){ //get cells TiledMapTileLayer.Cell cell=layer.getCell(col,row); //check if cell exists if(cell==null) continue; if(cell.getTile()==null) continue; //create body and fixture from cell bodydef1.type= BodyDef.BodyType.StaticBody; bodydef1.position.set((col+0.5f)*tileSize/PPM,(row+0.5f)*tileSize/PPM); ChainShape cs=new ChainShape(); Vector2[] v=new Vector2[3]; //bottom left v[0]=new Vector2(-tileSize/2/PPM,-tileSize/2/PPM); //top left v[1]=new Vector2(-tileSize/2/PPM,tileSize/2/PPM); //top right corner v[2]=new Vector2(tileSize/2/PPM,tileSize/2/PPM); cs.createChain(v); fixdef1.friction=0; fixdef1.shape =cs; fixdef1.filter.categoryBits=bits; fixdef1.filter.maskBits=BIT_PLAYER; fixdef1.isSensor=false; world.createBody(bodydef1).createFixture(fixdef1); } } } } import com.mygdx.manager.GameStateManager; import com.mygdx.manager.MyContactListener; import com.mygdx.manager.MyInput; import static com.mygdx.manager.Box2DVariables.BIT_PLAYER; import static com.mygdx.manager.Box2DVariables.PPM; public class Play extends GameState{ private World world; private Player player; private Box2DDebugRenderer b2d; private OrthographicCamera B2DCAM; private TiledMap tileMap; private OrthogonalTiledMapRenderer orthomap; private MyContactListener cl; private float tileSize; private Sprite sprite; private Viewport viewport; private Texture back; //file name private final String LEVEL_1 ="maps/tilemap_1.tmx"; public Play(GameStateManager gsm) { super(gsm); //setup box2d world=new World(new Vector2(0,-9.8f),true); cl=new MyContactListener(); world.setContactListener(cl); sb=new SpriteBatch(); viewport = new ExtendViewport(MyMainGame.Width, MyMainGame.Height, cam); // sprite=new Sprite(MyMainGame.con.getTexture("sprite"),32,32); //cam=new OrthographicCamera(); b2d=new Box2DDebugRenderer(); //create Player createPlayer(); //create Tiles createTiles(); orthomap = new OrthogonalTiledMapRenderer(tileMap,1/32f); // sb=new SpriteBatch(); //setup Box2D Cam B2DCAM=new OrthographicCamera(); B2DCAM.setToOrtho(false, MyMainGame.Width/PPM,MyMainGame.Height/PPM); //setup hud and cam hud=new OrthographicCamera(); cam=new OrthographicCamera(); cam.setToOrtho(false,10,7); hud.setToOrtho(false,MyMainGame.Width,MyMainGame.Height); /* //TODO - remove me File file = new File(LEVEL_1); if(file.exists()) System.out.println("file exists");*/ } @Override public void init() { } @Override public void update(float dt) { handleInput(); world.step(dt,6,2); player.update(dt); } @Override public void draw() { } @Override public void render() { //clear screen Gdx.gl20.glClear(GL20.GL_COLOR_BUFFER_BIT); hud.update(); if (sb == null) { System.out.println("Sb is null"); } // cam.position.set(player.getPosition().x,player.getPosition().y,0 ); sb.setProjectionMatrix(cam.combined); //draw tile map orthomap.setView(cam); orthomap.render(); //draw player sb.setProjectionMatrix(hud.combined); player.render(sb); b2d.render(world,B2DCAM.combined); } @Override public void handleInput() { if(MyInput.isPressed((MyInput.SPACE))){ System.out.println("space pressed"); if(cl.isPlayerOnGround()) System.out.println(cl.isPlayerOnGround()); player.getBody().applyForceToCenter(0,200,true); } } @Override public void dispose() { world.dispose(); b2d.dispose(); tileMap.dispose(); orthomap.dispose(); } private void createPlayer(){ BodyDef bodydef=new BodyDef(); FixtureDef fixdef=new FixtureDef(); PolygonShape shape=new PolygonShape(); //create player bodydef.position.set(60/PPM,200/PPM); bodydef.type= BodyDef.BodyType.DynamicBody; // bodydef.linearVelocity.set(1,0); Body body=world.createBody(bodydef); shape.setAsBox(13/PPM,13/PPM); fixdef.shape=shape; fixdef.filter.categoryBits= BIT_PLAYER; fixdef.filter.maskBits=Box2DVariables.BIT_BLUE; // fixdef.filter.maskBits=Box2DVariables.BIT_GREEN; body.createFixture(fixdef).setUserData("PLAYER"); //create foot sensor shape.setAsBox(13/PPM,2/PPM,new Vector2(0,-13/PPM),0); fixdef.shape=shape; fixdef.filter.categoryBits= BIT_PLAYER; fixdef.filter.maskBits=Box2DVariables.BIT_BLUE; // fixdef.filter.maskBits=Box2DVariables.BIT_GREEN; fixdef.isSensor=true; body.createFixture(fixdef).setUserData("FOOT"); //create Player player=new Player(body); body.setUserData(player); } private void createTiles(){ //load tile map tileMap = new TmxMapLoader().load(LEVEL_1); //orthomap = new OrthogonalTiledMapRenderer(tileMap,1); tileSize=(int)tileMap.getProperties().get("tilewidth", Integer.class); System.out.println("Tile Size " +tileSize); TiledMapTileLayer layer; layer=(TiledMapTileLayer)tileMap.getLayers().get("Blue"); createLayer(layer,Box2DVariables.BIT_BLUE); layer=(TiledMapTileLayer)tileMap.getLayers().get("Green"); createLayer(layer,Box2DVariables.BIT_GREEN); layer=(TiledMapTileLayer)tileMap.getLayers().get("Red"); createLayer(layer,Box2DVariables.BIT_RED); System.out.println("Layer Height " +layer.getHeight()); System.out.println("Layer Width " +layer.getWidth()); } private void createLayer(TiledMapTileLayer layer,short bits){ BodyDef bodydef1=new BodyDef(); FixtureDef fixdef1=new FixtureDef(); //go through cells in layer for(int row=0;row<layer.getHeight();row++){ for(int col=0;col<layer.getWidth();col++){ //get cells TiledMapTileLayer.Cell cell=layer.getCell(col,row); //check if cell exists if(cell==null) continue; if(cell.getTile()==null) continue; //create body and fixture from cell bodydef1.type= BodyDef.BodyType.StaticBody; bodydef1.position.set((col+0.5f)*tileSize/PPM,(row+0.5f)*tileSize/PPM); ChainShape cs=new ChainShape(); Vector2[] v=new Vector2[3]; //bottom left v[0]=new Vector2(-tileSize/2/PPM,-tileSize/2/PPM); //top left v[1]=new Vector2(-tileSize/2/PPM,tileSize/2/PPM); //top right corner v[2]=new Vector2(tileSize/2/PPM,tileSize/2/PPM); cs.createChain(v); fixdef1.friction=0; fixdef1.shape =cs; fixdef1.filter.categoryBits=bits; fixdef1.filter.maskBits=BIT_PLAYER; fixdef1.isSensor=false; world.createBody(bodydef1).createFixture(fixdef1); } } } } lang-java
