package com.toxsickproductions.skyland.scenes3d; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.InputAdapter; import com.badlogic.gdx.InputMultiplexer; import com.badlogic.gdx.Screen; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.PerspectiveCamera; import com.badlogic.gdx.graphics.g3d.Environment; import com.badlogic.gdx.graphics.g3d.ModelBatch; import com.badlogic.gdx.math.Vector3; import com.toxsickproductions.g3d.bullet.BulletWorld; import com.toxsickproductions.skyland.Skyland; import com.toxsickproductions.skyland.listeners.CameraController; import com.toxsickproductions.skyland.listeners.RayCastListener; import com.toxsickproductions.skyland.scenes2d.Resources; import com.toxsickproductions.skyland.scenes3d.generators.CloudGenerator; import com.toxsickproductions.skyland.scenes3d.generators.WorldGenerator; import com.toxsickproductions.skyland.scenes3d.util.ParticleUtils; import com.toxsickproductions.skyland.scenes3d.util.WorldHover; /** * Created by Freek on 7/01/2015. */ public class GameScene extends InputAdapter implements Screen { private BulletWorld world; private Environment environment; private CloudGenerator cloudGenerator; private ParticleUtils particleUtils; private RayCastListener rayCastListener; private PerspectiveCamera camera; private ModelBatch batch; private Resources resources; @Override public void show() { initWorld(); Gdx.input.setInputProcessor(new InputMultiplexer(rayCastListener = new RayCastListener(world, camera), new CameraController(camera, -20, 7, -1.5f, 2))); initRayCasting(); } private void initWorld() { camera = WorldGenerator.generatePerspectiveCamera(1, 150, new Vector3(-8, 10, 15), new Vector3(0, 2, 0)); batch = new ModelBatch(); particleUtils = new ParticleUtils(); particleUtils.initBillBoardParticles(camera); //adding generators world = WorldGenerator.generateBaseWorld(false, false); cloudGenerator = new CloudGenerator(world, 30); environment = WorldGenerator.generateBaseEnvironment(new Vector3(-6, 14, 6)); WorldGenerator.createKinematicIsland(world, new Vector3(0, 0, 0), true); WorldHover.reinit(); } private void initRayCasting() { rayCastListener.initResources(resources = new Resources()); rayCastListener.initParticleUtils(particleUtils); rayCastListener.initCloudPoofer(cloudGenerator); } @Override public void render(float delta) { update(delta); Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); Gdx.gl.glClearColor(.3f, .55f, 1, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); batch.begin(camera); world.renderFrustumCulling(batch, environment, 1); batch.render(particleUtils.updateAndDraw(), environment); batch.end(); Skyland.drawFPS(); resources.drawResources(); } private void update(float delta) { WorldHover.hover(delta, world); cloudGenerator.update(delta); world.update(); } @Override public void dispose() { particleUtils.dispose(); cloudGenerator.dispose(); batch.dispose(); world.dispose(); } @Override public void resize(int width, int height) { Skyland.STAGE.getViewport().update(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), true); } @Override public void hide() { dispose(); } @Override public void pause() { } @Override public void resume() { } }