feat: avancement des photons (nouveau code)

This commit is contained in:
Nicolas Hordé 2016-08-25 00:48:56 +02:00
parent 692860cfb4
commit 4530136a99
1 changed files with 62 additions and 139 deletions

View File

@ -1,6 +1,7 @@
package fr.evolving.automata; package fr.evolving.automata;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.math.Vector2;
public class Particle { public class Particle {
public enum Type { public enum Type {
@ -16,6 +17,7 @@ public class Particle {
Positif, Negatif, Neutre Positif, Negatif, Neutre
}; };
private Orientation oldorientation;
private Orientation orientation; private Orientation orientation;
private Size size; private Size size;
private Charge charge; private Charge charge;
@ -129,159 +131,80 @@ public class Particle {
this.charge=Charge.Negatif; this.charge=Charge.Negatif;
} }
private Vector2 testorientation(Orientation orientation) {
int movex=0,movey=0;
if (orientation.toString().contains("N")) movey=+1;
if (orientation.toString().contains("S")) movey=-1;
if (orientation.toString().contains("E")) movex=+1;
if (orientation.toString().contains("O")) movex=-1;
if (this.grid.GetXY(this.coordX+movex, this.coordY+movey)!=null && this.grid.GetXY(this.coordX+movex, this.coordY+movey).Fiber)
return new Vector2(movex,movey);
else
return null;
}
private Orientation[] get_orientations(Orientation orientation) {
if (orientation==Orientation.E)
return new Orientation[]{Orientation.E,Orientation.NE,Orientation.SE};
if (orientation==Orientation.NE)
return new Orientation[]{Orientation.NE,Orientation.N,Orientation.E};
if (orientation==Orientation.N)
return new Orientation[]{Orientation.N,Orientation.NE,Orientation.NO};
if (orientation==Orientation.NO)
return new Orientation[]{Orientation.NO,Orientation.N,Orientation.O};
if (orientation==Orientation.O)
return new Orientation[]{Orientation.O,Orientation.NO,Orientation.SO};
if (orientation==Orientation.SO)
return new Orientation[]{Orientation.SO,Orientation.S,Orientation.O};
if (orientation==Orientation.S)
return new Orientation[]{Orientation.S,Orientation.SE,Orientation.SO};
if (orientation==Orientation.SE)
return new Orientation[]{Orientation.SE,Orientation.E,Orientation.S};
return new Orientation[]{Orientation.SE,Orientation.E,Orientation.S};
}
public void Next() { public void Next() {
this.life++; this.life++;
int movex = 0,movey = 0; Vector2 move=null;
Orientation neworientation=this.orientation; Orientation neworientation=this.orientation;
if (type==Type.Photon) { if (type==Type.Photon) {
if (life>=30) this.kill(); if (life>=30) this.kill();
if (this.orientation==Orientation.E) Orientation[] orientations=get_orientations(this.orientation);
{ Vector2 soluce0=testorientation(orientations[0]);
if (this.grid.GetXY(this.coordX+1, this.coordY)!=null && this.grid.GetXY(this.coordX+1, this.coordY).Fiber) { Vector2 soluce1=testorientation(orientations[1]);
movex=+1; Vector2 soluce2=testorientation(orientations[2]);
neworientation=Orientation.E; if (soluce0!=null) {
} neworientation=orientations[0];
else if (this.grid.GetXY(this.coordX+1, this.coordY+1)!=null && this.grid.GetXY(this.coordX+1, this.coordY+1).Fiber) { move=soluce0;
movex=+1;
movey=+1;
neworientation=Orientation.NE;
}
else if (this.grid.GetXY(this.coordX+1, this.coordY-1)!=null && this.grid.GetXY(this.coordX+1, this.coordY-1).Fiber) {
movex=+1;
movey=-1;
neworientation=Orientation.SE;
}
} }
else if (this.orientation==Orientation.NE) else if (soluce1!=null && soluce2!=null) {
{ neworientation=orientations[1];
if (this.grid.GetXY(this.coordX+1, this.coordY+1)!=null && this.grid.GetXY(this.coordX+1, this.coordY+1).Fiber) { move=soluce1;
movex=+1;
movey=+1;
neworientation=Orientation.NE;
}
else if (this.grid.GetXY(this.coordX, this.coordY+1)!=null && this.grid.GetXY(this.coordX, this.coordY+1).Fiber) {
movey=+1;
neworientation=Orientation.N;
}
else if (this.grid.GetXY(this.coordX+1, this.coordY)!=null && this.grid.GetXY(this.coordX+1, this.coordY).Fiber) {
movex=+1;
neworientation=Orientation.E;
}
} }
else if (this.orientation==Orientation.N) else if (soluce1!=null) {
{ neworientation=orientations[1];
if (this.grid.GetXY(this.coordX, this.coordY+1)!=null && this.grid.GetXY(this.coordX, this.coordY+1).Fiber) { move=soluce1;
movey=+1;
neworientation=Orientation.N;
}
else if (this.grid.GetXY(this.coordX-1, this.coordY+1)!=null && this.grid.GetXY(this.coordX-1, this.coordY+1).Fiber) {
movey=+1;
movex=-1;
neworientation=Orientation.NO;
}
else if (this.grid.GetXY(this.coordX+1, this.coordY+1)!=null && this.grid.GetXY(this.coordX+1, this.coordY+1).Fiber) {
movex=+1;
movey=+1;
neworientation=Orientation.NE;
}
} }
else if (this.orientation==Orientation.NO) else if (soluce2!=null) {
{ neworientation=orientations[2];
if (this.grid.GetXY(this.coordX-1, this.coordY+1)!=null && this.grid.GetXY(this.coordX-1, this.coordY+1).Fiber) { move=soluce2;
movey=+1;
movex=-1;
neworientation=Orientation.NO;
}
else if (this.grid.GetXY(this.coordX-1, this.coordY+1)!=null && this.grid.GetXY(this.coordX-1, this.coordY+1).Fiber) {
movey=+1;
movex=-1;
neworientation=Orientation.N;
}
else if (this.grid.GetXY(this.coordX+1, this.coordY+1)!=null && this.grid.GetXY(this.coordX+1, this.coordY+1).Fiber) {
movex=+1;
movey=+1;
neworientation=Orientation.O;
}
} }
else if (this.orientation==Orientation.O) if (move==null)
{
if (this.grid.GetXY(this.coordX, this.coordY+1)!=null && this.grid.GetXY(this.coordX, this.coordY+1).Fiber) {
movey=+1;
neworientation=Orientation.N;
}
else if (this.grid.GetXY(this.coordX-1, this.coordY+1)!=null && this.grid.GetXY(this.coordX-1, this.coordY+1).Fiber) {
movey=+1;
movex=-1;
neworientation=Orientation.NO;
}
else if (this.grid.GetXY(this.coordX+1, this.coordY+1)!=null && this.grid.GetXY(this.coordX+1, this.coordY+1).Fiber) {
movex=+1;
movey=+1;
neworientation=Orientation.NE;
}
}
else if (this.orientation==Orientation.SO)
{
if (this.grid.GetXY(this.coordX, this.coordY+1)!=null && this.grid.GetXY(this.coordX, this.coordY+1).Fiber) {
movey=+1;
neworientation=Orientation.N;
}
else if (this.grid.GetXY(this.coordX-1, this.coordY+1)!=null && this.grid.GetXY(this.coordX-1, this.coordY+1).Fiber) {
movey=+1;
movex=-1;
neworientation=Orientation.NO;
}
else if (this.grid.GetXY(this.coordX+1, this.coordY+1)!=null && this.grid.GetXY(this.coordX+1, this.coordY+1).Fiber) {
movex=+1;
movey=+1;
neworientation=Orientation.NE;
}
}
else if (this.orientation==Orientation.S)
{
if (this.grid.GetXY(this.coordX, this.coordY+1)!=null && this.grid.GetXY(this.coordX, this.coordY+1).Fiber) {
movey=+1;
neworientation=Orientation.N;
}
else if (this.grid.GetXY(this.coordX-1, this.coordY+1)!=null && this.grid.GetXY(this.coordX-1, this.coordY+1).Fiber) {
movey=+1;
movex=-1;
neworientation=Orientation.NO;
}
else if (this.grid.GetXY(this.coordX+1, this.coordY+1)!=null && this.grid.GetXY(this.coordX+1, this.coordY+1).Fiber) {
movex=+1;
movey=+1;
neworientation=Orientation.NE;
}
}
else if (this.orientation==Orientation.SE)
{
if (this.grid.GetXY(this.coordX, this.coordY+1)!=null && this.grid.GetXY(this.coordX, this.coordY+1).Fiber) {
movey=+1;
neworientation=Orientation.N;
}
else if (this.grid.GetXY(this.coordX-1, this.coordY+1)!=null && this.grid.GetXY(this.coordX-1, this.coordY+1).Fiber) {
movey=+1;
movex=-1;
neworientation=Orientation.NO;
}
else if (this.grid.GetXY(this.coordX+1, this.coordY+1)!=null && this.grid.GetXY(this.coordX+1, this.coordY+1).Fiber) {
movex=+1;
movey=+1;
neworientation=Orientation.NE;
}
}
if (movex==0 && movey==0)
{ {
Gdx.app.debug("wirechem-Particle", "coords:"+this.coordX+","+this.coordY+" killed no place to go"); Gdx.app.debug("wirechem-Particle", "coords:"+this.coordX+","+this.coordY+" killed no place to go");
this.kill(); this.kill();
} }
else { else
Gdx.app.debug("wirechem-Particle", "coords:"+this.coordX+","+this.coordY+" move to "+orientation+":"+movex+","+movey+" life:"+this.life); {
Gdx.app.debug("wirechem-Particle", "coords:"+this.coordX+","+this.coordY+" move to "+orientation+":"+move.x+","+move.y+" life:"+this.life);
if (orientation!=neworientation)
oldorientation=orientation;
orientation=neworientation; orientation=neworientation;
this.coordX+=movex; this.coordX+=move.x;
this.coordY+=movey; this.coordY+=move.y;
} }
} }
} }
}
}