[prev in list] [next in list] [prev in thread] [next in thread] 

List:       flightgear-cvs
Subject:    [Flightgear-cvslogs] CVS: data/Nasal view.nas,1.46,1.47
From:       Melchior Franz <mfranz () baron ! flightgear ! org>
Date:       2009-01-31 19:30:37
Message-ID: 200901311930.n0VJUber014840 () baron ! flightgear ! org
[Download RAW message or body]

Update of /var/cvs/FlightGear-0.9/data/Nasal
In directory baron.flightgear.org:/tmp/cvs-serv14829/Nasal

Modified Files:
	view.nas 
Log Message:
model_view_handler: use multiplayer.model + add selection popup


Index: view.nas
===================================================================
RCS file: /var/cvs/FlightGear-0.9/data/Nasal/view.nas,v
retrieving revision 1.46
retrieving revision 1.47
diff -C 2 -r1.46 -r1.47
*** view.nas	31 Jan 2009 10:24:08 -0000	1.46
--- view.nas	31 Jan 2009 19:30:31 -0000	1.47
***************
*** 325,420 ****
  var model_view_handler = {
  	init: func(node) {
  		me.viewN = node;
! 		me.list = [];
! 		me.current = 0;
! 		me.active = 0;
  		me.legendN = props.globals.initNode("/sim/current-view/model-view", "");
  	},
  	start: func {
  		me.lnr = [];
! 		append(me.lnr, setlistener("/ai/models/model-added", func me.update_list()));
! 		append(me.lnr, setlistener("/ai/models/model-removed", func me.update_list()));
! 		me.update_list();
! 		me.active = 1;
  		me.reset();
! 		fgcommand("dialog-show", props.Node.new({ "dialog-name": "model-view" }));
  	},
  	stop: func {
! 		fgcommand("dialog-close", props.Node.new({ "dialog-name": "model-view" }));
! 		me.active = 0;
  		foreach (var l; me.lnr)
  			removelistener(l);
  	},
  	reset: func {
! 		me.next(me.current = 0);
  	},
! 	update_list: func {
! 		me.models = { "/": { node: props.globals, id: "[" ~ getprop("/sim/multiplay/callsign")~ "]" } };
! 		foreach (var n; props.globals.getNode("/ai/models", 1).getChildren("multiplayer")) {
! 			if (!n.getNode("valid", 1).getValue())
! 				continue;
! 			me.models[n.getPath()] = { node: n, id: "" };
! 			me.scan_ident(n);
! 		}
! 		me.list = sort(keys(me.models), string.icmp);
! 	},
! 	scan_ident: func(n) {
! 		if ((var cs = n.getNode("callsign")) == nil or !(cs = cs.getValue()))
! 			return settimer(func me.scan_ident(n, data), 1);
! 		var path = n.getPath();
! 		if (contains(me.models, path)) {
! 			me.models[path] = { node: n, id: me.ident(n) };
! 			me.list = sort(keys(me.models), string.icmp);
! 		}
! 	},
! 	next: func(v) {
! 		me.legendN.setValue("");
! 		if (!me.active or size(me.models) < 1)
! 			return;
! 		if (v)
! 			me.current += v;
! 		else
! 			me.current = 0;
! 
! 		if (me.current < 0)
! 			me.current = size(me.list) - 1;
! 		elsif (me.current >= size(me.list))
! 			me.current = 0;
! 
! 		var conf = me.viewN.getNode("config");
! 		var path = me.list[me.current];
! 		conf.getNode("eye-lat-deg-path", 1).setValue(path ~ "/position/latitude-deg");
! 		conf.getNode("eye-lon-deg-path", 1).setValue(path ~ "/position/longitude-deg");
! 		conf.getNode("eye-alt-ft-path", 1).setValue(path ~ "/position/altitude-ft");
! 
! 		conf.getNode("target-lat-deg-path", 1).setValue(path ~ "/position/latitude-deg");
! 		conf.getNode("target-lon-deg-path", 1).setValue(path ~ "/position/longitude-deg");
! 		conf.getNode("target-alt-ft-path", 1).setValue(path ~ "/position/altitude-ft");
! 		me.legendN.setValue(me.models[path].id);
! 	},
! 	select: func(id) {
! 		debug.dump(["select", id]);
  		forindex (var i; me.list)
! 			if (me.models[me.list[i]].id == id)
! 				me.current = i;
! 		me.next(0);
! 		me.next(i);
! 	},
! 	ident: func(n) {
! 		var type = n.getName();
! 		if (type == "") {
! 			var z = getprop("/sim/chase-distance-m");
! 			var name = getprop("/sim/multiplay/callsign");
  		} else {
! 			var z = type == "carrier" ? 350 : 70;
! 			var name = n.initNode("name", "").getValue() or n.initNode("callsign", "").getValue();
  		}
- 		name = '"' ~ name ~ '"';
  
! 		setprop("/sim/current-view/z-offset-m", me.offs = z);
! 		var ac = n.getNode("sim/model/path", 1).getValue() or "";
! 		if (ac = split(".", split("/", ac)[-1])[0])
! 			name ~= " (" ~ ac ~ ")";
! 		return name;
  	},
  };
