package View;
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.Robot;
import javax.media.opengl.GL2;
import javax.media.opengl.glu.GLU;
import anim.Scene;
import obj.Element;
import main.Core;
public class Perso extends Element implements Camera{
// deplacement
private boolean haut = false;
private boolean bas = false;
private boolean gauche = false;
private boolean droite = false;
public Perso(float x, float y, float z, float dir){
this.posX = x;
this.posY = y;
this.posZ = z;
this.dir = dir;
}
@Override
public void gluLookAt(GLU glu){
glu.gluLookAt(
posX,
posY,
posZ,
posX + Math.cos( ( 0.5 * Math.PI ) - dir ),
posY,
posZ + Math.sin( ( 0.5 * Math.PI ) - dir ),
Scene.upX,
Scene.upY,
Scene.upZ
);
}
@Override
public boolean actualise(int[][] grid) {
//deplacement de la camera en fonction du clavier et de la souris
float varX = 0;
float varZ = 0;
//mise a jour de dir en fonction de la souris
dir -=(float)(getDelta()/700.0);
//mise a jour de X et Z en fonction du clavier
if ( haut ) {
varZ += Math.cos(dir) /10;
varX += Math.sin(dir) /10;
}
if ( bas) {
varZ -= Math.cos(dir) /10;
varX -= Math.sin(dir) /10;
}
if ( gauche ) {
varX += Math.cos(dir) /20;
varZ -= Math.sin(dir) /20;
}
if ( droite ) {
varX -= Math.cos(dir) /20;
varZ += Math.sin(dir) /20;
}
// test de futur collision
int nextPosType = grid[(int)(posX+varX)][(int)(posZ+varZ)];
// si c'est pas un mur, on bouge
if ( nextPosType != 1 ){
posX += varX;
posZ += varZ;
}
return false;
}//fin actualise
@Override
public void draw(GL2 gl) {
//obliger a cause de l'heritage
}
// deplacement direct
public void reset(float x, float z) {
this.posX = x;
this.posZ = z;
}
// deplacement
@Override
public void up(boolean b) {
haut = b;
}
@Override
public void down(boolean b) {
bas = b;
}
@Override
public void left(boolean b) {
gauche = b;
}
@Override
public void right(boolean b) {
droite = b;
}
@Override
public void top(boolean b) {}
@Override
public void bottom(boolean b) {}
// vue en fonction de la souris
@Override
public int getDelta(){
Point pointer=MouseInfo.getPointerInfo().getLocation();
Dimension screen = Core.fen.getSize();
Robot robot;
int retval = 0;
try {
robot = new Robot();
int centerx = screen.width / 2;
int centery = screen.height / 2;
int xDelta=pointer.x - centerx;
if(xDelta==0) {
retval = 0;
}else{
robot.mouseMove(centerx, centery);
retval = xDelta;
}
} catch (AWTException e) {
System.exit(1);
}
return retval;
}
/*
public final Point getDelta(){
Point pointer=MouseInfo.getPointerInfo().getLocation();
int xDelta=pointer.x-centerx;
int yDelta=pointer.y-centery;
if(xDelta==0 && yDelta==0) {
return(new Point(0,0));
}else{
robot.mouseMove(centerx, centery);
return(new Point(xDelta, yDelta));
}
}
*/
}