- Transfer encoding rewritten to handle negative numbers properly and fix scaling.
- Change the "no receive method" to be just a warning as it is unwise rather than
being wrong.
Emesary MP bridge fixes from Nikolai
OutgoingBridge:
- When transmitting queue, make sure transmitted
messages cannot remain in the queue when not completely emptied, and
thus be sent again, and eventually fill up the queue.
- Also allow smaller messages to sent even though there was not room for
a larger message (the removal of the 'break' command).
- To prevent coding the same message again with the 'break' removed,
store an already coded string that was rejected due to too little room
inside the message so when there is room for it, it was coded only
once.
- Stop recalculating MessageExpiryTime when there is no
room for a notification. If it has asked to expire after expire time,
let it expire.
IncomingBridge:
- Make sure listeners on emesary[x] properties are
removed when a mp aircraft is invalid, otherwise a hidden bridge will
sit in background and process same notifications a new bridge is
already processing.
- Change order of setting IncomingMessageIndex to ease
debugging in reciever.
- Since a bridge class can handle multiple emesary
properties on same aircraft, use a vector per aircraft to store the
bridge instances in, to make sure Remove can be called on all
instances listening to same aircraft.
The partition processor is a simple class that allows lists of data to be processed in chunks per invocation. It is designed to minimise per frame processing whilst keeping the code simple and the performance acceptable.
test code (use with F-14):
var pptest = func{
var xx= frame_utils.PartitionProcessor.new("TEST", 6);
var obj = {}; # just for testing
for (ii=0;ii<5;ii+=1) {
xx.process(obj, awg_9.tgts_list,
func(pp, obj, data){
print("init");
obj.designated = -1;
obj.search = "Nimitz";
obj.completed = 0;
}
,
func(pp, obj, u){
printf("%-5d : %s",pp.data_index, u.Callsign.getValue());
if (u.Callsign.getValue() == obj.search)
obj.designated = pp.data_index;
return 1;
},
func(pp, obj, data)
{
obj.completed = 1;
printf("Completed: %s = %d\n", obj.search, obj.designated);
}
);
if (obj.completed)
break;
}
if (!obj.completed)
print("partial list processed");
}
pptest();
Show number of errors separately, don't override status if there are a non-zero
number of errors - this was unhelpful if we've managed to resume after errors.
Previously tutorials were generated from all checklists.
Now <auto-tutorial>false</auto-tutorial> can be set at
any level of the checklist heirarchy to disable generation
of tutorials for a given checklist, group, or for all
checklists.
New dialogue is accesible from the File menu.
Allows enable/disable of three new features: multiplayer record, continuous
record and recovery snapshot. Also moved load/save tape from the file menu into
the new dialogue.
Also removed recently-added flight recorder items from the multiplayer dialogue.
The recovery snapshot interval is 1s second if enabled. Might be better to make
it longer, e.g. 5s, but don't know how to change checkbox value.
I only started to translate the new 'weather-scenarios' part, however
I'm too ignorant about the proper terms and phrases used in the field.
Thus, it would be much better if someone more competent in aviation and
weather terminology could review and finish the 'weather-scenarios'
part. The other parts are now fully translated (not the Qt launcher, but
that should be done in FlightGear-Qt.xlf).
Apparently, this file hasn't received the cleaned up source strings for
weather scenarios obtained since FGMeta commit c2a241c35[1]. The file
committed here was produced by simply running
fg-update-translation-files with what we currently have in FGData. I've
ignored changes to the other FlightGear-nonQt.xlf files because they
seem to all boil down to a modification of the order in which XML
attributes are given (what a PITA!).
[1] c2a241c357