Ausrichtung eines Fahrzeugs

Benutzeravatar
Jonny48
Beiträge: 16
Registriert: Di Nov 01, 2016 3:50 pm
Kontaktdaten:

Ausrichtung eines Fahrzeugs

Beitragvon Jonny48 » Di Nov 01, 2016 4:15 pm

Hallo.
Dies ist zwar ein LS Forum, aber vlt. könntet ihr mir auch bei meinem Problem behilflich sein :)
ich versuche für den SRS ein Script zu programmieren, welches ein Fahrzeug auf Knopfdruck auf dem Boden fixiert und deren Rotation ändert.
Das fixieren hab ich/wir durch das Tauschen des RigidBodyTypes erziehlt. Nun soll sich die Rotation des Objektes entweder wenn angegeben kommplet auf die xml beziehen, also wenn alle werte gegeben sind, oder wenn ein wert absichtlich fehlt den aktuellen aus dem Spiel holen. Dies habe ich jetzt so probiert.

Code: Alles auswählen

function alignment:swapalignment(id, state, noEventSend)
   changealignmentEvent.sendEvent(self, id, state, noEventSend);
   self.alignmentNodes[id].state = state;
   -- Rotation
   local self.x, self.y, self.z = getWorldRotation(self.alignmentNodes[id].nodeRO)
   if state then
      setRotation(self.alignmentNodes[id].nodeRO, self.alignmentNodes[id].rotX, self.y, self.alignmentNodes[id].rotZ);
   end;
end;

Hier ist vorerst fest definiert, dass er sich immer den y wert suchen muss. Da dies allerdings nicht funktioniert, und ich nach mehreren versuchen immernoch nicht schlauer bin, möchte ich mal um Mithilfe bitten.
Wie ihr seht befinde ich mich noch ganz am anfang des Scripten :mrgreen:

Benutzeravatar
modelleicher
Schwabenleiter
Schwabenleiter
Beiträge: 2371
Registriert: Mo Jun 28, 2010 2:04 pm

Re: Ausrichtung eines Fahrzeugs

Beitragvon modelleicher » Di Nov 01, 2016 9:30 pm

Moin..

So ganz ist mir nicht klar was du vor hast mit dem ganzen. Auch fehlt ein bisschen mehr Info zum Rest des Scripts bzw. zum genauen Problem, also was nicht funktioniert.. Das ganze Script oder nur die Funktion..?

Was mir auffällt:
Entweder local oder self.
self ist ein Table in dem sich alle zum Fahrzeug gehörenden Variablen/Tables befinden.. local definiert eine lokale Variable die nur innerhalb des Blocks gültig ist.

Also local x, y, z machen, oder self.x, self.y, self.z ohne das local davor.

Dann,
du liest mit getWorldRotation() die Rotation aus. WorldRotation ist die absolute Rotation relativ zum 0 Punkt der Welt.. Weiß nicht ob du das willst. getRotation() hingehen würde die Rotation relativ zum parent-Objekt auslesen.
setRotation() setzt den Rotationswert immer relativ zum parent-Objekt, falls also das parent-Objekt deines Objekts nicht die absolute Rootnode ist bewegst du dich da in zwei Wertebereichen.

Aber wie gesagt, wenn du den Rest des Scripts zeigst und sagst was genau nicht funktioniert (bzw. was du weißt dass funktioniert) und evtl. erklärst was du vor hast kann ich dir besser helfen..


LG

Benutzeravatar
Jonny48
Beiträge: 16
Registriert: Di Nov 01, 2016 3:50 pm
Kontaktdaten:

Re: Ausrichtung eines Fahrzeugs

Beitragvon Jonny48 » Mi Nov 02, 2016 6:08 am

Hey,
Also das Script dieht dazu, dass sich ein Objekt wie Beispielsweise ein Imbisshänger oder in meinem Falle eine Schneekanone Waagerecht auf einem Hang ausrichtet. Hier ist erstmal mein volständiges Script.

