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); }