Welt Chunk Füll Algoryhtmus gesucht.

Longor1996

Mitglied
Hallo Leute ich mal wieder mit folgendem Problem:
Ich habe eine LinkedList<Chunk> world;
Ein Chunk hat die Variablen:
int X,int Z (Und noch SRC[][] und GLID was aber in dem Fall nicht von interesse ist)
und wird mit dem Konstruktor new Chunk(Main parent,World world,int x,int z) erschaffen

Tja und ich will in einer bestimmten reichweite um einen Punkt p die nötigen Chunks laden.
d.H:
1.Ich hab eine LinkedList die Chunks aufnimmt.
2.Ein Chunk hat X,Z Koordinaten.
3.Ich will um einen Punkt p herum in einer bestimmten Reichweite die LinkedList so füllen das eine Umgebung entsteht.

Hoffe jemand kapirt das...mfg Longor1996 :)

Edit:
Achja...das ganze befindet sich in einer World.class.
 
Zuletzt bearbeitet:
Ach ich mein das im sinne von:
Um p herum wird ein gedachtes Rechteck mit Radius FOV erstellt (Wobei FOV = Anzahl Chunks ist, Chunk = 10E). Und dieses Rechteck will ich füllen! Mit Chunks...wobei es sein kann das in diesem Rechteck schon ein paar Chunks liegen
 
Hi,
du kannst doch über den Satz des Pythagoras diese Elemente selber ausrechen.
Du setzt einfach eine Variable, wie weit die Elemente maximal entfernt sein dürfen
Java:
final int maxR = 100
Und berechnest danach, über den Satz des Pythagoras, welchen Abstand die Punkte zum Ausgangspunkt (xM, yM) haben.
Java:
int r = (int) (Math.sqrt( (Math.pow(x - xM, 2) + Math.pow(y - yM, 2))));

if(r <= maxR) {
   System.out.println("Element ist in Sichtweite");
}

Gruß

Fabio
 
Zuletzt bearbeitet:
Hä?
Ich glaub ich bin zu müde um das zu kapiere nobwohl ich damit schon rumgewerkelt hab...
Wobei:
Und wie soll ich das mit dem Generierer und der LinkedList verbinden? (+ Gedachten Rechteck?)

ICH DREH DURCH->Zu Müde...gute nacht :D
 
Ich würde mal vermuten, dass es das ist, was du suchst.

Java:
import java.util.ArrayList;
import java.util.List;

public class Camera
{
	private static final int OPTICAL_RANGE = 100;

	private final List<Chunk> visibleChunks;
	private final List<Chunk> allChunks;
	private final int x;
	private final int z;

	/**
	 * @param x
	 * @param z
	 */
	public Camera(int x, int z) {
		this.x = x;
		this.z = z;
		this.visibleChunks = new ArrayList<Chunk>();
		this.allChunks = new ArrayList<Chunk>();
	}

	/**
	 * @param chunk
	 */
	public void addChunk(Chunk chunk) {
		if(chunk == null) {
			return;
		}
		
		allChunks.add(chunk);
		if(isVisible(chunk)) {
			visibleChunks.add(chunk);
		}
	}
	
	/**
	 * @param chunk
	 */
	public void removeChunk(Chunk chunk) {
		if(chunk == null) {
			return;
		}
		
		if(allChunks.contains(chunk)) {
			allChunks.remove(chunk);
			
			if(visibleChunks.contains(chunk)) {
				visibleChunks.remove(chunk);
			}
		}
	}

	/**
	 * 
	 */
	public void update() {
		for(int i = 0; i < allChunks.size(); i++) {
			Chunk chunk = allChunks.get(i);
			if(isVisible(chunk) && !visibleChunks.contains(chunk) {
				visibleChunks.add(chunk);
			} else if(!isVisible(chunk) && visibleChunks.contains(chunk)) {
				visibleChunks.remove(chunk);
			}
		}
	}
	
	/**
	 * @return
	 */
	public List<Chunk> getVisibleChunks() {
		return visibleChunks;
	}
	
	/**
	 * @return
	 */
	public List<Chunk> getAllChunks() {
		return allChunks;
	}

	/**
	 * @param chunk
	 * @return
	 */
	private boolean isVisible(Chunk chunk) {
		int r = (int) (Math.sqrt( (Math.pow(chunk.getX() - x, 2) + Math.pow(chunk.getZ() - z, 2))));

		if(r <= OPTICAL_RANGE) {
			System.out.println("Element ist in Sichtweite");
			return true;
		}
		return false;
	}
}

Falls es das auch nicht ist, was du suchst, dann wären vielleicht mehr Informationen nett. ;)

Gruß

Fabio
 
Zuletzt bearbeitet:
Hm scheint zu stimmen... das einzubauen kostet mich jetzt wahrscheinlich noch ne SourceSicherung und 20 Minuten meines Lebens XD

EDIT->PROBLEM:
Remove Chunk muss per int x,z funktionieren. -fixing-




EDIT AGAIN:
OKAY?! Das geht überhaupt nicht!...selbst nach 3 Stunden rumprobieren...:(
Es gibt keine Fehlermeldungen und das Programm sagt das alle Chunks bereits dargestellt werden.
Ein Wort: Wtf?
 
Zuletzt bearbeitet:
Vllt hab ich mla wieder vergessen ein * einzufügen?
Oder hab mal wieder X und Z vertauscht XD
Naja...ich hab Pech...hab mein Code BackUp vergessen zu machen = VERKAKT!
Pechtag wohl...dann mach ich mich mal aus Fun an einen RayTracer :D
 
Zurück