Code: Alles auswählen

--
-- alignment
--
-- @author Tom Wießner
-- @date 09/10/16
-- @lastEdit 18/10/16
--
-- specialization to the horizontal orientation of a vehicle
-- spezialisation zur waagerechten Ausrichtung eines Fahrzeugs
--
-- (c) by Tom Wießner, all rights reserved!
-- using only with premission
 
alignment = {};

function alignment.prerequisitesPresent(specializations)
    return true;
end;

function alignment:load(xmlFile)
   self.swapalignment = SpecializationUtil.callSpecializationsFunction("swapalignment");
   self.alignmentNodes = {};
   
   local i=0;
   while true do
      local nO = getXMLString(xmlFile, string.format("vehicle.alignments.alignment(%d)#normalObject", i));
      local nA = getXMLString(xmlFile, string.format("vehicle.alignments.alignment(%d)#activeObject", i));
      local rO = getXMLString(xmlFile, string.format("vehicle.alignments.alignment(%d)#rotObject", i));
      local rX = getXMLFloat(xmlFile, string.format("vehicle.alignments.alignment(%d)#rotX", i));
      local rY = getXMLFloat(xmlFile, string.format("vehicle.alignments.alignment(%d)#rotY", i));
      local rZ = getXMLFloat(xmlFile, string.format("vehicle.alignments.alignment(%d)#rotZ", i));
        local RBT = getXMLBool(xmlFile, string.format("vehicle.alignments.alignment(%d)#changeDynamicStatic", i));
      local input = getXMLString(xmlFile, string.format("vehicle.alignments.alignment(%d)#inputName", i));
      if nO == nil or nA == nil or input == nil or rO == nil or RBT == nil then
          print("[Error::alignment.lua] One or more entrys ar nil or incorrectly entered. Please Check your Vehicle.xml and look for errors");
         break;
      end;
      local node1 = Utils.indexToObject(self.components, nO);
      local node2 = Utils.indexToObject(self.components, nA);
      local node3 = Utils.indexToObject(self.components, rO);
      if node1 == nil then
         print("[Error::alignment.lua] normalObject for "..tostring(str).." is nil or incorrectly entered");
         break;
      end;
      if node2 == nil then
         print("[Error::alignment.lua] activeObject for "..tostring(str).." is nil or incorrectly entered");
         break;
      end;
      if node3 == nil then
         print("[Error::alignment.lua] rotObject for "..tostring(str).." is nil or incorrectly entered");
         break;
      end;
      
      self.alignmentNodes[i+1] = {};
      self.alignmentNodes[i+1].nodeVN = node1;
      self.alignmentNodes[i+1].nodeVA = node2;
      self.alignmentNodes[i+1].nodeRO = node3;
      self.alignmentNodes[i+1].rotX = rX;
      self.alignmentNodes[i+1].rotY = rY;
      self.alignmentNodes[i+1].rotZ = rZ;
      self.alignmentNodes[i+1].nodeRBT = RBT;
      self.alignmentNodes[i+1].inputName = input;
      self.alignmentNodes[i+1].state = false;
      i = i + 1;
   end;
end;

function alignment:delete()
end;

function alignment:mouseEvent(posX, posY, isDown, isUp, button)
end;

function alignment:keyEvent(unicode, sym, modifier, isDown)
end;

function alignment:update(dt)
    if self:getIsActiveForInput() then
      for i=1, #self.alignmentNodes do
         if InputBinding.hasEvent(InputBinding[self.alignmentNodes[i].inputName]) then
            self:swapalignment(i, not self.alignmentNodes[i].state);
         end;
      end;
   end;
end;

