mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			127 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| WarpUtil {
 | |
| 	var <>parent;
 | |
| 	var <curSensor;
 | |
| 
 | |
| 	var <win;
 | |
| 	var <texts;
 | |
| 	var <sensorSlider;
 | |
| 	var <sliders;
 | |
| 	var <updateRout;
 | |
| 
 | |
| 	*new {|argParent|
 | |
| 		^super.new.init(argParent);
 | |
| 	}
 | |
| 
 | |
| 	init {|argParent|
 | |
| 		parent = argParent;
 | |
| 		texts = IdentityDictionary[];
 | |
| 
 | |
| 		this.makeView();
 | |
| 		this.startUpdate();
 | |
| 	}
 | |
| 
 | |
| 	calibrate {
 | |
| 		{
 | |
| 			parent.doAdjusts.size.do {|i|
 | |
| 				parent.sensorMaxs[i] = 0;
 | |
| 				parent.sensorMins[i] = 9999;
 | |
| 				parent.doAdjusts[i] = true;
 | |
| 			};
 | |
| 
 | |
| 			sliders.do {|slider, i|
 | |
| 				if(parent.sensorKeys[i] !== curSensor) {
 | |
| 					slider.valueAction_(0);
 | |
| 					0.1.wait;
 | |
| 					slider.valueAction_(1);
 | |
| 				};
 | |
| 			}
 | |
| 		}.fork(AppClock);
 | |
| 	}
 | |
| 
 | |
| 	stopCalibrate {
 | |
| 		parent.doAdjusts.size.do {|i|
 | |
| 			parent.doAdjusts[i] = false;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	makeView {
 | |
| 		var width = 370;
 | |
| 
 | |
| 		if(win.notNil) {
 | |
| 			win.close;
 | |
| 		};
 | |
| 
 | |
| 		win = Window("Sensor Inspector", Rect(256, 10, width, 424)).front;
 | |
| 		win.view.addFlowLayout;
 | |
| 
 | |
| 		['sensorVals', 'sensorPrevs', 'sensorMins', 'sensorMaxs'].do {|label, i|
 | |
| 			StaticText(win, (width * 0.5)@20)
 | |
| 				.string_(label.asString);
 | |
| 
 | |
| 			win.view.decorator.nextLine;
 | |
| 
 | |
| 
 | |
| 			texts[label] = StaticText(win, (width / 2)@40);
 | |
| 
 | |
| 			if(curSensor.notNil) {
 | |
| 				texts[label].string_(
 | |
| 					"\t" ++ parent.perform(label).at(
 | |
| 						parent.sensorKeys.indexOf(curSensor)
 | |
| 					);
 | |
| 				);
 | |
| 			};
 | |
| 
 | |
| 			win.view.decorator.nextLine;
 | |
| 		};
 | |
| 
 | |
| 		sensorSlider = EZSlider(win, 280@20, label: curSensor.asString);
 | |
| 
 | |
| 		sliders = parent.sensorKeys.collect { |sensorKey, i|
 | |
| 			EZSlider(win, 280@20, label: sensorKey.asString)
 | |
| 				.action_({|ez|
 | |
| 					NetAddr.localAddr.sendMsg(
 | |
| 						"/prox/" ++ sensorKey,
 | |
| 						ez.value * 100
 | |
| 					);
 | |
| 				});
 | |
| 		};
 | |
| 	}
 | |
| 
 | |
| 	startUpdate {
 | |
| 		updateRout = Routine {
 | |
| 			inf.do {|i|
 | |
| 				var index;
 | |
| 
 | |
| 				if(curSensor.notNil) {
 | |
| 					index = parent.sensorKeys.indexOf(curSensor);
 | |
| 
 | |
| 					['sensorVals', 'sensorPrevs', 'sensorMins',
 | |
| 						'sensorMaxs'].do {|label, i|
 | |
| 
 | |
| 							texts[label]
 | |
| 							.string_("\t" ++ parent.perform(label)[index]);
 | |
| 					};
 | |
| 
 | |
| 					sensorSlider.value = parent.sensorVals[index].linlin(
 | |
| 						parent.sensorMins[index],
 | |
| 						parent.sensorMaxs[index],
 | |
| 						0,
 | |
| 						1
 | |
| 					);
 | |
| 				};
 | |
| 				0.05.wait;
 | |
| 			}
 | |
| 		};
 | |
| 
 | |
| 		updateRout.play(AppClock);
 | |
| 	}
 | |
| 
 | |
| 	stopUpdate {
 | |
| 		updateRout.stop();
 | |
| 	}
 | |
| 
 | |
| 	curSensor_ {|argCurSensor|
 | |
| 		curSensor = argCurSensor;
 | |
| 		this.makeView();
 | |
| 	}
 | |
| } |