gdx-studio

#libgdx#java#desktop

git clone https://git.pyrossh.dev/gdx-studio

An IDE for creating Games using libgdx and Java supported on all platforms Android, iOS, Desktop


test/source/Game3d.java
package source;

import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.graphics.g3d.utils.MeshPartBuilder;
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder;
import com.badlogic.gdx.graphics.VertexAttributes.Usage;
import com.badlogic.gdx.graphics.g3d.Material;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g3d.attributes.TextureAttribute;
import scene3d.Actor3d;
import scene3d.Camera3d;
import scene3d.actions.Actions3d;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.Input.Keys;
import scene2d.*;

public class Game3d extends Scene {
    Actor3d ship;
    Actor3d skydome;
    Actor3d knight;
    Actor3d floor;
    ModelBuilder builder;
    
    public Game3d(){
       ship = Asset.loadModelObj("ship");//loads an obj model
       ship.scale(3f);
       skydome = Asset.loadModel("skydome"); //loads a g3db model
       builder = new ModelBuilder();
       builder.begin();
       MeshPartBuilder part = builder.part("floor", GL20.GL_TRIANGLES, Usage.Position | 
            Usage.TextureCoordinates | Usage.Normal, new Material());
       for (float x = -200f; x < 200f; x += 10f) {
           for (float z = -200f; z < 200f; z += 10f) {
               part.rect(x, 0, z + 10f, x + 10f, 0, z + 10f, x + 10f, 0, z, x, 0, z, 0, 1, 0);
           }
       }
       floor = new Actor3d(builder.end());
       floor.materials.get(0).set(TextureAttribute.createDiffuse(Asset.tex("concrete").getTexture()));
       knight = Asset.loadModel("knight");
       knight.setPosition(-20f, 18f, 0f);
       knight.setPitch(-90f);
       addActor3d(floor);
       addActor3d(skydome);
       addActor3d(ship);
       addActor3d(knight);
       stage3d.getCamera().position.set(knight.getX()+ 13f, knight.getY() + 24f, knight.getZ() + 45f);
       //Camera3d.followOffset(20f, 20f, -20f);
      // Camera3d.followActor3d(knight, false);
    }

    float angle, angle2;
    @Override
    public void act(float delta){
        super.act(delta);
        angle = MathUtils.cosDeg(knight.getYaw() - 90); //90 degrees is correction factor
        angle2 = -MathUtils.sinDeg(knight.getYaw() - 90);
        if (upKey) {
            knight.addAction3d(Actions3d.moveBy(angle, 0f, angle2, 1f));
            stage3d.getCamera().translate(angle, 0f, angle2);
        } 
        else if (downKey) {
            knight.addAction3d(Actions3d.moveBy(-angle, 0f, -angle2, 1f));
            stage3d.getCamera().translate(angle, 0f, angle2);
        }
        else if (rightKey) {
            knight.rotateYaw(-2f);
            if(stage3d.getCamera().direction.z > -0.76f)
                Camera3d.rotateBy(-2f, 0f, 0f, 0f);
        } 
        else if (leftKey) {
            knight.rotateYaw(2f);
            if(stage3d.getCamera().direction.z > -0.76f)
                Camera3d.rotateBy(-2f, 0f, 0f, 0f);
        } 
    }

    @Override
    public void onClick(Actor actor){
        if(actor.getName().equals("Button1"))
           ship.addAction3d(Actions3d.moveBy(1f, 0f, 0f, 0.4f));
    }

    @Override
    public void onTouchDown(Actor actor){}

    @Override
    public void onTouchUp(){}

     @Override
    public void onDragged(){}

    @Override
    public void onGesture(GestureType type){}

    @Override
    public void onKeyTyped(char key){
    }
    
    boolean rightKey, leftKey, upKey, downKey, spaceKey;
    @Override
    public void onKeyUp(int keycode){
        if (keycode == Keys.LEFT) leftKey = false;
        if (keycode == Keys.RIGHT) rightKey = false;
        if (keycode == Keys.UP) upKey = false;
        if (keycode == Keys.DOWN) downKey = false;
        if (keycode == Keys.SPACE) spaceKey = false;
    }
    
    @Override
    public void onKeyDown(int keycode){
        if (keycode == Keys.LEFT) leftKey = true;
        if (keycode == Keys.RIGHT) rightKey = true;
        if (keycode == Keys.UP) upKey = true;
        if (keycode == Keys.DOWN) downKey = true;
        if (keycode == Keys.SPACE) spaceKey = true;
    }

    @Override
    public void onPause(){
    }
    
    @Override
    public void onResume(){
    }
        
    @Override
    public void onDispose(){
    }
}