function alignment:swapalignment(id, state, noEventSend)
   changealignmentEvent.sendEvent(self, id, state, noEventSend);
   self.alignmentNodes[id].state = state;
   -- changeVisibleObjects
   setVisibility(self.alignmentNodes[id].nodeVN, not state);
   setVisibility(self.alignmentNodes[id].nodeVA, state);
   -- Rotation4
   local x,y,z = getWorldRotation(self.alignmentNodes[id].nodeRO);
   if state then
       if self.alignmentNodes[id].rotX == nil then
          setRotation(self.alignmentNodes[id].nodeRO, x, self.alignmentNodes[id].rotY, self.alignmentNodes[id].rotZ);
      end;
       if self.alignmentNodes[id].rotY == nil then
          setRotation(self.alignmentNodes[id].nodeRO, self.alignmentNodes[id].rotX, y, self.alignmentNodes[id].rotZ);
      end;
       if self.alignmentNodes[id].rotZ == nil then
          setRotation(self.alignmentNodes[id].nodeRO, self.alignmentNodes[id].rotX, self.alignmentNodes[id].rotY, z);
      end;
       if not self.alignmentNodes[id].rotX == nil or self.alignmentNodes[id].rotY == nil or self.alignmentNodes[id].rotZ == nil then
          setRotation(self.alignmentNodes[id].nodeRO, self.alignmentNodes[id].rotX, self.alignmentNodes[id].rotY, self.alignmentNodes[id].rotZ);
      end;
   end;
    -- changeCollisionType
    if self.alignmentNodes[id].nodeRBT then
       if state then
         setRigidBodyType(self.alignmentNodes[id].nodeRO, "Kinematic");
      else
         setRigidBodyType(self.alignmentNodes[id].nodeRO, "Dynamic");
      end;
   end;

end;

function alignment:updateTick(dt)
end;

function alignment:draw()
   if self:getIsActiveForInput() then
      for i=1, #self.alignmentNodes do
         g_currentMission:addHelpButtonText(g_i18n:getText(self.alignmentNodes[i].inputName), InputBinding[self.alignmentNodes[i].inputName]);
      end;
   end;
end;
--loadFromAttributes
function alignment:loadFromAttributesAndNodes(xmlFile, key, resetVehicles)   
   for i=1, #self.alignmentNodes do
      local state = getXMLBool(xmlFile, key..string.format("#alignmentNode%d", i));
      if state ~= nil then
         self:swapalignment(i, state, true);
      end;
   end;
   
   return BaseMission.VEHICLE_LOAD_OK;
end;
-- saveAttributes
function alignment:getSaveAttributesAndNodes(nodeIdent)
   local attributes = "";
   for i=1, #self.alignmentNodes do
      local key = string.format(" alignmentNode%d",i);
      attributes = attributes..key..'="'..tostring(self.alignmentNodes[i].state)..'"';
   end;
   return attributes, nil;
end;

-- changealignmentEvent

changealignmentEvent = {};
changealignmentEvent_mt = Class(changealignmentEvent, Event);

InitEventClass(changealignmentEvent, "changealignmentEvent");

function changealignmentEvent:emptyNew() 
   local self = Event:new(changealignmentEvent_mt );
   self.className="changealignmentEvent";
   return self;
end;

function changealignmentEvent:new(vehicle, id, savealignmentState)
   local self = changealignmentEvent:emptyNew()
   self.vehicle = vehicle;
   self.id = id;
   self.savealignmentState = savealignmentState;
   return self;
end;

function changealignmentEvent:readStream(streamId, connection)
   local id = streamReadInt32(streamId);
   self.vehicle = networkGetObject(id);
   self.id = streamReadInt32(streamId);
   self.savealignmentState = streamReadBool(streamId);
   self:run(connection);
end;

function changealignmentEvent:writeStream(streamId, connection)
   streamWriteInt32(streamId, networkGetObjectId(self.vehicle));
   streamWriteInt32(streamId, self.id);   
   streamWriteBool(streamId, self.savealignmentState);
end;

Wie im swapalignment Teil zusehen ließt das Script, insofern es mal läuft, werte aus der xml ab und wenn einer fehlt (bewusst), dann soll der sich die aktuellen Werte aus dem Spiel nehmen. Damit Das objekt später nicht in der Luft schwebt, habe ich setVisibility(nodeVA) als aktive ausgefahrene stütze, und setVisibility(nodeVN) als normale eingefahrene Stütze definiert. Desweiteren wird, insofern changeDynamicStatic true ist, das Fahrzeug am Boden fixiert. Wie du ja richtig gesagt hast, läd er als fehlenden Rotationswert immer 0. Ich weiß aber leider nicht, was ich noch einfügen muss, damit er den aktuellen stand in der Welt nimmt :?
Das mit dem local vor dem self war nur ein Test, welchen ich noch nicht gelöscht hatte. Ich hatte alle warianten durchprobiert und dann kam halt das local vor dem self ;)

Benutzeravatar
Jonny48
Beiträge: 16
Registriert: Di Nov 01, 2016 3:50 pm
Kontaktdaten:

Re: Ausrichtung eines Fahrzeugs

Beitragvon Jonny48 » Mi Nov 02, 2016 5:28 pm

Moment.
Ich glaube die Code-Ansicht bei phpBB ist nicht so gut geeignet ;)
Hier mal das Script zum Download.
Download alignment.lua

Benutzeravatar
modelleicher
Schwabenleiter
Schwabenleiter
Beiträge: 2371
Registriert: Mo Jun 28, 2010 2:04 pm

Re: Ausrichtung eines Fahrzeugs

Beitragvon modelleicher » Mi Nov 02, 2016 9:12 pm

Nabend,

So jetzt hab ich mal ne Minute, also..

In erster Linie geht es dir ja darum ein Objekt exakt Waagrecht auszurichten wenn ich das richtig verstehe?

Da würde ich die Funktion setDirection() empfehlen. Einziger Nachteil, das Objekt das ausgerichtet werden soll, der Pivot muss so positioniert sein dass die positive Z Achse senkrecht nach oben zeigt in waagrechter Position.

Code: Alles auswählen

local bx, by, bz = getWorldTranslation(self.alignmentNodes[id].nodeRO);
local x, y, z = worldDirectionToLocal(getParent(self.alignmentNodes[id].nodeRO), bx-bx, by-(by+100), bz-bz);
setDirection(self.alignmentNodes[id].nodeRO, x, y, z, 0, 0, 1);


So in etwa.. Dadurch wird das Objekt auf den Wert by+100 also 100m über by ausgerichtet, sprich senkrecht nach oben.. Theoretisch.
Meine realisticIndoorCamera im LS11 damals hatte ich auf diese Art und Weise gemacht.. Ist aber schon ne Weile her daher hoffe ich dass meine Erinnerung noch richtig ist mit oben genanntem Code-Beispiel ;)


LG

Benutzeravatar
Jonny48
Beiträge: 16
Registriert: Di Nov 01, 2016 3:50 pm
Kontaktdaten:

Re: Ausrichtung eines Fahrzeugs

Beitragvon Jonny48 » Mi Nov 02, 2016 9:26 pm

Danke erstmal.
Frage:
Ich hab den Nachteil von setDirection glaub nicht richtig verstanden. Also müsste die z Achse einen Wert von +0> haben.
Ich kann leider gerade nicht nachschauen, aber ich glaube aufgrund der geographischen Gegebenheiten werden sich glaub alle Achsen in einen positiven als auch negativen wert begeben müssen. Die Y Achse wird keine Beschränkung haben können. Da die x und z Achse ja die kippbewegungen sind, werden sich diese wohl in einem bereich von +40 bis -40 bewegen. Wenn ich das jetzt richtig verstanden habe, wäre das ja ein problem oder?
Auf jeden Fall schon mal vielen Dank für die Mithilfe! Sowas ist man woanders leider nicht gewöhnt...

Benutzeravatar
modelleicher
Schwabenleiter
Schwabenleiter
Beiträge: 2371
Registriert: Mo Jun 28, 2010 2:04 pm

