From 93b9098b9c8b908dea566fd0a9691baac5acbe58 Mon Sep 17 00:00:00 2001
From: fly <merspieler@airmail.cc>
Date: Mon, 16 Nov 2020 06:11:18 +1100
Subject: [PATCH] Initial commit for canvas-livery

Signed-off-by: fly <merspieler@airmail.cc>
---
 Nasal/aircraft.nas | 61 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)

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
 # =============================================================================