Jump to content
  • Advertisement
Sign in to follow this  
cicerohellmann

JOGL Enemy Space Ship dont point correctly to the player, HELP!

This topic is 2561 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I have a big problem when im trying to point my enemy ships to the player, im braking my head to find an answer and i know its right in front of me but i cant see it!

i F SOME ONE HAVE ANY CLUES OUT THERE ILL BE GLAD TO HEAR AND + i suck in math so this can be the big deal with my problem...

ok

down there is my whole enemy code!

take a look and ask anything you guys want!

the enemy already go to the player location but i did some pog to make it turn to the player...

the enemy, as the player, rotate in 3 axis and this axis are 3x3 vectors

what i need to know exactly is what axis i should set here

MathUtil.rotacionaGLViaVetores(Player.eixoZ, Player.eixoY, Player.eixoX);

what is the math i should do to find the position of the player in the world ( i know how to do that ) and how to calculate the axis for this rate math funcion!


import static org.lwjgl.opengl.GL11.glColor4f;
import static org.lwjgl.opengl.GL11.glPopMatrix;
import static org.lwjgl.opengl.GL11.glPushMatrix;
import static org.lwjgl.opengl.GL11.glRotatef;
import static org.lwjgl.opengl.GL11.glScaled;
import static org.lwjgl.opengl.GL11.glTranslatef;

import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GLContext;

import matematcbase.MathUtil;
import matematcbase.Matrix4x4;
import matematcbase.Vector3f;
import obj.ObjModel;