Re: Ausrichtung eines Fahrzeugs

Beitragvon modelleicher » Mi Nov 02, 2016 9:40 pm

Also.. Was der Pivot ist weißt du?

Wenn du im GE ein Modell anklickst hast du ja diesen Kreis mit den Pfeilen an denen du es packen kannst und verschieben/rotieren usw.

Da der blaue Pfeil ist die +Z Achse.. setDirection richtet immer den blauen Pfeil auf den Referenzpunkt aus. Wenn man also das Fahrzeug immer waagrecht haben will muss der Referenzpunkt über dem 0 Punkt des Objekts sein und zwar genau senkrecht darüber.

D.h. der blaue Pfeil muss in "Ruhestellung" also im GE senkrecht nach oben zeigen, sodass wenn der Wagen am Hang schräg steht und du die Funktion aufrufst der Wagen sich so ausrichtet dass er senkrecht nach oben zeigt.


Es gibt bestimmt auch alternative Methoden, allerdings fällt mir da jetzt spontan nix ein. Bin mir nicht sicher bzw. denke dass worldToLocal und localToWorld nicht für rotation funktioniert (müsst ich mal nachprüfen).
Wenn du mit setRotation arbeitest hast du eben immer das Problem mit den lokalen also in Relation zum Parent-Objekt stehenden Werten und den globalen Werten..
Das was du vor hast verlangt ja nach globalen Werten, die dann aber in lokale umgewandelt werden müssen um das Objekt zu positionieren.



LG

Benutzeravatar
Jonny48
Beiträge: 16
Registriert: Di Nov 01, 2016 3:50 pm
Kontaktdaten:

Re: Ausrichtung eines Fahrzeugs

Beitragvon Jonny48 » Do Nov 03, 2016 6:07 am

So. hab dies mal eingebaut. Dies sah dan halt so aus:

Bild

Jetzt im Spiel wurde die Kanone beim Kauf anscheinend auf die Werte 0 0 0 zurück gesetzt.

Bild

Wenn ich nun die Taste drücke, dreht sie sich unter die Welt.

Bild

So jetzt meine frage. Was hab ich im GE falsch gemacht? ich hab dediglich, das im script definierte rotObject oder auch nodeRO auf der x Achse um 90 Grad gedreht.

Benutzeravatar
MB-M@x
Moderator
Moderator
Beiträge: 171
Registriert: Mi Okt 12, 2011 6:04 am
Wohnort: Orsfeld

Re: Ausrichtung eines Fahrzeugs

Beitragvon MB-M@x » Do Nov 03, 2016 10:38 am

sieht nach 180° Gedreht aus...für mich....

Benutzeravatar
modelleicher
Schwabenleiter
Schwabenleiter
Beiträge: 2371
Registriert: Mo Jun 28, 2010 2:04 pm

Re: Ausrichtung eines Fahrzeugs

Beitragvon modelleicher » Do Nov 03, 2016 11:08 am

Hmmm...

Also dass es jetzt beim Händler so steht ist doof.. Das liegt vermutlich daran weil das Shop-Script wiederum erwartet dass der Pivot des Objekts in reguläre Richtungen zeigt.. Mist. Was da jetzt schief gelaufen ist dass es sich beim ausrichten nach unten und nicht nach oben ausrichtet, nicht sicher... Evtl. Denkfehler meinerseits und man müsste einen der Werte invertieren. Aber hilft ja nix wenn das Teil beim Kauf nicht vernünftig steht..

Aber, mal was ganz anderes. Das zu ausrichtende Objekt ist immer die Rootnode, also Hauptkollision?

Das Parent-Objekt der RootNode dürfte die Welt sein.. D.h. wenn du mit getRotation() die Rotation ausliest dürftest du absolute Werte bekommen.. Das würde das ganze deutlich einfacher machen.
(Du könntest auch erst mal testen ob getRotation und getWorldRotation die selben Werte zurück geben, wenn ja dann Parent-Objekt = Welt)

