gyro.nas 2.35 KB
var g_dt = 0;
var gyro_crashed = 0;

var init = func {
	
	
	print("Init Nasal Gyro ...done");
	
	main_loop();
}

# Setup listener call to start update loop once the fdm is initialized
setlistener("sim/signals/fdm-initialized", init);

var reinit = func {
	
	g_dt = 0;
	gyro_crashed = 0;
	setprop("/controls/rotor/brake", 0);
	print("ReInit Nasal Gyro ...done");
	
}
setlistener("/sim/signals/reinit", reinit);



#main loop
var main_loop = func {

	engine_values();
		
	check_g_load();
	check_vne_structure();
	
	check_rotor_rpm();
	
	settimer(main_loop, 0);
}

var check_g_load = func {
	
	
	var g_load = getprop("/accelerations/pilot-g");
	
	if(g_load!=nil and g_load>4.1 )
	{
		screen.log.write("Too much G load !!!", 1, 0, 0);
	}
	
	if(g_load!=nil and g_load<0)
	{
		screen.log.write("Negative G load !!!", 1, 0, 0);
	}
	
}

var	check_vne_structure = func {
	var kias = getprop("velocities/airspeed-kt");
	if(kias!=nil and kias>110){
		screen.log.write("VNE exceeded !!!", 1, 0, 0);
	}
}

var	check_rotor_rpm = func {
	if (gyro_crashed>0){
		#setprop("/controls/flight/aileron",-1);
		#setprop("/controls/flight/elevator",-1);
		#setprop("/controls/flight/maxreltorque",-1);
		#setprop("/controls/rotor/brake", 1.0)
	}
	else {
		var rpm = getprop("/rotors/main/rpm");
		if(rpm!=nil and rpm>1200){
			#setprop("/sim/sound/crash",1);
			#setprop("/sim/messages/copilot","Rotor overspeed !!!");
			screen.log.write("Rotor overspeed !!!", 1, 0, 0);
			
			#uncomment when you want to crash
			#gyro_crashed = 1;
		}
		
	}
	
}


var	apply_rotor_brake = func {

	if (gyro_crashed<1){
		interpolate("/controls/rotor/brake", 1.0, 2);
		#print("apply_rotor_brake");
	}
}

var	release_rotor_brake = func {

	if (gyro_crashed<1){
		interpolate("/controls/rotor/brake", 0.0, 2);
		#print("release_rotor_brake");
	}
	
}

var engine_values = func {
#
# Since we use egt, estimated cht and rpm values more than once, might as well 
# retreive and calc once instead of repeating getprop which may be slower.
#
	var rev0 = 0;
	var echt0 = 0;
	var eoilt0 = 0;
	
	rev0 = getprop("/engines/engine[0]/rpm");
	echt0 = getprop("/engines/engine[0]/oil-temperature-degf");

	if (echt0!=nil)
		eoilt0 = (echt0*0.405);
	
	var eoilp0=((1*rev0)/(0.01+(eoilt0*0.082))*0.215);

	if (eoilp0 > 130) {
	setprop("/engines/engine[0]/oil-pressure-psi", 130);
	}
	else {
	setprop("/engines/engine[0]/oil-pressure-psi", eoilp0);
	}

}