public class Inimigo extends Entidade {

public final static short MOVENDOSE_ALEATORIAMENTE = 0;
public final static short AGRUPANDO = 1;
public final static short MOVENDO_E_ATIRANDO = 2;
public final static short FUGINDO = 3;

public short estado = 0;

ObjModel meuModelo;

Vector3f vetorDeAproximacao;

boolean tomoChumbo = false;

// Tiro tiro;
float mx, my;
boolean freeMotion = true;
public static float playerAlpha = 1.0f;
int loadTiro = 0;
public static float velRotation = 190.0f;

Player playerQueDevoMatar;

boolean teste = true;
int tempo = 0;


public Inimigo(float X, float Y, float Z, float raio, float velX,
float velY, float velZ, String modeloDaNaveDoInimigo, Player player) {
super(X, Y, Z, raio, velX, velY, velZ);
// TODO Auto-generated constructor stub

meuModelo = new ObjModel();
meuModelo.loadObj(modeloDaNaveDoInimigo);
playerQueDevoMatar = player;
vetorDeAproximacao = new Vector3f();
vivo = true;
vida = 100;
estado = MOVENDO_E_ATIRANDO;
}

void rotacionaEixos() {

}

public void movimentacao(double diftime) {

if(Player.X>this.X+0.5){

rotAngleY = (float) -1;
Matrix4x4 k = new Matrix4x4();
k.setRotate(rotAngleY, eixoY.x, eixoY.y, eixoY.z);
k.transform(eixoZ);
k.transform(eixoY);
k.transform(eixoX);
eixoZ.Normalize();
eixoY.Normalize();
eixoX.Normalize();
}
if(Player.X<this.X-0.5){

rotAngleY = (float) 1;
Matrix4x4 k = new Matrix4x4();
k.setRotate(rotAngleY, eixoY.x, eixoY.y, eixoY.z);
k.transform(eixoZ);
k.transform(eixoY);
k.transform(eixoX);
eixoZ.Normalize();
eixoY.Normalize();
eixoX.Normalize();
}
if(Player.Y>this.Y+0.5){

rotAngleX = (float) -1;
Matrix4x4 k = new Matrix4x4();
k.setRotate(rotAngleX, eixoY.x, eixoY.y, eixoY.z);
k.transform(eixoZ);
k.transform(eixoY);
k.transform(eixoX);
eixoZ.Normalize();
eixoY.Normalize();
eixoX.Normalize();
}
if(Player.Y<this.Y-0.5){

rotAngleX = (float) 1;
Matrix4x4 k = new Matrix4x4();
k.setRotate(rotAngleX, eixoY.x, eixoY.y, eixoY.z);
k.transform(eixoZ);
k.transform(eixoY);
k.transform(eixoX);
eixoZ.Normalize();
eixoY.Normalize();
eixoX.Normalize();
}

// rotAngleX = (float) 1;
// Matrix4x4 k = new Matrix4x4();
// k.setRotate(rotAngleX, eixoX.x, eixoX.y, eixoX.z);
// k.transform(eixoZ);
// k.transform(eixoY);
// k.transform(eixoX);
// eixoZ.Normalize();
// eixoY.Normalize();
// eixoX.Normalize();
//
// movimenta para a esquerda e direita

// rotAngleY = (float) 1;
// Matrix4x4 m = new Matrix4x4();
// m.setRotate(rotAngleY, eixoY.x, eixoY.y, eixoY.z);
// m.transform(eixoZ);
// m.transform(eixoY);
// m.transform(eixoX);
// eixoZ.Normalize();
// eixoY.Normalize();
// eixoX.Normalize();
}

public void IA(double Difftime) {

switch (estado) {

case MOVENDOSE_ALEATORIAMENTE:

break;

case AGRUPANDO:

break;

case MOVENDO_E_ATIRANDO:
//


// X += vetorDeAproximacao.x * velX * Difftime / 1000.0f;
// Y += vetorDeAproximacao.y * velY * Difftime / 1000.0f;
// Z += vetorDeAproximacao.z * velZ * Difftime / 1000.0f;
//

// X += vetorDeAproximacao.x *eixoZ.x * velX * Difftime / 1000.0f;
// Y += vetorDeAproximacao.y *eixoZ.y * velY * Difftime / 1000.0f;
// Z += vetorDeAproximacao.z * eixoZ.z * velZ * Difftime / 1000.0f;

// if(vetorDeAproximacao.x > eixoX.x){
// rotAngleZ = -(float) (90 * Difftime / 1000.0f);
// Matrix4x4 m = new Matrix4x4();
// m.setRotate(rotAngleZ, eixoY.x, eixoY.y, eixoY.z);
// m.transform(eixoZ);
// m.transform(eixoY);
// m.transform(eixoX);
// eixoZ.Normalize();
// eixoY.Normalize();
// eixoX.Normalize();
// }

if (colideCicrular(vetorDeAproximacao.x, vetorDeAproximacao.y,
vetorDeAproximacao.z, 1.0f)) {
encontraVetorDeAproximacao();

}

break;

case FUGINDO:

break;
}

}

@Override
void simulaSe(double Diftime) {
// TODO Auto-generated method stub
// super.simulaSe(Diftime);

tempo++;
movimentacao(Diftime);
if (playerQueDevoMatar.listaDeTiros != null) {
for (int i = 0; i < playerQueDevoMatar.listaDeTiros.size(); i++) {
Tiro tiro = (Tiro) playerQueDevoMatar.listaDeTiros.get(i) ;

if(colideCicrular(tiro.X, tiro.Y, tiro.Z, tiro.raio))
{
tomoChumbo = true;
vida -= 50;
playerQueDevoMatar.listaDeTiros.remove(i);

}else{
tomoChumbo = false;
}

}

}

if (playerQueDevoMatar.listaDeMisseis != null) {
for (int i = 0; i < playerQueDevoMatar.listaDeMisseis.size(); i++) {
Missil missil = (Missil) playerQueDevoMatar.listaDeMisseis.get(i) ;

if(colideCicrular(missil.X, missil.Y, missil.Z, missil.raio))
{
tomoChumbo = true;
vida -= 100;
missil.timer=missil.tempoDaExplosão+1;


}else{
tomoChumbo = false;
}

}

}

if(vida <= 0)
{
X = 10 - (float) (Math.random()*20);
Y = 10 - (float) (Math.random()*20);
Z = 10 - (float) (Math.random()*20);
vida = 100;
}

switch (estado) {

case MOVENDOSE_ALEATORIAMENTE:

break;

case AGRUPANDO:

break;

case MOVENDO_E_ATIRANDO:

// if (teste) {

// só pra procurar na primeira iteração da classe.
encontraVetorDeAproximacao();

teste = false;
//
break;

case FUGINDO:

break;
}

IA(Diftime);
}

@Override
void desenhaSe() {
// TODO Auto-generated method stub
glPushMatrix();
{


glTranslatef(X, Y, Z);


glScaled(0.005f, 0.005f, 0.005f);




glRotatef(180, 0, 0, 0);

MathUtil.rotacionaGLViaVetores(Player.eixoZ, Player.eixoY, Player.eixoX);






meuModelo.desenhase();

}
glPopMatrix();

}

void encontraVetorDeAproximacao() {

vetorDeAproximacao.x = Player.X - this.X;
vetorDeAproximacao.y = Player.Y - this.Y;
vetorDeAproximacao.z = Player.Z - this.Z;

vetorDeAproximacao.Normalize();

}

public boolean colideCicrular(float x, float y, float z, float Raio) {

float difx = x - this.X;
float dify = y - this.Y;
float difz = z - this.Z;

float dist = difx * difx + dify * dify + difz * difz;

if (((Raio + this.raio) * (Raio + this.raio)) > dist) {
return true;
}

return false;
}

public void trataMorte(Player player)
{

}

}

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!