[Gelöst] Partikelgeschwindigkeit am Wind ausrichten

Es gibt in ModernCombat ein Environment "FogCreator".  Dieser erzeugt ein paar Nebel partikel und lässt diese mit Pushparticles unterschiedlich schnelll bewegen.
Mich hat daran gestört, dass es sich dabei nicht am tatsächlichen Wind orientiert, weshalb ich das ganze umgeschrieben habe, sodass die Geschwindigkeit immer dem Wind entspricht.
Funktioniert so, dass den Partikeln bei der Erstellung direkt die Windgeschwindigkeit übergeben wird und sie zusätzlich über einen Timer (alle 1 Frames) an die Windveränderungen angepasst werden:
 
beschleunigeen = (GetWind(0,0,1)-windvorherr);
    PushParticles("Nebel",+beschleunigeen);
  windvorherr = GetWind(0,0,1);


Zusätzlich hab ich noch ein paar andere kleinere Änderungen vorgenommen, aber hierfür jetzt erstmal unwichtig.
Das funktioniert alles wunderbar und der FogCreater ist nun ein schönes atmosphärisches Objekt, mit wenig Nebel.

Nun hatte ich schon vorher ein richtiges Nebelobjekt, welches größere Nebelpartikel erstellt, die auch wirklich dazu gedacht sind, die Sicht zu behindern. Diese waren allerdings starr und die Idee, sie zu bewegen gefiel mir, weshalb ich auch diese nun wie oben am Wind ausgerichtet habe.
Das Problem ist nur, dass dies richtiger Nebel sein soll, der sich zwar am Wind orientiert, aber er soll bei einer Windgeschwindigkeit von bis zu 100 nicht über das Land peitschen, sondern eben langsam "wabern".  Deswegen möchte ich nur einen Bruchteil der Windgeschwingkeit haben.
Nun ist die Frage, wie realisiere ich das?  Hatte natürlich zuerst einfach den Wert durch 4 geteilt, aber musste feststellen, dass das aufgrund des Rundungsverhalten von Clonk natürlich nicht funktioniert.  Denn die Beschleunigungswerte sind halt ganze Zahlen (meistens 1 oder -1, weil es sooft abgefragt wird) und durch das runden werden sie dann entweder garnicht beschleunigt, oder wenn ich den Timeraufruf verändere, dann haben die einzelnen Nebelobjekte, die z.b später dazugekommen sind, eine andere Geschwindigkeit, als die , die schon länger da sind.

Mir ist bisher noch keine Lösung eingefallen… da es soweit ich weiß ja auch keine Möglichkeit gibt den bereits existierenden Partikeln direkt eine Geschwindigkeit zu geben (nur beschleunigung geht) und man die Geschwindigkeit auch nicht abfragen kann… oder?

In OC geht das. In CR koenntest du stattdessen dann einfach echte Objekte statt Partikeln nehmen

okay… dann schau ich mal ob ich das hinbekomme.
Auf welche DefCore werte sollte ich da achten, damit das funktioniert und sie z.b nicht runterfallen usw, sondern einfach nur im Vordergrund immer in derselben Höhe bleiben?

Noch ne Frage zur Spiel Performance:
Hohe Anzahlen an Partikeln wirken sich sehr stark auf die Spielgeschwindigkeit aus. Wie würde es nun aussehen, wenn ich anstatt der Partikel eben gleichviele Nebel Objekte erstelle?   Da es ja ohne Probleme z.b hunderte Erdobjekte wie gold/stein/flints usw geben kann, wäre meine Vermutung jetzt, dass ohne Partikel sogar alles viel flüssiger laufen würde… wenn dem so wäre, warum gibt es dann überhaupt partikel?

Leider hat PushParticles in Clonk Rage keinen Präzisionsfaktor, d.h. es gibt keine einfache Lösung das mit Partikeln zu machen. Wenn du aber wenige große Partikel hast, kann das mit Objekten auch Sinn machen. Interessant ist dann für dich wimre C4D_Foreground (vor allem anderen), und C4D_MouseIgnore, evtl. noch etwas gegen Gravitation (vielleicht klappt da noch C4D_StaticBack mit?). Ansonsten schau dir mal CMCs Rauchgranaten-Objekt an, da machen wir das mit intelligenteren Rauchobjekten, die jeweils immer wieder Partikel an neuen Positionen erzeugen.

Partikel werden im Unterschied zu Objekten nicht genau synchronisiert, d.h. wenn du auf einem System 10 Partikel in zufällige Richtungen castest, dann können die auf einem anderen System in andere Richtungen fliegen oder es könnten nur 5 auftauchen. In den Clonk-Einstellungen kann man generell die Partikelzahl festlegen, und die wirkt sich eben auf diese Werte aus. Es gibt auch maximale Werte pro Partikel, und wimre kann man das noch zusätzlich in die Particle.txt legen. Sie sind auch im Normalfall performanter, und durch die Konfiguration der Spieler besser an das jeweilige System angepasst.

Obwohl Partikel manchmal lahm sind, sind die in jedem Fall schneller als Objekte. Das ist in OC sogar noch viel krasser.

Damit ein Objekt fliegt, muss es eigentlich nur eine Aktion mit der Prozedur FLOAT haben.

Danke für die antworten, auch an Zapper :slight_smile:

Gibt es eine Partikeldokumentation für CR? Also was man da alles an einträgen machen kann und was sie bedeuten?
Sehe nämlich grad, dass in ModernCombar z.b WindDrift=25 drinsteht… das klingt nach Windbewegung? :smiley:

"intelligentere Rauchobjekte"… wird das alles im Rauchobjekt geregelt, oder auch im Partikel selbst?  Und inwiefern hilft mir das für mein Nebelprojekt? Anstatt die Partikel zu bewegen immer wieder entfernen und ein paar pixel weiter wieder erzeugen? ich schau mir das skript mal genauer an…

>Gibt es eine Partikeldokumentation für CR? Also was man da alles an einträgen machen kann und was sie bedeuten?


Jep :-) http://crdocs.clonkspot.org/de/sdk/particle/index.html

>"intelligentere Rauchobjekte".. wird das alles im Rauchobjekt geregelt, oder auch im Partikel selbst?  Und inwiefern hilft mir das für mein Nebelprojekt? Anstatt die Partikel zu bewegen immer wieder entfernen und ein paar pixel weiter wieder erzeugen? ich schau mir das skript mal genauer an...


Im Rauchobjekt. Wir haben halt in CMC noch die Sicht-Abdunkelungsgeschichten, aber eventuell kannst du ja mit der gedämpften Bewegung dort etwas anfangen.

Manchmal denkt man sich die kompliziertesten Ansätze aus und kann es dennoch nicht lösen, so wie das Problem hier.
Dann kümmert man sich erstmal um was anderes und plötzlich fällt einem ganz spontan eine super einfache Lösung ein :smiley:

Und zwar brauche ich ja nur die Windgeschwindigkeit bei jeder berechnung mit meinem Faktor multiplizieren (also sowohl in "beschleunigeen", als auch "windvorherr").  Dadurch rechne ich dann nicht mit der Höchstwindgeschwindigkeit von 100, sondern z.b einfach mit 10. Und schon ist auch dies die höchstgeschwindigkeit der Partikel :slight_smile: