Game_object – клас для доступу до онлайнових (клієнтських) об'єктів. Причому один клас є інтерфейсом для різних об'єктів. Розробники не придумали нічого кращого, як узяти та об'єднати в одному класі всі інтерфейси всіх клієнтських об'єктів: актора, сталкерів, монстрів, фізичних об'єктів, автомобілів та лампочок, взагалі всіх. Дивнішого і взагалі кажучи потворного об'єктно-орієнтованого дизайну я ще не бачив. По-перше, клас вийшов абсолютно неосяжним - три сотні методів! По-друге, виклик не підходящого методу для довільно взятого об'єкта призводить до абсолютно непередбачуваних результатів. У кращому випадку нічого не буде, а найчастіше - буде виліт, причому зазвичай без лога. Нарешті, опис цього класу в lua_help зовсім невиразне (як утім і всіх інших класів): типи значень, що повертаються, опущені, типи вхідних аргументів зазначені не завжди, а про призначення більшості методів можна тільки ворожити. Пропоную дещо більш виразний опис. Методи розсортовані за клієнтськими класами, до об'єктів яких можна застосувати метод. Також нагадую, що класи при наслідуванні також успадковують і всі методи батьківського класу.
ANY CLASS
Ці методи підходять до об'єктів будь-якого класу
vector direction ( ) const
повертає напрямок погляду (об'єкт класу vector). Аргументів не сприймає.
vector position ( ) const
повертає координати об'єкта (об'єкт класу vector). Аргументів не сприймає.
vector center ( )
повертає координати центру баунд сфери об'єкта (фізичної оболонки, грубо кажучи). Практично те саме, що й position. Зазвичай використовується для перевірки входження актора у сферу. Повертає об'єкт класу вектор. Аргументів не сприймає.
int game_vertex_id ( ) const
повертає об'єкт game_vertex_id. Аргументів не сприймає.
int level_vertex_id ( ) const
повертає об'єкт level_vertex_id. Аргументів не сприймає.
float level_vertex_light ( const int level_vertex_id ) const
Лише ТЧ. завжди повертає 0. Щось пов'язане з аї-сіткою, але, мабуть, нині марне.
int id ( ) const
повертає ID об'єкта. Аргументів не сприймає.
string name ( ) const
повертає системне ім'я об'єкта (зазвичай виглядає як комбінація імені секції та id). Аргументів не сприймає.
string section ( ) const
повертає ім'я розділу об'єкта. Аргументів не сприймає.
ini_file* spawn_ini ( ) const
повертає дескриптор ltx файлу (об'єкт класу ini_file), з якого вичитувалися налаштування спавна об'єкта.
int story_id ( ) const
повертає об'єкт story_id (унікальний ідентифікатор). Аргументів не сприймає. Якщо об'єкт не має story_id, повертає -1.
int clsid ( ) const
повертає clsid об'єкта, що є ідентифікатором класу. Значення, що повертається, є числовим еквівалентом рядкового ідентифікатора, заданого в конфізі об'єкта параметром class. Аргументів не сприймає.
vector bone_position ( string bone_name ) const
повертає координати кістки. Приймає один аргумент – ім'я кістки. Може бути застосований до будь-якого об'єкта, але модель об'єкта при цьому повинна мати тип MT_SKELETON_ANIM або MT_SKELETON_RIGID , коротше, мати ці кістки
object_binder* binded_object ( )
повертає об'єкт lua-класу object_binder, прив'язаний до біндера функцією bind_object(). Аргументів не сприймає.
void bind_object ( object_binder* game_object )
прив'язує об'єкт до біндеру. Аргументів не сприймає.
void hit ( hit * tpLuaHit )
завдає хіт об'єкту. Як аргумент передається об'єкт класу hit. У цього об'єкта обов'язково повинні бути виставлені властивості draftsman , power , direction , type , impulse
void play_cycle ( string anim, bool mix_in )
програє анімацію об'єкта. Аргументи:
- anim - ім'я анімації
- mix_in – як я зрозумів, встановлює накладення анімації на поточну.
Сам об'єкт може бути будь-яким, але модель об'єкта повинна мати тип MT_SKELETON_ANIM (тобто підтримувати анімацію).
void play_cycle ( string anim )
аналогічно попередньої mix_in за замовчуванням береться true.
CObject
Оскільки всі ігрові об'єкти успадковують від класу CObject , такі методи можна застосовувати до будь-яких об'єктів.
game_object* parent ( ) const
повертає parent об'єкт. Для предмета у ящику поверне об'єкт ящика. Для інвентарних предметів поверне об'єкт власника інвентарю – актора, сталкера чи монстра. В інших випадках повернеться 0. До отриманого об'єкту можна застосовувати всі методи game_object, відповідні до класу об'єкта. Аргументів не сприймає.
Додано в ЗП:
string get_visual_name ( ) const
повертає візуал об'єкта як імені моделі. Аргументів не сприймає.
void set_visual_name ( string visual_name )
встановлює візуал об'єкта. Як аргумент необхідно задавати повний шлях до моделі від папки meshes.
CUsableScriptObject
Оскільки всі ігрові об'єкти успадковують від класу CUsableScriptObject , такі методи можна застосовувати до будь-яких об'єктів.
void set_tip_text ( string tip_text )
встановлює для об'єкта текст підказки, що передається, переданий аргументом tip_text.
void set_tip_text_default ( )
встановлює для об'єкта дефолтний текст підказки, встановлений при спавне. Аргументів не сприймає.
void set_nonscript_usable ( bool nonscript_usable )
встановлює для об'єкта можливість взаємодії з актором.
CPhysicsShellHolder
Ці методи можна застосовувати для всіх об'єктів, крім аномалій, переходів, ящиків з інвентарем та прожекторів - всього того, що не має фізичної оболонки.
physics_shell* get_physics_shell ( ) const
повертає фізичну оболонку об'єкта – об'єкт класу physics_shell. Аргументів не сприймає.
void set_const_force ( const vector& dir, float value, int time_interval )
застосовує до фізичної оболонки об'єкта чинність на деякий час. Аргументи:
- dir - напрямок (об'єкт класу vector)
- value - значення сили (float)
- time_interval – тривалість дії сили (int).
float mass ( ) const
повертає масу об'єкта. При застосуванні до невідповідного об'єкта повертає -1. Маса, що повертається цим методом – не інвентарна, а, мабуть, маса для обчислення колізій. Для патронів зброї повертається 0. Аргументів не приймає.
CEntity
Ці методи можна застосовувати всім живих об'єктів (сталкери, монстри, актер), вертольотів і машин.
bool alive ( ) const
повертає, чи об'єкт живий (перевірка на health > 0.0). Для неживих об'єктів повертається false. Увага! health оновлюється з деяким періодом, тому за виклику alive() відразу після kill() видається true. Аргументів не сприймає.
int death_time ( ) const
у ЗП немає. Повертає час смерті об'єкта до мсек з початку гри. Якщо об'єкт живий чи в принципі неживий, поверне 0. Аргументів не приймає.
int group ( ) const
повертає групу, до якої належить об'єкт. Для неживих об'єктів повертає -1. Аргументів не сприймає.
void kill ( game_object * who )
вбити об'єкт. Аргумент – клієнтський об'єкт-вбивця. Якщо не вказати, двигун вважає, що об'єкт самогубився.
float max_health ( ) const
повертає максимальний рівень здоров'я об'єкту. Для неживих об'єктів повертає -1. Аргументів не сприймає.
int squad ( ) const
повертає загін, якого належить об'єкт. Для неживих об'єктів повертає -1. Аргументів не сприймає.
int team ( ) const
повертає команду, до якої належить об'єкт. Для неживих об'єктів повертає -1. Аргументів не сприймає.
CEntityAlive
Ці методи можна застосовувати лише для живих об'єктів – сталкери, монстри (крім ворон), актор. Властивості об'єктів класу:
float satiety; // ситість є, але чомусь не прописаний в lua_help float bleeding; // кровотеча. тільки ЗП float health; // здоров'я 0..1 float morale; // Мораль float power; // Сила float psy_health; // Пси-здоров'я float radiation; // Радіація
всі характеристики на запис працюють негаразд, як у читання. При записі значення має сенс зміни відповідної якості. Тобто. якщо записати 0.1 в health, це збільшить його на 0.1.
float get_bleeding ( ) const
У ЗП немає. Повертає поточний розмір кровотечі. Чим більше об'єкта поранень - тим більше кровотеча. Якщо об'єкт неживий, то повертає -1. Аргументів не сприймає.
ALife:: ERelationType relation ( game_object * who )
повертає тип відношення об'єкта, що обробляється, до об'єкта, що передається аргументом who. Об'єкт, який також повинен успадковувати від CEntityAlive. Для трупів чи неживих об'єктів повертає -1. Значення, що повертається - член переліку ALife::ERelationType. У Lua воно експортоване як констант класу game_object.
const friend = 0 const neutral = 1 const enemy = 2 const dummy = -1
Є ще дві неекспортовані константи:
eRelationTypeWorstEnemy = 0x3 eRelationTypeLast = 0x4
string who_hit_name ( )
повертає ім'я об'єкта, останнього завдав хіт об'єкту, що обробляється. Аргументів не сприймає.
string who_hit_section_name ( )
повертає ім'я секції об'єкта, останнього завдав хіт об'єкту, що обробляється. Аргументів не сприймає.
float fov ( ) const
повертає кут зору. Аргументів не сприймає.
float range ( ) const
повертає максимальну ширину видимої області. Аргументів не сприймає.
Частина 1: https://stalker-news.info/forum/rushij-x-ray-engine/opys-klasu-gameobject-chastyna-1/
Частина 2: https://stalker-news.info/forum/rushij-x-ray-engine/opys-klasu-gameobject-chastyna-2/
Частина 3: https://stalker-news.info/forum/rushij-x-ray-engine/opys-klasu-gameobject-chastyna-3/
Частина 4: https://stalker-news.info/forum/rushij-x-ray-engine/opys-klasu-gameobject-chastyna-4/
Частина 5: https://stalker-news.info/forum/rushij-x-ray-engine/opys-klasu-gameobject-chastyna-5/