local rx, ry, rz = getRotation(self.alignmentNodes[id].nodeRO);
rx = math.rad(0);
rz = math.rad(0);
setRotation(self.alignmentNodes[id].nodeRO, rx, ry, rz);

Wenn das Objekt waagerecht stehen soll sind X und Z Achse ja 0.. Nur die Y Achse bestimmt dann die Ausrichtung.

Bei dem Prinzip muss der Pivot aber wieder auf ursprüngliche Position.. Muss er aber ja sowieso wegen dem Shop.

Damit wären wir dann wieder fast bei deiner ursprünglichen Idee angekommen :D

Die Alternative wäre dass du nicht die Rootnode ausrichtest sondern eine Untergruppe davon, dann kannst du setDirection verwenden und das Gerät steht nach dem Kauf trotzdem nicht schief.


LG

Benutzeravatar
MB-M@x
Moderator
Moderator
Beiträge: 171
Registriert: Mi Okt 12, 2011 6:04 am
Wohnort: Orsfeld

Re: Ausrichtung eines Fahrzeugs

Beitragvon MB-M@x » Do Nov 03, 2016 1:24 pm

Mir kommt da gerade ein Mod ins Gedächtnis der sowas ähnliches will:
https://www.modhoster.de/mods/new-holland-al-pack-autoleveling-combines

Wie ist das da gelöst ist, va im Verhältnis zu deinem, ist vom gedanken her ähnlich. Das könnte vielleicht schon einen Lösungansatz bieten ;) Schau doch mal da in die Lua's :)

Benutzeravatar
Jonny48
Beiträge: 16
Registriert: Di Nov 01, 2016 3:50 pm
Kontaktdaten:

Re: Ausrichtung eines Fahrzeugs

Beitragvon Jonny48 » Do Nov 03, 2016 7:58 pm

Also nachdem ich mir das Script DelayedRotation angesehen habe und dementsprechend auch im GDN nach codes gesucht habe bin ich durch zufall auf diese funktion gestoßen. Könnte das was sein?

Zu der Option, welche modelleicher zuletzt sagte. Ungern ;) Weil dies bei 25 Objekten dann nicht so toll werden würde. Außer ihr richtet hier eine Moddervermittlung ohne bezahlung ein ;) :P

Benutzeravatar
modelleicher
Schwabenleiter
Schwabenleiter
Beiträge: 2371
Registriert: Mo Jun 28, 2010 2:04 pm

Re: Ausrichtung eines Fahrzeugs

Beitragvon modelleicher » Do Nov 03, 2016 8:31 pm

Diese Funktion dürfte es im SRS noch gar nicht geben.. Oder gab es da in der Zwischenzeit mal ein Update? Die ist in der neuesten Version der Engine integriert (LS17)
Im übrigen bräuchtest du auch das Gegenteil davon.. Globale Rotation.

Hast du mal meinen Vorschlag probiert, also schauen ob getRotation und getWorldRotation die selben Werte zurück geben? (Im Falle der Tatsache dass es sich bei deinen Objekten immer um die Rootnode handelt)

Dann müsstest du dir keine Gedanken um lokal/global machen und kannst im Prinzip das machen was du ganz am Anfang schon vor hattest.


LG

Benutzeravatar
Jonny48
Beiträge: 16
Registriert: Di Nov 01, 2016 3:50 pm
Kontaktdaten:

Re: Ausrichtung eines Fahrzeugs

Beitragvon Jonny48 » Mo Nov 07, 2016 1:53 pm

modelleicher hat geschrieben:Diese Funktion dürfte es im SRS noch gar nicht geben.. Oder gab es da in der Zwischenzeit mal ein Update? Die ist in der neuesten Version der Engine integriert (LS17)

