Комментарии, вопросы и замечания просьба оставлять в специально для этого предназначенной ветке форума. Из этой ветки они будут удалены!
Часть 7. Посмотрим что у нас есть в скрипте.
Откроем в FDTitleDesigner закладку с кодом скрипта. Посмотрим что у нас есть и для чего это нужно.
Код, который есть в скрипте, как правило, состоит из двух частей.
Первая часть - это набор функций, которые сгенерировал "мастер". Во многих случаях эти функции нужно самому переопределять, вносить туда свою логику. Например, при запуске объекта на воспроизведение. Или нужна какая-то реакция на загрузку задания в титровальный объект.
Вторая часть - это функции, которые вы добавляете самостоятельно. Например, функция, которая при загрузке зачитывает содержимое файла с заданием для титровального объекта.
Итак по порядку. У нас сейчас есть только первая часть функций, рассмотрим их.
В самом начале скрипта определяется набор библиотек, используемых в скрипте.
import System.IO;
import System.Diagnostics;
import SLTMTitleCommon.Scripting;
import LogotypeLib;
Такие библиотеки бывают 3-х типов:
1)Системные (первые две) - реализуют возможность программирования с использованием .NetFramework. К этому мы ещё вернёмся когда нам потребуется работа с массивами.
2)Библиотеки нашей титровальной системы (две последние) - дают возможность работы с титровальными элементами (менять свойства, запускать/останавливать воспроизведение и т.д.)
3)Собственные. Если у вас в нескольких скриптах есть одна и та же функция (например, для чтения файла с заданием), то логично её вынести в такую библиотеку. Смысл - исправлять ошибки проще в одном месте, а не в каждом из ваших скриптов. В этом смысле import в скриптах используется также как include файлов cpp и h файлов в C++.
var script = new Script(titleRoot);
Переменная script (ее можно назвать как угодно) описывает создание экземпляра класса Script. Собственно эта строка и осуществляет вызов и исполнение скрипта.
Далее идёт набор функций, изменять которые не рекомендуется, и обычно это не требуется.
Конструктор:
function Script(obj)
{
super(obj);
//debugger
init();
}
"Зачистка" скрипта при прекращении его жизни.
function CleanUp(obj, e : VsaScriptingHostEventArgs) {
// Add Your clean
_scriptingHost.remove_CleanUp(CleanUp);
Debug.WriteLine("Script CleanUp")
}
Следующая функция нами обязательно будет использоваться.
function init(){
_scriptingHost.add_CleanUp(CleanUp);
try {
// Add Your init code
} catch (ee) {
Debug.WriteLine("script init exception:" + ee);
}
}
Она вызывается при инициализации скрипта и в ней мы будем настраивать некоторые первоначальные свойства наших титровальных элементов.
Далее пойдут функции, которые перекрывают некоторый набор функций базового класса ядра нашей титровальной системы. Обычно, если функция, возвращающая булевское значение (boolean), перекрыта, то ее реализация в конкретном скрипте должна возвращать:
false - в случае, если необходимо вызвать исходную реализацию (т.е. всё сделает реализация "по умолчанию" базового класса)
true - если все необходимые действия мы сделаем сами, а исходную реализацию ("по умолчанию" базового класса) вызывать не требуется.
Набор функций следующий:
function Unload(): boolean {
return true;
}
Вызывается по выгрузке (деинициализации) скрипта. Без особой необходимости ее перекрытие не требуется и мы её использовать не будем.
override function Start(atStart : double, fadeDuration : double) : boolean {
Debug.WriteLine("script Start");
try {
// TODO: Start logic
//return true;
} catch (ee) {
Debug.WriteLine("script Start exception:" + ee);
}
return false;
}
Вызывается по запуску воспроизведения объекта. В параметре atStart передается время старта, в fadeDuration — время появления объекта на экране (может быть задано в программе FDOnAir). Здесь мы будем стартовать воспроизведение титровальных элементов нашего скрипта.
override function Stop(atStop : double, fadeDuration : double) : boolean {
Debug.WriteLine("script Stop");
try {
// TODO: Stop logic
//return true;
} catch (ee) {
Debug.WriteLine("script Stop exception:" + ee);
}
return false;
}
Вызывается по остановке воспроизведения скрипта. В параметре atStop передается время остановки, в fadeDuration — время исчезания объекта с экрана (может быть задано в программе FDOnAir). Обязательно будем использовать для остановки титровальных элементов, которые входят в скрипт.
override function Abort(fadeDuration : double) : boolean {
Debug.WriteLine("script Abort");
try {
// TODO: Abort logic
//return true;
} catch (ee) {
Debug.WriteLine("script Abort exception:" + ee);
}
return false;
}
Вызывается по прерыванию воспроизведения объекта. В параметре fadeDuration задается время исчезания объекта с экрана (может быть задано в программе FDOnAir). Это "жёсткая" остановка воспроизведения. Отличие от Stop можно видеть на примере поведение титровального элемента "Бегущая строка". В случае вызова Stop то объявление, которое сейчас показывается в эфире, доиграется до конца. Но следующее показано уже не будет. В случае вызова Abort воспроизведение текущего объявления оборвётся сразу.
override function LoadTask(task: String ) : boolean {
Debug.Print("LoadTask '{0}'.", task);
try {
// TODO: LoadTask logic
//return true;
} catch (ee) {
Debug.WriteLine("script LoadTask exception:" + ee);
return false;
}
return false;
}
Вызывается при загрузке задания в титровальный объект. В этой функции, например, можно прочитать данные из загружаемого файла, проверить их на валидность и т.д.
Целый ряд функций предназначен для передачи в программу OnAir всевозможной информации.
override function GetTaskInfo(task : String): TaskInfoArgs
{
//if (System.IO.Path.GetExtension(task) == ".txt") {
// var info :TaskInfoArgs = new TaskInfoArgs()
// info.loopped = true;
// info.duration = 0;
// info.firstStop = 0;
// return info;
//}
return null;
}
Возвращает информацию о задании. "Место" использования помечено цифрой 6 на предыдущем рисунке.
override function GetLoopped() : TaskInfoArgs{
//var info = new TaskInfoArgs();
//info.loopped = true;
//return info;
return null;
}
Возвращает информацию о типе воспроизведения - зацикленное или незацикленное. "Место" использования помечено цифрой 2 на предыдущем рисунке.
override function GetPlayInfo() : PlayInfoArgs {
//var info = new PlayInfoArgs();
//Crawl.GetPlayInfo(&info);
//info.loopped = true;
//return info;
return null;
}
Возвращает в информацию о текущем состоянии воспроизведения. "Место" использования помечено цифрой 3 на предыдущем рисунке.
//override function GetTask( ) : String {
// return _task;
//}
Возвращает информацию о текущем загруженном файле-задании. "Место" использования помечено цифрой 5 на предыдущем рисунке.
//override function GetTaskMask( ) : String {
// return "Text Files (*.txt)|*.txt|";
//}
Возвращает информацию о типах файлов (расширениях), которые можно загружать в данный титровальный объект. "Место" использования помечено цифрой 4 на предыдущем рисунке.
//override function GetStatus(): LogotypeLib.SLTMRunTimeStatus {
// return TODO: ;
//}
Возвращает информацию о текущем состоянии воспроизведения. Используется для "подсвечивания" титровальных кнопок F9...
Следующие функции нужно переопределять если мы будем выставлять наружу свойства нашего скрипта.
override function GetProperties(): ScriptPropertyInfo[] {
//var list: ArrayList = new ArrayList();
//var info: ScriptPropertyInfo = new ScriptPropertyInfo();
//var i: int = 0;
//// 1. Общее время нахождения телефона на экране, вместе с въездом и выездом
//info.type = ScriptPropertyKnownTypes.eDouble;
//info.name = "PhoneTime";
//info.displayName = "PhoneTime";
//info.descr = "Общее время нахождения телефона на экране, вместе с въездом и выездом";
//info.category = "General";
//info.defaultVal = phoneStopSec;
//info.index = i++;
//info.attributes = ScriptPropertyFlags.Browsable;
//info.extra = null;
//list.Add(info);
//return ScriptPropertyInfo[](list.ToArray(info.GetType()));
return null;
}
override function SetPropertyValue(name : String, value : Object) {
//switch (name) {
//case "PhoneTime":{
// phoneStopSec = double(value);
// TODO: add your code for modify local variables
// break;
//case "Separator":
// phonesSplitter = String(value);
// break;
//case "GradientColor1":
// _GradientColor1 = Color(value);
// if (!_initState) {
// SetColor("GradientColor1", _GradientColor1);
// }
// break;
//}
}
override function GetPropertyValue(name : String) :Object {
//switch (name) {
//case "PhoneTime":
// return phoneStopSec;
// break;
//case "Separator":
// return phonesSplitter;
// break;
//case "GradientColor1":
// _GradientColor1 = GetColor("GradientColor1");
// return _GradientColor1;
//}
return null;
}
Свойства скрипта у нас будут. Например, нам нужно будет указывать длительность нахождения объявления на экране. И лучше всего это будет сделать именно через свойства скрипта. Поэтому к этим функциям мы обязательно вернёмся.
И последняя группа функций.
Они вызываются автоматически по событиям, связанным с показом титровальных элементов. В таких функциях можно включить какую-либо специализированную обработку событий, и по ним осуществлять какие-то действия. Например, по завершению показа какого-либо элемента запускать показ другого.
// notification from Elements
override function OnStatusChanged(name: String, index: int, oldStatus: LogotypeLib.SLTMRunTimeStatus, newStatus: LogotypeLib.SLTMRunTimeStatus) {
try {
if (oldStatus == newStatus) return;
// TODO: StatusChanged logic
} catch (ee) {
Debug.WriteLine("script OnStateChanged exception:" + ee);
}
}
Вызывается по изменению состояния (статуса) титровального элемента с именем name, номером index. В параметре oldStatus передается предыдущее состояние элемента, в newStatus — новое. Возможные состояния элемента:
LogotypeLib.eStopping — идет процесс остановки
LogotypeLib.ePreparing — идет процесс подготовки
LogotypeLib.eStopped — воспроизведение остановлен
LogotypeLib.eStarting — идет процесс запуска
LogotypeLib.eRunning — воспроизведение запущено
override function OnStopTimeChanged(elementName: String, index: int, newStopTime: double){
try {
// TODO: OnStopTimeChanged logic
} catch (ee) {
Debug.WriteLine("script OnStopTimeChanged exception:" + ee);
}
}
Вызывается по изменению времени остановки показа элемента с именем name, номером index. В параметре newStopTime передается новое время остановки элемента.
// notification from Elements
override function OnElementStart(name: String, index: int, id: int, time: double, firstStopTime: double, stopTime: double, text: String) {
Debug.WriteLine("===script OnElementStart:" + name + " index:" + index + " id:" + id + " time:" + time + " firstStop:" + firstStopTime + " stop:" + stopTime + " text:" + text);
try {
// TODO:
} catch (ee) {
Debug.WriteLine("script OnElementStart exception:" + ee);
}
}
Вызывается по запуску показа титровального элемента с именем name, номером index. В параметре time передается время старта, в параметре text — текст задания (последней его части, если их много; для бегущей строки — последнее объявление) для данного элемента. id — индекс части задания (например, очередное объявление в бегущей строке).
// notification from Elements
override function OnElementFinishing(name: String, index: int, id: int, time: double, text: String) {
Debug.WriteLine("===script OnElementFinishing:" + name + " index:" + index + " id:" + id + " time:" + time + " text:" + text);
try {
// TODO:
} catch (ee) {
Debug.WriteLine("script OnElementFinishing exception:" + ee);
}
}
Вызывается, когда начато завершение показа титровального элемента с именем name, номером index. Например, это происходит в момент, когда бегущая строка начинает «уезжать» с экрана (показывается ее последний кусок). В параметре time передается время начала завершения, в параметре text — текст задания (последней его части, если их много; для бегущей строки — последнее объявление) для данного элемента. id — индекс части задания (например, очередное объявление в бегущей строке).
// notification from Elements
override function OnElementStop(name: String, index: int, id: int, time: double, text: String) {
Debug.WriteLine("===script OnElementStop:" + name + " index:" + index + " id:" + id + " time:" + time + " text:" + text);
try {
// TODO:
} catch (ee) {
Debug.WriteLine("script OnElementStop exception:" + ee);
}
}
Вызывается по завершению показа (остановке) титровального элемента с именем name, номером index. Например, это происходит в момент, когда бегущая строка заканчивает «уезжать» с экрана. В параметре time передается время остановки, в параметре text — текст задания (последней его части, если их много; для бегущей строки — последнее объявление) для данного элемента. id — индекс части задания (например, очередное объявление в бегущей строке).
Часть из функций этой группы мы будем использовать.
Комментарии, вопросы и замечания просьба оставлять в специально для этого предназначенной ветке форума. Из этой ветки они будут удалены!