SourcePawn [SourcePawn] Урок 12 - metodmap

Pushistik↯❤

Команда форума
Регистрация
6 Июл 2017
Сообщения
393
Реакции
97
Баллы
28
[SourcePawn] Урок 12 - metodmap
<= К содержанию
metodmap - Это структура описывающая методы для работы с определенным типом и свойства этого типа.

Рассмотрим пример для типа MyType (тип придумал):
PHP:
methodmap MyType // Указывает название типа.
{
    // Если в названии написано Тип < Базовый_тип (например MyType < Handle)
    // То это говорит о том, что наш тип является производным от базового типа
 
    // ****************************************
    // *************  МЕТОДЫ  *****************
    // ****************************************
 
    // Метод MyFunc1 имеет тип void, следовательно он просто выполняет какое-то действие.
    // Используем как и все методы MyObj.MyFunc1("arg");
    public void MyFunc1(const char[] szArg1)
    {
        // Реализация метода
    }
 
    // Метод MyFunc2 имеет тип int, значит что он возвращает целочисленное значение.
    // Ключевое слово native указывает на то что ф-я является внешней и реализуется в другом месте плагина или другим плагином или расширением
    public native int MyFunc2(int iArg1);
 
    // Метод MyFunc3
    // Ключевое слово static указывает что ф-я должна вызываться не от экземпляра типа, а от самого типа
    // Пример:
    //        MyType MyObj = CreateMyType();
    //         MyObj.MyFunc2(3); // Вызов ф-и экземпляром типа
    //         MyType.MyFunc3(7); // Вызов ф-и типом
    public static native bool MyFunc3(int iArg1);
 
    // Пример из реального типа
    // Это выражение уже устарело, но его всё еще можно встретить.
    // Оно указывает что тип, параметры и реализация метода идентичны указанной ф-и
    // Конкретно это выражение говорит:
    // WritePackCell(hDataPack, 8); // Использовали
    // hDataPack.WriteCell(8); // А теперь надо так
    public WriteCell() = WritePackCell;


    // ****************************************
    // *************  СВОЙСТА  *****************
    // ****************************************
 
    // Свойство Position
    property int Position
    {
        // Со свойствами работать просто. Им либо присваиваются значения, либо получают их значения.

        // Имя get говорит о том, что можно получать значение этого свойства
        public get()
        {
            // Возвращаем значение. Об this.Index расскажу позже
            return GetPosition(this.Index); // Ф-я GetPosition придумана
        }

        // Имя set говорит о том, что можно присваимать значение этому свойству
        public set(int iPos)
        {
            return SetPosition(iPos); // Ф-я SetPosition придумана
        }
    }
 
    // Так же устаревшая форма записи, которая использовалась только для перехода на новый синтаксис.
    property int Position
    {
        public get() = GetPackPosition;
        public set() = SetPackPosition;
    }
 
    // Подробнее об this.Index
    // В каждом metodmap есть скрытый параметр this
    // Он указывает на текущий объект
    // Например
    //        MyType MyObj = CreateMyType();
    //         MyObj.MyFunc2(3); // Вызов ф-и экземпляром типа
    // В любом свойстве или методе параметр this будет указывать на объект MyObj

    // Это свойство получает индекс объекта
    // Например, если у нас есть тип Player,
    // где каждый экземпляр это игрок,
    // то чтобы через объект получить индекс игрока
    // (по сути сам объект типа Player может быть равен индексу, или же serialid, или userid, или вообще использовать собсвтенный счетчик)
    // используется это свойство
    property int Index
    {
        // Свойство можно только получать
        public get()
        {
            // Приводим текущий объект к типу int
            return view_as<int>(this);
        }
    }
};

<= К содержанию
 
Последнее редактирование:
Сверху Снизу