planets random

This commit is contained in:
Damien 2021-05-29 12:21:10 +02:00
parent 919a9a6951
commit 0101996b91

View file

@ -9,6 +9,7 @@ import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.scenes.scene2d.Group;
import sagittarius.SagittariusGame;
@ -16,6 +17,19 @@ import sagittarius.model.*;
public class GameScreen extends BaseScreen implements InputProcessor {
// ---------- GENERATION ----------
public static int numberPlanets = 4;
public static int numberMoons = 2;
public static int minDistance = 400;
public static int maxDistance = 800;
public static int minMass = 500;
public static int maxMass = 1000;
public static int minRadius = 20;
public static int maxRadius = 150;
// ---------- ATTRIBUTEs ----------
public static BitmapFont fontDebug = new BitmapFont();
@ -72,30 +86,51 @@ public class GameScreen extends BaseScreen implements InputProcessor {
// planets & moons
attractors = new Group();
Planet planet1 = new Planet(new Vector2(300, 200), 1000, 50, Color.BLUE);
attractors.addActor(planet1);
for (int i = 0; i < numberPlanets; i++) {
Vector2 position;
if (i == 0) {
position = new Vector2(0, 0);
} else {
int distance = minDistance + MathUtils.random(maxDistance - minDistance);
float angle = 2*MathUtils.PI*MathUtils.random();
float shortestDistance;
do {
int index = MathUtils.random(i-1);
Actor planet0 = attractors.getChild(index);
position = new Vector2(distance * (float) Math.cos(angle), distance * (float) Math.sin(angle));
position.add(planet0.getX(), planet0.getY());
Planet planet2 = new Planet(new Vector2(1200, 700), 3000, 200, Color.ORANGE);
attractors.addActor(planet2);
Moon moon2_1 = new Moon(planet2, 100, 70, 500, Color.MAGENTA);
attractors.addActor(moon2_1);
Planet planet3 = new Planet(new Vector2(1500, 100), 1000, 70, Color.PINK);
attractors.addActor(planet3);
shortestDistance = maxDistance;
for (int j = 0; j < i-1; j++) {
Actor planet1 = attractors.getChild(j);
float dx = planet1.getX() - position.x;
float dy = planet1.getY() - position.y;
float distanceToPlanet1 = (float) Math.sqrt(dx*dx + dy*dy);
if (distanceToPlanet1 < shortestDistance) {
shortestDistance = distanceToPlanet1;
}
}
} while (shortestDistance < minDistance);
}
int mass = minMass + MathUtils.random(maxMass - minMass);
int radius = minRadius + MathUtils.random(maxRadius - minRadius);
Color color = new Color((int)(Math.random() * 0x1000000));
Planet planet = new Planet(position, mass, radius, color);
attractors.addActor(planet);
}
mainStage.addActor(attractors);
// players
players = new Group();
Player player1 = new Player(planet1, Color.RED);
Player player1 = new Player((Planet) attractors.getChild(0), Color.RED);
players.addActor(player1);
Player player2 = new Player(planet2, Color.WHITE);
Player player2 = new Player((Planet) attractors.getChild(1), Color.WHITE);
players.addActor(player2);
Player player3 = new Player(moon2_1, Color.YELLOW);
Player player3 = new Player((Planet) attractors.getChild(2), Color.YELLOW);
players.addActor(player3);
mainStage.addActor(players);