/* * The MIT License (MIT) * * Copyright (c) 2014-2017 Sri Harsha Chilakapati * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ package com.shc.silenceengine.tests; import com.shc.silenceengine.core.SilenceEngine; import com.shc.silenceengine.graphics.Color; import com.shc.silenceengine.graphics.DynamicRenderer; import com.shc.silenceengine.graphics.IGraphicsDevice; import com.shc.silenceengine.graphics.cameras.OrthoCam; import com.shc.silenceengine.graphics.opengl.GLContext; import com.shc.silenceengine.graphics.programs.DynamicProgram; import com.shc.silenceengine.input.Keyboard; import com.shc.silenceengine.io.FilePath; import com.shc.silenceengine.scene.tiled.TmxMap; import com.shc.silenceengine.scene.tiled.renderers.TmxMapRenderer; /** * @author Sri Harsha Chilakapati */ public class TmxMapTest extends SilenceTest { private OrthoCam camera; private TmxMap map; private TmxMapRenderer mapRenderer; private DynamicRenderer dynamicRenderer; private DynamicProgram dynamicProgram; private String path; public TmxMapTest(String file) { this.path = file; } @Override public void init() { TmxMap.load(FilePath.getResourceFile(path), map -> { this.map = map; camera = new OrthoCam(SilenceEngine.display.getWidth(), SilenceEngine.display.getHeight()); dynamicRenderer = new DynamicRenderer(500); DynamicProgram.create(dynamicProgram -> { this.dynamicProgram = dynamicProgram; TmxMapRenderer.create(map, renderer -> this.mapRenderer = renderer); }); GLContext.clearColor(Color.GRAY); }); } @Override public void update(float delta) { if (Keyboard.isKeyTapped(Keyboard.KEY_ESCAPE)) SilenceEngine.display.close(); SilenceEngine.display.setTitle("SilenceEngine TmxMapTest | FPS: " + SilenceEngine.gameLoop.getFPS() + " | UPS: " + SilenceEngine.gameLoop.getUPS() + " | RC: " + IGraphicsDevice.Data.renderCallsThisFrame); if (mapRenderer != null) mapRenderer.update(delta); } @Override public void render(float delta) { if (mapRenderer == null) return; camera.apply(); dynamicProgram.use(); dynamicProgram.applyToRenderer(dynamicRenderer); mapRenderer.render(dynamicRenderer); } @Override public void resized() { if (mapRenderer == null) return; camera.initProjection(SilenceEngine.display.getWidth(), SilenceEngine.display.getHeight()); camera.center(map.getWidth() * map.getTileWidth() / 2, map.getHeight() * map.getTileHeight() / 2); GLContext.viewport(0, 0, SilenceEngine.display.getWidth(), SilenceEngine.display.getHeight()); } @Override public void dispose() { if (mapRenderer == null) return; mapRenderer.dispose(); dynamicProgram.dispose(); dynamicRenderer.dispose(); } }