--- 325,402 ----
  var model_view_handler = {
  	init: func(node) {
+ 		me.lnr = [];
  		me.viewN = node;
! 		me.current = nil;
  		me.legendN = props.globals.initNode("/sim/current-view/model-view", "");
+ 		me.dialog = props.Node.new({ "dialog-name": "model-view" });
  	},
  	start: func {
  		me.lnr = [];
! 		append(me.lnr, setlistener("/sim/signals/multiplayer-updated", func me._update_(), 1));
! 		append(me.lnr, setlistener("/sim/signals/screenshot", func(n) {
! 			n.getValue() ? me.dialog_close() : me.dialog_open();
! 		}));
  		me.reset();
! 		me.open_dialog();
  	},
  	stop: func {
! 		me.close_dialog();
  		foreach (var l; me.lnr)
  			removelistener(l);
  	},
  	reset: func {
! 		me.select(0);
  	},
! 	find: func(callsign) {
  		forindex (var i; me.list)
! 			if (me.list[i].callsign == callsign)
! 				return i;
! 		return nil;
! 	},
! 	select: func(which) {
! 		if (num(which) == nil)
! 			which = me.find(which) or 0;  # turn callsign into index
! 
! 		me.setup(me.list[which]);
! 	},
! 	next: func(step) {
! 		var i = me.find(me.current);
! 		i = i == nil ? 0 : math.mod(i + step, size(me.list));
! 		me.setup(me.list[i]);
! 	},
! 	_update_: func {
! 		var self = { callsign: getprop("/sim/multiplay/callsign"), model:,
! 				node: props.globals, path: '/' };
! 		me.list = [self] ~ multiplayer.model.list;
! 		if (!me.find(me.current))
! 			me.select(0);
! 	},
! 	setup: func(data) {
! 		if (data.path == '/') {
! 			var zoffset = getprop("/sim/chase-distance-m");
! 			var ident = '[' ~ data.callsign ~ ']';
  		} else {
! 			var zoffset = 70;
! 			var ident = '"' ~ data.callsign ~ '" (' ~ data.model ~ ')';
  		}
  
! 		me.current = data.callsign;
! 		me.legendN.setValue(ident);
! 		setprop("/sim/current-view/z-offset-m", zoffset);
! 
! 		me.viewN.getNode("config").setValues({
! 			"eye-lat-deg-path": data.path ~ "/position/latitude-deg",
! 			"eye-lon-deg-path": data.path ~ "/position/longitude-deg",
! 			"eye-alt-ft-path": data.path ~ "/position/altitude-ft",
! 			"target-lat-deg-path": data.path ~ "/position/latitude-deg",
! 			"target-lon-deg-path": data.path ~ "/position/longitude-deg",
! 			"target-alt-ft-path": data.path ~ "/position/altitude-ft",
! 		});
! 	},
! 	open_dialog: func {
! 		fgcommand("dialog-show", me.dialog);
! 	},
! 	close_dialog: func {
! 		fgcommand("dialog-close", me.dialog);
  	},
  };


------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Flightgear-cvslogs mailing list
Flightgear-cvslogs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-cvslogs
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic