Hi,
ich weiß das die ScriptDoku noch nicht raus ist aber vielleicht ja jemand eine Idee.
Es geht um folgendes.
Jeder kennt diese blauen Info Kreise bei denen man einen Text angezeigt bekommt wenn man drauf geht.
Was mich von Anfang an störte war, das man den Text nicht nach seinen Bedürfnissen anpassen kann.
Ich hab also mal ein bisschen gesucht und bin in der alten Script Doku auf den InfoSpotTrigger gestoßen.
Dieser löst beim betreten einen Sound auch und zeigt einen Infotext an. Nach einiger Zeit, bzw. wenn man die Maustaste drückt verschwindet das Fenster und auch der Trigger wird auf visibility=false geschaltet.
Hier mal das Script:
[lua]
customInfoTrigger = {}
local customInfoTrigger_mt = Class(customInfoTrigger);
function customInfoTrigger:onCreate(id)
g_currentMission:addUpdateable(customInfoTrigger:new(id));
end;
function customInfoTrigger:new(id)
local instance = {};
setmetatable(instance, customInfoTrigger_mt);
instance.triggerId = id;
addTrigger(id, "triggerCallback", instance);
instance.infoSymbol = getChildAt(id, 0);
local x, y, z = getTranslation(instance.infoSymbol);
instance.posY = y;
instance.jump = 0.05;
instance.isEnabled = true;
return instance;
end;
function customInfoTrigger:delete()
removeTrigger(self.triggerId);
end;
function customInfoTrigger:update(dt)
if self.isEnabled then
rotate(self.infoSymbol, 0, 0.005 * dt, 0);
self.jump = self.jump - 0.00015 * dt;
local x, y, z = getTranslation(self.infoSymbol);
setTranslation(self.infoSymbol, x, y + self.jump, z);
if y + self.jump <= self.posY then
self.jump = 0.05;
end;
if not getVisibility(self.triggerId) then
self.isEnabled = false;
end;
end;
end;
function customInfoTrigger:triggerCallback(triggerId, otherId, onEnter, onLeave, onStay)
if onEnter and self.isEnabled then
if (g_currentMission.player ~= nil and otherId == g_currentMission.player.rootNode) or (g_currentMission.controlledVehicle ~= nil and otherId == g_currentMission.controlledVehicle.components[1].node) then
if g_currentMission.infospotSound ~= nil then
playSample(g_currentMission.infospotSound, 1, 1, 0);
end;
g_currentMission:infospotTouched(triggerId);
self.isEnabled = false;
setVisibility(self.triggerId, false);
end;
end;
end;
[/lua]
Ich denke, der entscheidende Part wäre hier im triggerCallback Bereich zu setzten.
Diese Script möchte ich mir, in der Hoffnung das es funktioniert, so umschreiben, das er den Infotext aus einer externen xml Datei läd und anzeigt.
Die xml Datei habe ich wie folgt aufgebaut:
Der Name der Datei lautet customInfo.xml
Im Trigger sollte der Pfad zur XML Datei, der Pfad zur Sounddatei sowie die Nummer der Info (info1, info2 u.s.w) eingetragen werden.
Meine frage wäre jetzt, ist es möglich den Text aus der Datei auszulesen und anzeigen zu lassen und wenn ja, wie?
Hat da jemand eine Idee oder Tipps für mich?
lg
Webby