├── .gitignore ├── README ├── star-assault-android ├── .classpath ├── .project ├── AndroidManifest.xml ├── assets │ └── images │ │ ├── block.png │ │ ├── bob_01.png │ │ ├── bob_02.png │ │ ├── bob_03.png │ │ ├── bob_04.png │ │ ├── bob_05.png │ │ ├── bob_06.png │ │ └── textures │ │ ├── textures.pack │ │ └── textures.png ├── libs │ ├── armeabi-v7a │ │ ├── libandroidgl20.so │ │ └── libgdx.so │ ├── armeabi │ │ ├── libandroidgl20.so │ │ └── libgdx.so │ └── gdx-backend-android.jar ├── proguard.cfg ├── project.properties ├── res │ ├── drawable-hdpi │ │ └── ic_launcher.png │ ├── drawable-ldpi │ │ └── ic_launcher.png │ ├── drawable-mdpi │ │ └── ic_launcher.png │ ├── layout │ │ └── main.xml │ └── values │ │ └── strings.xml └── src │ └── net │ └── obviam │ └── starassault │ └── StarAssaultActivity.java ├── star-assault-desktop ├── .classpath ├── .project ├── libs │ ├── gdx-backend-lwjgl-natives.jar │ ├── gdx-backend-lwjgl.jar │ └── gdx-natives.jar └── src │ └── net │ └── obviam │ └── starassault │ └── StarAssaultDesktop.java └── star-assault ├── .classpath ├── .project ├── libs ├── gdx-sources.jar └── gdx.jar └── src └── net └── obviam └── starassault ├── StarAssault.java ├── controller └── WorldController.java ├── model ├── Block.java ├── Bob.java └── World.java ├── screens └── GameScreen.java ├── utils └── TextureSetup.java └── view └── WorldRenderer.java /.gitignore: -------------------------------------------------------------------------------- 1 | star-assault/bin 2 | star-assault-android/bin 3 | star-assault-android/gen 4 | star-assault-desktop/bin 5 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | This is the code for the "Star Assault" project which is to serve as an 2 | accompaniament for the tutorial found here: 3 | http://obviam.net/index.php/getting-started-in-android-game-development-with-libgdx-create-a-working-prototype-in-a-day-tutorial-part-1 4 | 5 | There is no warranty whatsoever and is purely educational. 6 | 7 | Author: impaler@obviam.net 8 | Date: 2012-02 9 | 10 | Have fun learning! 11 | -------------------------------------------------------------------------------- /star-assault-android/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /star-assault-android/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | star-assault-android 4 | 5 | 6 | 7 | 8 | 9 | com.android.ide.eclipse.adt.ResourceManagerBuilder 10 | 11 | 12 | 13 | 14 | com.android.ide.eclipse.adt.PreCompilerBuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.jdt.core.javabuilder 20 | 21 | 22 | 23 | 24 | com.android.ide.eclipse.adt.ApkBuilder 25 | 26 | 27 | 28 | 29 | 30 | com.android.ide.eclipse.adt.AndroidNature 31 | org.eclipse.jdt.core.javanature 32 | 33 | 34 | -------------------------------------------------------------------------------- /star-assault-android/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 9 | 10 | 13 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /star-assault-android/assets/images/block.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/assets/images/block.png -------------------------------------------------------------------------------- /star-assault-android/assets/images/bob_01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/assets/images/bob_01.png -------------------------------------------------------------------------------- /star-assault-android/assets/images/bob_02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/assets/images/bob_02.png -------------------------------------------------------------------------------- /star-assault-android/assets/images/bob_03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/assets/images/bob_03.png -------------------------------------------------------------------------------- /star-assault-android/assets/images/bob_04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/assets/images/bob_04.png -------------------------------------------------------------------------------- /star-assault-android/assets/images/bob_05.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/assets/images/bob_05.png -------------------------------------------------------------------------------- /star-assault-android/assets/images/bob_06.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/assets/images/bob_06.png -------------------------------------------------------------------------------- /star-assault-android/assets/images/textures/textures.pack: -------------------------------------------------------------------------------- 1 | 2 | textures.png 3 | format: RGBA8888 4 | filter: Nearest,Nearest 5 | repeat: none 6 | block 7 | rotate: false 8 | xy: 1, 11 9 | size: 48, 48 10 | orig: 48, 48 11 | offset: 0, 0 12 | index: -1 13 | bob-01 14 | rotate: false 15 | xy: 51, 31 16 | size: 24, 28 17 | orig: 24, 28 18 | offset: 0, 0 19 | index: -1 20 | bob-02 21 | rotate: false 22 | xy: 77, 31 23 | size: 24, 28 24 | orig: 24, 28 25 | offset: 0, 0 26 | index: -1 27 | bob-05 28 | rotate: false 29 | xy: 103, 31 30 | size: 24, 28 31 | orig: 24, 28 32 | offset: 0, 0 33 | index: -1 34 | bob-03 35 | rotate: false 36 | xy: 51, 3 37 | size: 24, 26 38 | orig: 24, 26 39 | offset: 0, 0 40 | index: -1 41 | bob-04 42 | rotate: false 43 | xy: 77, 3 44 | size: 24, 26 45 | orig: 24, 26 46 | offset: 0, 0 47 | index: -1 48 | bob-06 49 | rotate: false 50 | xy: 103, 1 51 | size: 24, 28 52 | orig: 24, 28 53 | offset: 0, 0 54 | index: -1 55 | -------------------------------------------------------------------------------- /star-assault-android/assets/images/textures/textures.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/assets/images/textures/textures.png -------------------------------------------------------------------------------- /star-assault-android/libs/armeabi-v7a/libandroidgl20.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/libs/armeabi-v7a/libandroidgl20.so -------------------------------------------------------------------------------- /star-assault-android/libs/armeabi-v7a/libgdx.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/libs/armeabi-v7a/libgdx.so -------------------------------------------------------------------------------- /star-assault-android/libs/armeabi/libandroidgl20.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/libs/armeabi/libandroidgl20.so -------------------------------------------------------------------------------- /star-assault-android/libs/armeabi/libgdx.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/libs/armeabi/libgdx.so -------------------------------------------------------------------------------- /star-assault-android/libs/gdx-backend-android.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/libs/gdx-backend-android.jar -------------------------------------------------------------------------------- /star-assault-android/proguard.cfg: -------------------------------------------------------------------------------- 1 | -optimizationpasses 5 2 | -dontusemixedcaseclassnames 3 | -dontskipnonpubliclibraryclasses 4 | -dontpreverify 5 | -verbose 6 | -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 7 | 8 | -keep public class * extends android.app.Activity 9 | -keep public class * extends android.app.Application 10 | -keep public class * extends android.app.Service 11 | -keep public class * extends android.content.BroadcastReceiver 12 | -keep public class * extends android.content.ContentProvider 13 | -keep public class * extends android.app.backup.BackupAgentHelper 14 | -keep public class * extends android.preference.Preference 15 | -keep public class com.android.vending.licensing.ILicensingService 16 | 17 | -keepclasseswithmembernames class * { 18 | native ; 19 | } 20 | 21 | -keepclasseswithmembers class * { 22 | public (android.content.Context, android.util.AttributeSet); 23 | } 24 | 25 | -keepclasseswithmembers class * { 26 | public (android.content.Context, android.util.AttributeSet, int); 27 | } 28 | 29 | -keepclassmembers class * extends android.app.Activity { 30 | public void *(android.view.View); 31 | } 32 | 33 | -keepclassmembers enum * { 34 | public static **[] values(); 35 | public static ** valueOf(java.lang.String); 36 | } 37 | 38 | -keep class * implements android.os.Parcelable { 39 | public static final android.os.Parcelable$Creator *; 40 | } 41 | -------------------------------------------------------------------------------- /star-assault-android/project.properties: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by Android Tools. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file must be checked in Version Control Systems. 5 | # 6 | # To customize properties used by the Ant build system use, 7 | # "ant.properties", and override values to adapt the script to your 8 | # project structure. 9 | 10 | # Project target. 11 | target=android-7 12 | -------------------------------------------------------------------------------- /star-assault-android/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /star-assault-android/res/drawable-ldpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/res/drawable-ldpi/ic_launcher.png -------------------------------------------------------------------------------- /star-assault-android/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-android/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /star-assault-android/res/layout/main.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /star-assault-android/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Hello World, StarAssaultActivity! 5 | star-assault-android 6 | 7 | -------------------------------------------------------------------------------- /star-assault-android/src/net/obviam/starassault/StarAssaultActivity.java: -------------------------------------------------------------------------------- 1 | package net.obviam.starassault; 2 | 3 | import android.os.Bundle; 4 | 5 | import com.badlogic.gdx.backends.android.AndroidApplication; 6 | import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration; 7 | 8 | public class StarAssaultActivity extends AndroidApplication { 9 | /** Called when the activity is first created. */ 10 | @Override 11 | public void onCreate(Bundle savedInstanceState) { 12 | super.onCreate(savedInstanceState); 13 | AndroidApplicationConfiguration config = new AndroidApplicationConfiguration(); 14 | config.useAccelerometer = false; 15 | config.useCompass = false; 16 | config.useWakelock = true; 17 | config.useGL20 = true; 18 | initialize(new StarAssault(), config); 19 | } 20 | } -------------------------------------------------------------------------------- /star-assault-desktop/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /star-assault-desktop/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | star-assault-desktop 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | 19 | assets 20 | 2 21 | /Users/tamas/Documents/workspace.juno/obviam/star-assault/star-assault-android/assets 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /star-assault-desktop/libs/gdx-backend-lwjgl-natives.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-desktop/libs/gdx-backend-lwjgl-natives.jar -------------------------------------------------------------------------------- /star-assault-desktop/libs/gdx-backend-lwjgl.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-desktop/libs/gdx-backend-lwjgl.jar -------------------------------------------------------------------------------- /star-assault-desktop/libs/gdx-natives.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault-desktop/libs/gdx-natives.jar -------------------------------------------------------------------------------- /star-assault-desktop/src/net/obviam/starassault/StarAssaultDesktop.java: -------------------------------------------------------------------------------- 1 | package net.obviam.starassault; 2 | 3 | import com.badlogic.gdx.backends.lwjgl.LwjglApplication; 4 | 5 | public class StarAssaultDesktop { 6 | 7 | public static void main(String[] args) { 8 | new LwjglApplication(new StarAssault(), "Star Assault", 480, 320, true); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /star-assault/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /star-assault/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | star-assault 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /star-assault/libs/gdx-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault/libs/gdx-sources.jar -------------------------------------------------------------------------------- /star-assault/libs/gdx.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/obviam/star-assault/f2dbcb686cd1092490f232a7300e9b2201c48a91/star-assault/libs/gdx.jar -------------------------------------------------------------------------------- /star-assault/src/net/obviam/starassault/StarAssault.java: -------------------------------------------------------------------------------- 1 | package net.obviam.starassault; 2 | 3 | import net.obviam.starassault.screens.GameScreen; 4 | 5 | import com.badlogic.gdx.Game; 6 | 7 | public class StarAssault extends Game { 8 | 9 | @Override 10 | public void create() { 11 | setScreen(new GameScreen()); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /star-assault/src/net/obviam/starassault/controller/WorldController.java: -------------------------------------------------------------------------------- 1 | package net.obviam.starassault.controller; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import net.obviam.starassault.model.Bob; 7 | import net.obviam.starassault.model.Bob.State; 8 | import net.obviam.starassault.model.World; 9 | 10 | public class WorldController { 11 | 12 | enum Keys { 13 | LEFT, RIGHT, JUMP, FIRE 14 | } 15 | 16 | private World world; 17 | private Bob bob; 18 | 19 | static Map keys = new HashMap(); 20 | static { 21 | keys.put(Keys.LEFT, false); 22 | keys.put(Keys.RIGHT, false); 23 | keys.put(Keys.JUMP, false); 24 | keys.put(Keys.FIRE, false); 25 | }; 26 | 27 | public WorldController(World world) { 28 | this.world = world; 29 | this.bob = world.getBob(); 30 | } 31 | 32 | // ** Key presses and touches **************** // 33 | 34 | public void leftPressed() { 35 | keys.get(keys.put(Keys.LEFT, true)); 36 | } 37 | 38 | public void rightPressed() { 39 | keys.get(keys.put(Keys.RIGHT, true)); 40 | } 41 | 42 | public void jumpPressed() { 43 | keys.get(keys.put(Keys.JUMP, true)); 44 | } 45 | 46 | public void firePressed() { 47 | keys.get(keys.put(Keys.FIRE, false)); 48 | } 49 | 50 | public void leftReleased() { 51 | keys.get(keys.put(Keys.LEFT, false)); 52 | } 53 | 54 | public void rightReleased() { 55 | keys.get(keys.put(Keys.RIGHT, false)); 56 | } 57 | 58 | public void jumpReleased() { 59 | keys.get(keys.put(Keys.JUMP, false)); 60 | } 61 | 62 | public void fireReleased() { 63 | keys.get(keys.put(Keys.FIRE, false)); 64 | } 65 | 66 | /** The main update method **/ 67 | public void update(float delta) { 68 | processInput(); 69 | bob.update(delta); 70 | } 71 | 72 | /** Change Bob's state and parameters based on input controls **/ 73 | private void processInput() { 74 | if (keys.get(Keys.LEFT)) { 75 | // left is pressed 76 | bob.setFacingLeft(true); 77 | bob.setState(State.WALKING); 78 | bob.getVelocity().x = -Bob.SPEED; 79 | } 80 | if (keys.get(Keys.RIGHT)) { 81 | // left is pressed 82 | bob.setFacingLeft(false); 83 | bob.setState(State.WALKING); 84 | bob.getVelocity().x = Bob.SPEED; 85 | } 86 | // need to check if both or none direction are pressed, then Bob is idle 87 | if ((keys.get(Keys.LEFT) && keys.get(Keys.RIGHT)) || 88 | (!keys.get(Keys.LEFT) && !(keys.get(Keys.RIGHT)))) { 89 | bob.setState(State.IDLE); 90 | // acceleration is 0 on the x 91 | bob.getAcceleration().x = 0; 92 | // horizontal speed is 0 93 | bob.getVelocity().x = 0; 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /star-assault/src/net/obviam/starassault/model/Block.java: -------------------------------------------------------------------------------- 1 | package net.obviam.starassault.model; 2 | 3 | import com.badlogic.gdx.math.Rectangle; 4 | import com.badlogic.gdx.math.Vector2; 5 | 6 | public class Block { 7 | 8 | public static final float SIZE = 1f; 9 | 10 | Vector2 position = new Vector2(); 11 | Rectangle bounds = new Rectangle(); 12 | 13 | public Block(Vector2 pos) { 14 | this.position = pos; 15 | this.bounds.width = SIZE; 16 | this.bounds.height = SIZE; 17 | } 18 | 19 | public Vector2 getPosition() { 20 | return position; 21 | } 22 | 23 | public Rectangle getBounds() { 24 | return bounds; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /star-assault/src/net/obviam/starassault/model/Bob.java: -------------------------------------------------------------------------------- 1 | package net.obviam.starassault.model; 2 | 3 | import com.badlogic.gdx.math.Rectangle; 4 | import com.badlogic.gdx.math.Vector2; 5 | 6 | public class Bob { 7 | 8 | public enum State { 9 | IDLE, WALKING, JUMPING, DYING 10 | } 11 | 12 | public static final float SPEED = 4f; // unit per second 13 | public static final float JUMP_VELOCITY = 4f; 14 | public static final float SIZE = 0.5f; // half a unit 15 | 16 | Vector2 position = new Vector2(); 17 | Vector2 acceleration = new Vector2(); 18 | Vector2 velocity = new Vector2(); 19 | Rectangle bounds = new Rectangle(); 20 | State state = State.IDLE; 21 | boolean facingLeft = true; 22 | float stateTime = 0; 23 | 24 | public Bob(Vector2 position) { 25 | this.position = position; 26 | this.bounds.height = SIZE; 27 | this.bounds.width = SIZE; 28 | } 29 | 30 | 31 | public boolean isFacingLeft() { 32 | return facingLeft; 33 | } 34 | 35 | public void setFacingLeft(boolean facingLeft) { 36 | this.facingLeft = facingLeft; 37 | } 38 | 39 | public Vector2 getPosition() { 40 | return position; 41 | } 42 | 43 | public Vector2 getAcceleration() { 44 | return acceleration; 45 | } 46 | 47 | public Vector2 getVelocity() { 48 | return velocity; 49 | } 50 | 51 | public Rectangle getBounds() { 52 | return bounds; 53 | } 54 | 55 | public State getState() { 56 | return state; 57 | } 58 | 59 | public void setState(State newState) { 60 | this.state = newState; 61 | } 62 | 63 | public float getStateTime() { 64 | return stateTime; 65 | } 66 | 67 | 68 | public void update(float delta) { 69 | stateTime += delta; 70 | position.add(velocity.tmp().mul(delta)); 71 | } 72 | 73 | } 74 | -------------------------------------------------------------------------------- /star-assault/src/net/obviam/starassault/model/World.java: -------------------------------------------------------------------------------- 1 | package net.obviam.starassault.model; 2 | 3 | import com.badlogic.gdx.math.Vector2; 4 | import com.badlogic.gdx.utils.Array; 5 | 6 | public class World { 7 | 8 | /** The blocks making up the world **/ 9 | Array blocks = new Array(); 10 | /** Our player controlled hero **/ 11 | Bob bob; 12 | 13 | // Getters ----------- 14 | public Array getBlocks() { 15 | return blocks; 16 | } 17 | public Bob getBob() { 18 | return bob; 19 | } 20 | // -------------------- 21 | 22 | public World() { 23 | createDemoWorld(); 24 | } 25 | 26 | private void createDemoWorld() { 27 | bob = new Bob(new Vector2(7, 2)); 28 | 29 | for (int i = 0; i < 10; i++) { 30 | blocks.add(new Block(new Vector2(i, 0))); 31 | blocks.add(new Block(new Vector2(i, 6))); 32 | if (i > 2) 33 | blocks.add(new Block(new Vector2(i, 1))); 34 | } 35 | blocks.add(new Block(new Vector2(9, 2))); 36 | blocks.add(new Block(new Vector2(9, 3))); 37 | blocks.add(new Block(new Vector2(9, 4))); 38 | blocks.add(new Block(new Vector2(9, 5))); 39 | 40 | blocks.add(new Block(new Vector2(6, 3))); 41 | blocks.add(new Block(new Vector2(6, 4))); 42 | blocks.add(new Block(new Vector2(6, 5))); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /star-assault/src/net/obviam/starassault/screens/GameScreen.java: -------------------------------------------------------------------------------- 1 | package net.obviam.starassault.screens; 2 | 3 | import net.obviam.starassault.controller.WorldController; 4 | import net.obviam.starassault.model.World; 5 | import net.obviam.starassault.view.WorldRenderer; 6 | 7 | import com.badlogic.gdx.Application.ApplicationType; 8 | import com.badlogic.gdx.Gdx; 9 | import com.badlogic.gdx.Input.Keys; 10 | import com.badlogic.gdx.InputProcessor; 11 | import com.badlogic.gdx.Screen; 12 | import com.badlogic.gdx.graphics.GL10; 13 | 14 | public class GameScreen implements Screen, InputProcessor { 15 | 16 | private World world; 17 | private WorldRenderer renderer; 18 | private WorldController controller; 19 | 20 | private int width, height; 21 | 22 | @Override 23 | public void show() { 24 | world = new World(); 25 | renderer = new WorldRenderer(world, true); 26 | controller = new WorldController(world); 27 | Gdx.input.setInputProcessor(this); 28 | } 29 | 30 | @Override 31 | public void render(float delta) { 32 | Gdx.gl.glClearColor(0.1f, 0.1f, 0.1f, 1); 33 | Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 34 | 35 | controller.update(delta); 36 | renderer.render(); 37 | } 38 | 39 | @Override 40 | public void resize(int width, int height) { 41 | renderer.setSize(width, height); 42 | this.width = width; 43 | this.height = height; 44 | } 45 | 46 | @Override 47 | public void hide() { 48 | Gdx.input.setInputProcessor(null); 49 | } 50 | 51 | @Override 52 | public void pause() { 53 | // TODO Auto-generated method stub 54 | } 55 | 56 | @Override 57 | public void resume() { 58 | // TODO Auto-generated method stub 59 | } 60 | 61 | @Override 62 | public void dispose() { 63 | Gdx.input.setInputProcessor(null); 64 | } 65 | 66 | // * InputProcessor methods ***************************// 67 | 68 | @Override 69 | public boolean keyDown(int keycode) { 70 | if (keycode == Keys.LEFT) 71 | controller.leftPressed(); 72 | if (keycode == Keys.RIGHT) 73 | controller.rightPressed(); 74 | if (keycode == Keys.Z) 75 | controller.jumpPressed(); 76 | if (keycode == Keys.X) 77 | controller.firePressed(); 78 | return true; 79 | } 80 | 81 | @Override 82 | public boolean keyUp(int keycode) { 83 | if (keycode == Keys.LEFT) 84 | controller.leftReleased(); 85 | if (keycode == Keys.RIGHT) 86 | controller.rightReleased(); 87 | if (keycode == Keys.Z) 88 | controller.jumpReleased(); 89 | if (keycode == Keys.X) 90 | controller.fireReleased(); 91 | return true; 92 | } 93 | 94 | @Override 95 | public boolean keyTyped(char character) { 96 | // TODO Auto-generated method stub 97 | return false; 98 | } 99 | 100 | @Override 101 | public boolean touchDown(int x, int y, int pointer, int button) { 102 | if (!Gdx.app.getType().equals(ApplicationType.Android)) 103 | return false; 104 | if (x < width / 2 && y > height / 2) { 105 | controller.leftPressed(); 106 | } 107 | if (x > width / 2 && y > height / 2) { 108 | controller.rightPressed(); 109 | } 110 | return true; 111 | } 112 | 113 | @Override 114 | public boolean touchUp(int x, int y, int pointer, int button) { 115 | if (!Gdx.app.getType().equals(ApplicationType.Android)) 116 | return false; 117 | if (x < width / 2 && y > height / 2) { 118 | controller.leftReleased(); 119 | } 120 | if (x > width / 2 && y > height / 2) { 121 | controller.rightReleased(); 122 | } 123 | return true; 124 | } 125 | 126 | @Override 127 | public boolean touchDragged(int x, int y, int pointer) { 128 | // TODO Auto-generated method stub 129 | return false; 130 | } 131 | 132 | @Override 133 | public boolean touchMoved(int x, int y) { 134 | // TODO Auto-generated method stub 135 | return false; 136 | } 137 | 138 | @Override 139 | public boolean scrolled(int amount) { 140 | // TODO Auto-generated method stub 141 | return false; 142 | } 143 | 144 | 145 | } 146 | -------------------------------------------------------------------------------- /star-assault/src/net/obviam/starassault/utils/TextureSetup.java: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | */ 4 | package net.obviam.starassault.utils; 5 | 6 | //import com.badlogic.gdx.tools.imagepacker.TexturePacker2; 7 | 8 | 9 | /** 10 | * @author tamas 11 | * 12 | */ 13 | public class TextureSetup { 14 | 15 | public static void main(String[] args) { 16 | // TexturePacker2.process("/Users/tamas/tmp/star-guard-assets/", "/Users/tamas/tmp/sga/", "textures.pack"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /star-assault/src/net/obviam/starassault/view/WorldRenderer.java: -------------------------------------------------------------------------------- 1 | package net.obviam.starassault.view; 2 | 3 | import net.obviam.starassault.model.Block; 4 | import net.obviam.starassault.model.Bob; 5 | import net.obviam.starassault.model.Bob.State; 6 | import net.obviam.starassault.model.World; 7 | 8 | import com.badlogic.gdx.Gdx; 9 | import com.badlogic.gdx.graphics.Color; 10 | import com.badlogic.gdx.graphics.OrthographicCamera; 11 | import com.badlogic.gdx.graphics.g2d.Animation; 12 | import com.badlogic.gdx.graphics.g2d.SpriteBatch; 13 | import com.badlogic.gdx.graphics.g2d.TextureAtlas; 14 | import com.badlogic.gdx.graphics.g2d.TextureRegion; 15 | import com.badlogic.gdx.graphics.glutils.ShapeRenderer; 16 | import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType; 17 | import com.badlogic.gdx.math.Rectangle; 18 | 19 | public class WorldRenderer { 20 | 21 | private static final float CAMERA_WIDTH = 10f; 22 | private static final float CAMERA_HEIGHT = 7f; 23 | private static final float RUNNING_FRAME_DURATION = 0.06f; 24 | 25 | private World world; 26 | private OrthographicCamera cam; 27 | 28 | /** for debug rendering **/ 29 | ShapeRenderer debugRenderer = new ShapeRenderer(); 30 | 31 | /** Textures **/ 32 | private TextureRegion bobIdleLeft; 33 | private TextureRegion bobIdleRight; 34 | private TextureRegion blockTexture; 35 | private TextureRegion bobFrame; 36 | 37 | /** Animations **/ 38 | private Animation walkLeftAnimation; 39 | private Animation walkRightAnimation; 40 | 41 | private SpriteBatch spriteBatch; 42 | private boolean debug = false; 43 | private int width; 44 | private int height; 45 | private float ppuX; // pixels per unit on the X axis 46 | private float ppuY; // pixels per unit on the Y axis 47 | public void setSize (int w, int h) { 48 | this.width = w; 49 | this.height = h; 50 | ppuX = (float)width / CAMERA_WIDTH; 51 | ppuY = (float)height / CAMERA_HEIGHT; 52 | } 53 | 54 | public WorldRenderer(World world, boolean debug) { 55 | this.world = world; 56 | this.cam = new OrthographicCamera(CAMERA_WIDTH, CAMERA_HEIGHT); 57 | this.cam.position.set(CAMERA_WIDTH / 2f, CAMERA_HEIGHT / 2f, 0); 58 | this.cam.update(); 59 | this.debug = debug; 60 | spriteBatch = new SpriteBatch(); 61 | loadTextures(); 62 | } 63 | 64 | private void loadTextures() { 65 | TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("images/textures/textures.pack")); 66 | bobIdleLeft = atlas.findRegion("bob-01"); 67 | bobIdleRight = new TextureRegion(bobIdleLeft); 68 | bobIdleRight.flip(true, false); 69 | blockTexture = atlas.findRegion("block"); 70 | TextureRegion[] walkLeftFrames = new TextureRegion[5]; 71 | for (int i = 0; i < 5; i++) { 72 | walkLeftFrames[i] = atlas.findRegion("bob-0" + (i + 2)); 73 | } 74 | walkLeftAnimation = new Animation(RUNNING_FRAME_DURATION, walkLeftFrames); 75 | 76 | TextureRegion[] walkRightFrames = new TextureRegion[5]; 77 | 78 | for (int i = 0; i < 5; i++) { 79 | walkRightFrames[i] = new TextureRegion(walkLeftFrames[i]); 80 | walkRightFrames[i].flip(true, false); 81 | } 82 | walkRightAnimation = new Animation(RUNNING_FRAME_DURATION, walkRightFrames); 83 | } 84 | 85 | 86 | public void render() { 87 | spriteBatch.begin(); 88 | drawBlocks(); 89 | drawBob(); 90 | spriteBatch.end(); 91 | if (debug) 92 | drawDebug(); 93 | } 94 | 95 | 96 | private void drawBlocks() { 97 | for (Block block : world.getBlocks()) { 98 | spriteBatch.draw(blockTexture, block.getPosition().x * ppuX, block.getPosition().y * ppuY, Block.SIZE * ppuX, Block.SIZE * ppuY); 99 | } 100 | } 101 | 102 | private void drawBob() { 103 | Bob bob = world.getBob(); 104 | bobFrame = bob.isFacingLeft() ? bobIdleLeft : bobIdleRight; 105 | if(bob.getState().equals(State.WALKING)) { 106 | bobFrame = bob.isFacingLeft() ? walkLeftAnimation.getKeyFrame(bob.getStateTime(), true) : walkRightAnimation.getKeyFrame(bob.getStateTime(), true); 107 | } 108 | spriteBatch.draw(bobFrame, bob.getPosition().x * ppuX, bob.getPosition().y * ppuY, Bob.SIZE * ppuX, Bob.SIZE * ppuY); 109 | } 110 | 111 | private void drawDebug() { 112 | // render blocks 113 | debugRenderer.setProjectionMatrix(cam.combined); 114 | debugRenderer.begin(ShapeType.Rectangle); 115 | for (Block block : world.getBlocks()) { 116 | Rectangle rect = block.getBounds(); 117 | float x1 = block.getPosition().x + rect.x; 118 | float y1 = block.getPosition().y + rect.y; 119 | debugRenderer.setColor(new Color(1, 0, 0, 1)); 120 | debugRenderer.rect(x1, y1, rect.width, rect.height); 121 | } 122 | // render Bob 123 | Bob bob = world.getBob(); 124 | Rectangle rect = bob.getBounds(); 125 | float x1 = bob.getPosition().x + rect.x; 126 | float y1 = bob.getPosition().y + rect.y; 127 | debugRenderer.setColor(new Color(0, 1, 0, 1)); 128 | debugRenderer.rect(x1, y1, rect.width, rect.height); 129 | debugRenderer.end(); 130 | } 131 | } 132 | --------------------------------------------------------------------------------