Für spezielle Fälle (der Waggon wir immer maximal beladen) mag das Script richtig arbeiten. Bei Teilbeladung an einer Standardindustrie düfte das aber anders aussehen.
Peter
Für spezielle Fälle (der Waggon wir immer maximal beladen) mag das Script richtig arbeiten. Bei Teilbeladung an einer Standardindustrie düfte das aber anders aussehen.
Peter
Für spezielle Fälle (der Waggon wir immer maximal beladen) mag das Script richtig arbeiten. Bei Teilbeladung an einer Standardindustrie düfte das aber anders aussehen.
Peter
Hallo Peter
Ich habe beide modifizierten Waggons mit der "Coal Mine" getestet.
Erfreulicherweise verhalten sie sich genau so , wie ich es eingestellt hatte.
D.h. , die Kohleladung kommt langsam hoch.
Tilo
würde ich gerne übernehmen wollen...
würde ich gerne übernehmen wollen...
Kannst du selber machen.
Wie Mika beschrieben hat , die GS-File des Wagens ändern :
public float GetLoadTime(LoadingReport report)
{
SetMeshAnimationFrame("load",30.0,10.0);
return 10.0;
}
Nochmal Anmerkung die auch p-dehnert schon gemacht hat, teilweises Be/Entladen ist damit nicht darstellbar. Aber wenn ich mir mal den Loading Report anschaue finde ich sicherlich nen Weg den Ladestand einfach im Skript zu berechnen.
Greets, Mika
Nochmal Anmerkung die auch p-dehnert schon gemacht hat, teilweises Be/Entladen ist damit nicht darstellbar. Aber wenn ich mir mal den Loading Report anschaue finde ich sicherlich nen Weg den Ladestand einfach im Skript zu berechnen.
Greets, Mika
Das glaube ich euch ja auch.
Aber ich habe noch nie mit Industrien gearbeitet , so dass ich die Teilbeladung nicht prüfen kann.
Tilo
Alles anzeigenNochmal Anmerkung die auch p-dehnert schon gemacht hat, teilweises Be/Entladen ist damit nicht darstellbar. Aber wenn ich mir mal den Loading Report anschaue finde ich sicherlich nen Weg den Ladestand einfach im Skript zu berechnen.
Greets, Mika
im grunde genommen, würde es doch ausreichen, wenn man die Frames der Animation in 10 Schritte aufteilt.
Hat einer der Wagen nun alles, was noch in der Industrie vorrätig war, aufgenommen und ist zB nur 63% voll, so lässt man die Animation auch nur bis zu dem 6 Schritt fahren und beendet diese dort.
Frage ist erstmal, wie genau, und wie verhüllte sich, wenn man dann nachträglich noch mal etwas dazu laden möchte...
Nicht das die Animation von vorn beginnt...
Noch eine Frage, ist der Zug in diesem Zeitraum auch 'festgesetzt', also, kann man in der Zeit überhauptnoch interagieren?
Klar, das hätte ich auch gemacht. Zuladen sollte kein Problem sein, denn SetMeshAnimationFrame bewegt sich immer vom aktuellen Frame zum angegebenen.
Theoretisch ist wird der Zug immernoch fixiert. Vielleicht weiss einer der älteren und erfahreneren Skripter hier, wie BSI das damals gelöst hat? Es scheint einen Weg zu geben, das Fixieren per Skript zu verhindern, aber der geht leider noch ein wenig über meinen Horizont hinaus.
Greets, Mika
Der LoadingReport besitzt zwei ProductQueue-Member, von denen einer auf die Quell- und der andere auf die Zielqueue referenziert.
Dann wird aus dem Code von Mika eben das hier:
float GetLoadTime(LoadingReport report)
{
// Vehicle erbt von MapObject. GetQueues liefert eine Liste aller Produktwarteschlangen
// eines MapObjects
ProductQueue[] myQueues = GetQueues();
// Da LoadingReport keinen Verweise auf die jeweilige Ladungsart (also Be- oder entladung) enthält
// schauen wir einfach in dieser Liste nach, ob die Quellqueue (also von der Objekte weggetragen
// werden) eine von den unseren ist, wenn ja, brechen wir ab und setzen bUnloaded auf "true"
int i;
bool bUnloaded = false;
float fTargetFrame = 0.0f;
for(i = 0; i < myQueues.size(); i++)
{
if(myQueues[i] != report.srcQueue)continue;
bUnloaded = true;
break;
}
ProductQueue myQueue = null;
if(bUnloaded) myQueue = report.srcQueue;
else myQueue = report.dstQueue;
// Für X Produkte brauche ich eine Zeit von...
float fTime = 10.0f * report.amount / myQueue.GetQueueSize();
// Diese X Produkte nehmen Frames ein ...
float fRelativeFrame = GetMeshAnimationFrameCount("load") * report.amount / myQueue.GetQueueSize();
// Wenn ich entladen werde, muss ich fRelativeFrame vom aktuellen Frame abziehen
// Wenn ich beladen werde, muss ich fRelativeFrame zum aktuellen Frame zuzählen
if(bUnloaded) fTargetFrame = GetMeshAnimationFrame("load") - fRelativeFrame;
else fTargetFrame = GetMeshAnimationFrame("load") + fRelativeFrame;
SetMeshAnimationFrame("load", fTargetFrame, fTime);
return fTime;
}
Alles anzeigen
Dürfte so funktionieren.
Eine Sache ist allerdings ungeklärt: Wie verhält sich "SetMeshAnimationFrame"? Läuft es nur vorwärts, oder nimmt es den Weg ohne Looping-Effect (also rückwärts, wenn der aktuelle Frame größer ist als der neue) ? Das muss getestet werden.
Mit dem Script ist es aber auch egal, wie viele Frames die Animation hat, die Berechnung findet auf Basis der verwendeten Framezahl statt, nicht auf einen festgelegten Wert von 30 Frames.
Leider verstehe ich zu wenig davon , um eine sinnvolle Antwort zu geben.
Aber ich bin auf eure Resultate gespannt.