Nein leider nicht. Auf diverse anfragen zu einem update oder eine Scriptoffenlegung wurde mir immer eine Absage erteilt...
Also ich hab es jetzt mal mit einem neuen script probiert, welches die werte ermitteln soll. Allerdings hab ich irgendwo ein Fehler reingehauen, welchen ich irgendwie nicht finde. Habt ihr eine Idee :roll:

Code: Alles auswählen

test = {};

function test.prerequisitesPresent(specializations)
    return true;
end;

function test:load(xmlFile)
    self.testH = Utils.indexToObject(self.components, getXMLString(xmlFile, "vehicle.test.test#objectHIndex"));
   self.savetestState = false;
end;

function test:delete()
end;

function test:mouseEvent(posX, posY, isDown, isUp, button)
end;

function test:keyEvent(unicode, sym, modifier, isDown)
end;

function test:update(dt)
    if self:getIsActiveForInput() then
       if InputBinding.hasEvent(InputBinding.testH) then
            self.savetestState = not self.savetestState;
          if self.savetestState == true then
             self.x, self.y, self.z = getRotation(self.testH);
          self.Wx, self.Wy, self.Wz = getWorldRotation(self.testH);
          end;
      end;
   end;
end;

function test:updateTick(dt)
end;

function test:draw()
       g_currentMission:addHelpButtonText(g_i18n:getText("testH"), InputBinding.testH);
end;

-- Save
--[[function test:getSaveAttributesAndNodes(nodeIdent)
   if self.savetestState == true then
      --RX = '"' .. self.x .. '"';
      --RY = '"' .. self.y .. '"';
      --RZ = '"' .. self.z .. '"';
      --WX = '"' .. self.Wx .. '"';
      --WY = '"' .. self.Wy .. '"';
      --WZ = '"' .. self.Wz .. '"';
      RX = self.x;
      RY = self.y;
       RZ = self.z;
      WX = self.Wx;
      WY = self.Wy;
      WZ = self.Wz;
       local attributes = 'rotationX="' .. RX .. '"';
      local attributes = 'rotationY="' .. RY .. '"';
      local attributes = 'rotationZ="' .. RZ .. '"';
      local attributes = 'worldX="' .. WX .. '"';
      local attributes = 'worldY="' .. WY .. '"';
      local attributes = 'worldZ="' .. WZ .. '"';
   end;
    return attributes, nil;
end;]]

Eigendlich ganz simple

Benutzeravatar
modelleicher
Schwabenleiter
Schwabenleiter
Beiträge: 2371
Registriert: Mo Jun 28, 2010 2:04 pm

Re: Ausrichtung eines Fahrzeugs

Beitragvon modelleicher » Mo Nov 07, 2016 2:05 pm

Sehe auf den ersten Blick auch nix..

Aber du kannst dir die Werte einfach live ausgeben lassen.. RenderText gibt es doch in SRS schon oder?

Code: Alles auswählen

function test:update(dt)
    if self:getIsActiveForInput() then
       if InputBinding.hasEvent(InputBinding.testH) then
            self.savetestState = not self.savetestState;
          if self.savetestState == true then
             self.x, self.y, self.z = getRotation(self.testH);
             self.Wx, self.Wy, self.Wz = getWorldRotation(self.testH);
             renderText(0.1, 0.9, 0.02, "self.x: "..tostring(self.x).."self.y: "..tostring(self.y).."self.z: "..tostring(self.z));
             renderText(0.1, 0.87, 0.02, "self.Wx: "..tostring(self.Wx).."self.Wy: "..tostring(self.Wy).."self.Wz: "..tostring(self.Wz));
          end;
      end;
   end;
end;


Benutzeravatar
Jonny48
Beiträge: 16
Registriert: Di Nov 01, 2016 3:50 pm
Kontaktdaten:

Re: Ausrichtung eines Fahrzeugs

Beitragvon Jonny48 » Mo Nov 07, 2016 6:54 pm

So nach mehreren Scriptschwierigkeiten habe ich nun die Erkenntniss!
Aufgepasst :o
Alle Werte (leider) nil :cry:

