feat: optimized computeTrajectory
This commit is contained in:
parent
e047063e7e
commit
d664987ff8
|
@ -9,7 +9,7 @@ public class SagittariusGame extends Game {
|
|||
|
||||
// Constants
|
||||
public static float G = 100;
|
||||
public static boolean debugMode = false;
|
||||
public static boolean debugMode = true;
|
||||
|
||||
private static Game game;
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package sagittarius.model;
|
||||
|
||||
import java.security.PrivilegedExceptionAction;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Random;
|
||||
|
||||
|
@ -215,26 +216,16 @@ public class Arrow extends EntityQuad {
|
|||
* @param timeStep time period used for the integration.
|
||||
* @return an array of vertices describing the trajectory of the Arrow.
|
||||
*/
|
||||
static float[] traj(float angle, float power, Player shooter, int iterations, float timeStep) {
|
||||
ArrayList<Float> path = new ArrayList<Float>();
|
||||
static Trajectory computeTrajectory(float angle, float power, Player shooter, int iterations, float timeStep) {
|
||||
Trajectory traj = new Trajectory(iterations);
|
||||
Arrow dummyArrow = new Arrow(angle, power, shooter, true);
|
||||
for (int i = 0; i < iterations; i++) {
|
||||
dummyArrow.integrationVerlet(timeStep);
|
||||
path.add(dummyArrow.getX());
|
||||
path.add(dummyArrow.getY());
|
||||
traj.add(dummyArrow.getPosition());
|
||||
if ( dummyArrow.hasLanded() || dummyArrow.hasHit() ) { break; }
|
||||
}
|
||||
|
||||
// TODO : optimize, lots of useless stuff + change name
|
||||
// or ignore and use adapters
|
||||
|
||||
final float[] arr = new float[path.size()]; // utiliser le count de la fonction, faire tab size iteration*2, et draw avec count
|
||||
int index = 0; // TODO: créer objet Trajectory, avec un float[iteration*2] et un actualSize;
|
||||
for (final Float value: path) {
|
||||
arr[index++] = value;
|
||||
}
|
||||
|
||||
return arr;
|
||||
return traj;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -60,10 +60,8 @@ public class Bow extends Actor {
|
|||
if (power > 50) shapes.setColor(Color.RED);
|
||||
shapes.line(this.anchor, GameScreen.worldCursor);
|
||||
if (aimAssist) {
|
||||
float[] traj = Arrow.traj(angle, power, GameScreen.playerCurrent, 500, 0.03f);
|
||||
if (traj.length > 2) {
|
||||
shapes.polyline(traj);
|
||||
}
|
||||
Trajectory traj = Arrow.computeTrajectory(angle, power, GameScreen.playerCurrent, 500, 0.03f);
|
||||
shapes.polyline(traj.path, 0, traj.actualSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
24
core/src/sagittarius/model/Trajectory.java
Normal file
24
core/src/sagittarius/model/Trajectory.java
Normal file
|
@ -0,0 +1,24 @@
|
|||
package sagittarius.model;
|
||||
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
|
||||
public class Trajectory {
|
||||
|
||||
float[] path;
|
||||
int actualSize;
|
||||
|
||||
public Trajectory(int iterations) {
|
||||
path = new float[2*iterations];
|
||||
}
|
||||
|
||||
public void add(float x, float y) {
|
||||
path[actualSize++] = x;
|
||||
path[actualSize++] = y;
|
||||
}
|
||||
|
||||
public void add(Vector2 vec) {
|
||||
path[actualSize++] = vec.x;
|
||||
path[actualSize++] = vec.y;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue