diff --git a/Nasal/aircraft.nas b/Nasal/aircraft.nas index f686b3949..8494b35e5 100644 --- a/Nasal/aircraft.nas +++ b/Nasal/aircraft.nas @@ -571,6 +571,67 @@ var livery_update = { }; +# canvas_livery +# ============================================================================= +# Class for Canvas based liveries +# +var canvas_livery = { + new: func(liveriesdir, interval = 10.01, callback = nili, resolution=4096) { + var m = { parents: [canvas_livery, overlay_update.new()] }; + m.parents[1].add(liveriesdir, "sim/model/livery/file", callback); + m.parents[1].interval = interval; + m.resolution = resolution; + m.targets = {}; + m.targetsByProperty = {}; + return m; + }, + stop: func { + me.parents[1].stop(); + }, + setResolution: func(resolution) { + }, + createTarget: func(name, objects, property, resolution=4096) { + me.targets[name] = { + canvas: nil, + layers: {}, + groups: {}, + listener: nil, + resolution: resolution, + }; + me.targets[name].canvas = canvas.new({ + "name": name, + "size": [resolution, resolution], + "view": [resolution, resolution], + "mipmapping": 1 + }); + foreach (var object; objects) { + me.targets[name].canvas.addPlacement({"node": object}); + } + me.targets[name].groups["base"] = me.targets[name].canvas.createGroup("base"); + me.targets[name].layers["base"] = me.targets[name].groups["base"].createChild("image").setFile(getprop(property)).setSize(resolution,resolution); + me.targetsByProperty[property] = name; + me.targets[name].listener = setlistener(property, func(property) { + me.targets[name].groups["base"].removeAllChildren(); + me.targets[name].layers["base"] = me.targets[name].groups["base"].createChild("image").setFile(property.getValue()).setSize(resolution,resolution); + }); + }, + addLayer: func(target, name, file) { + me.targets[target].groups[name] = me.targets[target].canvas.createGroup(name); + me.targets[target].layers[name] = me.targets[target].groups[name].createChild("image").setFile(file).setSize(me.targets[target].resolution, me.targets[target].resolution); + }, + removeLayer: func(target, name) { + me.targets[target].layers[name].removeAllChildren(); + me.targets[target].layers[name] = nil; + }, + showLayer: func(target, name) { + me.targets[target].layers[name].show(); + }, + hideLayer: func(target, name) { + me.targets[target].layers[name].hide(); + }, +}; + + # overlay_update # =============================================================================