Benutzeravatar
modelleicher
Schwabenleiter
Schwabenleiter
Beiträge: 2371
Registriert: Mo Jun 28, 2010 2:04 pm

Re: Ausrichtung eines Fahrzeugs

Beitragvon modelleicher » Mo Nov 07, 2016 9:34 pm

Wenn alle Werte nil sind wäre das naheliegendste dass self.testH nil ist..

print(tostring(self.testH));

Das mal ins load rein packen.. Wenn das nil ist stimmt iwas mit deiner Abfrage aus der XML nicht.. Oder du kontrollierst gleich noch mal deine XML Einträge gegen die Script Einträge.. ;)

Meist sinds die Kleinigkeiten die einen in den Wahnsinn treiben..


LG

Benutzeravatar
Jonny48
Beiträge: 16
Registriert: Di Nov 01, 2016 3:50 pm
Kontaktdaten:

Re: Ausrichtung eines Fahrzeugs

Beitragvon Jonny48 » Di Nov 08, 2016 12:20 pm

OHA.
Das kann durchaus sein, weil mein momentaner Index 0> ist, und das Spiel erst nach dem 0>anfäng zu zählen. Eine sehhhr gute Idee. Bin nicht mal ich drauf gekommen, obwohl ich früher selbst das 0> beim ingamen weggelassen habe :lol:
Zuletzt geändert von Jonny48 am Di Nov 08, 2016 1:02 pm, insgesamt 1-mal geändert.

Benutzeravatar
modelleicher
Schwabenleiter
Schwabenleiter
Beiträge: 2371
Registriert: Mo Jun 28, 2010 2:04 pm

Re: Ausrichtung eines Fahrzeugs

Beitragvon modelleicher » Di Nov 08, 2016 1:01 pm

Keine Ahnung wie es im SRS ist aber im LS seit LS15 mindestens funktioniert 0> als Index Angabe.. ;)

Aber prüfe lieber noch mal alles nach.

Wie gesagt, den Index ausprinten im Script.. Überhaupt wenn irgendwas nicht funktioniert ist es immer hilfreich alle Einzelnen Schritte mit renderText oder print zu debuggen dann sieht man schnell an welcher Stelle der Fehler auftritt..
Sonst sucht man an der Stelle an der man den Verdacht hat und oft ist es was ganz anderes... Selbst schon oft genug gemach. :lol:


LG

Benutzeravatar
Jonny48
Beiträge: 16
Registriert: Di Nov 01, 2016 3:50 pm
Kontaktdaten:

Re: Ausrichtung eines Fahrzeugs

Beitragvon Jonny48 » Di Nov 08, 2016 7:03 pm

Ok habs den index mal auf ein Rad gelenkt. Auf den index 0>0. Da kam folgendes raus:

Code: Alles auswählen

[Error::visible] self.x: -0.0013570407172665self.y: -3.0790160963079e-005self.z: -2.8951646413589e-007
[Error::visible] self.Wx: -0.0013570407172665self.Wy: -3.0790160963079e-005self.Wz: -2.8951646413589e-007
[Error::visible] self.x: 3.1401474475861self.y: -0.18538229167461self.z: -3.1415627002716
[Error::visible] self.Wx: 3.1401474475861self.Wy: -0.18538229167461self.Wz: -3.1415627002716
[Error::visible] self.x: 2.4961528778076self.y: -0.50493568181992self.z: -1.954577088356
[Error::visible] self.Wx: 2.4961507320404self.Wy: -0.50493568181992self.Wz: -1.954577088356

Wie zu sehen sind die Werte immer identisch. Ich hab den versuch mehrmals durchgeführt ;).
Hoffe, dass wir irgendwie immer noch meine idee mit setRotation durchsetzen können. Von dem anderem weiß ich nähmlich noch überhaupt nix ;)


Zurück zu „Fragen und Probleme rund ums Modding“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast