diff --git a/src/ru/dmitriymx/game/Main.java b/src/ru/dmitriymx/game/Main.java
index fae5a23..b41f462 100644
--- a/src/ru/dmitriymx/game/Main.java
+++ b/src/ru/dmitriymx/game/Main.java
@@ -8,8 +8,7 @@ import org.lwjgl.opengl.GL11;
import ru.dmitriymx.game.mw.Prometheus;
public class Main {
- //private Foxy foxy;
- private Prometheus mech;
+ private Prometheus mech;
private void init_display(int width, int height){
try {
@@ -36,31 +35,18 @@ public class Main {
}
private void render(){
- while(Keyboard.next()){
- if(Keyboard.getEventKey() == Keyboard.KEY_LEFT){
- if(Keyboard.getEventKeyState()){
- mech.setState(1);
- mech.setRigthRun(true);
- } else {
- mech.setState(0);
- }
- } else if (Keyboard.getEventKey() == Keyboard.KEY_RIGHT){
- if(Keyboard.getEventKeyState()){
- mech.setState(1);
- mech.setRigthRun(false);
- } else {
- mech.setState(0);
- }
- }
- }
+ if(Keyboard.isKeyDown(Keyboard.KEY_LEFT)){
+ mech.move(-mech.getSpeed(), 0);
+ mech.setRun(true);
+ }
+ else if(Keyboard.isKeyDown(Keyboard.KEY_RIGHT)){
+ mech.move(mech.getSpeed(), 0);
+ mech.setRun(true);
+ }
+ else {
+ mech.setRun(false);
+ }
- if(mech.getState() == 1){
- if(mech.getRigthRun()){
- mech.setX(mech.getX() - mech.getSpeed());
- } else {
- mech.setX(mech.getX() + mech.getSpeed());
- }
- }
mech.render();
}
@@ -68,8 +54,8 @@ public class Main {
init_display(width, height);
init_opengl(width, height);
- mech = new Prometheus();
- mech.setY(Display.getHeight() - (mech.getHeight()*4));
+ mech = new Prometheus();
+ mech.setY(Display.getHeight() - mech.getHeight());
while(!Display.isCloseRequested()){
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
diff --git a/src/ru/dmitriymx/game/mw/Prometheus.java b/src/ru/dmitriymx/game/mw/Prometheus.java
index 0e0292a..f549b3d 100644
--- a/src/ru/dmitriymx/game/mw/Prometheus.java
+++ b/src/ru/dmitriymx/game/mw/Prometheus.java
@@ -5,298 +5,181 @@ import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.GL11;
import ru.dmitriymx.game.engine.Sprite;
-public class Prometheus {
+public class Prometheus implements TexturedObject {
+ public static int K = 4;
+ private final double _180_DIV_PI = 180/Math.PI;
+ private final int WIDTH, HEIGHT;
+ private final int SPEED = 2 * K;
+ private int x, y = 0;
private Sprite body, gun;
- private int x, y;
- private int width, height;
- private int state;
- private boolean inverse = false;
- private final int K = 4;
- private final int speed = 2 * K;
- private boolean rigth = true;
+ private boolean sprite_inverse = false;
+ private boolean is_run = false;
+ private boolean run_left = false;
public Prometheus(){
- x = y = 0;
- width = 48;
- height = 32;
- body = new Sprite(Prometheus.class.getResourceAsStream("/ru/dmitriymx/game/mw-prometheus-01.png"), width, height);
- gun = new Sprite(Prometheus.class.getResourceAsStream("/ru/dmitriymx/game/mw-prometheus-gun.png"), 48, 16);
- setState(0);
+ WIDTH = 48;
+ HEIGHT = 32;
+ body = new Sprite(Prometheus.class.getResourceAsStream("/ru/dmitriymx/game/mw-prometheus-01.png"), WIDTH, HEIGHT);
+ gun = new Sprite(Prometheus.class.getResourceAsStream("/ru/dmitriymx/game/mw-prometheus-gun.png"), 48, 16);
}
- /**
- * Разворачивание текстуры в другую сторону
- * @param value false=вправо, true=влево
- */
- public void setInverse(boolean value){
- inverse = value;
+ @Override
+ public int getX() {
+ return x;
}
- /**
- * Куда развернута текстура
- * @return false=вправо, true=влево
- */
- public boolean getInverse(){
- return inverse;
- }
+ @Override
+ public int getY() {
+ return y;
+ }
- /**
- * Установка состояние персонажа.
- * 0 - idle - стоит на месте
- * 1 - run - бежит
- */
- public void setState(int value){
- state = value;
- if(state == 0){
- body.setFrame(0);
- gun.setFrame(0);
- } else {
- body.setFrame(1);
- gun.setFrame(1);
- }
- }
+ @Override
+ public int getWidth() {
+ return WIDTH * K;
+ }
- /**
- * Ссостояние персонажа.
- * 0 - idle - стоит на месте
- * 1 - run - бежит
- */
- public int getState(){
- return state;
- }
+ @Override
+ public int getHeight() {
+ return HEIGHT * K;
+ }
- public void setX(int value){
- x = value;
- }
+ @Override
+ public void setX(int value) {
+ this.x = value;
+ }
- public int getX(){
- return x;
- }
+ @Override
+ public void setY(int value) {
+ this.y = value;
+ }
- public void setY(int value){
- y = value;
- }
+ @Override
+ public void render() {
+ int _x = get_center_x();
+ if(_x > Mouse.getX()){
+ sprite_inverse = true;
+ }
+ else if(_x < Mouse.getX()){
+ sprite_inverse = false;
+ }
- public int getY(){
- return y;
- }
+ if(is_run){
+ if((!run_left && !sprite_inverse) || (run_left && sprite_inverse)){
+ body.nextFrame();
+ gun.nextFrame();
+ }
+ else if((run_left && !sprite_inverse) || (!run_left && sprite_inverse)){
+ body.prevFrame();
+ gun.prevFrame();
+ }
+ }
- public void render(){
- Sprite.Coords bodyFrame = body.getFrame();
- Sprite.Coords gunFrame = gun.getFrame();
+ GL11.glColor3f(1f, 1f, 1f);
+ render_body(body.getFrame());
+ render_gun(gun.getFrame());
+ }
- GL11.glColor3f(1f, 1f, 1f);
+ @Override
+ public void move(int oX, int oY) {
+ this.x += oX;
+ this.y += oY;
- if(!inverse && (get_center_x() > Mouse.getX())){
- inverse = true;
- } else if(inverse && (get_center_x() < Mouse.getX())) {
- inverse = false;
- }
+ if(oX < 0){
+ run_left = true;
+ } else {
+ run_left = false;
+ }
+ }
- render_body(bodyFrame);
- render_gun(gunFrame);
+ public int getSpeed(){
+ return SPEED;
+ }
- if(state == 1){
- if(!inverse){
- if(!rigth){
- body.nextFrame();
- gun.nextFrame();
- }else{
- body.prevFrame();
- gun.prevFrame();
- }
- } else {
- if(rigth){
- body.nextFrame();
- gun.nextFrame();
- }else{
- body.prevFrame();
- gun.prevFrame();
- }
- }
- }
- }
+ public void setRun(boolean value){
+ is_run = value;
- private void render_body(Sprite.Coords frame){
- body.bind();
+ if(!value){
+ body.setFrame(0);
+ gun.setFrame(0);
+ }
+ }
- GL11.glPushMatrix();
- GL11.glTranslatef(x,y,0);
+ private void render_body(Sprite.Coords frame){
+ body.bind();
+ GL11.glPushMatrix();
+ GL11.glTranslatef(x, y, 0);
- GL11.glBegin(GL11.GL_QUADS);
- if(inverse){
- GL11.glTexCoord2f(body.floatX(frame.x2), body.floatY(frame.y1));
- GL11.glVertex2f(0, 0);
+ GL11.glBegin(GL11.GL_QUADS);
+ if(!sprite_inverse){
+ 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() * K, 0);
+ GL11.glTexCoord2f(body.floatX(frame.x2), body.floatY(frame.y2));
+ GL11.glVertex2f(body.getWidthSprite() * K, body.getHeightSprite() * K);
+ GL11.glTexCoord2f(body.floatX(frame.x1), body.floatY(frame.y2));
+ GL11.glVertex2f(0, body.getHeightSprite() * K);
+ } else {
+ GL11.glTexCoord2f(body.floatX(frame.x2), body.floatY(frame.y1));
+ GL11.glVertex2f(0, 0);
+ GL11.glTexCoord2f(body.floatX(frame.x1), body.floatY(frame.y1));
+ GL11.glVertex2f(body.getWidthSprite() * K, 0);
+ GL11.glTexCoord2f(body.floatX(frame.x1), body.floatY(frame.y2));
+ GL11.glVertex2f(body.getWidthSprite() * K, body.getHeightSprite() * K);
+ GL11.glTexCoord2f(body.floatX(frame.x2), body.floatY(frame.y2));
+ GL11.glVertex2f(0, body.getHeightSprite() * K);
+ }
+ GL11.glEnd();
- GL11.glTexCoord2f(body.floatX(frame.x1), body.floatY(frame.y1));
- GL11.glVertex2f(body.getWidthSprite()*K, 0);
+ GL11.glPopMatrix();
+ }
- GL11.glTexCoord2f(body.floatX(frame.x1), body.floatY(frame.y2));
- GL11.glVertex2f(body.getWidthSprite()*K, body.getHeightSprite()*K);
+ private void render_gun(Sprite.Coords frame){
+ int _x;
+ int _y = y + (5 * K);
+ if(!sprite_inverse){
+ _x = x + (19 * K);
- GL11.glTexCoord2f(body.floatX(frame.x2), body.floatY(frame.y2));
- GL11.glVertex2f(0, body.getHeightSprite()*K);
- } else {
- GL11.glTexCoord2f(body.floatX(frame.x1), body.floatY(frame.y1));
- GL11.glVertex2f(0, 0);
+ } else {
+ _x = x + (29 * K);
+ }
+ int offcetX = -10 * K;
+ int offcetY = -16 * K;
+ int mX = Mouse.getX();
+ int mY = Display.getHeight() - Mouse.getY();
+ float angle = (float)(Math.atan2(mY - _y, mX - _x) * _180_DIV_PI);
- GL11.glTexCoord2f(body.floatX(frame.x2), body.floatY(frame.y1));
- GL11.glVertex2f(body.getWidthSprite()*K, 0);
+ gun.bind();
+ GL11.glPushMatrix();
+ GL11.glTranslatef(_x, _y, 0);
+ GL11.glRotatef(angle, 0, 0, 1);
- GL11.glTexCoord2f(body.floatX(frame.x2), body.floatY(frame.y2));
- GL11.glVertex2f(body.getWidthSprite()*K, body.getHeightSprite()*K);
+ GL11.glBegin(GL11.GL_QUADS);
+ if(!sprite_inverse){
+ 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() * K, offcetY);
+ GL11.glTexCoord2f(gun.floatX(frame.x2), gun.floatY(frame.y2));
+ GL11.glVertex2f(offcetX + gun.getWidthSprite() * K, offcetY + gun.getHeightSprite() * K);
+ GL11.glTexCoord2f(gun.floatX(frame.x1), gun.floatY(frame.y2));
+ GL11.glVertex2f(offcetX, offcetY + gun.getHeightSprite() * K);
+ } else {
+ GL11.glTexCoord2f(gun.floatX(frame.x1), gun.floatY(frame.y2));
+ GL11.glVertex2f(offcetX, -(offcetY + gun.getHeightSprite() * K));
+ GL11.glTexCoord2f(gun.floatX(frame.x2), gun.floatY(frame.y2));
+ GL11.glVertex2f(offcetX + gun.getWidthSprite() * K, -(offcetY + gun.getHeightSprite() * K));
+ GL11.glTexCoord2f(gun.floatX(frame.x2), gun.floatY(frame.y1));
+ GL11.glVertex2f(offcetX + gun.getWidthSprite() * K, -offcetY);
+ GL11.glTexCoord2f(gun.floatX(frame.x1), gun.floatY(frame.y1));
+ GL11.glVertex2f(offcetX, -offcetY);
+ }
+ GL11.glEnd();
- GL11.glTexCoord2f(body.floatX(frame.x1), body.floatY(frame.y2));
- GL11.glVertex2f(0, body.getHeightSprite()*K);
- }
- GL11.glEnd();
+ GL11.glPopMatrix();
+ }
- GL11.glPopMatrix();
- }
-
- private void render_gun(Sprite.Coords frame){
- gun.bind();
-
- GL11.glPushMatrix();
- GL11.glColor3f(1f, 1f, 1f);
-
- 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();
- int offcetY = (-16 * K);
- int offcetX = (-10 * K);
- float angle = (float)(Math.atan2(mY - _y, mX - _x) * 180/Math.PI);
-
- GL11.glTranslatef(_x, _y, 0);
- GL11.glRotatef(angle, 0, 0, 1);
-
- GL11.glBegin(GL11.GL_QUADS);
-
- if(!inverse){
- 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()*K, offcetY);
-
- GL11.glTexCoord2f(gun.floatX(frame.x2), gun.floatY(frame.y2));
- GL11.glVertex2f(offcetX + gun.getWidthSprite()*K, offcetY + gun.getHeightSprite()*K);
-
- GL11.glTexCoord2f(gun.floatX(frame.x1), gun.floatY(frame.y2));
- GL11.glVertex2f(offcetX, offcetY + gun.getHeightSprite()*K);
- } else {
- GL11.glTexCoord2f(gun.floatX(frame.x1), gun.floatY(frame.y2));
- GL11.glVertex2f(offcetX, -(offcetY + gun.getHeightSprite()*K));
-
- GL11.glTexCoord2f(gun.floatX(frame.x2), gun.floatY(frame.y2));
- GL11.glVertex2f(offcetX + gun.getWidthSprite()*K, -(offcetY + gun.getHeightSprite()*K));
-
- GL11.glTexCoord2f(gun.floatX(frame.x2), gun.floatY(frame.y1));
- GL11.glVertex2f(offcetX + gun.getWidthSprite()*K, -offcetY);
-
- GL11.glTexCoord2f(gun.floatX(frame.x1), gun.floatY(frame.y1));
- GL11.glVertex2f(offcetX, -offcetY);
- }
- GL11.glEnd();
-
- GL11.glPopMatrix();
- }
-
- private void draw_target(int x, int y, float angle){
- final int size = 100;
- GL11.glDisable(GL11.GL_TEXTURE_2D);
- GL11.glPushMatrix();
- GL11.glTranslatef(x,y,0);
- GL11.glRotatef(angle, 0, 0, 1);
-
- GL11.glBegin(GL11.GL_LINES);
- GL11.glColor3f(1,0,0);
- GL11.glVertex2f(0,0);
- GL11.glVertex2f(size,0);
- GL11.glColor3f(0,1,0);
- GL11.glVertex2f(0,0);
- GL11.glVertex2f(0,size);
- GL11.glColor3f(0,0,1);
- GL11.glVertex2f(0,0);
- GL11.glVertex2f(-size,0);
- GL11.glColor3f(1,1,1);
- GL11.glVertex2f(0,0);
- GL11.glVertex2f(0,-size);
- GL11.glEnd();
-
- GL11.glPopMatrix();
- GL11.glEnable(GL11.GL_TEXTURE_2D);
- }
-
- private void draw_quad(int x, int y, float angle){
- GL11.glDisable(GL11.GL_TEXTURE_2D);
- GL11.glPushMatrix();
-
- GL11.glTranslatef(x,y,0);
- GL11.glRotatef(angle, 0, 0, 1);
-
- GL11.glColor4f(1, 1, 1, 0.5f);
- GL11.glBegin(GL11.GL_QUADS);
- if(!inverse){
- GL11.glVertex2f(0,0);
- GL11.glVertex2f(100,0);
- GL11.glVertex2f(100,50);
- GL11.glVertex2f(0,50);
- } else {
- GL11.glVertex2f(0,-50);
- GL11.glVertex2f(100,-50);
- GL11.glVertex2f(100,0);
- GL11.glVertex2f(0,0);
- }
- GL11.glEnd();
-
- GL11.glPopMatrix();
- GL11.glEnable(GL11.GL_TEXTURE_2D);
- }
-
- private void draw_line(int x1, int y1, int x2, int y2){
- GL11.glDisable(GL11.GL_TEXTURE_2D);
- GL11.glPushMatrix();
-
- GL11.glColor3f(1,1,0);
- GL11.glBegin(GL11.GL_LINES);
- GL11.glVertex2f(x1,y1);
- GL11.glVertex2f(x2,y2);
- GL11.glEnd();
-
- GL11.glPopMatrix();
- GL11.glEnable(GL11.GL_TEXTURE_2D);
- }
-
- public int getSpeed(){
- return speed;
- }
-
- public int getWidth(){
- return width;
- }
-
- public int getHeight(){
- return height;
- }
-
- private int get_center_x(){
- return x + ((width * K) / 2);
- }
-
- public boolean getRigthRun(){
- return rigth;
- }
-
- public void setRigthRun(boolean value){
- rigth = value;
- }
+ private int get_center_x(){
+ return x + ((WIDTH * K) / 2);
+ }
}
diff --git a/src/ru/dmitriymx/game/mw/Prometheus2.java b/src/ru/dmitriymx/game/mw/Prometheus2.java
deleted file mode 100644
index 7c63feb..0000000
--- a/src/ru/dmitriymx/game/mw/Prometheus2.java
+++ /dev/null
@@ -1,105 +0,0 @@
-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
index 135a8d2..341e71f 100644
--- a/src/ru/dmitriymx/game/mw/TexturedObject.java
+++ b/src/ru/dmitriymx/game/mw/TexturedObject.java
@@ -10,4 +10,5 @@ public interface TexturedObject {
public void setY(int value);
public void render();
+ public void move(int oX, int oY);
}