* Taseditor: fixed LagLog diff bug in history.RegisterChanges

This commit is contained in:
ansstuff 2012-09-15 18:00:22 +00:00
parent 463ccb4086
commit 76607d6b02
1 changed files with 22 additions and 18 deletions

View File

@ -482,8 +482,27 @@ int HISTORY::RegisterChanges(int mod_type, int start, int end, int size, const c
snap.init(currMovieData, taseditor_config.enable_hot_changes);
// check if there are Input differences from latest snapshot
int real_pos = (history_start_pos + history_cursor_pos) % history_size;
int first_changes = snap.inputlog.findFirstChange(snapshots[real_pos].inputlog, start, end);
if (first_changes >= 0)
int first_input_changes = snap.inputlog.findFirstChange(snapshots[real_pos].inputlog, start, end);
// for lag-affecting operations only: Greenzone should be invalidated after the frame of Lag changes if this frame is less than the frame of Input changes
int first_changes = first_input_changes;
if (end == -1 && (first_changes > start || first_changes == -1))
{
// check if LagLogs of these snapshots differ before the "first_input_changes" frame
if (first_changes < 0)
first_changes = snap.inputlog.size;
for (int i = start; i < first_changes; ++i)
{
if (snap.laglog.GetLagInfoAtFrame(i) != snapshots[real_pos].laglog.GetLagInfoAtFrame(i))
{
// Greenzone should be invalidated from the frame
first_changes = i;
break;
}
}
}
if (first_input_changes >= 0)
{
// differences found
char framenum[11];
@ -499,7 +518,7 @@ int HISTORY::RegisterChanges(int mod_type, int start, int end, int size, const c
case MODTYPE_CLEAR:
case MODTYPE_CUT:
{
snap.keyframe = first_changes;
snap.keyframe = first_input_changes;
break;
}
case MODTYPE_INSERT:
@ -527,21 +546,6 @@ int HISTORY::RegisterChanges(int mod_type, int start, int end, int size, const c
{
snap.end_frame = end;
}
int first_input_changes = first_changes;
// for lag-affecting operations only: Greenzone should be invalidated after the frame of Lag changes if this frame is less than the frame of Input changes
if (first_changes > start && end == -1)
{
// check if LagLogs of these snapshots differ before the "first_changes" frame
for (int i = start; i < first_changes; ++i)
{
if (snap.laglog.GetLagInfoAtFrame(i) != snapshots[real_pos].laglog.GetLagInfoAtFrame(i))
{
// Greenzone should be invalidated from the frame
first_changes = i;
break;
}
}
}
snap.consecutive_tag = consecutive_tag;
if (consecutive_tag && taseditor_config.combine_consecutive && snapshots[real_pos].mod_type == snap.mod_type && snapshots[real_pos].consecutive_tag == snap.consecutive_tag)
{