# A3XX ND Canvas
# Joshua Davidson (Octal450)
# Based on work by artix

# Copyright (c) 2020 Josh Davidson (Octal450)

var SymbolPainter = {
	aircraft_dir: nil,
	getOpts: func(opts){
		if(opts == nil) opts = {};
		var defOpts = {id:nil,color:nil,scale:1,create_group:0,update_center:0};
		if(contains(opts, "id"))
		defOpts.id = opts.id;
		if(contains(opts, "color"))
		defOpts.color = opts.color;
		if(contains(opts, "scale"))
		defOpts.scale = opts.scale;
		if(contains(opts, "create_group"))
		defOpts.create_group = opts.create_group;
		if(contains(opts, "update_center"))
		defOpts.update_center = opts.update_center;
		return defOpts;
	},
	getAircraftDir: func(){
		if(me.aircraft_dir == nil)
			me.aircraft_dir = split("/", getprop("/sim/aircraft-dir"))[-1];
		return me.aircraft_dir;
	},
	svgPath: func(file){
		return "Aircraft/" ~ me.getAircraftDir() ~ "/Models/Instruments/ND/canvas/res/"~file;
	},
	drawFIX : func(grp, opts = nil){
		var icon_fix = nil;
		opts = me.getOpts(opts);
		var sym_id = opts.id;
		if(sym_id != nil)
			icon_fix = grp.createChild("path", sym_id);
		else 
			icon_fix = grp.createChild("path");
		var color = opts.color;
		if(color == nil){
			color = {
				r: 0.69,
				g: 0,
				b: 0.39
			};
		}
		var scale = opts.scale;
		if(scale == nil) scale = 0.8;
		icon_fix.moveTo(-10,0)
		.lineTo(0,-17)
		.lineTo(10,0)
		.lineTo(0,17)
		.close()
		.setStrokeLineWidth(3)
		.setColor(color.r,color.g,color.b)
		.setScale(scale,scale);
		return icon_fix;
	},
	drawVOR: func(grp, opts = nil){
		opts = me.getOpts(opts);
		if(opts.create_group){
			var sym_id = opts.id;
			if(sym_id != nil)
				grp = grp.createChild("group", sym_id);
			else 
				grp = grp.createChild("group");
		}
		var svg_path = me.svgPath("airbus_vor.svg");
		canvas.parsesvg(grp, svg_path);
		var scale = opts.scale;
		if(scale == nil) scale = 0.8;
		grp.setScale(scale,scale);
		if(opts.update_center)
			grp.setTranslation(-24 * scale,-24 * scale);
		if(!contains(grp, "setColor")){
			grp.setColor = func {
				var layer1 = grp.getElementById("layer1");
				if(layer1 == nil) return;
				var children = layer1.getChildren();
				foreach(var c; children){
					if(isa(c, canvas.Path))
						c.setColor(arg);
				}
			};
		}
		return grp;
	},
	drawNDB: func(grp, opts = nil){
		var icon_ndb = nil;
		opts = me.getOpts(opts);
		var sym_id = opts.id;
		if(sym_id != nil)
			icon_ndb = grp.createChild("path", sym_id);
		else 
			icon_ndb = grp.createChild("path");
		var color = opts.color;
		var color = opts.color;
		if(color == nil){
			color = {
				r: 0.69,
				g: 0,
				b: 0.39
			};
		}
		var scale = opts.scale;
		if(scale == nil) scale = 0.8;
		icon_ndb.moveTo(-15,15)
		.lineTo(0,-15)
		.lineTo(15,15)
		.close()
		.setStrokeLineWidth(3)
		.setColor(color.r,color.g,color.b)
		.setScale(scale,scale);
		return icon_ndb;
	},
	drawAirport: func(grp, opts = nil){
		opts = me.getOpts(opts);
		if(opts.create_group){
			var sym_id = opts.id;
			if(sym_id != nil)
				grp = grp.createChild("group", sym_id);
			else 
				grp = grp.createChild("group");
		}
		var svg_path = me.svgPath("airbus_airport.svg");
		canvas.parsesvg(grp, svg_path);
		var scale = opts.scale;
		if(scale == nil) scale = 0.8;
		grp.setScale(scale,scale);
		if(opts.update_center)
			grp.setTranslation(-24 * scale,-24 * scale);
		return grp;
	},
	draw: func(type, grp, opts = nil){
		if(type == "VOR" or type == "vor")
			return me.drawVOR(grp, opts);
		elsif(type == "NDB" or type == "ndb")
		return me.drawNDB(grp, opts);
		elsif(type == "ARPT" or type == "arpt")
		return me.drawAirport(grp, opts);
		else 
			return me.drawFIX(grp, opts);
	}
};