From 58e3a123f3a8226cf0335c058d84110abc889e40 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Mon, 28 Oct 2013 18:12:15 +0400 Subject: [PATCH] refactor(all) --- src/ru/dmitriymx/game/Foxy.java | 1 + .../dmitriymx/game/{ => engine}/Sprite.java | 2 +- src/ru/dmitriymx/game/engine/Sprite2.java | 28 +++++ .../dmitriymx/game/{ => engine}/Texture.java | 2 +- src/ru/dmitriymx/game/mw/Prometheus.java | 17 +-- src/ru/dmitriymx/game/mw/Prometheus2.java | 105 ++++++++++++++++++ src/ru/dmitriymx/game/mw/TexturedObject.java | 13 +++ 7 files changed, 150 insertions(+), 18 deletions(-) rename src/ru/dmitriymx/game/{ => engine}/Sprite.java (94%) create mode 100644 src/ru/dmitriymx/game/engine/Sprite2.java rename src/ru/dmitriymx/game/{ => engine}/Texture.java (95%) create mode 100644 src/ru/dmitriymx/game/mw/Prometheus2.java create mode 100644 src/ru/dmitriymx/game/mw/TexturedObject.java diff --git a/src/ru/dmitriymx/game/Foxy.java b/src/ru/dmitriymx/game/Foxy.java index 1ce5d46..7a1fe5b 100644 --- a/src/ru/dmitriymx/game/Foxy.java +++ b/src/ru/dmitriymx/game/Foxy.java @@ -1,6 +1,7 @@ package ru.dmitriymx.game; import org.lwjgl.opengl.GL11; +import ru.dmitriymx.game.engine.Sprite; public class Foxy { private Sprite tex_idle, tex_run; diff --git a/src/ru/dmitriymx/game/Sprite.java b/src/ru/dmitriymx/game/engine/Sprite.java similarity index 94% rename from src/ru/dmitriymx/game/Sprite.java rename to src/ru/dmitriymx/game/engine/Sprite.java index c3a7165..50dcaad 100644 --- a/src/ru/dmitriymx/game/Sprite.java +++ b/src/ru/dmitriymx/game/engine/Sprite.java @@ -1,4 +1,4 @@ -package ru.dmitriymx.game; +package ru.dmitriymx.game.engine; import java.awt.image.BufferedImage; import java.io.InputStream; diff --git a/src/ru/dmitriymx/game/engine/Sprite2.java b/src/ru/dmitriymx/game/engine/Sprite2.java new file mode 100644 index 0000000..c73baf3 --- /dev/null +++ b/src/ru/dmitriymx/game/engine/Sprite2.java @@ -0,0 +1,28 @@ +package ru.dmitriymx.game.engine; + +import java.awt.image.BufferedImage; +import java.io.InputStream; + +public class Sprite2 extends Texture { + private int width_frame, height_frame; + private int count_frames; + private int[][] frames_coords; + + private void prepare_sprite(int width, int height){ + width_frame = width; + height_frame = height; + + count_frames = (int)(Math.floor(this.getWidth() / width_frame) * Math.floor(this.getHeight() / height_frame)); + frames_coords = new int[4][count_frames]; + } + + public Sprite2(BufferedImage image, int width, int height) { + super(image); + prepare_sprite(width, height); + } + + public Sprite2(InputStream stream, int width, int height) { + super(stream); + prepare_sprite(width, height); + } +} diff --git a/src/ru/dmitriymx/game/Texture.java b/src/ru/dmitriymx/game/engine/Texture.java similarity index 95% rename from src/ru/dmitriymx/game/Texture.java rename to src/ru/dmitriymx/game/engine/Texture.java index 14af649..bad6a64 100644 --- a/src/ru/dmitriymx/game/Texture.java +++ b/src/ru/dmitriymx/game/engine/Texture.java @@ -1,4 +1,4 @@ -package ru.dmitriymx.game; +package ru.dmitriymx.game.engine; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; diff --git a/src/ru/dmitriymx/game/mw/Prometheus.java b/src/ru/dmitriymx/game/mw/Prometheus.java index 2a5230e..0e0292a 100644 --- a/src/ru/dmitriymx/game/mw/Prometheus.java +++ b/src/ru/dmitriymx/game/mw/Prometheus.java @@ -3,7 +3,7 @@ package ru.dmitriymx.game.mw; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.GL11; -import ru.dmitriymx.game.Sprite; +import ru.dmitriymx.game.engine.Sprite; public class Prometheus { private Sprite body, gun; @@ -96,21 +96,6 @@ public class Prometheus { render_body(bodyFrame); render_gun(gunFrame); - /*int _x; - int _y; - if(!inverse) { - _x = (x + (19 * K)); - _y = (y + (5 * K)); - } else { - _x = (x + (29 * K)); - _y = (y + (5 * K)); - } - int mX = Mouse.getX(); - int mY = Display.getHeight() - Mouse.getY(); - float _a = (float)(Math.atan2(mY - _y, mX - _x) * 180/Math.PI); - draw_target(_x, _y, 0); - draw_quad(_x,_y,_a);*/ - if(state == 1){ if(!inverse){ if(!rigth){ diff --git a/src/ru/dmitriymx/game/mw/Prometheus2.java b/src/ru/dmitriymx/game/mw/Prometheus2.java new file mode 100644 index 0000000..7c63feb --- /dev/null +++ b/src/ru/dmitriymx/game/mw/Prometheus2.java @@ -0,0 +1,105 @@ +package ru.dmitriymx.game.mw; + +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.Display; +import org.lwjgl.opengl.GL11; +import ru.dmitriymx.game.engine.Sprite; + +public class Prometheus2 implements TexturedObject { + private final double _180_DIV_PI = 180/Math.PI; + private final int WIDTH, HEIGHT; + private int x, y = 0; + private Sprite body, gun; + + public Prometheus2(){ + WIDTH = 48; + HEIGHT = 32; + body = new Sprite(Prometheus2.class.getResourceAsStream("/ru/dmitriymx/game/mw-prometheus-01.png"), WIDTH, HEIGHT); + gun = new Sprite(Prometheus2.class.getResourceAsStream("/ru/dmitriymx/game/mw-prometheus-gun.png"), 48, 16); + } + + @Override + public int getX() { + return x; + } + + @Override + public int getY() { + return y; + } + + @Override + public int getWidth() { + return WIDTH; + } + + @Override + public int getHeight() { + return HEIGHT; + } + + @Override + public void setX(int value) { + this.x = value; + } + + @Override + public void setY(int value) { + this.y = value; + } + + @Override + public void render() { + GL11.glColor3f(1f, 1f, 1f); + + render_body(body.getFrame()); + render_gun(body.getFrame()); + } + + private void render_body(Sprite.Coords frame){ + body.bind(); + GL11.glPushMatrix(); + GL11.glTranslatef(x, y, 0); + + GL11.glBegin(GL11.GL_QUADS); + GL11.glTexCoord2f(body.floatX(frame.x1), body.floatY(frame.y1)); + GL11.glVertex2f(0, 0); + GL11.glTexCoord2f(body.floatX(frame.x2), body.floatY(frame.y1)); + GL11.glVertex2f(body.getWidthSprite(), 0); + GL11.glTexCoord2f(body.floatX(frame.x2), body.floatY(frame.y2)); + GL11.glVertex2f(body.getWidthSprite(), body.getHeightSprite()); + GL11.glTexCoord2f(body.floatX(frame.x1), body.floatY(frame.y2)); + GL11.glVertex2f(0, body.getHeightSprite()); + GL11.glEnd(); + + GL11.glPopMatrix(); + } + + private void render_gun(Sprite.Coords frame){ + int _x = x + 19; + int _y = y + 5; + int offcetX = -16; + int offcetY = -10; + int mX = Mouse.getX(); + int mY = Display.getHeight() - Mouse.getY(); + float angle = (float)(Math.atan2(mY - _y, mX - _x) * _180_DIV_PI); + + gun.bind(); + GL11.glPushMatrix(); + GL11.glTranslatef(_x, _y, 0); + GL11.glRotatef(angle, 0, 0, 1); + + GL11.glBegin(GL11.GL_QUADS); + GL11.glTexCoord2f(gun.floatX(frame.x1), gun.floatY(frame.y1)); + GL11.glVertex2f(offcetX, offcetY); + GL11.glTexCoord2f(gun.floatX(frame.x2), gun.floatY(frame.y1)); + GL11.glVertex2f(offcetX + gun.getWidthSprite(), offcetY); + GL11.glTexCoord2f(gun.floatX(frame.x2), gun.floatY(frame.y2)); + GL11.glVertex2f(offcetX + gun.getWidthSprite(), offcetY + gun.getHeightSprite()); + GL11.glTexCoord2f(gun.floatX(frame.x1), gun.floatY(frame.y2)); + GL11.glVertex2f(offcetX, offcetY + gun.getHeightSprite()); + GL11.glEnd(); + + GL11.glPopMatrix(); + } +} diff --git a/src/ru/dmitriymx/game/mw/TexturedObject.java b/src/ru/dmitriymx/game/mw/TexturedObject.java new file mode 100644 index 0000000..135a8d2 --- /dev/null +++ b/src/ru/dmitriymx/game/mw/TexturedObject.java @@ -0,0 +1,13 @@ +package ru.dmitriymx.game.mw; + +public interface TexturedObject { + public int getX(); + public int getY(); + public int getWidth(); + public int getHeight(); + + public void setX(int value); + public void setY(int value); + + public void render(); +}