LUAScript - Variablen ändern in Echtzeit?

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

 

SlasHeR

Betreff: LUAScript - Variablen ändern in Echtzeit?

BeitragFr, Jun 02, 2006 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich überlege immernoch ob ich den Titel des Threads richtig gewählt habe..

Nunja ich bin mit der LUA-Geschichte nun schon etwas vorran gekommen, Jolinah hat den Code erweitert und Tablesupport hinzugefügt...
Allerdings sehr langsam das ganz 2 sekunden!?


Egal darauf will ich garnicht eingehen sondern eher auf mein Problem:

Code: [AUSKLAPPEN]

//Pseudocode

var1 = "wert1"
print var1
runscript(scriptname, ) // führt das lua script aus, und ruft funktion foo auf, mit dem parameter: var1
print var1



Das Lua-Script sieht in etwa so dazu aus:
Code: [AUSKLAPPEN]

function foo(var1)
  var1 = "wert2"
end


Wie weise ich den wert2 überhaupt var1 zu ohne eine weitere funktion zu erstellen?

Bzw. wie muss der BlitzMax Code aussehen, ohne dass ich den Lua-Script code verändern muss, damit BMax die Veränderung der Variable merkt?


EDIT:

Ich bin grade dabei eine Lösung dafür zu besorgen, Stichwort Metatables.
Sobald ich was habe, werde ich es hier posten.
Falls jemand anders schon eine Lösung hat, würde ich mich trotzdem drüber freuen

Rone

BeitragSa, Jun 17, 2006 6:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
also ich habe das mal so in der Art gemacht


main.bmx:
Code: [AUSKLAPPEN]

Global SEObject:ScriptEngine = New ScriptEngine
SEObject.AddFunction(LUA_SetValues,"SetValues")

Global  text:String="wert1"
global  wert1:int,wert2:int

Function LUA_SetValues:Int(ls:Byte Ptr)
   text             = SEObject.CheckString(ls,1)
   wert1      = SEObject.CheckNumber(ls,2)
   wert2      = SEObject.CheckNumber(ls,3)
End Function

If (Not SEObject.RunScriptFile("test.lua")) Then
               Notify "Error: " + SEObject.GetLastErrorString()
endif



test.lua:
Code: [AUSKLAPPEN]

SetValues("wert2",2,3)


Hab das LUA Modul gar nicht mehr.
Sad ist das nur bei der Demo schon dabei?

Weiß vielleicht jemand wo man das her bekommt?

mfg
 

SlasHeR

BeitragSa, Jun 17, 2006 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist, das es objektorientiert sein muss.

Ich habe aber schon eine Lösung gefunden:

bchar.lua
Code: [AUSKLAPPEN]

module("bchar", package.seeall)

local mt = {}
local methods = {}

-- BMAX-Lesen
function mt:__index (key)
  if key == "x" then return Char_GetX(self.data.id) end
 
  if methods[key] ~= nil then return methods[key] end
  return self[key]
end

-- BMAX-Schreiben
function mt:__newindex (key, value)
  if key == "x" then Char_SetX(self.data.id, value) return end
   
  self[key] = value
end

-- functions

function create (id)
  local o = {}
  o.data = {}
  o.data.id = id
  setmetatable(o, mt)
  return o
end


Code: [AUSKLAPPEN]

require "bchar"

function Char_SetX (id, value)
 MyPrint ("Schreibe X für ID:" .. id)
end

function Char_GetX (id)
 MyPrint ("Lese X für ID:" .. id)
 return 12345
end

function test()
   --Erstelle ein neues bchar-Objekt
  local pl = bchar.create(123)
   pl.x = 1337  --schreiben
   print(pl.x) --lesen
end

test()



Die Funktionen wie function Char_SetX (id, value) kann man dann in Bmax proggen und nach LUA als Funktion exportieren, um dann z.b. die Variablen zu ändern. Somit hat man dann richtige Objekte auch in LUA.

Das einzige woran es noch hängt ist so ein Objekt aus BMAX nach Lua zu senden.
Ich wollte eigentlich erst darauf warten und dann ein kleines Tutorial dazu schreiben, wenns läuft.
Wink

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group