private bool ShouldShowThis(ScriptToken token, List<ScriptDefine> defines)
{
Settings gameSettings = Factory.AGSEditor.CurrentGame.Settings;
if ((token.IfNDefOnly == "STRICT") && (gameSettings.EnforceObjectBasedScript))
{
return false;
}
if ((token.IfDefOnly == "STRICT") && (!gameSettings.EnforceObjectBasedScript))
{
return false;
}
if ((token.IfNDefOnly == "STRICT_STRINGS") && (gameSettings.EnforceNewStrings))
{
return false;
}
if ((token.IfDefOnly == "STRICT_STRINGS") && (!gameSettings.EnforceNewStrings))
{
return false;
}
if ((token.IfNDefOnly == "STRICT_AUDIO") && (gameSettings.EnforceNewAudio))
{
return false;
}
if ((token.IfDefOnly == "STRICT_AUDIO") && (!gameSettings.EnforceNewAudio))
{
return false;
}
if ((token.IfNDefOnly == "NEW_DIALOGOPTS_API") && (!gameSettings.UseOldCustomDialogOptionsAPI))
{
return false;
}
if ((token.IfDefOnly == "NEW_DIALOGOPTS_API") && (gameSettings.UseOldCustomDialogOptionsAPI))
{
return false;
}
if (token.IfNDefOnly != null && token.IfNDefOnly.StartsWith("SCRIPT_API_"))
{
ScriptAPIVersion? v = GetAPIVersionFromString(token.IfNDefOnly.Substring("SCRIPT_API_".Length));
if (v.HasValue && v <= gameSettings.ScriptAPIVersion)
return false;
}
if (token.IfDefOnly != null && token.IfDefOnly.StartsWith("SCRIPT_API_"))
{
ScriptAPIVersion? v = GetAPIVersionFromString(token.IfDefOnly.Substring("SCRIPT_API_".Length));
if (v.HasValue && v > gameSettings.ScriptAPIVersion)
return false;
}
if (token.IfNDefOnly != null && token.IfNDefOnly.StartsWith("SCRIPT_COMPAT_"))
{
ScriptAPIVersion? v = GetAPIVersionFromString(token.IfNDefOnly.Substring("SCRIPT_COMPAT_".Length));
if (v.HasValue && v >= gameSettings.ScriptCompatLevel)
return false;
}
if (token.IfDefOnly != null && token.IfDefOnly.StartsWith("SCRIPT_COMPAT_"))
{
ScriptAPIVersion? v = GetAPIVersionFromString(token.IfDefOnly.Substring("SCRIPT_COMPAT_".Length));
if (v.HasValue && v < gameSettings.ScriptCompatLevel)
return false;
}
// TODO: AutoComplete feature in AGS is implemented in confusing and messy way. Thus, it does not
// use same technique for knowing which parts of the script should be disabled (by ifdef/ifndef)
// as precompiler. Instead it makes its own parsing, and somewhat limits perfomance and capabilities.
// This is (one) reason why all those checks are made here explicitly, instead of relying on some
// prefetched macro list.
if (token.IfNDefOnly != null && token.IfNDefOnly.StartsWith("STRICT_IN_"))
{
ScriptAPIVersion? v = GetAPIVersionFromString(token.IfNDefOnly.Substring("STRICT_IN_".Length));
if (v.HasValue && (gameSettings.EnforceObjectBasedScript && v <= gameSettings.ScriptCompatLevel))
return false;
}
if (token.IfDefOnly != null && token.IfDefOnly.StartsWith("STRICT_IN_"))
{
ScriptAPIVersion? v = GetAPIVersionFromString(token.IfDefOnly.Substring("STRICT_IN_".Length));
if (v.HasValue && !(gameSettings.EnforceObjectBasedScript && v <= gameSettings.ScriptCompatLevel))
return false;
}
return true;
}